gruff-0.3.7/0000755000004100000410000000000012055510742012663 5ustar www-datawww-datagruff-0.3.7/MIT-LICENSE0000644000004100000410000000210012055510742014310 0ustar www-datawww-dataCopyright (c) 2005-2008 Topfunky Corporation boss@topfunky.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. gruff-0.3.7/.travis.yml0000644000004100000410000000022412055510742014772 0ustar www-datawww-datalanguage: ruby rvm: - "1.8.7" - "1.9.3" - jruby-18mode # JRuby in 1.8 mode - jruby-19mode # JRuby in 1.9 mode - rbx-18mode - rbx-19mode gruff-0.3.7/test/0000755000004100000410000000000012055510742013642 5ustar www-datawww-datagruff-0.3.7/test/test_pie.rb0000644000004100000410000000576412055510742016017 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffPie < GruffTestCase def setup @datasets = [ [:Darren, [25]], [:Chris, [80]], [:Egbert, [22]], [:Adam, [95]], [:Bill, [90]], ["Frank", [5]], ["Zero", [0]], ] end def test_pie_graph g = Gruff::Pie.new g.title = "Visual Pie Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/pie_keynote.png") end def test_pie_graph_greyscale g = Gruff::Pie.new g.title = "Greyscale Pie Graph Test" g.theme_greyscale @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/pie_grey.png") end def test_pie_graph_pastel g = Gruff::Pie.new g.theme_pastel g.title = "Pastel Pie Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/pie_pastel.png") end def test_pie_graph_small g = Gruff::Pie.new(400) g.title = "Visual Pie Graph Test Small" @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/pie_keynote_small.png") end def test_pie_graph_nearly_equal g = Gruff::Pie.new g.title = "Pie Graph Nearly Equal" g.data(:Blake, [41]) g.data(:Aaron, [42]) # g.data(:Grouch, [40]) # g.data(:Snuffleupagus, [43]) g.write("test/output/pie_nearly_equal.png") end def test_pie_graph_equal g = Gruff::Pie.new g.title = "Pie Graph Equal" g.data(:Bert, [41]) g.data(:Adam, [41]) g.write("test/output/pie_equal.png") end def test_pie_graph_zero g = Gruff::Pie.new g.title = "Pie Graph One Zero" g.data(:Bert, [0]) g.data(:Adam, [1]) g.write("test/output/pie_zero.png") end def test_pie_graph_one_val g = Gruff::Pie.new g.title = "Pie Graph One Val" g.data(:Bert, 53) g.data(:Adam, 29) g.write("test/output/pie_one_val.png") end def test_wide g = setup_basic_graph('800x400') g.title = "Wide Pie" g.write("test/output/pie_wide.png") end def test_label_size g = setup_basic_graph() g.title = "Pie With Small Legend" g.legend_font_size = 10 g.write("test/output/pie_legend.png") g = setup_basic_graph(400) g.title = "Small Pie With Small Legend" g.legend_font_size = 10 g.write("test/output/pie_legend_small.png") end def test_tiny_simple_pie @datasets = (1..5).map {|n| ['Auto', [rand(100)]]} g = setup_basic_graph 200 g.hide_legend = true g.hide_title = true g.hide_line_numbers = true g.marker_font_size = 40.0 g.minimum_value = 0.0 write_test_file g, "pie_simple.png" end protected def setup_basic_graph(size=800) g = Gruff::Pie.new(size) g.title = "My Graph Title" @datasets.each do |data| g.data(data[0], data[1]) end return g end end gruff-0.3.7/test/test_mini_bar.rb0000644000004100000410000000151512055510742017010 0ustar www-datawww-data require File.expand_path('../gruff_test_case', __FILE__) class TestMiniBar < GruffTestCase def test_simple_bar setup_single_dataset g = setup_basic_graph(Gruff::Mini::Bar, 200) g.hide_mini_legend = true write_test_file g, 'mini_bar.png' end # def test_simple_bar_wide_dataset # setup_wide_dataset # g = setup_basic_graph(Gruff::Mini::Bar, 200) # write_test_file g, 'mini_bar_wide_data.png' # end # # def test_code_sample # g = Gruff::Mini::Bar.new(200) # g.data "Jim", [200, 500, 400] # g.labels = { 0 => 'This Month', 1 => 'Average', 2 => 'Overall'} # g.write "mini_bar_one_color.png" # # g = Gruff::Mini::Bar.new(200) # g.data "Car", 200 # g.data "Food", 500 # g.data "Art", 1000 # g.data "Music", 16 # g.write "mini_bar_many_colors.png" # end end gruff-0.3.7/test/gruff_test_case.rb0000644000004100000410000000511512055510742017334 0ustar www-datawww-data$:.unshift(File.dirname(__FILE__) + "/../lib/") # require 'rubygems' RMAGICK_BYPASS_VERSION_TEST = true require 'test/unit' require 'gruff' require 'fileutils' # require 'test_timer' TEST_OUTPUT_DIR = File.dirname(__FILE__) + "/output" FileUtils.mkdir_p(TEST_OUTPUT_DIR) class GruffTestCase < Test::Unit::TestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]], [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]], [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]], [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] @labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4', 5 => '6/12', 6 => '6/21', 7 => '6/28', } end def setup_single_dataset @datasets = [ [:Jimmy, [25, 36, 86]] ] @labels = { 0 => 'You', 1 => 'Average', 2 => 'Lifetime' } end def setup_wide_dataset @datasets = [ ["Auto", 25], ["Food", 5], ["Entertainment", 15] ] @labels = { 0 => 'This Month' } end def test_dummy assert true end protected # Generate graphs at several sizes. # # Also writes the graph to disk. # # graph_sized 'bar_basic' do |g| # g.data('students', [1, 2, 3, 4]) # end # def graph_sized(filename, sizes=['', 400]) class_name = self.class.name.gsub(/^TestGruff/, '') Array(sizes).each do |size| g = instance_eval("Gruff::#{class_name}.new #{size}") g.title = "#{class_name} Graph" yield g write_test_file g, "#{filename}_#{size}.png" end end def write_test_file(graph, filename) graph.write([TEST_OUTPUT_DIR, filename].join("/")) end ## # Example: # # setup_basic_graph Gruff::Pie, 400 # def setup_basic_graph(*args) klass, size = Gruff::Bar, 400 # Allow args to be klass, size or just klass or just size. # # TODO Refactor case args.length when 1 case args[0] when Fixnum size = args[0] klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}") when String size = args[0] klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}") else klass = args[0] end when 2 klass, size = args[0], args[1] end g = klass.new(size) g.title = "My Bar Graph" g.labels = @labels @datasets.each do |data| g.data(data[0], data[1]) end g end end gruff-0.3.7/test/test_accumulator_bar.rb0000644000004100000410000000260512055510742020374 0ustar www-datawww-datarequire File.dirname(__FILE__) + "/gruff_test_case" class TestGruffAccumulatorBar < GruffTestCase # TODO Delete old output files once when starting tests def setup @datasets = [ (1..20).to_a.map { rand(10) } ] end def test_accumulator g = Gruff::AccumulatorBar.new 500 g.title = "Your Savings" g.hide_legend = true # g.font = File.expand_path(File.dirname(__FILE__) + "/../assets/fonts/ATMA____.TTF") g.marker_font_size = 18 g.theme = { :colors => ['#aedaa9', '#12a702'], # 3077a9 blue, aedaa9 light green :marker_color => '#dddddd', :font_color => 'black', :background_colors => "white" # :background_image => File.expand_path(File.dirname(__FILE__) + "/../assets/backgrounds/43things.png") } # Attempt at negative numbers # g.data 'Savings', (1..20).to_a.map { rand(10) * (rand(2) > 0 ? 1 : -1) } g.data 'Savings', (1..12).to_a.map { rand(100) } g.labels = (0..11).to_a.inject({}) {|memo, index| {index => '12-26'}.merge(memo)} g.maximum_value = 1000 g.minimum_value = 0 g.write("test/output/accum_bar.png") end def test_too_many_args assert_raise(Gruff::IncorrectNumberOfDatasetsException) { g = Gruff::AccumulatorBar.new g.data 'First', [1,1,1] g.data 'Too Many', [1,1,1] g.write("test/output/_SHOULD_NOT_ACTUALLY_BE_WRITTEN.png") } end end gruff-0.3.7/test/test_bullet.rb0000644000004100000410000000104012055510742016510 0ustar www-datawww-data# require File.dirname(__FILE__) + "/gruff_test_case" # # class TestGruffBullet < GruffTestCase # # def setup # @data_args = [75, 100, { # :target => 80, # :low => 50, # :high => 90 # }] # end # # def test_bullet_graph # g = Gruff::Bullet.new # g.title = "Monthly Revenue" # g.data *@data_args # g.write("test/output/bullet_greyscale.png") # end # # def test_no_options # g = Gruff::Bullet.new # g.data 127, 150 # g.write("test/output/bullet_no_options.png") # end # # end gruff-0.3.7/test/test_scatter.rb0000644000004100000410000001250512055510742016676 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffScatter < Test::Unit::TestCase def setup @datasets = [ [:Chuck, [20,10,5,12,11,6,10,7], [5,10,19,6,9,1,14,8] ], [:Brown, [5,10,20,6,9,12,14,8], [20,10,5,12,11,6,10,7] ], [:Lucy, [19,9,6,11,12,7,15,8], [6,11,18,8,12,8,10,6] ] ] end # Done def test_scatter_graph g = setup_basic_graph g.title = "Basic Scatter Plot Test" g.write("test/output/scatter_basic.png") end #~ # Done def test_many_datapoints g = Gruff::Scatter.new g.title = "Many Datapoint Graph Test" y_values = (0..50).collect {|i| rand(100) } x_values = (0..50).collect {|i| rand(100) } g.data('many points', y_values, x_values) # Default theme g.write("test/output/scatter_many.png") end # Done def test_no_data g = Gruff::Scatter.new(400) g.title = "No Data" # Default theme g.write("test/output/scatter_no_data.png") g = Gruff::Scatter.new(400) g.title = "No Data Title" g.no_data_message = 'There is no data' g.write("test/output/scatter_no_data_msg.png") end # Done def test_all_zeros g = Gruff::Scatter.new(400) g.title = "All Zeros" g.data(:gus, [0,0,0,0], [0,0,0,0]) # Default theme g.write("test/output/scatter_no_data_other.png") end # Done def test_some_nil_points g = Gruff::Scatter.new g.title = "Some Nil Points" @datasets = [ [:data1, [1, 2, 3, nil, 3, 5, 6], [5, nil, nil, nil, nil, 5, 7] ] ] @datasets.each do |data| assert_raise ArgumentError do g.data(*data) end end end # Done def test_unequal_number_of_x_and_y_values g = Gruff::Scatter.new g.title = "Unequal number of X and Y values" @datasets = [ [:data1, [1,2,3], [1,2]], [:data2, [1,2,3,4,5], [1,2,3,4,5,6]], ] @datasets.each do |data| assert_raise ArgumentError do g.data(*data) end end end # Done def test_empty_set_of_axis_values g = Gruff::Scatter.new g.title = "Missing Axis Values" @datasets = [ [:data1, [1,2,3,4,5]] ] @datasets.each do |data| assert_raise ArgumentError do g.data(*data) end end end # Done def test_no_title g = Gruff::Scatter.new(400) g.data(:data1, [1,2,3,4,5], [1,2,3,4,5]) g.write("test/output/scatter_no_title.png") end # Done def test_no_line_markers g = setup_basic_graph(400) g.title = "No Line Markers" g.hide_line_markers = true g.write("test/output/scatter_no_line_markers.png") end # Done def test_no_legend g = setup_basic_graph(400) g.title = "No Legend" g.hide_legend = true g.write("test/output/scatter_no_legend.png") end # Done def test_nothing_but_the_graph g = setup_basic_graph(400) g.title = "THIS TITLE SHOULD NOT DISPLAY!!!" g.hide_line_markers = true g.hide_legend = true g.hide_title = true g.write("test/output/scatter_nothing_but_the_graph.png") end # TODO Implement baselines on x and y axis #~ def test_baseline_larger_than_data #~ g = setup_basic_graph(400) #~ g.title = "Baseline Larger Than Data" #~ g.baseline_value = 150 #~ g.write("test/output/scatter_large_baseline.png") #~ end # Done def test_wide_graph g = setup_basic_graph('800x400') g.title = "Wide Graph" g.write("test/output/scatter_wide_graph.png") g = setup_basic_graph('400x200') g.title = "Wide Graph Small" g.write("test/output/scatter_wide_graph_small.png") end # Done def test_negative g = setup_pos_neg(800) g.write("test/output/scatter_pos_neg.png") g = setup_pos_neg(400) g.title = 'Pos/Neg Line Test Small' g.write("test/output/scatter_pos_neg_400.png") end # Done def test_all_negative g = setup_all_neg(800) g.write("test/output/scatter_all_neg.png") g = setup_all_neg(400) g.title = 'All Neg Line Test Small' g.write("test/output/scatter_all_neg_400.png") end # Done def test_no_hide_line_no_labels g = Gruff::Scatter.new g.title = "No Hide Line No Labels" @datasets.each do |data| g.data(data[0], data[1], data[2]) end g.hide_line_markers = false g.write('test/output/scatter_no_hide.png') end def test_no_set_labels g = Gruff::Scatter.new g.title = "Setting Labels Test" g.labels = { 0 => 'This', 1 => 'should', 2 => 'not', 3 => 'show', 4 => 'up' } @datasets.each do |data| g.data(data[0], data[1], data[2]) end g.write('test/output/scatter_no_labels.png') end protected def setup_basic_graph(size=800) g = Gruff::Scatter.new(size) g.title = "Rad Graph" @datasets.each do |data| g.data(data[0], data[1], data[2]) end g end def setup_pos_neg(size=800) g = Gruff::Scatter.new(size) g.title = "Pos/Neg Scatter Graph Test" g.data(:apples, [-1, 0, 4, -4], [-5, -1, 3, 4]) g.data(:peaches, [10, 8, 6, 3], [-1, 1, 3, 3]) return g end def setup_all_neg(size=800) g = Gruff::Scatter.new(size) g.title = "Neg Scatter Graph Test" g.data(:apples, [-1, -1, -4, -4], [-5, -1, -3, -4]) g.data(:peaches, [-10, -8, -6, -3], [-1, -1, -3, -3]) return g end end # end GruffTestCasegruff-0.3.7/test/test_spider.rb0000644000004100000410000001170612055510742016521 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffSpider < GruffTestCase def setup @datasets = [ [:Strength, [10]], [:Dexterity, [16]], [:Constitution, [12]], [:Intelligence, [12]], [:Wisdom, [10]], ["Charisma", [16]], ] # @datasets = [ # [:Darren, [25]], # [:Chris, [80]], # [:Egbert, [22]], # [:Adam, [95]], # [:Bill, [90]], # ["Frank", [5]], # ["Zero", [0]], # ] end def test_spider_graph g = Gruff::Spider.new(20) g.title = "Spider Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/spider_keynote.png") end def test_pie_graph_small g = Gruff::Spider.new(20, 400) g.title = "Visual Spider Graph Test Small" @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/spider_small.png") end def test_spider_graph_nearly_equal g = Gruff::Spider.new(50) g.title = "Spider Graph Nearly Equal" g.data(:Blake, [41]) g.data(:Aaron, [42]) g.data(:Grouch, [40]) # g.data(:Snuffleupagus, [43]) g.write("test/output/spider_nearly_equal.png") end def test_pie_graph_equal g = Gruff::Spider.new(50) g.title = "Spider Graph Equal" g.data(:Bert, [41]) g.data(:Adam, [41]) g.data(:Joe, [41]) g.write("test/output/spider_equal.png") end def test_pie_graph_zero g = Gruff::Spider.new(2) g.title = "Pie Graph Two One Zero" g.data(:Bert, [0]) g.data(:Adam, [1]) g.data(:Sam, [2]) g.write("test/output/spider_zero.png") end def test_wide g = setup_basic_graph('800x400') g.title = "Wide spider" g.write("test/output/spider_wide.png") end def test_label_size g = setup_basic_graph() g.title = "Spider With Small Legend" g.legend_font_size = 10 g.write("test/output/spider_legend.png") g = setup_basic_graph(400) g.title = "Small spider With Small Legend" g.legend_font_size = 10 g.write("test/output/spider_legend_small.png") end def test_theme_37signals g = Gruff::Spider.new(20) g.title = "Spider Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.theme_37signals # Default theme g.write("test/output/spider_37signals.png") end def test_no_axes g = Gruff::Spider.new(20) g.title = "Look ma, no axes" g.hide_axes = true @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/spider_no_axes.png") end def test_no_print g = Gruff::Spider.new(20) g.title = "Should not print" g.hide_text = true @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/spider_no_print.png") end def test_transparency g = Gruff::Spider.new(20) g.title = "Transparent background" g.hide_text = true g.transparent_background = true g.hide_axes = true @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/spider_no_background.png") end def test_overlay g = Gruff::Spider.new(20) g.title = "George (blue) vs Sarah (white)" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/spider_overlay_1.png") g = Gruff::Spider.new(20) g.title = "Transparent background" g.hide_text = true g.hide_axes = true g.transparent_background = true @datasets = [ [:Strength, [18]], [:Dexterity, [10]], [:Constitution, [18]], [:Intelligence, [8]], [:Wisdom, [14]], ["Charisma", [4]], ] @datasets.each do |data| g.data(data[0], data[1]) end g.marker_color = "#4F6EFF" g.write("test/output/spider_overlay_2.png") end def test_lots_of_data g = Gruff::Spider.new(10) @datasets = [[:a, [1]], [:b, [5]], [:c, [3]], [:d, [9]], [:e, [4]], [:f, [7]], [:g, [0]], [:h, [4]], [:i, [6]], [:j, [0]], [:k, [4]], [:l, [8]]] @datasets.each do |data| g.data(data[0], data[1]) end g.title = "Sample Data" g.write("test/output/spider_lots_of_data.png") end def test_lots_of_data_with_large_names g = Gruff::Spider.new(10) @datasets = [[:anteaters, [1]], [:bulls, [5]], [:cats, [3]], [:dogs, [9]], [:elephants, [4]], [:frogs, [7]], [:giraffes, [0]], [:hamsters, [4]], [:iguanas, [6]], [:jaguar, [0]], [:kangaroo, [4]], [:locust, [8]]] @datasets.each do |data| g.data(data[0], data[1]) end g.title = "Zoo Inventory" g.write("test/output/spider_lots_of_data_normal_names.png") end protected def setup_basic_graph(size=800, max = 20) g = Gruff::Spider.new(max, size) g.title = "My Graph Title" @datasets.each do |data| g.data(data[0], data[1]) end return g end end gruff-0.3.7/test/test_net.rb0000644000004100000410000001265012055510742016020 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffNet < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]], [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]], [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]], [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4', 5 => '6/12', 6 => '6/21', 7 => '6/28', } end def test_net_small_values @datasets = [ [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]], [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]] ] g = Gruff::Net.new g.title = "Small Values Net Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_small.png") g = Gruff::Net.new(400) g.title = "Small Values Net Graph Test 400px" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_small_small.png") end def test_net_starts_with_zero @datasets = [ [:first0, [0, 5, 10, 8, 18]], [:normal, [1, 2, 3, 4, 5]] ] g = Gruff::Net.new g.title = "Small Values Net Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_small_zero.png") g = Gruff::Net.new(400) g.title = "Small Values Net Graph Test 400px" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_small_small_zero.png") end def test_net_large_values @datasets = [ [:large, [100_005, 35_000, 28_000, 27_000]], [:large2, [35_000, 28_000, 27_000, 100_005]], [:large3, [28_000, 27_000, 100_005, 35_000]], [:large4, [1_238, 39_092, 27_938, 48_876]] ] g = Gruff::Net.new g.title = "Very Large Values Net Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_large.png") end def test_many_datapoints g = Gruff::Net.new g.title = "Many Multi-Net Graph Test" g.labels = { 0 => 'June', 10 => 'July', 30 => 'August', 50 => 'September', } g.data('many points', (0..50).collect {|i| rand(100) }) # Default theme g.write("test/output/net_many.png") end def test_similar_high_end_values g = Gruff::Net.new g.title = "Similar High End Values Test" g.data('similar points', %w(29.43 29.459 29.498 29.53 29.548 29.589 29.619 29.66 29.689 29.849 29.878 29.74 29.769 29.79 29.808 29.828).collect {|i| i.to_f} ) # Default theme g.write("test/output/net_similar_high_end_values.png") end def test_many_nets_graph_small g = Gruff::Net.new(400) g.title = "Many Values Net Test 400px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/net_many_nets_small.png") end def test_dots_graph_tiny g = Gruff::Net.new(300) g.title = "Dots Test 300px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/net_dots_tiny.png") end def test_no_data g = Gruff::Net.new(400) g.title = "No Data" # Default theme g.write("test/output/net_no_data.png") g = Gruff::Net.new(400) g.title = "No Data Title" g.no_data_message = 'There is no data' g.write("test/output/net_no_data_msg.png") end def test_all_zeros g = Gruff::Net.new(400) g.title = "All Zeros" g.data(:gus, [0,0,0,0]) # Default theme g.write("test/output/net_no_data_other.png") end def test_no_title g = Gruff::Net.new(400) g.labels = @sample_labels @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/net_no_title.png") end def test_no_net_markers g = setup_basic_graph(400) g.title = "No Net Markers" g.hide_line_markers = true g.write("test/output/net_no_net_markers.png") end def test_no_legend g = setup_basic_graph(400) g.title = "No Legend" g.hide_legend = true g.write("test/output/net_no_legend.png") end def test_nothing_but_the_graph g = setup_basic_graph(400) g.title = "THIS TITLE SHOULD NOT DISPLAY!!!" g.hide_line_markers = true g.hide_legend = true g.hide_title = true g.write("test/output/net_nothing_but_the_graph.png") end def test_wide_graph g = setup_basic_graph('800x400') g.title = "Wide Graph" g.write("test/output/net_wide_graph.png") g = setup_basic_graph('400x200') g.title = "Wide Graph Small" g.write("test/output/net_wide_graph_small.png") end protected def setup_basic_graph(size=800) g = Gruff::Net.new(size) g.title = "My Graph Title" g.labels = @sample_labels @datasets.each do |data| g.data(data[0], data[1]) end return g end end gruff-0.3.7/test/test_area.rb0000644000004100000410000000560612055510742016145 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffArea < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]], [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]], [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]], [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4', 5 => '6/12', 6 => '6/21', 7 => '6/28', } end def test_area_graph g = Gruff::Area.new g.title = "Visual Multi-Area Graph Test" g.labels = { 0 => '5/6', 2 => '5/15', 4 => '5/24', 6 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/area_keynote.png") end def test_resize g = Gruff::Area.new(400) g.title = "Small Size Multi-Area Graph Test" g.labels = { 0 => '5/6', 2 => '5/15', 4 => '5/24', 6 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/area_keynote_small.png") end def test_many_datapoints g = Gruff::Area.new g.title = "Many Multi-Area Graph Test" g.labels = { 0 => 'June', 10 => 'July', 30 => 'August', 50 => 'September', } g.data('many points', (0..50).collect {|i| rand(100) }) # Default theme g.write("test/output/area_many.png") end def test_many_areas_graph_small g = Gruff::Area.new(400) g.title = "Many Values Area Test 400px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/area_many_areas_small.png") end def test_area_graph_tiny g = Gruff::Area.new(300) g.title = "Area Test 300px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/area_tiny.png") end def test_wide g = setup_basic_graph('800x400') g.title = "Area Wide" g.write("test/output/area_wide.png") end protected def setup_basic_graph(size=800) g = Gruff::Area.new(size) g.title = "My Graph Title" g.labels = @sample_labels @datasets.each do |data| g.data(data[0], data[1]) end return g end end gruff-0.3.7/test/test_mini_pie.rb0000644000004100000410000000112212055510742017013 0ustar www-datawww-datarequire File.expand_path('../gruff_test_case', __FILE__) class TestMiniPie < GruffTestCase def test_simple_pie g = setup_basic_graph(Gruff::Mini::Pie, 200) write_test_file g, 'mini_pie.png' end def test_pie_with_legend_right g = setup_basic_graph(Gruff::Mini::Pie, 200) g.legend_position = :right write_test_file g, 'mini_pie_right_legend.png' end # def test_code_sample # g = Gruff::Mini::Pie.new(200) # g.data "Car", 200 # g.data "Food", 500 # g.data "Art", 1000 # g.data "Music", 16 # g.write "mini_pie.png" # end end gruff-0.3.7/test/test_sidestacked_bar.rb0000644000004100000410000000363512055510742020344 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffSideStackedBar < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39]], [:Charles, [80, 54, 67, 54]], [:Julie, [22, 29, 35, 38]], #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24' } end def test_bar_graph g = Gruff::SideStackedBar.new g.title = "Visual Stacked Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/side_stacked_bar_keynote.png" end def test_bar_graph_small g = Gruff::SideStackedBar.new(400) g.title = "Visual Stacked Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/side_stacked_bar_keynote_small.png" end def test_wide g = setup_basic_graph('800x400') g.title = "Wide SSBar" g.write "test/output/side_stacked_bar_wide.png" end def test_should_space_long_left_labels_appropriately g = Gruff::SideStackedBar.new g.title = "Stacked Bar Long Label" g.labels = { 0 => 'September', 1 => 'Oct', 2 => 'Nov', 3 => 'Dec', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/side_stacked_bar_long_label.png" end protected def setup_basic_graph(size=800) g = Gruff::SideStackedBar.new(size) g.title = "My Graph Title" g.labels = @sample_labels @datasets.each do |data| g.data(data[0], data[1]) end return g end end gruff-0.3.7/test/test_scene.rb0000644000004100000410000000635112055510742016330 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" require 'yaml' class LayerStub < Gruff::Layer; attr_reader :base_dir, :filenames, :selected_filename; end class TestGruffScene < GruffTestCase def test_hazy g = setup_scene g.weather = "cloudy" g.haze = true g.time = Time.mktime(2006, 7, 4, 4, 35) g.write "test/output/scene_hazy_night.png" end def test_stormy_night g = setup_scene g.weather = "stormy" g.time = Time.mktime(2006, 7, 4, 0, 0) g.write "test/output/scene_stormy_night.png" end def test_not_hazy g = setup_scene g.weather = "cloudy" g.haze = false g.time = Time.mktime(2006, 7, 4, 6, 00) g.write "test/output/scene_not_hazy_day.png" end def test_partly_cloudy g = setup_scene g.weather = "partly cloudy" g.haze = false g.time = Time.mktime(2006, 7, 4, 13, 00) g.write "test/output/scene_partly_cloudy_day.png" end def test_stormy_day g = setup_scene g.weather = "stormy" g.haze = false g.time = Time.mktime(2006, 7, 4, 8, 00) g.write "test/output/scene_stormy_day.png" end def test_layer l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "clouds") assert_equal %w(cloudy.png partly_cloudy.png stormy.png), l.filenames.sort l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "grass") assert_equal 'default.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 12, 35) # 12:35, July 4, 2006 assert_equal '1200.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 0, 0) # 00:00, July 4, 2006 assert_equal '0000.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 23, 35) # 23:35, July 4, 2006 assert_equal '2000.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 0, 1) # 00:01, July 4, 2006 assert_equal '0000.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 2, 0) # 02:00, July 4, 2006 assert_equal '0200.png', l.selected_filename l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky") l.update Time.mktime(2006, 7, 4, 4, 00) # 04:00, July 4, 2006 assert_equal '0400.png', l.selected_filename # TODO Need number_sample folder # l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "number_sample") # assert_equal %w(1.png 2.png default.png), l.filenames # l.update 3 # assert_equal 'default.png', l.selected_filename end private def setup_scene g = Gruff::Scene.new("500x100", File.expand_path("../assets/city_scene", File.dirname(__FILE__)) ) g.layers = %w(background haze sky clouds) g.weather_group = %w(clouds) g.time_group = %w(background sky) g end end gruff-0.3.7/test/test_base.rb0000644000004100000410000000015712055510742016143 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffBase < GruffTestCase endgruff-0.3.7/test/test_side_bar.rb0000644000004100000410000000217512055510742017003 0ustar www-datawww-data require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffSideBar < GruffTestCase def test_bar_graph g = setup_basic_graph(Gruff::SideBar, 800) write_test_file g, 'side_bar.png' end def test_bar_spacing g = setup_basic_graph(Gruff::SideBar, 800) g.bar_spacing = 0 g.title = "100% spacing between bars" g.write("test/output/side_bar_spacing_full.png") g = setup_basic_graph(Gruff::SideBar, 800) g.bar_spacing = 0.5 g.title = "50% spacing between bars" g.write("test/output/side_bar_spacing_half.png") g = setup_basic_graph(Gruff::SideBar, 800) g.bar_spacing = 1 g.title = "0% spacing between bars" g.write("test/output/side_bar_spacing_none.png") end def test_x_axis_range g = Gruff::SideBar.new('400x300') g.title = 'Should run from 8 to 32' g.hide_line_numbers = false g.theme_37signals g.data("Grapes", [8]) g.data("Apples", [24]) g.data("Oranges", [32]) g.data("Watermelon", [8]) g.data("Peaches", [12]) g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} g.write("test/output/side_bar_data_range.png") end end gruff-0.3.7/test/test_mini_side_bar.rb0000644000004100000410000000141312055510742020011 0ustar www-datawww-datarequire File.expand_path('../gruff_test_case', __FILE__) class TestMiniSideBar < GruffTestCase def test_one_color # Use a single data set @datasets = [ [:Jimmy, [25, 36, 86, 39]] ] @labels = { 0 => 'Auto', 1 => 'Entertainment', 2 => 'Food', 3 => 'Bus' } g = setup_basic_graph(Gruff::Mini::SideBar, 200) write_test_file g, 'mini_side_bar.png' end def test_multi_color # @datasets = [ # [:Jimmy, [25, 36, 86, 39]] # ] # @labels = { # 0 => 'Auto', # 1 => 'Entertainment', # 2 => 'Food', # 3 => 'Bus' # } g = setup_basic_graph(Gruff::Mini::SideBar, 200) write_test_file g, 'mini_side_bar_multi_color.png' end end gruff-0.3.7/test/test_legend.rb0000644000004100000410000000413412055510742016466 0ustar www-datawww-datarequire File.dirname(__FILE__) + "/gruff_test_case" class TestGruffLegend < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]], [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]], [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]], [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ["Vincent", [5, 10, 13, 11, 6, 16, 22, 32]], ["Jake", [5, 10, 13, 11, 6, 16, 22, 32]], ["Stephen", [5, 10, 13, 11, 6, 16, 22, 32]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4', 5 => '6/12', 6 => '6/21', 7 => '6/28', } end def full_suite_for(name, type) [800, 400].each do |width| [nil, 4, 16, 30].each do |font_size| g = type.new(width) g.title = "Wrapped Legend Bar Test #{font_size}pts #{width}px" g.labels = @sample_labels 0xEFD250.step(0xFF0000, 60) do |num| g.colors << "#%x" % num end @datasets.each do |data| g.data(data[0], data[1]) end g.legend_font_size = font_size unless font_size.nil? g.write("test/output/#{name}_wrapped_legend_#{font_size}_#{width}.png") end end end def test_bar_legend_wrap full_suite_for(:bar, Gruff::Bar) end def test_pie_legend_wrap full_suite_for(:pie, Gruff::Pie) end def test_more_than_two_lines_of_legends @datasets = @datasets + [[:Julie2, [22, 29, 35, 38, 36, 40, 46, 57]], [:Jane2, [95, 95, 95, 90, 85, 80, 88, 100]], [:Philip2, [90, 34, 23, 12, 78, 89, 98, 88]], ["Arthur2", [5, 10, 13, 11, 6, 16, 22, 32]], ["Vincent2", [5, 10, 13, 11, 6, 16, 22, 32]], ["Jake2", [5, 10, 13, 11, 6, 16, 22, 32]], ["Stephen2", [5, 10, 13, 11, 6, 16, 22, 32]]] full_suite_for(:bar2, Gruff::Bar) end end gruff-0.3.7/test/test_stacked_area.rb0000644000004100000410000000202412055510742017632 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffStackedArea < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39]], [:Charles, [80, 54, 67, 54]], [:Julie, [22, 29, 35, 38]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24' } end def test_area_graph g = Gruff::StackedArea.new g.title = "Visual Stacked Area Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/stacked_area_keynote.png" end def test_area_graph_small g = Gruff::StackedArea.new(400) g.title = "Visual Stacked Area Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/stacked_area_keynote_small.png" end end gruff-0.3.7/test/test_bar.rb0000644000004100000410000001731512055510742016001 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffBar < GruffTestCase # TODO Delete old output files once when starting tests def setup @datasets = [ [:Jimmy, [25, 36, 86, 39]], [:Charles, [80, 54, 67, 54]], [:Julie, [22, 29, 35, 38]], #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] end def test_bar_graph g = setup_basic_graph g.title = "Bar Graph Test" g.title_margin = 100 g.write("test/output/bar_keynote.png") g = setup_basic_graph g.title = "Visual Multi-Line Bar Graph Test" g.theme_rails_keynote g.write("test/output/bar_rails_keynote.png") g = setup_basic_graph g.title = "Visual Multi-Line Bar Graph Test" g.theme_odeo g.write("test/output/bar_odeo.png") end def test_thousand_separators g = Gruff::Bar.new(600) g.title = "Formatted numbers" g.marker_count = 8 g.data("data", [4025, 1024, 50257, 703672, 1580456]) g.write("test/output/bar_formatted_numbers.png") end def test_bar_graph_set_colors g = Gruff::Bar.new g.title = "Bar Graph With Manual Colors" g.legend_margin = 50 g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:Art, [0, 5, 8, 15], '#990000') g.data(:Philosophy, [10, 3, 2, 8], '#009900') g.data(:Science, [2, 15, 8, 11], '#990099') g.minimum_value = 0 g.write("test/output/bar_manual_colors.png") end def test_bar_graph_small g = Gruff::Bar.new(400) g.title = "Visual Multi-Line Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/bar_keynote_small.png") end # Somewhat worthless test. Should an error be thrown? # def test_nil_font # g = setup_basic_graph 400 # g.title = "Nil Font" # g.font = nil # g.write "test/output/bar_nil_font.png" # end def test_no_line_markers g = setup_basic_graph(400) g.title = "No Line Markers" g.hide_line_markers = true g.write("test/output/bar_no_line_markers.png") end def test_no_legend g = setup_basic_graph(400) g.title = "No Legend" g.hide_legend = true g.write("test/output/bar_no_legend.png") end def test_no_title g = setup_basic_graph(400) g.title = "No Title" g.hide_title = true g.write("test/output/bar_no_title.png") end def test_no_title_or_legend g = setup_basic_graph(400) g.title = "No Title or Legend" g.hide_legend = true g.hide_title = true g.write("test/output/bar_no_title_or_legend.png") end def test_set_marker_count g = setup_basic_graph(400) g.title = "Set marker" g.marker_count = 10 g.write("test/output/bar_set_marker.png") end def test_set_legend_box_size g = setup_basic_graph(400) g.title = "Set Small Legend Box Size" g.legend_box_size = 10.0 g.write("test/output/bar_set_legend_box_size_sm.png") g = setup_basic_graph(400) g.title = "Set Large Legend Box Size" g.legend_box_size = 50.0 g.write("test/output/bar_set_legend_box_size_lg.png") end def test_x_y_labels g = setup_basic_graph(400) g.title = "X Y Labels" g.x_axis_label = 'Score (%)' g.y_axis_label = "Students" g.write("test/output/bar_x_y_labels.png") end def test_wide_graph g = setup_basic_graph('800x400') g.title = "Wide Graph" g.write("test/output/bar_wide_graph.png") g = setup_basic_graph('400x200') g.title = "Wide Graph Small" g.write("test/output/bar_wide_graph_small.png") end def test_tall_graph g = setup_basic_graph('400x600') g.title = "Tall Graph" g.write("test/output/bar_tall_graph.png") g = setup_basic_graph('200x400') g.title = "Tall Graph Small" g.write("test/output/bar_tall_graph_small.png") end def test_one_value g = Gruff::Bar.new g.title = "One Value Graph Test" g.labels = { 0 => '1', 1 => '2' } g.data('one', [1,1]) g.write("test/output/bar_one_value.png") end def test_negative g = Gruff::Bar.new g.title = "Pos/Neg Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [-1, 0, 4, -4]) g.data(:peaches, [10, 8, 6, 3]) g.write("test/output/bar_pos_neg.png") end def test_nearly_zero g = Gruff::Bar.new g.title = "Nearly Zero Graph" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [1, 2, 3, 4]) g.data(:peaches, [4, 3, 2, 1]) g.minimum_value = 0 g.maximum_value = 10 g.write("test/output/bar_nearly_zero_max_10.png") end def test_y_axis_increment generate_with_y_axis_increment 2.0 generate_with_y_axis_increment 1 generate_with_y_axis_increment 5 generate_with_y_axis_increment 20 end def generate_with_y_axis_increment(increment) g = Gruff::Bar.new g.title = "Y Axis Set to #{increment}" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.y_axis_increment = increment g.data(:apples, [1, 0.2, 0.5, 0.7]) g.data(:peaches, [2.5, 2.3, 2, 6.1]) g.write("test/output/bar_y_increment_#{increment}.png") end def test_custom_theme g = Gruff::Bar.new g.title = "Custom Theme" g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH']) g.title_font_size = 60 g.legend_font_size = 32 g.marker_font_size = 32 g.theme = { :colors => %w(#efd250 #666699 #e5573f #9595e2), :marker_color => 'white', :font_color => 'blue', :background_image => "assets/pc306715.jpg" } g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:vancouver, [1, 2, 3, 4]) g.data(:seattle, [2, 4, 6, 8]) g.data(:portland, [3, 1, 7, 3]) g.data(:victoria, [4, 3, 5, 7]) g.minimum_value = 0 g.write("test/output/bar_themed.png") end def test_legend_should_not_overlap g = Gruff::Bar.new(400) g.theme_37signals() g.title = 'My Graph' g.data("Apples Oranges Watermelon Apples Oranges", [1, 2, 3, 4, 4, 3]) g.data('Oranges', [4, 8, 7, 9, 8, 9]) g.data('Watermelon', [2, 3, 1, 5, 6, 8]) g.data('Peaches', [9, 9, 10, 8, 7, 9]) g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} g.write("test/output/bar_long_legend_text.png") end def test_july_enhancements g = Gruff::Bar.new(600) g.hide_legend = true g.title = "Full speed ahead" g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) } g.data(:apples, (0..9).map { rand(20)/10.0 }) g.y_axis_increment = 1.0 g.x_axis_label = 'Score (%)' g.y_axis_label = 'Students' write_test_file g, 'enhancements.png' end def test_bar_spacing g = setup_basic_graph g.bar_spacing = 0 g.title = "100% spacing between bars" g.write("test/output/bar_spacing_full.png") g = setup_basic_graph g.bar_spacing = 0.5 g.title = "50% spacing between bars" g.write("test/output/bar_spacing_half.png") g = setup_basic_graph g.bar_spacing = 1 g.title = "0% spacing between bars" g.write("test/output/bar_spacing_none.png") end protected def setup_basic_graph(size=800) g = Gruff::Bar.new(size) g.title = "My Bar Graph" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g end end gruff-0.3.7/test/test_stacked_bar.rb0000644000004100000410000000201312055510742017464 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffStackedBar < GruffTestCase def setup @datasets = [ [:Jimmy, [25, 36, 86, 39]], [:Charles, [80, 54, 67, 54]], [:Julie, [22, 29, 35, 38]], ] @sample_labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24' } end def test_bar_graph g = Gruff::StackedBar.new g.title = "Visual Stacked Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/stacked_bar_keynote.png" end def test_bar_graph_small g = Gruff::StackedBar.new(400) g.title = "Visual Stacked Bar Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write "test/output/stacked_bar_keynote_small.png" end end gruff-0.3.7/test/test_dot.rb0000644000004100000410000001443112055510742016017 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffDot < GruffTestCase # TODO Delete old output files once when starting tests def setup @datasets = [ [:Jimmy, [25, 36, 86, 39]], [:Charles, [80, 54, 67, 54]], [:Julie, [22, 29, 35, 38]], #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]], #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]], #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]], ] end def test_dot_graph g = setup_basic_graph g.title = "Dot Graph Test" g.write("test/output/dot_keynote.png") end def test_dot_graph_set_colors g = Gruff::Dot.new g.title = "Dot Graph With Manual Colors" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:Art, [0, 5, 8, 15], '#990000') g.data(:Philosophy, [10, 3, 2, 8], '#009900') g.data(:Science, [2, 15, 8, 11], '#990099') g.minimum_value = 0 g.write("test/output/dot_manual_colors.png") end def test_dot_graph_small g = Gruff::Dot.new(400) g.title = "Visual Multi-Line Dot Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/dot_keynote_small.png") end # Somewhat worthless test. Should an error be thrown? # def test_nil_font # g = setup_basic_graph 400 # g.title = "Nil Font" # g.font = nil # g.write "test/output/dot_nil_font.png" # end def test_no_line_markers g = setup_basic_graph(400) g.title = "No Line Markers" g.hide_line_markers = true g.write("test/output/dot_no_line_markers.png") end def test_no_legend g = setup_basic_graph(400) g.title = "No Legend" g.hide_legend = true g.write("test/output/dot_no_legend.png") end def test_no_title g = setup_basic_graph(400) g.title = "No Title" g.hide_title = true g.write("test/output/dot_no_title.png") end def test_no_title_or_legend g = setup_basic_graph(400) g.title = "No Title or Legend" g.hide_legend = true g.hide_title = true g.write("test/output/dot_no_title_or_legend.png") end def test_set_marker_count g = setup_basic_graph(400) g.title = "Set marker" g.marker_count = 10 g.write("test/output/dot_set_marker.png") end def test_set_legend_box_size g = setup_basic_graph(400) g.title = "Set Small Legend Box Size" g.legend_box_size = 10.0 g.write("test/output/dot_set_legend_box_size_sm.png") g = setup_basic_graph(400) g.title = "Set Large Legend Box Size" g.legend_box_size = 50.0 g.write("test/output/dot_set_legend_box_size_lg.png") end def test_x_y_labels g = setup_basic_graph(400) g.title = "X Y Labels" g.x_axis_label = 'Score (%)' g.y_axis_label = "Students" g.write("test/output/dot_x_y_labels.png") end def test_wide_graph g = setup_basic_graph('800x400') g.title = "Wide Graph" g.write("test/output/dot_wide_graph.png") g = setup_basic_graph('400x200') g.title = "Wide Graph Small" g.write("test/output/dot_wide_graph_small.png") end def test_tall_graph g = setup_basic_graph('400x600') g.title = "Tall Graph" g.write("test/output/dot_tall_graph.png") g = setup_basic_graph('200x400') g.title = "Tall Graph Small" g.write("test/output/dot_tall_graph_small.png") end def test_one_value g = Gruff::Dot.new g.title = "One Value Graph Test" g.labels = { 0 => '1', 1 => '2' } g.data('one', [1,1]) g.write("test/output/dot_one_value.png") end def test_negative g = Gruff::Dot.new g.title = "Pos/Neg Dot Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [-1, 0, 4, -4]) g.data(:peaches, [10, 8, 6, 3]) g.write("test/output/dot_pos_neg.png") end def test_nearly_zero g = Gruff::Dot.new g.title = "Nearly Zero Graph" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [1, 2, 3, 4]) g.data(:peaches, [4, 3, 2, 1]) g.minimum_value = 0 g.maximum_value = 10 g.write("test/output/dot_nearly_zero_max_10.png") end def test_y_axis_increment generate_with_y_axis_increment 2.0 generate_with_y_axis_increment 1 generate_with_y_axis_increment 5 generate_with_y_axis_increment 20 end def generate_with_y_axis_increment(increment) g = Gruff::Dot.new g.title = "Y Axis Set to #{increment}" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.y_axis_increment = increment g.data(:apples, [1, 0.2, 0.5, 0.7]) g.data(:peaches, [2.5, 2.3, 2, 6.1]) g.write("test/output/dot_y_increment_#{increment}.png") end def test_custom_theme g = Gruff::Dot.new g.title = "Custom Theme" g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH']) g.title_font_size = 60 g.legend_font_size = 32 g.marker_font_size = 32 g.theme = { :colors => %w(#efd250 #666699 #e5573f #9595e2), :marker_color => 'white', :font_color => 'blue', :background_image => "assets/pc306715.jpg" } g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:vancouver, [1, 2, 3, 4]) g.data(:seattle, [2, 4, 6, 8]) g.data(:portland, [3, 1, 7, 3]) g.data(:victoria, [4, 3, 5, 7]) g.minimum_value = 0 g.write("test/output/dot_themed.png") end def test_july_enhancements g = Gruff::Dot.new(600) g.hide_legend = true g.title = "Full speed ahead" g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) } g.data(:apples, (0..9).map { rand(20)/10.0 }) g.y_axis_increment = 1.0 g.x_axis_label = 'Score (%)' g.y_axis_label = 'Students' write_test_file g, 'enhancements.png' end protected def setup_basic_graph(size=800) g = Gruff::Dot.new(size) g.title = "My Dot Graph" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } @datasets.each do |data| g.data(data[0], data[1]) end g end end gruff-0.3.7/test/test_photo.rb0000644000004100000410000000141512055510742016360 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffPhotoBar < GruffTestCase # def setup # @datasets = [ # [:Jimmy, [25, 36, 86, 39]], # [:Charles, [80, 54, 67, 54]], # # [:Charity, [0, nil, 100, 90]], # ] # end # # def test_bar_graph # bar_graph_sized # bar_graph_sized(400) # end # # # protected # # def bar_graph_sized(size=800) # g = Gruff::PhotoBar.new(size) # g.title = "Photo Bar Graph Test #{size}px" # g.labels = { # 0 => '5/6', # 1 => '5/15', # 2 => '5/24', # 3 => '5/30', # } # @datasets.each do |data| # g.data(*data) # end # # g.theme = 'plastik' # # g.write("test/output/photo_plastik_#{size}.png") # end end gruff-0.3.7/test/test_line.rb0000644000004100000410000003334512055510742016165 0ustar www-datawww-data#!/usr/bin/ruby require File.dirname(__FILE__) + "/gruff_test_case" class TestGruffLine < GruffTestCase # TODO Delete old output files once when starting tests def test_should_render_with_transparent_theme g = Gruff::Line.new(400) g.title = "Transparent Background" g.theme = { :colors => ['black', 'grey'], :marker_color => 'grey', :font_color => 'black', :background_colors => 'transparent' } g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [-1, 0, 4, -4]) g.data(:peaches, [10, 8, 6, 3]) g.write("test/output/line_transparent.png") end def test_line_graph_with_themes line_graph_with_themes() line_graph_with_themes(400) end def test_one_value g = Gruff::Line.new g.title = "One Value" g.labels = { 0 => '1', 1 => '2' } g.data('one', 1) g.write("test/output/line_one_value.png") end def test_one_value_array g = Gruff::Line.new g.title = "One Value in an Array" g.labels = { 0 => '1', 1 => '2' } g.data('one', [1]) g.write("test/output/line_one_value_array.png") end def test_should_not_hang_with_0_0_100 g = Gruff::Line.new(320) g.title = "Hang Value Graph Test" g.data('test', [0,0,100]) g.write("test/output/line_hang_value.png") end # TODO # def test_fix_crash # g = Gruff::Line.new(370) # g.title = "Crash Test" # g.data "ichi", [5] # g.data "ni", [0] # g.data "san", [0] # g.data "shi", [0] # g.write("test/output/line_crash_fix_test.png") # end def test_line_small_values @datasets = [ [:small, [0.1, 0.14356, 0.0, 0.5674839, 0.456]], [:small2, [0.2, 0.3, 0.1, 0.05, 0.9]] ] g = Gruff::Line.new g.title = "Small Values Line Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_small.png") g = Gruff::Line.new(400) g.title = "Small Values Line Graph Test 400px" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_small_small.png") end def test_line_starts_with_zero @datasets = [ [:first0, [0, 5, 10, 8, 18]], [:normal, [1, 2, 3, 4, 5]] ] g = Gruff::Line.new g.title = "Small Values Line Graph Test" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_small_zero.png") g = Gruff::Line.new(400) g.title = "Small Values Line Graph Test 400px" @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_small_small_zero.png") end def test_line_large_values @datasets = [ [:large, [100_005, 35_000, 28_000, 27_000]], [:large2, [35_000, 28_000, 27_000, 100_005]], [:large3, [28_000, 27_000, 100_005, 35_000]], [:large4, [1_238, 39_092, 27_938, 48_876]] ] g = Gruff::Line.new g.title = "Very Large Values Line Graph Test" g.baseline_value = 50_000 g.baseline_color = 'green' g.dot_radius = 15 g.line_width = 3 @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_large.png") end # def test_long_title # # end # # def test_add_colors # # end # def test_request_too_many_colors g = Gruff::Line.new g.title = "More Sets Than in Color Array" # g.theme = {} # Sets theme with only black and white @datasets.each do |data| g.data(data[0], data[1]) end @datasets.each do |data| g.data("#{data[0]}-B", data[1].map {|d| d + 20}) end g.write("test/output/line_more_sets_than_colors.png") end # # def test_add_data # # end def test_many_datapoints g = Gruff::Line.new g.title = "Many Multi-Line Graph Test" g.labels = { 0 => 'June', 10 => 'July', 30 => 'August', 50 => 'September', } g.data('many points', (0..50).collect {|i| rand(100) }) g.x_axis_label = "Months" # Default theme g.write("test/output/line_many.png") end def test_similar_high_end_values @dataset = %w(29.43 29.459 29.498 29.53 29.548 29.589 29.619 29.66 29.689 29.849 29.878 29.74 29.769 29.79 29.808 29.828).collect {|i| i.to_f} g = Gruff::Line.new g.title = "Similar High End Values Test" g.data('similar points', @dataset ) g.write("test/output/line_similar_high_end_values.png") g = Gruff::Line.new g.title = "Similar High End Values With Floor" g.data('similar points', @dataset ) g.minimum_value = 0 g.y_axis_label = "Barometric Pressure" g.write("test/output/line_similar_high_end_values_with_floor.png") end def test_many_lines_graph_small g = Gruff::Line.new(400) g.title = "Many Values Line Test 400px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/line_many_lines_small.png") end def test_graph_tiny g = Gruff::Line.new(300) g.title = "Tiny Test 300px" g.labels = { 0 => '5/6', 10 => '5/15', 20 => '5/24', 30 => '5/30', 40 => '6/4', 50 => '6/16' } %w{jimmy jane philip arthur julie bert}.each do |student_name| g.data(student_name, (0..50).collect { |i| rand 100 }) end # Default theme g.write("test/output/line_tiny.png") end def test_no_data g = Gruff::Line.new(400) g.title = "No Data" # Default theme g.write("test/output/line_no_data.png") g = Gruff::Line.new(400) g.title = "No Data Title" g.no_data_message = 'There is no data' g.write("test/output/line_no_data_msg.png") end def test_all_zeros g = Gruff::Line.new(400) g.title = "All Zeros" g.data(:gus, [0,0,0,0]) # Default theme g.write("test/output/line_no_data_other.png") end def test_some_nil_points g = Gruff::Line.new g.title = "Some Nil Points" @datasets = [ [:data1, [1, 2, 3, nil, 3, 5, 6]], [:data2, [5, nil, nil, nil, nil, nil, 5]], [:data3, [4, nil, 2, 1, 0]], [:data4, [nil, nil, 3, 1, 2]] ] @datasets.each do |data| g.data(*data) end # Default theme g.write("test/output/line_some_nil_points.png") end def test_no_title g = Gruff::Line.new(400) g.labels = @labels @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_no_title.png") end def test_no_line_markers g = setup_basic_graph(400) g.title = "No Line Markers" g.hide_line_markers = true g.write("test/output/line_no_line_markers.png") end def test_no_legend g = setup_basic_graph(400) g.title = "No Legend" g.hide_legend = true g.write("test/output/line_no_legend.png") end def test_nothing_but_the_graph g = setup_basic_graph(400) g.title = "THIS TITLE SHOULD NOT DISPLAY!!!" g.hide_line_markers = true g.hide_legend = true g.hide_title = true g.write("test/output/line_nothing_but_the_graph.png") end def test_baseline_larger_than_data g = setup_basic_graph(400) g.title = "Baseline Larger Than Data" g.baseline_value = 150 g.write("test/output/line_large_baseline.png") end def test_hide_dots g = setup_basic_graph(400) g.title = "Hide Dots" g.hide_dots = true g.write("test/output/line_hide_dots.png") end def test_hide_lines g = setup_basic_graph(400) g.title = "Hide Lines" g.hide_lines = true g.write("test/output/line_hide_lines.png") end def test_wide_graph g = setup_basic_graph('800x400') g.title = "Wide Graph" g.write("test/output/line_wide_graph.png") g = setup_basic_graph('400x200') g.title = "Wide Graph Small" g.write("test/output/line_wide_graph_small.png") end def test_negative g = setup_pos_neg(800) g.write("test/output/line_pos_neg.png") g = setup_pos_neg(400) g.title = 'Pos/Neg Line Test Small' g.write("test/output/line_pos_neg_400.png") end def test_all_negative g = setup_all_neg(800) g.write("test/output/line_all_neg.png") g = setup_all_neg(400) g.title = 'All Neg Line Test Small' g.write("test/output/line_all_neg_400.png") end def test_many_numbers g = Gruff::Line.new('400x170') g.title = "Line Test, Many Numbers" data = [ { :date => '01', :wpm => 0, :errors => 0, :accuracy => 0 }, { :date => '02', :wpm => 10, :errors => 2, :accuracy => 80 }, { :date => '03', :wpm => 15, :errors => 0, :accuracy => 100 }, { :date => '04', :wpm => 16, :errors => 2, :accuracy => 87 }, { :date => '05', :wpm => nil, :errors => nil, :accuracy => nil }, { :date => '06', :wpm => 18, :errors => 1, :accuracy => 94 }, { :date => '07'}, { :date => '08' }, { :date => '09', :wpm => 21, :errors => 1, :accuracy => 95 }, { :date => '10'}, { :date => '11'}, { :date => '12'}, { :date => '13'}, { :date => '14'}, { :date => '15'}, { :date => '16'}, { :date => '17'}, { :date => '18'}, { :date => '19', :wpm => 28, :errors => 5, :accuracy => 82 }, { :date => '20'}, { :date => '21'}, { :date => '22'}, { :date => '23'}, { :date => '24'}, { :date => '25'}, { :date => '26'}, { :date => '27', :wpm => 37, :errors => 3, :accuracy => 92 }, ] [:wpm, :errors, :accuracy].each do |field| g.data(field.to_s, data.collect {|d| d[field] }) end labels = Hash.new data.each_with_index do |d, i| labels[i] = d[:date] end g.labels = labels g.write('test/output/line_many_numbers.png') end def test_no_hide_line_no_labels g = Gruff::Line.new g.title = "No Hide Line No Labels" @datasets.each do |data| g.data(data[0], data[1]) end g.hide_line_markers = false g.write('test/output/line_no_hide.png') end def test_xy_data g = Gruff::Line.new g.title = "X/Y Dataset" g.dataxy("Apples", [1,3,4,5,6,10], [1, 2, 3, 4, 4, 3]) g.dataxy("Bapples", [1,3,4,5,7,9], [1, 1, 2, 2, 3, 3]) g.data("Capples", [1, 1, 2, 2, 3, 3]) g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} g.write('test/output/data_xy.png') end def test_xy_data_pairs g = Gruff::Line.new g.title = "X/Y Dataset" g.dataxy("Apples", [[1,1], [3,2],[4,3],[5,4],[6,4],[10,3]]) g.dataxy("Bapples", [[1,1],[3,1],[4,2],[5,2],[7,3],[9,3]]) g.data("Capples", [1, 1, 2, 2, 3, 3]) g.dataxy("Dapples", [[1,1],[2,3],[5,8],[13,21]]) g.dataxy("Eapples", [[1,1],[2,3],[5,8],[13,21],[13,8],[5,3],[2,1],[1,1]]) g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} g.write('test/output/data_xy_pairs.png') end def test_jruby_error g = Gruff::Line.new g.theme = { :colors => ['#7F0099', '#2F85ED', '#2FED09','#EC962F'], :marker_color => '#aaa', :background_colors => ['#E8E8E8','#B9FD6C'] } g.hide_title = true g.legend_font_size = 12 g.marker_font_size = 16 g.hide_dots = false g.write('test/output/line_jruby_error.png') end def test_marker_label_accuracy g = Gruff::Line.new g.title = "Marker label accuracy" g.labels = { 0 => '1', 1 => '2', 2 => '3', 3 => '4', 4 => '5' } g.data('first', [0.5, 0.51, 0.52, 0.53, 0.54]) g.data('second', [0.6, 0.61, 0.62, 0.63, 0.64]) g.data('third', [0.7, 0.71, 0.72, 0.73, 0.74]) g.write("test/output/line_marker_label_accuracy.png") end private def bmi(params={}) g = basic_graph() g.y_axis_label = 'BMI' bmis = [24.3, 23.9, 23.7, 23.7, 23.6, 23.9, 23.6, 23.7, 23.4, 23.4, 23.4, 22.9] g.data( 'BMI', bmis ) g.hide_legend = true return g end # TODO Reset data after each theme def line_graph_with_themes(size=nil) g = Gruff::Line.new(size) g.title = "Multi-Line Graph Test #{size}" g.labels = @labels g.baseline_value = 90 @datasets.each do |data| g.data(data[0], data[1]) end # Default theme g.write("test/output/line_theme_keynote_#{size}.png") g = Gruff::Line.new(size) g.title = "Multi-Line Graph Test #{size}" g.labels = @labels g.baseline_value = 90 g.theme_37signals @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_theme_37signals_#{size}.png") g = Gruff::Line.new(size) g.title = "Multi-Line Graph Test #{size}" g.labels = @labels g.baseline_value = 90 g.theme_rails_keynote @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_theme_rails_keynote_#{size}.png") g = Gruff::Line.new(size) g.title = "Multi-Line Graph Test #{size}" g.labels = @labels g.baseline_value = 90 g.theme_odeo @datasets.each do |data| g.data(data[0], data[1]) end g.write("test/output/line_theme_odeo_#{size}.png") end def setup_pos_neg(size=800) g = Gruff::Line.new(size) g.title = "Pos/Neg Line Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [-1, 0, 4, -4]) g.data(:peaches, [10, 8, 6, 3]) return g end def setup_all_neg(size=800) g = Gruff::Line.new(size) g.title = "All Neg Line Graph Test" g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', } g.data(:apples, [-1, -5, -20, -4]) g.data(:peaches, [-10, -8, -6, -3]) g end end gruff-0.3.7/assets/0000755000004100000410000000000012055510742014165 5ustar www-datawww-datagruff-0.3.7/assets/bubble.png0000644000004100000410000004362412055510742016137 0ustar www-datawww-data‰PNG  IHDR X­¨rBgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<PLTEGw³%eª:…º$¿н(x´q° (‘À5“L†š%C™&¿"J]›Äüf4\¦^›­+1Fy‹<–+T¢!Œ¾V£2j­S‰»(GQ*KS›¶A™;d©2c©+Œ½;i¬L›Äd©Ë;|µ6\hc¥ÉT”Á?r±j²Ë,[¥S™Ã[¤É3s±S¥ÉJŒ½L†ºAƒ¹o¶Ñ R¡>‹¼1S¡L•ÁB”Á#‚¹=’Á+…¹J¿5z´/X‘ÀBšÄ>q‚Am®]¦N¢È3¿9o¯FÅ6due¦»u¿Ö„ºÿÿÿ 7”&n¯K Ç^©Ã+~·$;B^«Ì(G›$?˜ %‰¼,O =˜Ã[ªÌn»Ô;œÅA ÇW§Ë@ŸÇ_¡ÇmºÔ^±ÏG˜Â9›Åf¶Ò7šÄF£È\°Ïs¾Õ6™ÄZ¯ÎdµÑY®Îa³ÐB Çc´ÑW­ÍH¤É~·4˜ÃU¬Í<ÆRžÆJ¥Ê@jwp¼ÕE¢Èh·ÒC¡Èq½Õ1–Â?ŸÆ>žÆ[¯Î3’À=ÆD¢ÈP©Ët¾ÖO¨Ë5™ÄlºÓk¹Ój¸Ói¸Óo»Ô:œÅ#‰¼/•Âr½Õ]±ÏT«Ì2—Ã_²ÐK¦Ê`²ÐG£Éb´ÑV¬ÍN¨ËI¥É3—Ã8A-”ÁS«ÌL¦ÊRªÌC¡ÇD¡ÈM§ÊQ©Ì0–Â?žÆ=žÆ,“Ál¹Ój¹Ói¸Òo¼Ô:›Å8šÄ]°Ïe¶ÑeµÑ`³Ð.”Áb³ÐG¤ÉX®ÎV­ÍI¤É3˜ÃT«ÍB¡ÇSªÌL§ÊQªÌ<ÅM§Ëp¼Ôq¼Õ0•Â8›Äg¶Ò[°Ït¿ÖX­Î5˜Ã.•Â*’ÀN§Ë+“Á+’Á#޾"¾îb TÒs @fÁÛмœKnŒà<@fAÙ߸ñðŽÝ W¯Ð~ @fÁn=–ªäá“‘—Ih4ƒ ªšãùãkvƒŒ¸L@£dÐôÇoÜ»m7$À‡#¨ç@£dptÈ[Ÿƒxü|„,R Ñ 2ªŽÁÞ®Â1£8"*€Í Ýë¸c7tÁµ{7†{ €F3È@X=¼m7äÁãú±@£d4wPÞkÆ€Í £¹ƒ:yd˜¶µh4ƒŒæªµµ†c Ñ 2Ú+§¸÷dØÅ@fº‚í†7¸öp˜-l Ñ BǦսkv#ÜVM-€Í tWžß¶1àÞð™B Ñ BpóžÝÈ·‡Ë¨@f:T7nÛ@poXôFh4ƒÐ|Øjdô<°÷F†~ôÐh¡-xrÕn$ƒkׇzK €F3ÈhÛŠÆ-­¡½  €F3í²Çõk£Ù®å1-€Í 4ëzŒæ ĘÖÐíŒÐh¡ ¸5š=†I Ñ Bp“Þ=s333' °çǤ@’N@U¡£ýuÒ@f!›=dÌäÁ9 ?8uª 2¡`’1?¿=ƒ YÈh!ÐhrÙÃÌŒá'Ál;€@íãçg`0“Í"x@f¡“=d¤ø½HøòÇѪ¾¾¾ªª#GTø1Щñ5ä²@f¡=€YÃ^Ý‹ €?€Á‘#ë×放D~Czd“kׇTœÐh¡ÞÀ.M²‡™ÓO~/r‘ùc=(ôEƒ–ƒ<{'CjD €F3Èà÷‘ÿ©îE #Dk’ÄÄhŸ‚´¬Kn‡4šA¨®\§n ò5c µ·AükÖt©Ø+™Î®Ðh¡ ê¢_A +*äÄÄ.X“¨¡I«Lòxh¬Ñ Ñ B9xr{Ðe*åèîÖ`ˆ Iy8´h4ƒP nQ­olVyQ P'tƒÀÚµ=Û¥”hÐ'¹ö|ðG/@f ;Tê›óÈÛ{y Òü±¶§ˆÕ ©ß[ô]€Í çTé|È0¨{QP;AooMM/õ+’ÁÞ Ñ B¸I· Ô/¯¡?€`ÝÚµ5üJÔ]›2È'h4ƒßºzLÜaìå5tòǺu5@°N—!dÄ´³h4ƒ \ëŠ6¹ƒæù”EjtQ3<¼ãY4šAÈ»¢ô„]3åzäH&Ñ¥bdðŽgÐh!«uEáĹÌÏ^^C;ÔÔœ8‘ʯàKµ©õAzŠ@fºwÎ}Ô½¼†Eþؼ9õ„ÕÆ~gg €F3éÕÇCŠ:ö^^Ã$€Á‰º TjjÝŒ•@fR% Kx~x ¯ü‘ ¬F6oÑP¶•@fúíÒ¸ò¸üÁÔ©F_%@£„N½_§^Ã6äÁêôF[%@£„.½)/¯á?€ @WÉwØU"4šAH˜û ·úä÷ù#§  €*-­A5'@£„h@æÜ‡¯ü¯‘’? fÍ¢ÂûÕA´€ €F3‘€Ì#|Œ½FPþe‘< Š÷W]<{Öh4ƒ9¸KÖÊ+žŸtʃ(€€Åþƒf·!@f¢zçdm‹â‘òò‘ùcûöíº Ã¤¯@£„˜ÞùÁ=_þÈËËÓ¥pÔ÷Úà8= €F3apãÚà΃2äåÍ ´¹7šY4šAhѼ¢kö¤ù¶RX‹ †f@fê7¯|éš=qþغu†NÄofÐh¡öèÝv‡BþвÈÃN4šAðÒ×–8Ñ7{ úü1cÆ´_”Ì®ßàŽ@f|Ý’'xæ”ü1 4)X£um`;"4šAðt?Hm^™ñ{æ,ù#))N‰‚Jd@;"4šApîî¾ùPÊ@P14;"4šA¨Õý sß|ˆå¤¤É†äwE®\G €F3uºf?¼Fó¾üÌ!qnCpF €F3VpŸ´Ù{¯ÑüA(Lž<üvÖ€uÕh4ƒP¡{>­«¡˜?&OÞ´ÉÐwˆuÕh4ƒPÜ=7S÷ÍD挓äg Ìnu€Í ˜€¤­ƒ¾?½Fó±ùcSØÛY¿7‰ €F3¸7Ø;çC;ddlrBƒY4šAЇ¯H9øÊ×Þk4š?22Nš“¹o}ÖÐhAˤ _ æròÇɦ&2+‘ÛtÌ Ñ Böðî@UÃ!45‘Y‰Ð}¸ €F3¹Ã»Ôû&ù£©)WiHä€Í äå¼>ù#;;›Ìá,úNˆÐh!+ȨæJóGvvœØàÏ!4šAÓƒÄç'¯ÑüAyþÈÎnúÅ5Øs@fÒ§Ï}ùGóUòGvnnyÈ Ï!4šAHÎfÆ£ùƒZùäw Ñ Bjþ`ðÍTÌ;³|s Ñ BZþÀæÕ°Ì @V3‹^9 €F3Iùc›WÃ5ìùÁ›Ch4ƒ’?°y5ŒóÇéÓ»T}k Ñ B|þÈæÕ°Î…§O›‡Ò@£„èü!óc4Ð&€€~ÄàÌ!4šAžòÆ£ùƒvù£°p§Â Ì!4â3±ëK~zæZæÂ]»Tc †Ñü1è»#$Î6÷|9 €FóÇ ^›8ròǮٳg+“<#BóÕï4²3È•kƒ~öc$åÙ³õÅ[ AˆÜ_+ï5š?è“?JKKY †Ñü1¨»ç#-”–j®“h$gâÎ÷‘ÍôÌ¥¥ªƒ*‡ÃhþÀ?|¥>š?è›?fï'y0ë* S @Ü ò|4 ÆüQºwï^sR÷ÒðÌE€±䯠_]2bóÇ”…6¤÷ÒîÜ^€©„¨ ãÑü1ù\BË„!@Ð r4 æüAF¡Õ`/@Ì BÔ¯ühþ°ü±p!©9äÚ}Ú$€™äñ ŸéùƒôB£Á^€‘äúhþôùcáþý$Nª?¦IZ ‘˜AnŒæ¡?CY431X£ùcÀóÇþÅ‹jüP@¼ råöhþùc1©u-Ö-ÐÈË WGóÇPÉ‹$mùûmêwÔhÄeë£ùcåƒ.<ÜQ ‘–AžŒæ¡”?–/'1‡P½£@#,ƒ1ƒ>š?Sþ 9‡Ü¤rŠ –A/bùcy›?Ï@ΨÐÈÊ GóÇËmmþ$í¹CÝ$@#*ƒ<ÍC0´µÙ”CR5ÍÐHÊ „; ¾£ùcæ9$æªvCh$e‚3 £ûcþe#’º!Ôœ  ”AÏ€ŒæÁ™?::Γt’5÷¨ÐÈÉ ·FÏ/²ùH:Úú9õ’ @˜ Bx ÖèùWƒ8tt´p‘z‹²hÄd{ƒ{‚p4ÈsH™¡Þî)€)„à¯ÙhþÜùcŽè@ŒõÐÉ O©–=Ÿzç9s,¸`¬ €FHy<¨xGó1ùcÎaR{©µò €FX 0z?ÎàÏsΟw£ÿÊw€bm` ôïhþ 6>OÊPÖª¤€bm` ðÖhþ :>LÊÊ^êL¨ÃhËNf4 ‘ü±lY2 «²¨r¤5@1Œ6°|Gï?2ùcÙ2#:dÐÈ q}4˜?¤ïH@ ÿ r“@(2Œæ¡“?€ä€ ]§ høgÛƒw}4‘?¹ûÒsM@ û B`‘;ñhþZùcÑ"Szî¿ ážAí"äÍC-,ZDB7„â…ï4Ü3ÈÕAÛÍäæéÓeè7@Ã<ƒ<´ÑüA~þ˜žÌE·'4¼3]RxFÃhþ  LŸ®J·É€Þ„@Ý~4 Íüq`º6½úé4¬3ºühþšùczE…»(úé4¬3ȽA:Â;š?(ÍÓ™èÔO áœAnÒÞÑüAqþú̧ÐpÎ ø‡xFóÇPΤ4²(9Ï €†q¹18׸æªäйÄ7²(9H €†q¹=(X£ùƒJùcî\z õÐðÍ ×ek4P-Ì%¾‘EÁP/@ Û ‚›Ô@`æêå¹»‰od‘A4@1ŒÌ „4 ýü±{7ÑÓ…·ÉNGÄ0"+ùÑü1òG‘;Íg h¸f{ƒp Öhþ rþ(*²¥ùl!@ Ó rƒ5š?¨ž?Šv½ðÜû¡ˆaV f£ùc˜ä¢"SZW!Ä0+£ùc¸ä¢ 4®BˆaäU £ùcØä¢D÷ÓɬBˆaÄU ÒCÍ4Ê;fÚÒ¶  †WHæa”?vÌœ)CÓ* €FZb6š?†WþHg¢i@Ã1ƒ\dsè£ùƒ†ùÄhY…Ð0Ì x'ÑåGóÇpËé´œN †VüÍÃ-¤§+ÐpE@ à rmP ñŽæšçt.Ú-ê á—An ª!ÞÑüAûü‘ž.I»* €†_¹=˜*ÑüAüA|BúÖB€vßa£<£ùcXæôj=šíN a—A®¢9ÂÑüA§ü±´šØÝ·$p@Ã-ƒÜDÈhþ Sþb«’/ö á–Aî ž d4Ð/T[…h*ÑüA×üÑJlBêH/@ ³ r{°T £ùƒ¾ù£•è*ä i) €†W¹9X*ÑüAïü±”ع¯œ á•Aî ’ d4Ð;´.]*I“‘^€VäÊ ©@FóÇäZb«Ò¶…Ð°Ê xºè¾£ùcx祵µÚ´è¦Ð°Ê ·Å*,zåÜ ð{4@óG­-ºé4œ2È­A±Œ—>ùƒ[:Œ¤ÿ§ŽæZ£Ál:@ § ro0l$¤GþHfEÂÜ£ù–»;”Ùt€NäÚ ØHHüñ5{€€tÀhþX²d õ÷MÐ0Ê xº £üÑ+ÂÁŠ Âþæ%ûˆœ,$å>€FäñÀeBúÑ+àpÍû"}©>@Ã'ƒ\øIÂÌ@à8âóG~¼Õ§Bhødôš$ü¢¦&,¤Æí9¸ò++÷HÏùùVTŸ  †Тæï— ¤Á#ºçÿxò+‡ìHÏùù|Äå[D'+€b-,êñ~A? ¡oþøÍ/ƒ° 'ôü‘Od7ý!Ñé €F@ KJÙc’–4éIÏùÁù¬øÚHϱ‘\TncÃðoaÉP)h cm×|¡_þa%þÏÙù#6V›Êm,€bþ-,*uÑ…p5oDè•?~‡Ì Â#=ÄšR¹@ þ…E¥.ºîæ¿Ö_©±"#<ÄÆŠR·@ þ…%OÃöÑ%è¡C‡ Fzþˆ—¤n €†} Ëž*Dïøª'=Ö·{°¸óFtþˆ%r*„ØÓMh˜d'4žE'к¦Çþ0¢2ˆðÏñ ¢óG<±m,"×¼Ð0É ×h; ÂM(UrxÒ8¤®%6ƒ¨ðüÑ`EÕ5ï4<2È-ZO‚pê Ñ|ÿy#Q$lëˆÎ@@\‹ÈãhxdÜ·®ýôò¢õ(/|¡ýù ÿ‰Ë!²#<4ׯºF\Ò á‘A®Ò~+¡0UÏ/ùOT?Ýcdçøx"ÛXÄ]¦@Ã"ƒ\¡ù2/¯L-9Ä“öçûl &"ƒÌáù£Èq,â6…Ð°È OhÞÂç ¼éRšç_“C8FzþhЦâ@/@ ‹ òæ y!@oº¤Ëùp9ÒDtBFxþh0¥â@/@ ‹ r‡^{mñÎr¥Ëù‰„sˆÈÏ Ä­y'ê9€ä>mg  ½ßd„4]òGjª#Á™ž?V¶hSoE/@ ‡ rƒN-,áÀÓÆ¢Óù»„rˆô¦‘?V®Ô£^' €†s„'Vã™ùB¯ó© Lˆôü±*’z€bÎ]š8*„s2B-“vùCàŸnÙù£±±‘‡j€ä M÷z~A8—Ó°þ`%Œøü±Šz€÷,ˆ1­‡vÑ:!™4ËÿHÊ #=462Q­@à ƒ\§é4º0 S‹fýn’3ȈΫVQ­@à ƒ\¥é¥9¤$Ì/GhÕ?'9ƒŒðü±ŠZ€„¦GVk‘’0Eh6~Ejéùc%#µ–cÐÐÏ ¸÷‚På,ER¦ÚQZï’˜AFzþhi±%*ƒ\%œ¼hègœÓ„fôÏ 4›ÿøORÍ1D΄N^4ô3ÈCšvADHI˜Âu4›$+ƒŒØüÄÍ„>ü €†~¹JÓ[sÔHÊ ´›?'É£ù£¥Œ¸™ÂÓhègšvAHÌ §ªhµ¾„ƒg4æ2=*MÐÏ ·hÚ!1ƒÐlýÕfR¦c¤GóGY‹+•zé4ä3È Ú.u'±¡ÙúDiRÆ rG|þæ.êôÒhÈgë´=r”´ B³ü±wˆŒæ`á£N/ €†|¹JÛóLHË ™4Ê99¤L„ÈžÍe‡©3—@C>ƒÜ¦ín[’æA¤i–?rHX39ZóÇ![êÌ¥ÐÏ ¸|.8Dm=­òGAñ½ôù£ù˜?b¨ÔK ¡žAnÒtšˆc«Q2íòGñ½tÑüÌ11DõÒ ^¤@C=ƒÜ é4!©«yi–? ˆŸÒ—Í üÃG•a,€êä:-7K@ Dˆvù£ €Ø©Â°ÑüÎýÄÍ¥:€ €†zyLëóH™¡KL¤]þ º¥vr4€$U›ÐPÏ Wi:NÚ8¯0 ë‚Y"Ä·°Fó´Re €†z¡qÝëŽa¬0á 55î/_¾ôÑò|Dþ(˜5‹›û?Êýƒ²ÜÜÜjÒ¨uœðhþ€ây'tM@ ñ r…Æ—£ŸÂØRÈ!¬Vùų.3óèѾ¾#´=ÿ %`Üï >šaˆ:É-¢6šODFóôSeœ €†x¹IÛA,ÐýçÂÈyã‹Ö¤I}}t:þ@>_t28'üw” ›œ1š? ù£Ÿ*ÃX4Ä3Èš®u壕ÌT)tªç·“‘? `SÓÉ“ÓFëxþˆ1¡F !žA®Ór¡ (´·{ÛõjBt¸?ŠÂü1:Žš?úû¨1Î @C<ƒ<¤á $´gŠxNÊÍC/×£F !žA®Òn34´3Æhþ‚ù£UÆyhˆg;4å…çšßï<š?h“?6¸R#ƒÐÏ 4ÄÍC>lØ@q^€¦D}4Œøü‘’ÂE… @C;ƒÜ§Ñ(ïhþù#… Þhhg›´É £ùcXäjÌÐðÌ f£ùc4¤¤ˆQ!ƒÐÐÎ Ïi‘AFóÇ0É)ŒT˜ ¡A®Ó`”w4 —üA• @£d4 ×üqÜ–  €†v¹GõÅî£ùcØä”ãÔ˜J ¡A®R{žp4 £üC @£d4 Óüq|#52@ Ï òc4Œæ‰[k‚ÿ €ÚäUç GóÇðÊÓ¨° €†v¡êDúhþnùƒ €F3Èhþ¶ùƒ €†e1Í£ù#: €F3Èhþ¶ù# ëÝh4ƒŒæa›?Ò¨°œ €F3Èhþ¶ùƒ €F3Èhþ¶ùƒ €†eqÍ£ù²¨AhXf†Ñü1š?€ùƒ €F3Èhþ¶ùƒ €F|ÍÃ7P#ƒÐHÏ £ùcçjd€ád4 çüA @#;ƒŒæa?¨‘AhDgÑü1¼ó52@ä 2š?†yþè´£<ƒÐÎ £ùc¸çjd€¹d4 ûüA @#6ƒŒæùÃÅMa¸äjd€©d4`Íþªbvvs†Iþ F ¡An“»Xq4`ÉàÜ2Ã%4S!ƒа<öÇl4ž?Œ´aÁ§0LòGg 2@È 2š?Ð󇑶/"ø$‡Iþ8C\Á¿å €FbͨùÃFÁ%ø$‡Iþ J ˜AFórþP– E>£a’?²ü¨AhX^`6š?ˆË.z!X‚Ïôü°È%%ŒTÈ 4<ïÍDäUW”™“üq† €FZÍÐüa$ˆóÐ(ÿŽa‘?JJˆ»£ÿéî4´3È R3Èhþåƒ6 ¡xRÌœa’?öðQ!ƒÐð¼åÖx4àÎÊš!øSÌ0É%%ÔÈ 4<3ÿhþÀ‘?pv<€g¸äâæ ŸãMb4´3È’2ȈÏ.F‚D$™9Ã$™Að_â @C;ƒàZ­hO 0˜1ð°ü¡¬J\ŸÕNf˜ä3ÖÔÈ 4<3úC œœì«FHþ0W±#HžõÇž@jd€âä*Ñ¥}Å/-™d¸çUA_;€ä0Éóˆ›HÇ¿VQ €†g$ÐÿPGV*/¥2ló‡‰@ïü°È{ö0R#ƒÐÏ ‰\k‚Þ?G×Ê$Ã.(kŠqÙ‘L‡Iþ˜gB”woãOa4Ä3Ž©tBãWØÚ¡ò†*Ã&(« †Ú‘LÏü1¸iü+Mhˆg'DM¥cŽïšáÐÊ$C>è‘Ð%DzÒd˜äyvÔÈ 4Ä3®™Âæ?ðÍ@3ÉÐÌf.ùÕ8ïâŸH !žAˆ™)Ä6?È@ Ô@™dÈå šUÈ^&ùc^ U2@ ñ ‚k"DŠÀüùObR (“ •üa )ækG s`xäyDb=ÁŸÀh¨g‚!XóG?‘©ÅWðW Ï»Ê"쨴‡Iþ(q¦Æ<¡@ õ ò˜ÀDŽõWü$¤_3MÄÁ™?ô ܨUq æ — ‹ü1u*qƒXvWð'0€ê„À¦[œëInx(ªªüQÌ”õ8ÞaV&ùc*‘s@@ õ ‚Ëîõ»ä”»¾‚š?Aþ0ÿåAa½ñêõ×7/qLƒ “ü¡H\HÜ!Àh¨g¼ã¼xÖ·›‘=È#ÿKcÀò°Ú ¡¸õîõW À‘A’‡Gþ v‹À4ˆ@ õ "€gœßþyʆBu‰:]󇡛Uºâ¿¿õ€ÏØ ü1u*‘ƒXFyhÈgÛ8‡±ðîb <©ùš)1hü¡uþ°±qSŠ¥Rüó·O>pð û*a’?ˆ\‰E`?¡€@ ù ‚cœWžÀþA{j úøFÈkJil¦zþ°±ÑtÓŽ â´aE(ƒÈLùcj½(UFyhÈg\ÃXö×&PypÔ7BP“ACƒÂüѤ¬0Ü#B¨ì:»gßÞú ƒWØGy‡GþXAäBB£¼4ä3®åŠ„öŸÛÑ„FDhjjjhhèÎ"*ÄÙØ€* MÁª5¤Ð«Žï_}°ìªÝ†GýQÏF\à\#”¾hÈg[8|®Nà|3;:ß0PÒDN áÚ;àÕç÷Ÿ|°ƒ78Fy‡Gþ8FdÐ –@ ù ‚s5óK0†±>¿²^àÕg,í*x]—û¢á?ê뉜GH(yÐÐÏ 8zéNøóGÆrÅ>o¿ ŸLòìå ü{áš><òG=‘áDhK €†~Áµë–ÀùW«±^‚“Í0È$¯gÜó„2Ã$yäÁA,€ú×bBçÃa4±àIgg’wø›U„3ˆÂðÈÄNÄ ¡ŸApöÒ'á??½—þ %ù¼ýöúÝË¿ãìcاAô ‡üQ_Oä4ám‚É €†~¸†Ýï? œ/ê„®£èýô~¨d’wŸ‰jU¡€Ø±†Gþ¨'r)ïc‚© €†AÁ5—Nàü]{ìôÁЯߟ öÇ×O>dƒXÃ#Û¹N0uÐ0È 8æÒC œO­…1ðƒ{ÀçÛçwÃ)o€«G¬FŠüAt„`] €†AÁyIóÛeÐ5¼Á› ¾¾DUÉG`›Šì¼g”WfîpÈ+VÙ!ÜG aAplbOà~ŒNÈW‚©êíûop½{öòý ÊöA,Éá‘?V˜„ûè4 2ˆÀS…î7À脼&.i½Ö%¯¦Ö JÖ€€×XíP>,ò‘›¥ˆè£ ÐpÈ 8¦ eðçDŒNÈ+Òכ߾Ó+›||öò… *bGy“‡Eþ¨'ò@"úè42®½ÆGñßc†¹Ú„DðæÅû—Ï>Ò®5õXgP;gàÄâùcÅ 9ªõÑh8dœüù#cWáwrG„€ùä5Õ2Ê3`¾xùâÅZ‚·X­ùã˜"±AMDâ áApuBä ܯ†±iê¥Éî0§¼|öŒä¶×; žï/Õ³|ÅÑGõ±KÝ ¯u€G'$”Àýj}¡'ÓÉo^ÁK0øþ |†ˆƒ2Ä Z5¡ÈÄbùc‘KÝ ¯u€W'D%ÿýƒòÔjc =ð Ç<ú0ÈÄ·°ž‘¶hXd\ŸøóG·=%ãXC` /žáP;æGl¹BDÚ a‘ApuB'῟³Ë—ô¹Âá°÷ѵ‡Eþ˜Hl ë1I €†GÁ±ËŽÐýµòdÎyð kpÙ‡ü±‚è1]€מû>ü÷;cžŽõfddìóèáþ˜èGÍ.ˆ@ ‚kOˆ<þüÑ…ÙÆú622ÖÅÉ¢Ã"=†ETD €†I¹‡c ÷(ûÏ1ÚXGDþÀ¾Ö]{8ä‰D·°ˆê‚Ð0É ¸zðçD;N… ^ð{d8äâ[X׉JY4L2®^'¼ù£«+1tDvÓqtA†Cþ z ‹˜…X@@Ã$ƒàºŠ-þèêv‘Ýtì]á?¶ݺF\ á’AžãjcáÍ]kÔíˆÚš>"fA†Cý1‘ØuXÄì€.ä>®6þü±¦ÇŒê+‡ì,ÈpÈE‰Í 7ˆKX4\2®ÉôÐ#xóÇšnC -ïGêB¬á?ˆÝKhgwŸ¸t@Ã&ƒàlcáÏÝݾ#n¤û¹î<Ã!}Z‘ƒ¼4l2Î6üÑ­dGñÆÂa1È«°cè牊\Ôä a“Ap¶±䵘Ýôg#r—iä³DO‚ØÝ"2YÐðÉ ¸ÚXü‰øòG÷Úµf#­ Áºß‘k8ä³ÄnF'æÀ á“Apµ±ä äµRv#k²ð+ÎAÞ!Ÿ?ˆï¢?$6YÐðÉ ¸ÚX¾ZøóGÏZ =ŸF^ Ëv÷ÐÏgM¨Þ a”Ap]bˆ?ôôެ*äŽAÞ¡Ÿ?ˆžE'¾…%@Ã(ƒàZeF ôüðIUö1,±C?lc¤~ K €†QÁµËNþèéÑIYŸ±·°†AþX-Jý–@ § ‚kÍ»þüÑÛûÇwä dá¸ýÙ}èçm~4ha ÐpÊ ¸öúȽ5ò#§ Á¾‹gämr4ha Ð°Ê quÓñçÞ^ÌÉÂa[…`¿ HoæÐÏlv4ha Ð°Ê ¸¦BÌäuXªaº¨÷ŽÖÐÏ«ùhÑ a•ApM…Ø©táÍëÖa©B†ç¢^ì“ béC>l#~’Ðî9 I €†WÁ5"O Ô¤bV!¯†ãÖB]tÛ¡Ÿ?&?IHìJw0 á•A®àê¦káÏ55ºv#bk!ö3«í†|þØfM|þ¸JJ’ á•ApvÓÈ55˜«Þ‡ãl!ö.ºöÐÏ$¬2!v/!Ð0Ë ¸ºé¡‰òG –¹á7Ô‹}ÝNuÇPÏ H¨@®]!%EÐ0Ë WqôÈ55˜ÓéÃï(kì—`q ùúc)È=’@ · ‚k6]†PþÀV… ·~:Ž1^…ꡞ?H©@H™€nDà6Ž`Ñ ?jR1õ· upÜñn1äó)ÈmÒÒ@ » ‚kc¡ÙüùB‡ù|:Ž DfÈç$L¢“4 4ì2®‘^; Bù£FËå# ±òùƒ„It»è4ì2®ƒÞíä{ä'"†õdŽ „kÈç’*{$&'€~×H¯:¡ü‘Še¶pöŽ£Qòùƒ„e¼¤vÑhøeÜUH/ü‘šª9ŒY8*;‹Ö!ž?øÙÑhhf›8«Bù#õOèðmdá¨@Ćzý±@QÔŽF³è @Ã0ƒàœ,”¯!?RS ì†ëHŽIt;¦¡ž?0ÚÑlŒh8f|Uþüqâ„ ¦®wÃaºð öUXv¢C>Xs‘A®“œ˜h8fœUˆ ü‘šºYs>}X„c¯mõÏ Hâ%yŒhXf\ëMì4åÍ›ì†ãÞ©O¯pñéüq–”!^Rö¢Ã@ Ë ‚s½‰Y ¡ü±e –ÉWC~¬÷3Ž‘êõÇRzè$픂€žäî*„PþHÕÁ¢íãï†àâårâùc5)=t’' A €†gÁY…„ôÈ[r¶`™ âÝ\=t`2Äë’zè$O‚@ Ó ‚³ 1$”?€ d¸uC¾ã¬@†xþ¸HJôIB ašApd…þYG(äèø¯nÈ[\)Frˆçդ̡{1: ášApÎ…hÌ99ØF²†ðlÈGüÈÐÍŠ\4¯@h¸fœUˆ¯î:Bù#§ËHÖÐÝ¡þg²thçÕ|´¯@hØfœUˆ<áüQì;|:ê¸F° ÈÐÍIš!³ a›ApV!vóGA¶5YC³£Žs R áúƒ´™ˆ@ ß ‚s_HáüQP d7L–-~Æ[ áü±À„ˆ@ ß ‚s_ˆáüQP€m¬we}Ùbô–éü±š´¹ˆ@ ã ‚swºïÂùc¶U‹Cï œ#¼v¢C<ØÀ"· aœA®ã -ÁóǬYX»!ClÍÉ›W8SŒjëÎ$Ž`‘]ÐpÎ Wnãì§Î³f) ýòg‚‘Úõ‰S„d­Â‚€Î÷‚“Ð?„óÇöíØfC†Ô`ïkÜ)Æ´uHç@ÒXä,ã…€Ö÷P¯ùc{pèÐÎ!ïq'…¡]¬–£W"@Ã;ƒÜÂdü› æ¼Úè¡Ùüq‘Ä^ÒÏÂB4Ü3î~zù#okTÈÌ!xó‡díPÎ¤í²¥dŽ hØgœK²ì”ˆÈ[·F…Á‚7ð éúƒÔ%&äm´E€ö÷|ºùcÆ ìCYƒ:‡àÍàÖÐÍ$4JæQ?È €†¸ƒsº0˜ˆü1sþü!9¤óÇR; ” ñ‚@€ ‚së”`ùcÆ4샽vÏÞ ÅüÁ3¤óÉÊzè@@# ƒàž ±ûILþ˜†+‡ ÎuYøó¨5tóÇ…@;ºöÐ €FBÁ½hÑWg3ùw„ûCðÍ€w åúƒä…=t  ‘Að4²B‚‰ÉIÓ±k|;¨ä¾!?Hî€P4‡4"2žF–1ùpäÁ¶Oý=þôÂåP=„óéÛW(N:422îF–Ý/¢òÎ:dp]¥þ’@‚aÊõéò·I!@Œ ‚gY¯¯NùO2x³Þ|&^$k‡rýAê,Ч@À €FHÁ3]LTþHšŒ+‡¼$‘· ¤±¡\¬>GräÎ*$€)÷t¡`Qùc2ÎòjPtD¾¾"^D†rþ¸À8 ùC €FL¹sá»qùw±{=ðͬï„Ò —éÎl“?hÄd< ßí̉Ë›6áÌ!=#B°y:Æd(ç’; ·©“?hädÜÉÙùê—?6á®C^}Ðãá^L0zµC9\€,0 ”A®ÜÁÓQ'*dddàÌ!vŸ¬™õéáô¢=¤ÛWœb he[×ðtԉ˸ë»W_mõa'3¤óÇ?’; TK44’2¾nˆÒ ¢òÞ:d@*‘·DTv<û†rýHò È-ª¥€QO7Äî‘ù#ã$žB÷ß7/íˆÊCº}¥Hrä:õ’ @¬ ‚§b§Cdþ8Ù„'‡Ø=ûD×¥WïˆI.\¦µC9\0!5\¥b’ ‘•AðuC|uˆÌM'5ñÅÎKºµ³^<³#. éúƒôÂk÷©˜bh„e'¸Ã5$ЏüÌ!¿ðÅÏ»÷ƒfìj8Ô¤/Q|BÍ@#-ƒàY”Î!Ä䦦l¼9Äîí¯¢úôÚÎnDÔ³DhÄeǸƒÖl+‘ù#;ÛÆo$}þ48²Ç¯?.ÌE ‘—AðuÔˆÍÙ'Íñç»×´Ë"/>ÛÙúã"É3„×nQ7¹ÐÈË ø:êvJDæ ˆ ±,òþ™Ýˆ©?Hž!¤øt@#0ƒàÙ¢ng÷‹Øü‘'F(²^S} ã§—ïHH,?—IÞ¼xIVÍí~8 ýü1:è @#7ƒàìõÕ!>IQùêÙË÷¸Wk½ýúòÙ;; €¯^ëÐϤÏÞ¢M* œAžãÍ!MÄçÂ]¡$Gè«gŸ_3 |}ùò5eYÒ¼2ùƒô%¼7h”Hh$g¼Ó!ÀVñùc×.}»ÁZ‡~þX>ð3è0@#:ƒàÏ!†'‰Ï³gÏ&º¯NK Ê4 òÇÅs$wÐÓ,‰ÐÈÎ xsˆÝ/RòÇìÙƒ QpùƒôtÚ `@ð ‚çÈ^P!%”––’Ñ¡võ1ê’;è×h—?h¤g+øsIù£´t¯ÛæI‡a‘?¼„÷Ú-&€é„@QÊ%%rÄe«ÖáQ~áMZ¦€ñ„@$-ìÝ»×h ÚY¢ª­Ã$p’¼ÇöM“@f9D,Ž´ü1eÊ7.:g.É¥Ã%œ#yíuÚ¦€Í „rHH‰ùcÊ7úf‡êaSÜA¿GãÄ@£„p1?IZþ˜²p¡² Ýò‡¶Cõ°ÉçHî ?¦uÚ Ñ B8‡øš“š?Ò+‹p)XUŸüqätN€@@f"rˆÝ¯¤æýû+kÓ¡qÕÚ:Œê’gÐiŸ?h4ƒ•CäIÎû/^®ìFËå'¢¶ÀÆÕ0ª?Α<ƒN£î( €F3q9D,Žäü]Ti5è+Æ”^=¼òÉ3è4 „€Í ðòol„”“‘?\¾ßTŒ•‡¤EúpËcþ Ñ ‚÷ðïC2ØIFþe7ªV#\ÚLééÃ.œ#ù”jºä€Í Dç;MòòGØhûR+w¨¦§ÇüArý}Ò@fdðœê“™?@Àˆò<" ËÃ0˜ Îü!@£ܰ#Ð!;t©«%Mgήùãã Í4šAHÊ!¾F;ÉÏ ¬ªJNæPÝ‘ž>|óÇ9¶Áš?h4ƒ |çe7íQ”?æ€0“_“ˆŠ¹1íØ±c& ÛúƒÔCâ®Ó/=ÐhÁÈ!· 4³”wQ–?æœ?øðaSUüu —Œ‚ÓÃ=œ#õ÷{tL4šAH26³¨?–Àé6¦n’ 222ÈÇöÈȈIJ2³ÆŽE 0ìóǾÁ›?h4ƒ`É!÷°‹:ùãÀéÓ-Z4 * `.ìÞ½» †}þ u ]ó‡@f2†{íBÌ©“?-Íüsþ Ñ BÎ`–¯æhþ RýqNt0ç€Í ä fÙ‰éæªäÒÖðÒ;ÐhÁîß!T‰æ*äsçsþ Ñ BvWÝNÌe4Pž?pŠâü!@£7xN(¾B ŽæJóÇNÆAœ?h4ƒà7 uDì\Fó¥ùƒÓzç€Í uD€=‘ÑüAaþà$ò¬¸É4šA(›õDFóeùã‘ßàÍ4šA͈lfùªîÍä à´ùC €F3Á‚Í,;åÑüAIþà$<rc ¢ €F3áñ^ÂÍ,;7—ÑüA~þà ´ùC €F3à Áf–]¨Ñhþ ;pòŠÖü!@£„¨Ñ¬«DìúSnÍäåNS!˜?h4ƒ®sÅ“Ëhþ /<°¬ùC €F3±}õÛ„sˆ¯êhþ 'pr>àóáp€Í Ôì«Û…˜ŽæròÇ#“>' Ñ BÕ¾ºXòhþ =à™+àH Ñ BJ%ò˜¨müGó©ùƒ×r`®è$ h4ƒP¿ñ•ôÍ$å ÀÙ y>°1@£„•ˆ¯ähþ -àî„ÜØ Ñ Br%r›˜,ªz~4?pwBnltÐh¡ÍpèêòÑüA|þÀÓ ¹2 ± @£„ póŽqµÈ¢ÑüAdþàŽÚd`{é4šAÈׯY‹Œæ"ó¯É 8ˆ  Ñ B fu¸‘ôÍÄä^v\Axu@# €F3m;ëàAßÑüA8< œS…4šAÈï¬_·#h'æùäåb€Í ”´³›EÄLGóüÁë<(§ h4ƒP6žu›Ø,£Z1š?ðäfæb\A÷x c €F3…àù5b³ˆ¯¤ÅhþÀ?xyqÝpm ã €F3ýº"À––êôÑü=É`ì„Ðh¡BWäñYDTÒb4`Ï—üc' €F3Uº"WíH©Fæ³ü¡ÈèGyþ`fž0;!4šA ‹ˆ*X ŸüqÖÚØyð£<03ó ÂN@fj·IÈ"v<¶î3‡Eþ`ƒô¸)Η.1ÂåX4šA*‹Ø‰Ùùü± ^èsYSœ?.YÂåX4šA0‹pi«îÂùCÑy®œ"¥ùãÒ%\“éw.Jh4ƒ hå‘¡™?Ž)2¢Í[ðQœ?.3¾=!4šA:‹óˆ­ÃËÖX&-øØP”?ð´±îì8€Í ÔO®Ú‘ Äô,†Pþ@êz ?Êòî6ÖÀmL Ñ 2àƒ¾°q-¦Ö¡?¬ñ\Và|‘¢üskàzh4ƒÐ2»Žhl‰éY êü¡ÈæLàvEJòÇeËA7Ð @£„fYäú52òˆ(°G28óG #1w Ê)’Ÿ?ð´±T4ÐhLýuxkËÖaPå"3$‡R?î2¶Ãh4ƒÐ¶3òØŽLÀ£­g5(ò‡+ ™ÒPd_Mnþ¸Œ»5P+zh4ƒ Ζ´O¢À9ùÃÚÏDŽ w3’?.º6@f:´´®ÚQx´%™ Xûió‘ífróÇåË~ƒ¬@£„.ÕÈÃÛvQI[+:å×@?>Êœ 쪓™?Äÿ²6@f:'í(|ÚŒLL4ÌÀî†6—5W YùLW €F3ÝÀ•çw¨’öxd%™˜¨™?€9Ñ¢ZãÚãçÏÑgÕÉËâ샫@£„žà¥M-ä2š/‚Q2ɵ…üüÑÌb|¢ºäñspóçzG„œü¢ƒª@£„Þ¿÷®ÙQððÉ0*0ê2ZÌ€‘X_P©-uç|¥-z‘³$'\vTm,€Í С~AéÐóáÔ·êÎóû(Ãuè•ùçTÈÀ´±h4ƒ Çûõ;C1sܾ‡»,ÇÈ!¢¤æñ¢ƒh_!@f÷o<Z­;×ñ&aä;F^ÒòÇݻ΃h_!@fA0°5T*`ÕA¸¿á¾pÒòÇåâAtv@fA® úɵǘ}r~ÁÈ!\lÌ$ä 0y^À¼‚‹‘„üñqÐtÓh4ƒ ÒöÖ“ëWrxëêÃ5øo`Y‹<ØüÌ!¢ƒe6 €F3È`Î%Àº„îÝ’kW¯ß Bgøæ5,{q‰Î,΃åt€Í ƒ¿ÅuãúÕÛôɟߤZ+ÿÖml•qùãÃoK)é~U@f!n=¹~f®«¯ß¸Iíð,•qùãà N½Oçp Ñ 2ÄòÉÍç×S-£\½úðú“›´ºrÛvõ¿DåŃd¤ €F3ÈÐWnsÊëWɾ}õê½ëÀ|A‡Y·ëXO"&|`1#½4šA†C­Ê-@Ê0XÁcìu 2z÷qo`«ëø&θ«:_¦@£dÐ4óbË!\Œ„óî*„¾ Ñ 2 hÛÄ:N-gI(|`)“…4šAFÁ=¬ÉÜù/üÁ‚« ¡ïd!@fQ@óŽö­óìâøóÇà¨Bh4ƒŒ‚鈀ÛYøòÇà¨Bh4ƒŒ:tDpŒF;ÿÅ—?E@£dÐ<Äqú#žüÁòtT!4šAF]À³ÿrì8óÇ ¨Bh4ƒŒú€û¸Ö%óãÊ,,^…ÐhÜ̲³3)¾‹=°àZÔûœnŽ Ñ 2 ¼™eÇåì5°;µs@fQ0ä*’¯Ñ-‡ÐhCÜzŽ;“Pu´ €F3È(²™äŽLBÍÅï4šAFÁW@Í­{X·®Roå"@fQ0äóÉÍëèUÉ5ªÝŒ@£d žû“ëW‘sÉU*m¡ Ñ 2 †U]r¾ºñ*U†³h4ƒŒ‚aW™Ü|~ýñÕ«W©ÒW Ñ 2 F@£dŒ< €F3È(x@fQ0 ð€Í £`à4šAFÁ(Àh4ƒŒ‚Q€Ðh£ Ñ 2 F@£dŒ< €F3È(x@fQ0 ð€Í £`à4šAFÁ(Àh4ƒŒ‚Q€Ðh£ Ñ 2 F@£dŒ< À)´‹å З*IEND®B`‚gruff-0.3.7/assets/pc306715.jpg0000644000004100000410000023363312055510742015771 0ustar www-datawww-dataÿØÿàJFIFHHÿá ËExifII*  ’²ÊÜä(1 ì2 i‡ ¶ OLYMPUS DIGITAL CAMERA OLYMPUS IMAGING CORP. E-300 ::Version 1.3 2005:12:30 10:29:55š‚š‚¢"ˆ'ˆ 0221ª¾‘’ Ò’Ú’’ ’P ’â|’¦ê†’ 0100  À   £¤¤¤¤ ¤¤¤ ¤ ¤ ˜ # 2005:12:30 10:29:552005:12:30 10:29:55ýÿÿÿ ù©OLYMP,8@HT  Z zŒ@@)*+”,-.À /    Œ´0 ¨@@ 8èP p ddpdD4041OLYMPUS DIGITAL CAMERA ÿÿþ`€ €0100ê ð 0B Hù2È ˆ CÀ  ¦ Æ ô!0100@4 8HPV     hr0100 Œ˜ž¦¬    0110å« $ `1&$Š$ $À   à$%$%Q©•40100 íª§º$     ÿoþ p%„%œ%м% 1  ^1  ’ n1€ÿ0|1 Þ18 2$2 ddR980100  ( ¯HHÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ“Ä"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?óÐîGâÃwŸ…Ë(Â1'½[ƒHœÈ ˜ =ë™Î+vt*%²)ðÝ©é«bçN‰£U•1ÔÔKgkÌ·kùÔ{Xš¬gÐÌò—=(ò÷pªIö­#y£ÛŽdóçQŸÛEµ¶}ñKÚ>ˆÓêi|rHŽßNžO»üjòéb1ºyUzÏmgQ¸Ê¢¬kU嵺¹9žè‘è)~ñùØZ}äjM©é–<&$qéÍgMâ;»‚VÚ-‹ëŠ®4ô‹ž¿Zr/< ST—]I–2KJk”㹺lÏ3öÍM ´1¯ÝçÔÓ²·J{)nÕ¢IlrÊr›¼Ç,•1ša!­Df ðh± “ùkR" zÕ3)'Š’9JŒ±â‹e‚Ô߻ȨÚàÀ¥ÞXfнÇ4§¨áÇ#ÐHà-4†ëŒQ`Èõ¨¤ÀàÑ–üi¥¾?:@AüTH£sNaޤSK*÷  ãmæuÏQE;eµÝNN#P}*3qªL2÷séMXfï ¤6ò‚{ÅO³Šèt<]W¼‡ {™Ö\¹üjC¦ªæ3úš`—9óR4É€Óš®TŒiKv=là^Š*]‘Æ Š;!ÿ=[4¿a@rÎÆ‚y‰þAϘ?:Q$] £ó¨EŒ'$Ô©clzç4ƒ˜“ͶQÌ Ò­Õ·ð‘Lû@ÿ«Í(Š0#+‘³§éo«ZlÐË"çr¸¤mú9]VSŒ3Ph:¥Þ«+Y¡`êAà `Õù5+‹ËÆ–_˜’Y˜“þ{RI—¥Š2h—®AKu“,Wä|óþE:ïÃwznŸ%åô\ Õ‰íVSRf¼)ÎP‚p¼œý:~´ž)ñ5׈.lìv˜Wq=›Ü~TÚ`­ÔæÞp@Ù GæÈOúªÐŠ›ýXI%Œñ.öÚÖ¨ÊæpšQ€!¡¥¸…¥'çš›$Ð+óî}1Ëõ`*N¼w§f .Ù[ʘrdÅ!I­5e¡lûP# =è¸jTh7šCQ˜}æcZa"n£’8¹\ve"3ëE[̽7ì¨;Ó™Ci¢®ù ÚŠWV8ÂÀþ‚3Œb­´‘ìGƒIƒÀ_΀±]b|ô©–&,8«ì¹;søS’éÄ€lã×\vC Ä×Ó³a£O´NЖŒŒ1ZžÒÅëy²à(õZè§·#x(>÷$+XBú“&r­q æÞ á±Ú’?2iD™Éõ·íŸ*ˆ¥.y”“<²Íp!a€‡×ëD¯²*6ê)…nÞHâ; Ç´~βèöËnÜÆÜc>¼T­l4í&t,]Ða›¾{Õ]/SKx!Œ'˜GÈ\ÓJËQ7w¡ÊΛm+u9 ޾†±çCö¶G8î+¼Ömí®¶Í‘r¼à Ü{‘\§ûˆ¾|ðÛxÈÿÎP³.2º *gm€ÏRNr?Ðfͼh„3.8&³mä{‹s$1ÈÂ3†;O÷&ºmÖ™&¼‘8l=©(¶7+º%¼¶Ö¬\r9“Š)YIÚÇo=Gjêõ+ë&ÓI¶¸RØÀ¯Ò¸Ü³!~HB'Ügùæ©‘æ[¸–ò€qU© ¨â‚AÝI…'“ô¬ÅÌ!mÜ0¶8ô¥$ éMóöÍæ¸ÉÍ+óÉÅFn@_»ŠTeähƶâ2£Ͳ’x©$Îx< ‰Ø°ëòÓ ,sÔÑM(sÁ¢€ÔÐÝã={S’DhÔÑ¥mÀ!Ç Ó<Ù (ÇÒî\[…NÙ§£p`ž•šÌÇ9Ü*í„O$êdúžÔXé¾³’7ÏíVµ+I|–Žß!Ïv| “N”YiQõgÛÕº Í“U¶3pìI<(5Ö´FF ðMc»ÍW–RynJþkB„ý­îf\ÿÕ+zžõ{QŽËbÊÛž+?IiD*ŒË BwJ 鞘¤Æ‹Á?bxÏÜã=ëžûdqi°~ÒXôÿ"ºàÓÁ*‚™ ìÚ;×s`ä2Ÿ˜f¦JêÅ'f,÷a&„£yÌÙöÆ3[Ú”Zmþ•%”¶æIŒaü°@Þ uCŽÈ>üô®JåÕ! ¤´ u^üj ué­m vl[ÿ«)ò²ÿºsô£šÛ‚W7< ¼z%Æ¥{q#[G1ŠdÂ畞ÙíUžúŽãøB±O;z€GÐõ¬(fšÖÑw(r£8=sŽçúÕu”­¼…ØóÇZžkèUº^Ÿ<7A°\Œïî|Ô6Ь.W ß6@íÅsÖÎn !'#œã5Øhú{,…xÇûÔÅiaÉÝÜÊ’TÞߺ öæ¡Mäýí õ5btdv]˜ ÷¨•³ŒT¨×G“u0 6àžJRLð8ö¤1¿~¨‰åÇ 4‘™d<*ô¡E&HÚ Y*£¾}ªUt‹ƒ°©ìM&ÊH¥·hûÙÍFé‘Vü¸‰Éš5üiŽÖ±ŒyëϽ4eP˜þh«âÌ}¥M Ì—,%åF=iÛ°ÜEU ¸’÷2çð¥«s¾SøÐ;–Ë m#>Õ§¡Ú«ß¢ÈvŒ‚N{U{=2;¤ $ŒTuýålÚXØÛ£†>Íšq\ÀÝ_Vó&vÍ„Aó5q>"’æ9<`ó[·»W'vöÉôÅgê§í“«(ʨÉ>•»!ÚOˆ/>Ôm.®Çù~oñ®ÇCg´‚Xˤ‘Üó+ûuø‰<×MáíJHQr¶×ɤür,óáȧ$çŸJM[D†íwµˆäŠÔÓaŠ Sp˺FùTÏNM6æà˜`¡{’zš¶…sƒ¸Ðã·S·“Üš¦šk+ï|mÕ×NŠëæ/ñ~•…~Ò؃Œõ¬$\L†¶RŸ(AWm*9†ØÛiî=jÚ,¨ONjí´lò«lÀã5 å±4­bÚóëŠì,aŒ‘n¼drýeÚ¨ó6ž¾µ«`ß¼(ß+l{ÖÑ3g)â +ˆ5@¹DRzœŠÇ’œzHöZê5ãæêKóã¹ëT D©Ÿ(G5œ·z)jXíûLÇéQ˧7–VïUö•#\!½j¾ùd|åˆúTê •ãÒíå!Y¤Ïs»¥Jt½>`¡¥lõ,N*Â*îb÷J™bEÁà@*]ûJËcÙÇåòÔšV[d@ JÍô­'•>Ã5L´27^OµvRhâ'+#ýÚ+A¾Î‡i9ú *µémcMÏò±ì$3" €ëP† €?2qJÑô''Ü Ð#bÚk<ÊžnôÔ9B»»’ a‰ÏLt¤1¦Ü’r{ jV™¹u¨[˜Ô«d€GsTò˜¤@]‡“Üš¨cV\ªr*”°´ŒcíWÎ;3ágd‘ˆàž*ÿ†®âÓäu¸pºÝÔÓå·eàœ{i¶Ðæñ2 Œô)ê É _%ݾÇ# £¯J«©»HA!Æp3ÅsºMÓ[]»—Ú m*z{VÃ\G7 Ù$ƒþ³d"r#fY2®TzQ< È€IííP]@æ_5¹ÞAÀô«†êá8^>•›Ô´f˜nT×µ_‚ж(ù×ùUÂ`åŽF1Z+;Û¯˜F;‘ޱB‘ùr€[9WÿŽkÓg3³ü»zgš[«ø£ ’W*~¿ýzæu=JI#ó“éÞªöD“ÝjM4ÒJ©ÉéÆECöÂɖ㎕Ÿí åÈ”ås#ãpAîF+FLJ;9êR9*ªGãHHò«×8ÊÓYNóž”j%]‰Á%Ž9!qŠæxþál穤3Hp¬p¿Ni‹‚ÝÈíšC¸pÀò*5hÞCÁQßš²`CÐç=Ȧ,;2¢=ÔÈ÷¤(É÷Åj8f(1ÒŠ5 ‘lá@Àï@f n`?­WK—Îácr}Êb¥k™Üemg . Šv&Ì•åR>^=ª ‰9Æ;9å’Q -ã,ü*0—/ón¶EÏ÷˜ŸåJÃHO-£“·ãò¦1rÄŒ®; ‘Öå‰o>2ˆOó¨ÖÚf$5ûgý˜‚çõ¦‡aë H ¹äõÏZ“M³CrîT½95ÀIÜÜdv Šu»Kc&ô–b[¨vÎhŽŽå6š±¢’‘tñ9Ààž:t«ÖsnU‘ÏvÈÏzÀkØîo“q± ]¾i-ã HÐä辆FÌš›!@Üã}(ƒQJ Iœ?¨®*ç_h®*ž2k>obå] ÛÎáQ©G§ÝIÏ~\nü*¦¥­DPDŒ3ÁÈúW '‹™­ò@\z StÃ& ùy~LdœÐG6¢³¸›Œv¬ùïÖYBù°^X(ó3,Ÿ½B9>ƒý»Öl1ªLÊ$ðÃ4ÒÜÑK†òþ[I õ8«­¨¿öjÛG¦Ä²nÜggù±éTP.'ŸJ˜´ ã°5 ˆ–âüâóÕ8ûRðÆ,þ4äbßtmã©¡@Ë÷½J–Æ€¤ÄdÌžÿ%"[Ï $Ý*‘ÐmÔ¾[Á¶ôéšw”eN}isÊÊþS‘†¹“ßh™öPdR'œÓæ«jAB6œý(V`TçÝhæb°ÆkŒóu9ãÖŠ–ùäh£˜|…0\ƒ…Ü1Øt¤V-€X ~9¦U`ø ©>XùÉàúg5fv‘HÝŸaJT"¨ÈÚ8äóIçBW£.»‘ƒô¦¾å—©ÎÑŸëHVuC€¤ätÔVËôÉÆ)¨È9þ÷Zqb[å1äñҘŞ7L®;Ò3'—÷F?çOf}Ÿ8v~Ò ®íÊ c b‘I#>hD‡,¸FÕ®ïO“Oû4‘ áòmÒ5r[+Ó±úæ¹ÕÈ# 5XÙ¬ÕDŸ63ópqëëUX–»‹ä³šèÛZÀ¥Lj󣏨 si¥1`Etib,pÙê[‚Š*^ä n6 ž¹ª›˜·'ø±úQERØh±‚9‰¥tVÜHÉÖŠ)¢‘ZHc, QÒŠ( gÿÙÿÛC  !"$"$ÿÛCÿÀX "ÿÄÿÄ@!1A"Qaq2‘¡#B±ÁRÑ$3báðñCr‚4’%SÿÄÿÄ%!1AQ"aq#ÿÚ ?øžŒP o‘EõôöªIüµÈÓÿÁEŠ-g'`j y³¶i´(;c4Ë0¸qCeÒ}GÅ: ÎGëJÊF²3Ç4 2*àg“íT¸àqV¹Û¨ÁBdgsU*'µx±†‘’Ye;±;Öÿâ_ÛÏüåùçé¿{×]ŽÏŸ½dÜuY\cS~´Ÿƒ!wõ«¥¡b{çŠëãñùçþW¾¾ƒ{‰îsíS21ß#zv+1‘ÛÚŸ·´ŠÚs#Ìïò;îû¬ë{"Oô6#Óö­HmÀ¦hÞk:AmÇaïDXT|SGÐïëÚ‡·Í êGp7ÆÕà3±8`»àŠ wûÕ8Æß4e\ µN=è2¥súTœúS ¿¯Åx®Ã4ÊÂÅ0rÍx#vjgA'5ío.ôj =OÅ[OÎ1Fð¹#÷ýÅp¶žEÆ6ïÅFÜw©ÓžÃÒˆzª ²hÊžnO5ä8QWq·ï@Š—š˜;g#¾jûw¯mCEvǪˤvÞ«‘óµTúöö4°âÒ±Æx ç9Î8¹ÿz¦žãj° €6¢”NûüÕõdgoSKœäs“^Ôs¾Â§¦uùpj†4"@^O­Ap3¾qOÅ^KɳϥW>ÇŠ I—ãµBɾ=hÁäc÷¯2œžõT|‡Þ‰œžNý©}'Ta„"«Ûa°ÛˆÁHäâ (ÆÔËBbFqšŒw·µ0ÀzöÚ„èOsÅ2´¶³ŸNsWVÉÏéµKGƒ°©HÆx'íOBÊÙìkÌÇ‚3^ÓÿlÕÜ Z47'|1¡8$wn9P‰ÈÎ1÷§ Ùßô¨9¬ÿ›}ûU99Žôi®`oö©S‘‚h@œƒûU×nãõ¦›VÛOÏ¥ —|Œ{QÂj꬘ôý9¤‹ÑgMÿ­ ®àšañØñB,÷îiÓP8«²úþµ*ûç#8ª—ã8öô¤£ƒ ð~*b6©ek‰_8c½tqøßë‡çþWŽ~-ï_'8oÞ±o:ÄŽvoÞ²Ù%s’¬-]ØWW?1ã|ßÊõ×ÒÍw$­¤“ƒÍJ+9ܨöö\yMhCiñûV¾<Ï“òþNÿd"·Ï ãµ7ž$}ëE-Õ@ U‚*öÛÒœ¬oVý•KPµa}=¨Ãn1ƒÚ®ƒ pH¦Z†z,x óWÀôÍF=‰÷¤^B¡ÀÆA@þ_By4Æ$jű¾ÜñF+Vn¿¥Pÿ§$ãj¨?µ_Ÿ÷¦ åÛŸJ œTF{úÿæ( ¨ÿjXz£/”mU#õ=ñEfùª’1ÎÔ'ª/nõà˜œûUËm¹¨-šH½¼m·í^ÓÎõ²6ô¨-ì*}£RFÛò*F1ïU,;œzàÔƒTz&6¾w¯iûõEpx`Àò8z°Qù¹Ç@6Øò(jF1“DZlcÔ 6c¹jiŽäþ½¨Lš˜í°¦sÑgßCúÕ @ÆyÁûÐÝpµ%fήÿz*9jBÝr?®ôôKåíµh«SUs‚Fj3€$zð TïÈäÑ)bÁ†{‘V/…ç¾Æ¨@äÔÛ‘A$ÉŸSš4ÍÆ}v8£,ào[=6©½aÎt;n#t6 ;I“’+nƤmûS7(D|Êü˜Ö|nBîÈGÁɤ´¶s[ÝF69*k h¥2͹Q×Ç×ê ®01жr?Ú©¬Ìq§úS1tùÏ9§çÌ_òuú öã½InNiè:[àdv>“°È57ææ:xü–þ˜àäw?j“‘€§8Ítt¡Á_¶)¸zhÈÊãíYßÉå×Çñ%žÜÔVr1 jf.—#«šê"°P6™[eŸ¥e×åŽÏ‹øõÌCÒ éø§!é4Öðv!ã|V~GUè|ÅñË2.–ƒ]©˜ìQOåýhÏw  ´ÝN˜V7åê»8ü?“QÀƒhºQGozÀ¸ë±!Ù«6ãê!ƒ‡Tç}5ŸÕñ2ă‘KÏÔb–®çê&9ÃÖ]Ç\g'jùø:¨ïó~.õÇZIÃ~õ“yõ’püzW7T‘ÆÄúoIÍs,‹üÜúVüþ'úó¾oæxçéÔ^ýBÇùÍb^u™¤Ìsìk-–g8 ·4H¬äleO9õ®¾?G‘óÿ/×JMw4æf?z%fïŠÓŠÅˆÉ^(éiŽEo8‘æ|Ÿ•òwûeÇnųƒïMÁg°çŠ~8tìGè(Ê4ã£×»~ÉGfÞŒ P9ý©£€;½P•ϵJ¬@QÔœT aŸ‘Û€ó7íßކǸ Q˜yIõ¡0Ç}¾)ÁQÎ¥0ªIÛ#jY[\ÑUñÇjxFU äWж{óUI6ÛŠ¶³ýê)(ËŒî½ ²Gýè¥ø9 ýÏ®)òz©'ÊíµHcêä$jG5xÉØ–Í\>$žj£¿¥T°¿¥Q ™äÕKí¾~ô=~ª®O8¥bhŹ$¹¯kÀÈ>»ÒÌûj ’qš^$iX8©fÛ²¹;ö«‡Çj^#f7sP68£ ŒÇ,Oô¨Ü.uP8Í[Q ö¢š±É;ïñTÕ±ßj©ãlT'Ú–å‹f ‘¶H÷ªjç5‘Å3Õ²Î~*¥…xq’^ÕW Ü“ñJ´ˆÆ¢œúâ¡×ù@¯äþõæiìiL01éÎÕPåHÆù¢3gb9ª fšjÊXîµlŸJ>ŸÞ¬Ò‰µïþÃ>•v9¯1îõâ{ ¢P®ä~ÕIŸ$úûÐݳŽÔÎ ° Ïj9UÏ­oÒÎ?-9JgH?jÎüÜÇ¥?å¿§6èIÙNjc·“…9îkª¤€s¦š‹¦¦?(ÇÅg'˜èãø®úûrqÙHÄ ?µz\¬x;×`–(£òŠ(µEV=~^:øþ~ܽ§I`FEmØôð˜ÏëZ)Ï}*ææ±ëò­tqü?0H"*óxx AòœÔLd°Þ²¿=®®?‹æ¹·Iríšt´Îë½hâ_æSUkØT7ÍOöôߟÀøù;òÑá´Pxêp/óòh2u¨pA#Þ.ëIð|\µVÙFà D¹Ù~ ŒgK N¨ÆŸõ§áÝW—ÃË®ÌCsUk¨Sù”Wqõ)ÆÏYó}Díœ?>õSáê²ëòþ._H“©ÂŸÌ?ZRã®D¼šù¬ÝzB14œýZV8/ŒúÒ~-s÷ü§ÇÏÓè·?P¨ÏŸ›?Ô$ŸÏû××Ò±>bG¥BI,±?5¬ülq|ŸÌÏÓ®Ÿ®±þsI\uYd1ûÇŠ';o½2–ÇN1ÛšÓŸÇŽ/“ùnïÓÓ_HÀMŸšU¤•Û#ïŠy,ó¾?QGKLÅkÏÅÌqwù¿'_¶jA#œäŸZj$µiÃn£ÛäH f´ñ‘Í×Ë×_u™MÎ\éM'K\î1ZQiÓµ# qš_Lï¶jôȱœbŠ–Q®Ø§Á\`çÞªåq€w£K þ~^EA·Oéö¦\‚w=ªùx朢Bíöjˆ#gOÆ:@Áþô —ÕR eíÁàPÛœïÍ § ä “àãš©>¶ À«@7ÆsSýBƒ>p>õŸ?Ôc>ãúWãÝ} õðòíL°©9aµQï MË©¯ŸÍõ/8m±Îi¨¤99ðuQ3âáô™:¤*2>Ô¬jüß½|Ê^½3Œ‡8³uY˜ÿÌÔjçâÚçïùOŽ}>—/_³JMõ 篜µüÇ}G𡏑‰óV“ñÝ1Ì}O¨À?ŸjZ_©?ë®#ÄœdÔâRx;*çâOÛ¿™ÿTßP“‘ª•“¯>J†Ú°–ÞS¹ÞŠ–mß;w­'ãó½ÿ-Ýú?'X•Î5íóAn§+9$Ÿj¤V-Áèéb} #µ_ôóÝÿ#òRÍw+dê9ô¡<ÓŸ]«Ql»cíEŽÁr QúSœHçëó>N¿l&Y™½+ Ûä×D,Tr7©ˆ1ÿ™«’2ëäîþØKf瑚2رÀ­ÈàPAÀØö«‡8ïTÎÞ¯íŽêpqMÃhº‡—ö­ÿj¸Œ¶}¨¢sKˆ”n(ª¨Ûz±R1Š$çÓ5'â‘§ã>õ9QÆÞµHëRÈH%<@}† ]&989?¹';zSNãœÑÃcœŸŽ(ÁÈ«ªÛ‘IX)¸8å‰ïU3¾µ{Ãß88ô¯ý© A™»ÿê¤LHß8õ¯òÜvæ¯àáNŠ4x¨fvã½x dïÅ"Ø8¢GÛ–«Ä¶†svø©XFwÓ«ù8q^ÐvÈø§¨¼•H6Ø|íDX¶ÆüÓwÀ8Øà`Q¨°/}Æ;ð‡|sF$êôô«¢†Í=2†!ߌöª2î2k\ôéÿ.ÌlbΜã½(ðdg'zRÕa5\ìsí^õ¦Œ@sÇ}jVeÏ4Æ=àäöd¶ <§bkÞ2òFjVq·£KÆ -SÛžMX[ P—‡8Ú¼nW<ûRÕxE¿ €êÛj¿…Û4Ä dWšåñM6C! gŠ“¤ƒ¶O¥"n”PÝ®ÛüoFhQ“í^';{VY»óc=ûW¿“‚ZV*5Ä‹ìàö¬s}ƒëûT›ÓÆ lïK)Ülk]\ŒT4€6äVGãy†ÞüÔÝÎã¿¥<-7˜dn(MqŒäŽk*Kß.Çz]®‰]´°¼“-Ég4#xàçÒ¤Û± TÛØµ9’{rkÆä±Øš§á÷Û?­YmûqF•CÌÄlNG¥ db6cše Ïcžõqm“¾i"ÎÛœÕXç;Óæ× ¸Ú [ ã{ÓL§¼”‚#läÐ ’³wZKÓöÉÑ"°]Ž*<9ŽÎ¿/äëöÈU•˜î~Õe·|wÉäVäv Ôe´QƒŠ22¿/wöÂŽÑØàóß4Ìvò9õ­”·\‘Še!Qƒ¿jT¥µŠ;lã4Uéãöæ¶‚1ŒÔÞ–ª²â°ÜQ–É2?Ú´ ñÆ*ÊýèÚRBÑY¯úwô¢‹eǵ?µPÀj4z*¶ãm†sö¢xôaÄ•cô¡þôOq¸ª—_Qö¦¥4ãŠ8Ú¬dŒ÷Æx¯ ç;zЗ€\ñW# I8¨ñP|WŒëŒzT©SŒ‘ûïUØž*¦UÜgnã֫㮬æ™Z:pvÞˆ±“æïK-Êä`ûEj3æÚ•Tö*ÃAýª<oö µÚŽ©øµÈ‰Ú—±èËE“í^ içŽ (o9ϾÕOÆ)nx£ØØÒ?Õ½5B6Åd~4»cz·ãÔd?­;ÆÈŽ>戬_óΣ^=Ep|üÔÙNukáŽõRñƒ¹Ía?QÁo¸ï@~¤Fú²OjS•^ã£ñ£õã:Î>+—=@ŒÇô©üy÷5¬å]ÇN×çs“Å@NàŒW4/˜°$fŒ·LAÜÓ¼³½7ùmY¨µœIuZ·bø¬y)8Éûw«t‹·V6ÎqÏÅMäN½¾ÃÓœOlöŽŠ!a .7ÈÍsG¥MhÌ$'@® ?Jé[ßäÖÀä¨<‚kê–?OZýAÓÕ‚†GC±ìà WÁÕþΣÒù¹ž¾ <\fŒíǸ=è]JÞKQCÄÃQšû7\úšû$ÄàN‚ÇØÖgÕÿJ*-ÄATPÀn0N?­vYã6¸åò¹n_,W GÚ˜{KµT”#è'ÎHüµôoòëBŒñ*°Ù™NçúQ¢6¢ ‘[£øsemƒ ýÿÚ§È_Jëâê>c2ܤq»ÄËâ~\Ž}ÅY,º‚O¸‰âœ.Wóm_OŠÛ¦Oi3Ì#üD(JÆT€c—Ô×ÐÎmJa%È”qŒíñé[FwÉó—±½ÌK¥”¸!rø¤¤[„…¤eu 2Ir}¢ÚÎÞKˆí¢Òú¢^ëæÞ±¾®èÖÏi )ä QùuŸÐÿJ‹ós.øú¾ß-…¤fJœ±àS~ ’BR5bä 9ß|~µõk£¬Zö'Ž4JsÿVû溥å·küUÛƒéD³»èYyû|6~Ÿ43ø! Ž6};é8ï]ÏKúmm>™†öt*ò+8Èßæ¾Ð¾€Yç{™`UV™Ÿs¿zøˆöлÛF¡-¡M|׿ÛÏ?‰<»öø?ÖZ/ánÂÀzûV@½,?7nÕo©'kî¯tÈ¡cIq?ÓÞ³VÚºþ)ÿ\ß?÷pù» 6ÿ4œ×.{½x@ùÉ'Ò§ðäúâµ±Œêƒã¿Û±Í Îú}2-7's¶jØâ‘ÛH4Òz“š¸•±¶w¦¿ ‘ÅH¶ÈãàSÄé´Œ“Sâ)¥µÓÂÕ…¡çÓ/"†Wã&«ã¹Î ïN›SŽ {ð éaùRbWÆ7«‡mÎ1M‹@8Èø¢ |`ze¤²7þ´7VäZÂÜ`ŒÔ5¸ßý¨&A œ÷ÅP«ìryý+XÛ¯ ªø XÒ£YEÔýªâ7a“Î+HÀ8sãfÉÐùßWÚ½­3ÍeøíƒŽõäšRqŽÔìk±°®  ëÅǨõ¬íRrNÞªÒÈH\þ•8<¡×œjb*Rï 7¬¹‹ƒÎô‘ò;š~%ç¿ÅÉ 6¨k‘¾ø¬a#lß5ç‘¥Š½µÿ¸óq^7aO8ïµb1|í‘·câžæŸŠ<ÛIz3¹;Ó0Þ ìØù®pêÛ4XÞE’êNm ³:ÀNÜ×ÜÿÁn·–“ÈN¬jü×Òî/*±ÈB†#ëéáÿ_ü4ñÊî¨*D5 ½¿lŒ×çï'§:óã¦zôÖÖ“‰IQâÇîÃq÷Ækƒÿïmÿ*‰ ð%,c;ÿç½)õgÔ‘uŠ 2qi‰°O:H$~õó¯ª>§/Öº…¤ùµ¡e$lÙ`Oϵtü½yÌŽŸ µY:©¸ê¯¢7g·vc¯ÊtǾphÔ$š ?cs€Šù]ɯïKÁ3Ï µŠH¢’-Ne\ãu>Ü|Ž•|Ý/¨(¹GüKÑ`¤`À5<|3˜}ü—ªÖès­ÅØ’æKi‡Ræj:pÆõI ²h® tÖBFñ‘üêIÕ·b0~õî•ãÇÖ4ÞZÇ$ïõ‰·ØöÁ \õ{N£×#¶0´ØbF5y†ã·'ôªç›Ql=iÕìm%·’]HÁ‹ÁÊùϨÀ¡ÏÔZêî x™NäJÃuÀq¿Î `]MJâÆiV|*äŒäŒû­^ŒÝ:ÚOÀÜ\-ÒM#.ô#ÔuðïÚøù1Û}-·¬]” ‹DX½ìkíN§¶ŽQ§xÛÞ¿(Ûu kwkâ­¬“"éAô'Ö¾ßþ}T¯co˜E™%ð0veR¤SWðOëõKåÿ¿qô>³4==ä ÒIÆÕù{üAë2\Í2´º\ñù¾Ù¯¯ˆ_SĽ-¡Î\œ‘¾õù£ëž _Å“QY|€äüÚ¹¿'ÿÓ¹#£ñçõñmcY(’IÝc+ŠB’rHÀ¦ü‡Þ²~–fh¥wÖrÀµnãnzêçÔp|·z ÁLqš°‰p=*ØóšX§¬·XÔ söæ¼Ñ§?½N¬wýjŽsè~(Õo¥J&6;üTª¦sÍ Îüíó^?ž£E ƒœ «Ç5B~j¬GnÜ ¥«•±¸Çj $÷¯ z4@uãïPsŽkÛÈÚ¡ÆçlÓЩvqP_#&¡€Îv;PØGíF…‰9ç]^ä×¶'К¿ëF’ÊO­{p»×´ÿzñýé À5åcÁÚ¼ãj¸ÁÛâ˜9ýê·>õLä÷ö¯c|½#ÇÛm«ÚÎkÌ£àcÖ£OÁþô yŸßµWYßo½Nª6xõ¢ y›~ø"†Ú»UÀÏmªÚr»Q ù¢ õÎjÂ0lÑb#j4`xÎÙ©ÐNyÍG¤dVAŒhÓ¿„MQ¢8Îõ ª¤nÀ¯Æ8ß½-Tá”c#Þ½áœ`ŠÓdŸ)ù¯x*7";Ë8GïU(rW?µhøJ1ȪNr¼{Š4^Yíâ„ÈGc½i¼$œjÂ2H4j|H¢jÁÏÍçµ4°J± M9NrË}€«¥¡òŸÖµÿ…“žj3'9ÏÅi¤Ì[WÈç“Rm7Ù~kH¼g|v«‡MÉö }³ ™Çñ½Ù ~Q[:ÓË·­ ÙOlŠZU—ø-¿/Þ¼,Ààb´Ù“ý<Š©uqÛ g 0ã;Õ…‘'Š{ÄqŒñSâ¯z4RƒóW[,dcšm#þÕ}`ƒ¶ô­"?‚†*ÉfH9§ÁñUÔõþ´µE?nõad É\`Q¼NIž7¢Òy4ihBÑGlóD[Dö«Êž*¢VÕ€~hÓm“¶>Õà `ŒúÕc~üF O|ç¾jo@j‡°?áh˜àQd’NH\zzQät3n€ð*Ê©ØPIíƒCr1NRÓ!£'ô49a½³¶¹³ZK)%Ÿ8VË+lpwm¦+FÆåº,i* ¾ŽKs"´gHb@ÓêºO·ëSz´IþéènmcžD•o-'k[ˆ‹Ÿâ0äcÝ?jÂê‘ËXAUÑ¿ß&·nBõI¦0ÉÐΫàÖGéûÖoÕBø«Ø5-‚ÄžXÿ>‚¾LvßK{æ²îúÝO†5é›ÄË.4 *A¶HÜZÒt‹Ìnôk# ¥¤ÖÁÅ»j¸ dÈH÷ w£õ£gmÓÝn‰o ¬A€`äÿ瓳šÓÄ·‚êá]À–N’ŒÄ9ÇÈ8¢õx§°Ž? HÚM{0ER]I>º‡ëK«±\ÿÍ/õOÖ t¬…Ë™&)¤6üÿÚ¾sõ Çâ†#!u1Cä¶üš×}2~•Õ…#´rOuÕÿz[¥¤š£–Bu§­c8Ïu¿_/”Ç[eÓÂÒÙ%2@ì}(Œ@=±[7Vÿ¢ŽñXËœçŠçüA#|íZÞ\=}‰’ÇÊ2jÞ¤Œ!4Å¢pNÕ­l€ÔmKcA18 ûÔ‹[ŽH#Úº¤;Šf+höòŠx2¸ág;i5-k0Èù®ÔÁÒ´äQŽÚŒ,rm£;Ö‚cÁà |ÖÍâ Ú³¦eÜ5Sè*væ`Ï¥F®ýªD‹ßœb½#œm¶õ\;®8þô6 X#íLêņOpyÅW9Û†sÇz•9;úPImÏUAÈã$Ôó·£KŸ0Pm¾õìñÅ‚01¹¯ ExûPr/³çØ×ŠÁ9¨Æßj"ŒP¬ 1Ï­HÎ*áwõ¢Ê탚Zr¤Žõ!p{QÖ2Gù«xdœFžhŽ=sÚ‚ÈqZ0ÙõªI'u4y$Œ¨Bä'…Ûù¯2‘ŠZ^²dý¸¢ ÓÀüÕAÀÛöïVG%wû{QiÎ^Ç횢•W;óR~(aI$½a¸ÊLãÖŠŒ˜ßÖ‘Œ óžÕåsŽÅ5JÑ]-¶Y×¶6õ¤à 1íFñRø\ŸZlê’¿pNÿ½Ä$î)`0Ì6ßæ„pNG>‚†Òd{Ž(O!æž$psØ ·«9SÁÁïIëÁÎæ¤I³Ać-‘Éô¯e·#qŠ©ÒœU—8ÆsóWj1½FÕ*ù$íPTl;ÕBîOjh¾†Î;ï^bFEyFÛT¾0íR/¾üPÜœí¾ùçš#œâ£I,3ëL‚9=¶5 G|w«•Áö¯cÓ‘H%N3ÍYàúÐÆÄñV*@ÆGÅà™Î7Þ¬Äv¥#“µ2N3ý©aêàn{ÕÔáG÷©ÛýêxÁæŒ'›V1“óR‹©‰ÜT>(€npx Jº¨b™À8¥U´‘œ|ÕÖ\m¾j,­%0Ïžj…Ž ô0ã<Ÿ\zWƒ‚Ü 58»`‡ŒžØ¡º‚rß:À<ç5Bç>´â,ŠI‘늪1ÕòjÒwõªcÜÜÕÄ ¬y;Š,M¹}Í[š* ·Å*Z)VÎhrë¿¥\±ÕÉÞˆOFÄùIûÓI±$©lÙíW<ýè².[ +ÕâùoOzqŒ‚Ø^*lW™û`ìE]lç&6¼vQ)ª/5|üƒLFøÎ)nsëV.X{Ô ^wûUɉêëÂ<Žÿz>›Õ÷Ï;€wÚ„âŒ4÷ÅÇ–ò—pÌTì8Íiý/ÓZò÷Ç\·!›о>Ï ÿ‰V Òå…¬Ù„2®U[±îµjôÁ·@ÓÈ!y Ð]—x‹ à÷Á÷ö¥Ä˜¯º­·MXË€uœÆú@h]jäAm%ºÊ€:éÂDªà®ÿý*¶6ñ9q=ô°_Ã8O2¤°L®9\öõ$c?j›É?^„ºC=ÄöîÌ@ §O =#í@”^ßÍJ±¬)Èò$žaãQ-ê3Sct—qÞ”Ë-¼I ^K‚IÓëùF>EOØúht˜oîæº½…ß ²!8ʸ“ßuÎ9ÏÍ_­ËV‹%ŒMlåЭ©L·ˆÁ€ÒÇ•2Ä~›¿=.Õ¤¿IL‘pBÇ|@ñŒQõ—ÖÖ}?«,j̰¤†ÿ™‡fbGsºÏ8ªæ©µªÂÐôŶ¶GKÈã…üH×ù% LiÁ¬~²‚ÎÉ-ì#YEͪB €iFl±É÷+ëéëF¹ºê;4m7„‚]²dÄú‰†?&ÄwüƬo!‡§Ý݉í²2ÖúâÂêf@<8ôûS·Ùþ—úÌ2ÝÙZ SâG)‚åAÿ˜¨€©Ò6ÀÔßÞ…*ëiì­d¥ÄBGòJ/¯!Z¬—²ÞÏwÔZRZiÛødi :Ü{ ß”¿Už;hÞæÍåY,ÂøEɵ Ÿ$ý©Y3&—êIsÈénB²/€ß}Cô¤Zç\ Þ!±•78CåßÜ(—Òn/l`šâàÎg·€£1:‹O¶|Ù iŽ)®UüS Js‚3±8ÿõÍOÑý´úì°õË gD×7ƒ¤?™G#ìI®2ב?¹`rÍÞº8dÊžþXôÜlNûõ½c_ͽfi#Eðä9l§­?¿£“Uú5ïéi,£tFeüιfõÀ®+ªÄ-z“Ä › °O½}#é¡coР6ÐÆ×EêrMpVÅq_œOY~;ÓÕårè6r¯®+ZÞá `Û&¬g#ÜSÑÛí’XžÛÖw¬›[iy›4t¾Eî1X~ŸýÔ0 `7ïS>X×[ߎýc4Õânuֱݟq«çz «óUÎõqa‹›€äù¶¥vçÞˆd½XÆ ÎOö¢ÔÈSÃ9ÎüQCc4PƒsWc×íYÚ¾a C’5nÔãs튫x¥ªÈÏhŽq‚*¨¹ÎniÖAéµQWÇÅT©¼džæ®Ñ€1Á¢ª•líÀ«1R7#šzXQâÊñƒÚ†©Œ)©ÆœóU_QJÑ"‚=¸¨ÆüQI8ÇB{“ÛŠ=Ÿ¥ãUÈþôÔh ]éD;ÿÚŽŽO}©YWΪ°Q°Ür*¦]¶ß5F”‘ÏjŸgpEaŠóé'|Òâ` Üf¡¦ôæž'`î£O¡JF“‘¿S0mµUƒ¿½~QVewªÈ@>ÕVß“ƒÛzäî Tˆ½¬8Ǩš†ô¦¢­Ïu•IßÍþôñS¨´¯ßÔzÐL˜ßqV•Á]¹ ±9È4ÊõYH8þÔE˜ æ“'Wµî§" ,?!D‡nûï^fÕÅ ç­œçjpµƒ°? àíPHÆ{ûF 49ǵ`óAÛäÔ¡ÇÇj F#>µF;ãÒªdäj©BÕB\qÚ¼uqªBŸNjÚx$çjlÕlÏ5uŒ`w©8#š(àMè-ßŒÍØÐ˜îéI8òŠ!Î ûæ¡0Ûæ¥ˆÇ¶s¹ª0÷'‘WA–'=êTÏëV­á¾Õs¸ô4=Á;Õ”’7õ&¹Îví^ÎìœóóRTƒœoAHžÛT0Áõ«àvøª·˜‘µ Ä&þæ­‚6ÓÇÞ¢0sÍ&Tc|ÔŒ¶û“ÍHcþjZ6çä ´hßïóF i9ª²oš:F<>=ÍF1¸ûúÓ¼–#Ñ‘‘“QáãqŸ^*@ì Á8¦[_úý$‡©³ElNn0’ƒºv¬õ˜91ß1”1ÌŒ£sÿV;{|×Ð>®°Ø<­˜ÔçPßõógfŒ›o Éš€rxÿAúåùlòÈìøçüík<ÑMÕmKź+x…‚áˆc¸9÷5£Ñ`Š[™,¯‰Žâ"±¡•yRNÞ¹%¾@È¥ºá:¯L…Mn¡¯—!N¥ 9> ®  žõ¡×'ÿ ÑÊÑ™/†…t61¶àêg'|w«çŸZË«ì­Ñ‚æáàž]0ÀÆ]*I–>}u;Õ¤šÉŒ–—d] ÃÇ:€’ÆU^$bvNwõj7Ón[îcX5ÏçŒÃ"‚B±ß’}©+kY\~2yD¯–ic+§Ã‘ @HÁ÷Úô Û]_Ê]¯¤1½ì-©ò%AÆàŒýÅ4½ôˆ éSe‹Ý±(çPo#añåÏÛÖ±n§¹®NDÖ®ðJYJ®S,O“aØGoQLÚýA}r?$4ñÌ^9¤o*" ?©©~ý+ôÕ°·—¦C5íô±ÈÖ“°1²í;d =pÃN=Ï­W©Í,Ý"¿1Í åÌqj>S¨®HÇ$£nÅfõ»Ô/åžÇj±C#D©ºTHrFÙŸ|šÓ°éïÁ&ÙRtiÁ*QÁmLG>\úoO @Ì—WOf¥9Oâ ‡sÄÓÎùÒ£¿4«¦;[¶@²¡!|télfÒ-ãˆF¢I< ã•òÑåäbp˜u€ÜöÅcu©mÒõ »’1ðÛbHgíQÚøƒœ\\ ‰ÈXѸ<6ûþô·Yéäuw-…x#OlûU`·ºŠØÌÑi‰˜gò®?®1[Ý7¾]ê×"â8Ð(ózJÏ‹4îztŸEµ¸qÉ‚¸BàÖ§×½õ(ÍçOF3éÃo½hßOÛ[»Ç©BÉÔ¤Œó[Ó7áÔÊPÈ1ǹ®îy×Uñ¥­¤09óŒbž„áwl“Úõ_M–˨‘‹E&Y]¿›~Õ”’ÉŒï\ÿ'Ïžñ¤Î1ƒ¨2xÛ4ìÃlT¨ç9‡‚¯Ê‡ g?¥ ˆ8;Š»®~~(-NÜV¼Æw­8 ŽjºÁ‚Ä–8;{U†1ÏÕa,XçÞ¬¬ÙãJ¯¾vÎõ8÷°jê3¸4@›Š¢œ¿=ªä2}ib´9¨,@q°ÏÍ^B}hœƒÈª‘6‰EU†øÿz¢¶Ä“UÕæ$Q…«`qŒUX€£­Uˆ'‘šŽr)áZ°`O©íU,3^:qóTÎ;ííF \¾Øäv©ñwÛ?Ö‡«;äj²‚s÷Í?JÚ»1ÁõïQ«9Ç|TœlÕy–B¶¼Þ¨w'EÉÀÁ¢ ®ûŸÒ–%BNH׈8ÁÈÅ[9ïPu ò>ôÆ£ùG­AÇaRüóÅA=òq@A‘ŽÕP»ñ‘E;ŒT¨ÉçzkÎß­UÔƒ‘ŒQÈØsTlf” sڨˀ>¾Ôr=V ÷öæ¨Â çŸzö‘ÆÕlcm€íŠö|~”TÓÿNqëR?M¸«œ=*Ï®þÔœ;T8oóEÒp ÜÔî)бS§Ö­§>ÙíW n*03ÇÞUÐ21÷¢F1¿¨ô¨Áß¼çæÀ`6â«­A÷ ´˜=±U×ý!¦TÅC~Ô4| Ž \’Gõ¥n’žMypyÎÕvPFý«Ê8ïñDº\.S; ¦bMXÏÚ¡Øû{Ñíh3z÷®ÜU3œñVS¿4ËR¸ÎHÈ¢ mŽ}*ªF2(ˆ¹÷4 Lcr¢ß8>ôHâ¨ÊŠ;~´— 2g?¡Å ¡,ÜmÚžðÀgz³FzöJ8#'Š7‡…ìNh˜ ÕcÒ,*ÊsŸOJ \ðM4SOJ“Hùhš60Û•|Œã<ÕgM¶ÏÚƒ¨çz¨V˜^¼y_ÇÎ×#õ [%ÌO0D¸ÆvcÈûÖOUúNÒZÖ …r‡»er?pGÞ±ÿÆ?©GAújÚsþeÔ€‰;°ý@5³ôÔ ×þœ°»2‰.!Qíþ¢¹_Üó¾Y׌î}kÑøF í‘]O›M¬vÒÏ ‚uW2[FÁuŒd ôíÎÇí·Å×—60ùxñé™nl”]IrbV·¼p0À¸ã< oóß5Ÿ{qÓ—¢OøE}7RnÇÊÑêA‘¸ßÌÇ¡ïGëö¶×-tcIìæ„C˜æ §Hð6ßþÔ­ÇSŽâÙ ³FÄë´…¼ÀÉQ¹# öù«ÈÍœ"á•¢¼ñ$à ˜ÀÀà`ƒïëµ=aÓíº•µÈŽç $ŽÜ>Q¨h ì9ϵe½Åü°ÚÞ˜RyRÛFcòÈ9UÇléþõ©o$klRe†Qj tìǸ\¡ýk.¹ö©Té]>!Ö¯aYÒàÛÂϨœ,’ÀvÎjÑ‚xÂÙZ¬…D¶Þ5;Œ•‡q¿nÔnbéßésÄ÷aËÊ‘ãøª5 ¶üÃ|ýé8¡[!²Í6–ñ¡ŒB£1OoŒ…ómUžŠ{«¯Q/,V÷E!³·,ƒ$–ÉÕŒ÷ßì>(Mtxï¾°ü4Ȧ8ʬ¾ã:s÷ÞƒvVÈL.¥´³xq«l±Ç·—zßÿQ ê“ÍŒÅÆ\?‡}:~.6».­eÑm,ºQê(‰akÎ­Ž®^+ú!”,pÆÉnIÐvÉ;~Ôø¯×:tÝ*ë¤O}¡Äfq|ÒÉùP^çÛ²Â~º·p\ôé˜Ê¶¸hÉ”'üÇÔøüïìþO’_“Â>«j5á™T£©Ýñ‘ŸA]Öé?Mhn€G˜»Àw®w¥\„˜’ž$fEXõ—¶MnMt-ähãš%'ó3p ®Ÿ‹­ôäù9r_Ù\ÿüv)¤Lgrâ¸JŒdרXþ>ÆX/œ v$Œçâ¾OõˆéI „1Œ‰ç¯Éà ytœ·z*éƒý©HÜà#'¶sEÎã·­s^N‰# d~‚—s¨ïV$éÜÿ/ç¢×°9ÇûÕˆßlTªœFø©;mj(Õ3éÞ¬7cÚ¥P“Å8Çþµ:% A÷÷¨!€âœÕdÆ=èÕi"æ†TjÎÆ™uÁÜP¨8íU©,àdŽ(d3¾w¦%]°¸ªhß_Zf‚7#9ãëÚ6ØïGAûÕš,jEJ„íÏ>Õ §4},{Õ¼à±9iiOæÜ{Õ“Š,‘€sÎ{Ô ß<âÔî?_Z¹ÿz9 ±8?;TÁãz«ŒñŠ‚£ŒâˆÅK{K@NA£O`>w¢Àçµx í½2¥Îã¿LqŠe£ÛÔxx<{Rô}*ÊHø¢ØúúÕBŒã¦hn3ëCaƒý(Å5N3AB€;Ð[Ê74׆ç"¨ÑØÐ0®ùÜイzwø£xGÞ¬!cÂö¦x\Ÿz'Ó4ñÍ[Àn1ñHá`=j ŒpiäÖ¤EØþ‚€\1 ó½FNjÃm°Nžp>jªj¹;äןŽÕ}òMx¦ÜR- '½J!ïœQxÇj(Œãc½ˆ„çIïÅX&Ç=½ª@;ð}('±œb ®9À«lAÞ½ƒƒ¿jXjÇö©ç<ƒRÈ«,g8ÆÞôÄqÆH« $äþ”sGåíUäoFèT(ØûQã€3ƒQ§sÍ6ÛÞ’á”À;v¢¾Â€6ÍT³d`ö¤zg;ößµKçó@‰³¸'æ¬`ŽsSb¥A”1 ñDŒ1;}è c4Ô\úT­c•;é©rõ¯?åPˆcÞž'T›q±j|â™ðÉ;ïGŽœ`zUÏH¥V&îBD}x­¨- Œh9õ©=2Pú•Iö«“JúeÆ­œÈÚŒ,õc‘ZŸ€%Ç<{QᲕx4äGÙ|íD‘#šo@ù¢OÓÙŽ¥5ÚXœ õx1§ÓAÒà0ãkË(¼®¸ [;ŠÆ™¥¶a $V§M¿ñâôª‚µ¡³O mÈ¥æµP…tàûÑ’t'IûR÷· ¤d㳸ª°¤(lV9 #cÁ¥ú“E ¹ÖCÄQ.ú˜Æ#lzÒŒ½Bþ(#£fÁ©óÆ¿Ñ}Û‘q!‰eT$ïé]ð¿3²’Ø´!N–#f#ÐÓqZ[tÞˆ¶ª«2¨ j„V óÍÓP4O&–ßC&Äwë[|JDY XõÊ\ø,t¸ ¸4¿W¿_ +XDrÇ’¬™Uï·¥dõ'OE¼)<ÚÕs£ÿuƒ?PsÕ#”l¦WÄR?C\“¶:¾ íóŸÿ RCÕzl¡Ù HY$~â”ÿ ¾¨¸·ëBÖ@‹o2à${G·ë]Ÿø¥moô»f<Ë¡˜é>\íýÅ|bÎW³½I²:>WqQñß/†ðÓ¾|~o7Øþ³ v¼P<šO#V ÿz^ÍÏœZÅZu€ÊÃs–ýzÁº¿~¥g’È#A¤çHÔ1å=·ÅÉ,ÖŽ’ xHËl Jɸ¬xž->[å[=KÆžÐL¨òˆ1”$1Æ?1ÆÇ¿š‡õ M%‰‚Y!X<ò4‡%Šã#ì0~ÇÒ—šée³“¨ÄÍ,04Ò s§Äœ'nv¤Ù\t¹¯c‘A‘LϨjÃd«ó¨Ž8Ón“K[i@#‘J^@° ªì=*gr®]dÒAÛÐÒg© $ð¤Xp{S¼Ãš2ÈOôïVðT¸aÈØŠQ‘F7íE´˜³ã!‡j‹d\çWê½8KhʪÆE#ôí“‚Q—q]< â[ù—8ï@µE†àì0x8¬ïyWýl»áß„ã;æšê1"[È9Ú”úˆ>µ•9SÞ“RÜF#'+ïWæ^Ä¿š_°š€b9®›ü<³’N®.L:Õ1¶NÇâ².a¶Ž]Nì2vï_EÿÆüˆ…wlÃíZñÓg¨FúᎠ›h_ ö®búá.Þä[›w pUõ®}k[ê;JÆÖä$Šròr?µrïu%܆+‰Ö×n}ýé÷pù„~§šæÍ¼×KQùI²íÆEqýfø˜äd?a]w]‡¨˜KKá1 ºGéµrðN.×Á¹ð#eX:䟽aò{9õ[1{˜Â¸I¡¸C«6XmÜzWõGÑÖ-s›HŒNÄAOëšÙ7 k'áÃÄ‘–ÛÀë‘LÜÎS&=R#pú5ñÜãµpO>/§o”ê{qPô™"²1I;gÃ!vÁË , bèï$r†ÈðdÇ™r|ö;b=+S­L“@ÈʨÈ!wÛ¾9¬hzŒæO âIаY‘–eÁŒúŒmê­\¾Lú˜¢-áKFW˜ ¸"6ÎØïÉ'>ôH¹³ÙZÚâõ¼%p ºŽ’3¶C.°÷¢˜ Šx®é4b%F›O#Ï¢B=òTŸmýjnœYòĵ’X‡‡!^tHºF sß|n7ßMÆE¥¹»“¨ÄdXÖDâ0 üÙ§z»£=øØcéóGy®á¢f6ÄŒ)Šà‘뫵S¨Gõ©1‰"IPêb0Ô›ÿZjøÄ-Íà1¹¶(BàéþÊ3·jˋĎÇðQÎ..iC3ap5Œ“ÜjÍ=Ñ w+‘£Ž?®Hf†íîs½i¥›ßtxb}(ÆRåŠúö ÄšçÇ $1hs* 8ÏvÛs÷®ŸéæDµX¥!#VäúŽßµg×X׈5¿GévP©hüBƒ23å±ñ[ÍÜh!Êui 1ñJu ¸…¢ÃHèNX”ÂüïÈ¥æ’bßÀ Tóœ|eu÷ZÞ¤úfL’GÕ‚@ˆ­ævØŸö­{;èã›]¼r—o.¹?·Ú—–;@t¹:ÔgAv?Ø|RÝJz‰xÐøz²WcÖºþ9ã½Ý®Ï§ –hä–)dDì@Ë}«ª¶ží†¹;hŸÿ„þo“\gH½¼¸$l þl î:oâDfY …ò‚¦G>ÿû­¹²²ê4ú§F^¡Ð&7VòºŸ$žQïŸö¯„.eˆ iûŠúüóÆÁ®ú„Q¦p©LÃà «æâ œiÖòAG9ÑǾ)|˜™ ®žÛûš¶\ÿá¡tèĈø§–ÑàŸ½sÕÎ@Hy¬¢ÆEAOœVŸáÔr0>*¦è3Jõç à¤p x§`A§š"°¥¤]ϯõ¥ç¥xT7Þ­ÎØÿjª`鈰= Iþ°4;6p+ÚƒúS,2I ¡ï·RóÕøhÎwâª|½·ÈÈÍ þlÖ«Qy‰ ;“ŠñŒclqR3žqSˆ£KÆ!p˜Û#Ú‹â‚Àø ¶rv«ç55\àG¨’{þÔ‹q¶~ôîÜr;Ñ-?AF7ÛÒŒ‘ä‚yM»òhñ2ªã#Ujzªº# ” ù¥]0Ø'8§Û,H¥_Nr T¬ô³);œoU|i†íé^ 3ñFªU#µC3gÓJ)ÂŒmµ C«ÚK«ïù¾øâ¥åòE³àPžWãàb‚òËçß懯m÷ qA3sUi ßVø yRÄi'jÅ[¶þ€ŠU%ÛŠ*ÌOÅ,Tér1j¦±ûŠ£1ÈÀýꚘÑâ/ÉcÊ…¹ýª²Bs“O¤\íUx±qUø’Aù©Î4s}y©ðp3Œš*l,¸ÀÛõ«ã‘ïWhÈ';ûÔèÛ¥ƒ;ñŒwÚ«‚Üö£ÆwzQcEßjp{'£|×·ŠtÆ0?QU0@S/X©=ªê„öÓ-ñŒTˆûÞ’§!*í¸"¬àäàzÑü2q½x&;ͶH¢Ä¤žÆ§Nyhù Qƒ1&2výêV#°ÈÍcr VAÆ@úQŠvãš·‚23E qŒÕÓSšXhРɣEhz$0K&ª~1[3§Ü;P5_<ê-Æ|‘¸ö­8'…õFÌßÑÚtG(–CÛm^^šSb=ëiÅF…cvîHº[ŒƒU¾ÕÖˆçcKÝFö¹CI¿Q2ae,fy…!ÏóˆÙ4¶AV]ÏP//_j›”Gó'cÚ“ž .½%Hô©½ÆœðÑÄ1a0;€iVÂÍ–Rý&©Óº€ áÈ5(Ûâ¸Xå@q©{zŠÏ®ë^xŠ’· wMÓR9Œ±ïÞšè¶êe çK ОÉq°ö¬íØ¿¦,eÓ8=è"â3+&F ãÒ¬ëá.I5ÏuiLrø¨pyÚ³Õáþ©ÌÚA¿5îŸÑd e2dVWL¿–æî8ôçÌw ¸Ž+TÂ’<äv­¾.6±ù;ŽXtÄšV–i"wí]ïЦé"Ëpˆ¤¨r1ûs\×ÕWpôîžb·‚ÎÜûÑ¿Ãι4¶¢ c†T;+3`ƒžþµ×?æ9·k£½˜jkr©zÈðãóíï\ç\éÖS¹h%Àʶ¥ó(>¹®Å¢¸i™‘` ^(@{XÝWAžÒâæ6ÚO!”{ÏÚ³êíi=8ž§i'ƒàFñÏÿ• Áeö#ŸÒ¸7Y¬º‹‰@vÙ•3÷í_Uê–v6ñÀÉ*v]?ƒ\?Õ}"[ˆÌ4«?c÷Ú£Å[¡›{=<•yPï&¬ݶý(W‘ÜZ H®0ð¸`Ã×Þ•è³ÈWðòÎE!uM¹aë÷­‹¶¶Ž@¤²Ì˹Ӆo±Ú¹ºžý¶æúsÝVÀMiøÄI¤pÞp’) z#ô¬W´–Dñ—O†‡ÀãПNv®£©=´þF9mƽô¿Qž(¢Ö$€OŸË,MåÔ?¦}¶¬óºänz{´ö·ŒÐ¬eôˬ‚NÓ‚Kzc4h®¡{‡‚ò(̹mnrpOv9æŸê=>ͤpĘB•ImÎç)>ÜûÖdò4=MÞ 1un-´HYB³9 s°`AïµWÚo¥ZiVÂðO-q,DküÁ°¹Of ŸNÀÒýFöí ·šáVNž²¶q «áä)ÉÎú¹' ÑÑ•Þ;©mdX•ž(ÛJu©`Áǯ?+’-­à¶†iä·•°È«ü02tŒdž;ö÷4ù…Cñ¥’˜âY"ó…GóÒÈù-÷Å ñ±’iбF¥ãƒ’IÇÆsOZŒ,"IÅØ|¬NIW€Ûm‰ïØÓ¥YdK‡ˆœ•‹p€Øàð0EœŒû[we&£)ý ÷Ç®+W§Z¿Ž°<Ió®ýÅhÚÛ@i¤ ’è0wǯéKÏ2¥Â #Žc ¾ß÷©“jþšÊ°ZY2 9a¹Ó¨ƒ°?Ú•¬ˆ =ÃF8ÆÞ»àb‰ÏŒLs .Y#>@¤zÕâáÀ^%Rqä8ýiÏ´ÚɾhGˆaˆÄ¤ás¾¯P;ÖŸDŒÛ[¯‚ ܰQ“ýÍ+Ñ­¦½¸ñZ|¶2~=+²é¶L‘Pǰß`HöÜÖì±=89T†8X³àë—Ê v¶Ó:*"a”à:–Âöæ¹þŽD®¹›_`T¶~ÃjéºuÜrÉøu[“+5˜tý©ËezˆÄ$Mf\J…?¡®Wë¸"TŽIkQ¸?í]U娶•£ŽA »Hwbk›êòfQmÔÚ@rµS57éÏt[˜¦…£OPMl/¹S\ÅíƒÙõx$Ägq§ŠÐµšb¸-’kçµsצڲ®0E_ñ…AÊÇ29Ï›nبÔ[¹©ô/MInD„ùŲg&“L 䚇p½÷÷§èK†ØÆî8í@.¹ìi)n1Ÿj˜‰¥d§ævITî?¤® dgÞ£ÅÔøõ¡¶¢sOŒv¬ nõ!ÈçúÔ/Ö¡€ÁíŠX^B5Á##×zJÄ€ªàÔ6 ´NEí$³gJŒúвp6æˆwý©‘b¥y8ôÞ jÏæíW—9&„9>ÜÒ+WßIÎ3š’ØØmCb@ªÒ2Fü ©§hÀœì3ߊñÎã|þ”4aœÕó’Ù õ ñŠºŒz{P×%÷ÿµiÎç4éª@=÷ªªqµàJñ;ì)Aö¹çÚ¨@€ûѤaŒm‘ëJJÛö'½2²,ÇÞ„ÙýûÔ.£¿9¢,Däãšz˜›(Nˆ¦dȯ*ìp(ÐPGæ`UDŸz{ÃbHÇ5$íø§£ ,[çûqD€>(Þ2N*®0r@i¨äccƒTcî=ê\óëC'ÎiÁOøŒÃrj…Ÿ<ÛÚ´RÜ1Î>v£›TÓùy¦«(_mªÛ‘Èø¦e€©;v 4g¸Ûµ"ñµý(‰=ý¹«,mŒ`â+Šˆ- cfz‘ cšm†@ÎßíVÐóQm\æRâ§cŠð„ƒ‘Š<ƒO½«82ÕYKbëê(‰dIÔZ $ œ`° ÎõVÒæB_„s^[U#;mMx‹Á#æ¦6OõTËWdðjF ÍÖÍ2¶Õutó •â†`ÜoÞ°ÇG¹lénqÚ§¥J¥ªa€l·ªúÖ’À¦-J§ÝH ÁÆsŽêwÔn…gÈìÆ¹;æë§Ž½ÿ)ŠWÔ„©<D[9â$3d/9ô­ûkTd ów¤:Çáæ 8 g«>¯¦‘K5TàúQº²ËBDó~ô…ó#…–ý ÞûU·‡1ÉQ5uF¿Iâ1¾Ç5žm„Òi-‘Yý]Ùž©qëOýoyz¯)>ö­9ãk>»ÇKô÷ÓðZÂnŸ“ù{bµí"·‰š[‰•IÙA曆Ùd™-ÁTqF¾³†Þ#%ÌhÄ ($ ìãŸå·kˆúª;câ3ø’ÄB…ûæ§èË¥6Eü<1l"…'Hý+?ê{—¹¹ülÄwXÆÃïZŸOˆ ¶*©ôÿ¯Ì~Ã4ïÑ~ÝœÞ]IJ~(&ä+¾ô´»øs´Ž£ÛýÔoHô™ú­¼á‰R¸C¦¦øÝ¿µu¶í=òéžêâ1Á~ÀÿÚ¦H«k :j;e ìY†+ê^„’#)iš07Õ3.?zêú•ŒLRâk«ŽÚ Ûœÿú­cÞô»˜O‡ÒåvãðºGêÄ /13¬|?ê^‡icuø‹Kˆµ+e•e˜zwÞ‰g-„ðj/‘¤£ïƒ÷^+é^B`ü40ÇŒåÀÿüTÞ¾kõK{;¥»·ñeUpLJ@ÇÎkøkÏou;{EéúW©Jˆà#ô$RÝEúqkHáuo#%ãáˆÍju)ßüœJ³.H–ñT‘졳ûVFðê¾ ²ÈƒÎ°VžZŽ¤Æ¼ý—êVÑËv|Bê¡WGÛ' ž7Ïþf³:¬Ò dxßJëuç†ÖØù™°}È®qÖ[Û‚ñÅ/†Çùý^w1ÆX–üäÃ5×}#Ð 1$¤ëÏýZ³úíDãÞ¦ô'Ó]"8b ,,a«'?ڻΙҭå(ûVzHîÔ9ù³U}EIÁ„_ÏÜö¢’rùÞª MÀW˜Œ þ(ÒòŠ®8ÇU›·ëC±&¼Ä’6?qNém`.ôý8ãš±Îø?j¡‰ÆÀçïNB½<ž6«¨8çsÍLHA⎩€2£KTâªÎpybB‚6÷ H{‘KU¡žjV=ëÊpIÍÅ!hÉ&†aîGþoZ©UÜr(•ER<îõoç4Ê…$ ! 6øji4ûÕôàêíÅ»óB‘ó·‹UÖ;óéU-Œ“T'$îsEE8Å1(NqŸlP”jØoMʇn¥ .Äf•Tž(€í·zñãm…/#²·—æ=Ìj5ŽÔ¯ˆÜ·éWF-½M!óoj»FG°fï÷¨’eß'ô J´¬3‘J¼‡'' zv¯4™Õ·­P‚W#=ê°=¿sU5nHßÖ¤ñž{PõcãPZéê58?ÑÖò=Û5†Xã9ÎÔT,Çšrµ§f¸ I½Ès¿­/#¸P|NA;ÓÔîwÉô5ïŒ~i#Fv÷«FíÁÍ-/#ë)ìh‚BFsŠRÇÌx¦¼g5*•f}Èõ¨Ëßì*¬¸Æ5åÕ€¦Td‘†Ëª^FÈ40[; ñR˸öù åIr ãϧ}X¡¸|úRî®ÙÎ~)aZr+€vÎ{oOE8ÆÇ8Ö‡ m²)»mC‘LN›*Å·§ì –c…¬»elŽqšéºDš ÿ?\{§Õjô®‰+89ö®¿¤ôÛ¸ôæ3€)N,§RÕÜôé Š0Yw÷5ÙÇ.~ºdÉo*”9ôÅL(º|ñ°oj׻꿑Tɸ¸‰rI+ûšÚDé.©|m†"6ÛjÂké.$á€5Е‚ð¤­ÿØb¦“oÖIç L˜ðÚ³.©8>ô+Ž¡*4žàÖ…íìŸ Ðå¬éº½š!]\ÿ+ÔÕG5Ô¦‚ÂvÕü?sÅeßu{b¡‘£Ô7È<оµ»ÐIär+·Œx¾bXö5ÏÔmÍÇÑ>ú–Ô¸ŠL¯cžõ½Õ§õbË í¸Í|û§ôȤÒè\oÎk †)m¢ó»zj2OÚö³/àšÙÙcÝIÛµ*×o’íÞž½ÚŽIÇ"Ó̃ &§àdT^$ú_6º:„¡QZG' Í}7§tÁÒºÌÉoŽç'?µè/¥RÝ¿2ó¸­O©n-Þþ;Bpƒ‘À·ãŒšÆõ¡t;pc{é^RÇ6‘SÖ§0Ù´Ä$Dì¸\ŸÔÓñÝZ¸ŽÔÐ~Tþæ²>¥IïÔÞJ6 ÏëZ!Á}Es­°‘“UħÈìO®;ÖŸÒ3Í€y ‘ÚLœœ.Oöjæ:ÛIþg¨7•8'sŸšÝéEšÜ‰0ë áU6P}XÓý Ý=*K‰í|c–FÔcAÛÓ5¡h§¦ye¹’v#>¶£ú…ræ±Ù·‰‰p휶H}ÉäþÔ¤ýNn¥"‰¯„h¼ F=B÷®nºœßm¹çÊ>¥gõ7U{B-z\QćKK¨`œ©¥åêOy&–üLäÊWÿò#O袸›G¸iU-í®ú„Ñ#RåG¸ŒmûW[_SøaïäŽÀÉ ¼zsý±[|}yý1ïŸf÷§e»[[³)´ÒŸÿ]ÿc\oÕN™IümÔÍ _*LÁD\œ}룹ú‹¨[ÆPCi@ï( ;|gú×;yõ:¾›FÎrä>YÏ»~)÷!JàÛ§Ã L†¨\ŒýkyæµwˆÆáèBä/¶ùÏê+±½½¶¹ˆ“i$6t1_ê+©m5Ò@Æ®W7\WGÈ͉­ú¯K6ï³.¦$&øþEe}AkqlU!hÊ´XgÆ6öùÒ¶,ã¶…šRšò‡RîûŠç~¡¾“ðÉ4¦Pªî=½ë—,ë^¯; tÈÑ™’b¢A’ºFNwþ\ÓJËáEgR¦¢wÈ=½Žûw®eú”ªú “nHÀ?jòõ)à‰å•53 žT×EçcªízjKt†¡ ¨Q¨ì§ŒczRöì争'‘HB6 IÿjÌèJ@âGÖª3¤ñè}+K©\Ãso[¾_FžÛço’Ma9ºÖÙŠYß°ŒÆÑ,²c6>àÿjÐé‚5?'•mÛ;Vm‘Žß#g~sÈ®›¢A5Ò;L÷†çâ·æXçêê½;§ÏÉšdwþRtçï½u½á†zâíÄ{¢u8š3Ìž"€IÇÿ©û 5—P´·|¶ÖÀ¤óÀÇÓ<¡ý+YÔg•ÛÍ/IhµË –²‘år6ÏÈÚ¹¨’xÛZÈóÇŒé 7ûÖŸV³š6Žá<#θ% ­ï·?¡¬ž£,q+ Y–Tx‰Ü}¿ÛŸËô×ãžÜ/Ô¢ÔÄÒ¦Fcº±_½s}"d‚ic”ø.¬JIˆ?Öº>»q<ŽÍ:Ds…u ®õÊtë£}{-”Ñ4;œ+/ÈÍs|Ûí¿É˜L2ÿžÍ’ Ù:Fÿ8¢uÖ·O¤åXçÅgÁuþSõ+«dtä{×OÕcsn·’[ìw¿Sc™—ÈèÞ‹ ÎFi%™':‘tï½ 3œ×-…iÁ†ÈÀ¡H˜b6©I‡¦õâÀäiDÚ¦ ©Ü`Wµ.w º‘GÑ*bsS¤zïU’Pû÷¡xÌG¶(‡(ä yM ÀÀ$Uräí^`Ä‘OBûTëÈâ„W}ê;þœR´%¥ÉÜTd’wæ†A µXsÅkc}ê¥üÜö{ã|P$)ãšxršYq¶NqëRfúÒJØÉ$Ue“) ÓÃò6²áûQÆs¸â³WY9,Ey˜¨Æ¢hÁ§$˜ó·5C.ùÀ¤ZbO&¼²œ ÏÅ"FÉýé˜\x¬Åb[$œóŠ*Ê@ðõ¤Ò‚¤c~(~3I5ÃÚ™ïûÒÂʮì„“‚IÏ8¦¤fa±Þ–Òåùçö¤AéÕ‚ØoEˆ9À¯xl8=èZ>Ó`ò²…Æx¥[&¼ìÌyûÑvÎiÀ_'Û5tÀRKoWx‚ÿZò*ß‘Fˆ¡\ç4)W=ö¦Ê® ”Œž)HHmÀϽD¸ úzQš0£ÐÕFïÇ4ÂóFq‘ƒö¥ž.ùÅjhÔ0sZÛ¸šZxB8A9 =èélIÕŒv£Â€{í°Í7E¿˜RÔä) ÊÆ1¸¦<§ªt®qñOL³ #cÓ)ÀüUŸÍÞˆ˜Û4½‹^‚|Ã'ãj±‡~7ÅFúqW'aЍs“BA#Iª,+¨ÿµkvjY£}èxíö«Á ƒƒŠ!Ï÷«ÅåqžhžÈå¬hjØ}5 ³° ¹®:&g`Ùö®Ãék|º¹fÎ}ko‹Ÿlû¯¢ô‹;eEÐ~+EâÀÞ‘érˆ¢cíZ+s\¹Èî+¿™Œ—r¬grG ¥ÖÎk¯$ÎFy§î®í·Ò™oAYò\õr¶±7éTG`‰`ØÊÎÞž•’'ƒ°fô‡á:ŠsysYV{¥R0ø4©Åo-’f$;ƒžæ¹þ¥ÓáVΡ‘ÎM'Ô+#7q“Í`<½Víôøn§±5¦ÅÏLŠHÙ†¯|ƒY‹ôú3À#9 Ž=htG¹ID7ž$'Ôtž ².°Ù'¸©³U+š¦=ª‰b ž¸;Öé÷v÷øà61ó^¸|ì“â²f·óꌟ]Ž++ÃIÒý~Émؼg*}i_¥lšó­!Tb¡·Ûš™dšVÈÍ*ñÇõ¯¡}ѤX–Há 9ÉíG<{Ú}uéØÛ ´é€º„Â×|¢ÿ¨2;º·Ç5ÖuùLpøz‹mƒƒX½ÚÝäg8PNNMkÕŒñh(c[k+|(üÌ{šÎúºïðöñÀ§ø¬7Z}Bbó-6óÍr¿Z\Gf‹¬´Ó¾B(;/ͨ~.ê $fd'vmˆþþ´í”†Ó¥6 r"ÌÞøíKu îcšè‘ƒ·§Þµ>V›¨¬+ó­äÆäz rú#=BÒõí¡VbÔ¹(Ãd_R?Þ§¥XÚ D³Îâ5 …D¶ßs]=ÔrNT 0ɤùäêÞ¼l+ê}HF­»\\åFvûןù:v|3ÓVÿ­YG, ÓnÙ6ÉXµ4Ÿý>ý÷¥z‰ú¦ä=Ííô i*†fÑè¦ÿzÍ´¸6ð¼ýOO‰±Ó#”EP3ò@ôͽßÔ_PuA ¤Òµ† (LJz·R퓹­þ–õéÍÆ5âêÉÕ¯…¤˜ÒO>å€NÇc‚Ý5£ôÕßKº¥¼FâÜæHÝ´¬@‚sŒüwæ¹{“sÓæNu ¬Q†mrNÃcêI9õaa?Qêè³K#´N“4 4ø®Fဌ.0?Õ½u¹›ýRþÂ÷T‘`ÄqÇkæqϘìTzŽþµ…5­ïV“D ç'hœ«2Qþ£ö§:/U('šæÇD–²4¤)°9ÀÏ$ï¿n+»è«ô zÊ)i˜Š(òD6Éô$íïƒSÝ’+‰m|Êßèû¸'>,ÓËvT³ÅÖÃ8?mñ\×Ö=îIÝÚ-a‘r5c$0ãŠûïÑ«nndê°féoäÃÉ(Œ˜Ë´ç #9o½7õoùgTškeéÒ¤÷*¡ˆþuuÙO܃¶pMgý~Sziçã}Wä™:­›F¶e”ŽBÿæõîŸ(»Qøk+‰˜ÊÍtâ/ÒK£uk‹Ûxã½¶.YdŽEfQÏ™?¸È4÷Ò_YZ¥ƒ¨tÛi›N,\c%pGëSýr\§ý–§éߤì¤o:õÔŠ j[H™U›>ÙÔ7ö?jûBú{é'舶ý*ÖàÊZ·ÒÑnD™g'¾Àë_,¶úµz|òN½Lèa§Ãi]‰„d¯>€WUÒ¾§úƒê‰Ó¦tn›t… Ï C…$Àà31Èó1àíW9Ÿ¤Þ­ûWê?ðøtù%¿èÎn"EñZ%lº¦HÈÜd|Ò6%®4ÏŒJj @8ܰ9?q_Núèù–Äu™Çâã]yY@Ô•#liT'¾æ°zµ‡­ßËÔdŠ!üŒ¡qù†1’9:j¯2\¨÷\Å÷L±¸n-î¯lTHQîmq=AÉç³ê=:àÛÜ¿ ’+­X>¾ÔK{›Þ›{éc¼é×7ᦑ;‡#ÀàŒþµ» ^Ľ+©¤RÚy…­ÚJ5Æ™Ø7}²(뉞›íÌ„ÆKÜOÕ‚H Œ}TŒÖ‰´êp¬rÛÜ´­"ä6Bë·ü­ðh]JÒ§ÒHUSCê°2äo«<ç¾{Ò>ê{»1ø{„:N™mdo/Ê“ëúW™ò|÷›Žþ>a«î£mI£ž<ù°®Ÿp8ù¢ÍÕ¯RhMä‹à6tM éSöü¿jÒèSFÅs³p3;eNß”öæ¦û¤O;Êè!šúŒKý=jxë¿’ýŸ\Î#"S’A6´m› •ß‚cóYö`·P0Þ±µœá0ØïÛô®ŽÝ§¹DA-œãO…*áÑ¿ÓÿœÖX[t’HáYt°eÊÿÚ»xæHåë­ $·¸ëMÄ*·hÚ$8Ù‡­v?‰1ô“kp|H‚ùHÞ¾uj„Ü+Xέ³œŽÛÿ½wöªn:i“Â!Ñq"~jí¸‰Þ˜üVð±DxÛO<Š2[‡˜˜ƒ.ûƒÍ:ÖEPÄûãêûšÉ&ÌØ5_ÏëM\Ûǽ;?°iÄÞCõf}¶8÷£½‰5!Éœ®7Áæâ‡bÌ94Ä02i5c¨’v¢¤ø\z{ÑŠ‘ N”Î(O"JJK‚F3é@i˜·$Q‚ÈÐ\63S" ’Ž]Ç›aD’åóÅ,,‹:(þÔ&PÇâ†óƒ°=èfE#Úœ‡!ÈÕ™qÆÕÛd^´8¦c‹$Ê7-÷¦VbQïB’5<犻ʙØÐÞU;ã|Q‡$y"nH©t\0 ¥ 9 çÖ‰k·-¦5cïDæžB®¸Ümj #šêm¾Ÿw]s±Æi~¡Ó¡Çz¿1m™s¾sN¢†#`>)M£“Ê1ëGŽr­«NÕ6AšO—5B¦/æÛÞ®³}}³A¸“Q$¶ g•rÌ_Æbέ2ÀdŠÍñnüёݜÁ¢Ê[>ëïJȰ{úb¯æÀ:÷¯y²=Ïz¨œÒþ;üÑ‘öÛÓš¬ ó’?41ÜSûN&âQ““BI‡µVU'sCœïš¯ú5ã.‘¿j‘(ÆúR[#H4a¥<ÔäŠòu9B§×ö¡Rù©a6ŽÔD™HóÛ4²+M¦…ÜŒUdÒFÜâƒãÉÚ ÊØó͸#||Ó8È!»w¥ES°9UÀÆøù¥…Z&øéy|nia9cï^bì1ŠE ŒrGÅÈl ö¤UÊ‚H¯4®Çï@:'bq…]f:¹ÛÞ³W# Õšb3¾)›SñýÅ äS¸ÒPÉ“¨úIÈ¥OL£æãÒªN§Ø|Ò©¬9³NÙE®L ™²ŠÐéVÍ,«¹¾…ôýP ö®[¢Ã¤€«œã5Ýô$e»¾÷1¿kn«-·µbñN‘•µàºPer}=(öÂLl§5×S6:Ù@gÒÆ‰%Õ¢•À$vZ²ÚÎé¹##œR­ÓBÒ¾sÜÓ"S« ,Ù®+®ßHÁ€eœb»KØa9H“9îEd¦¤¸}Nî öÓEš5ò®¤oLÄ®¸ÜÖ‡CŽXH‘¢ s½}þ˜‚ÙC ?Ó½`õX;V4v8©±R—yí¦‹°xÃ+ útŽOùޏý*—óH®Ä3§®"².g,wv£Ôâµ·áÓÈN¿ëX½Fõà•Žs¸­ J˜hÏíQ|eó© ûÔô¨wé+kέÔR/ #Sû ƒKm ÚÃåU\1Åÿ†Qµµ«6ó뺅ÿðJÚÆYû‘NY‚{ªÜ FŠ?3ZG§Úã&Fmgj$Èél’H…åc¸Ф“>4 cö¥žC»’+8ÈŒàž[½r}À71³HÇ˪¶§¶»ñµJÊ#;œîhÛÛ,NêL£:r8¬d»í¥³?Ö^/ú¼¤&´~Žy‚¢L>2ƒœîýÍsÿV c½#es†ÿjÔèW^=ݤZ€Î mü£µm#:ìþ£êF<+q€ÑèL6þüW3Ò.6êîUŒ¤~Dlé Ã|ƒíMýcu‡ã³!V ªq¹^ÿ®>õÌ_¼ÍÒâ´ÌjK3»°£Ðm\ß?ÆßV{ÕEåÛ[Ú@—2IYÙ?†Ôûm÷ÍjtU¸y¢HL m¥„D(i@Ã8† ¹îšÎz}Ä‹&ÊÀŒ£°òEhtæK°¾žY ‘NAUl¶X¨ãÐ œ—Ëu·wgÓVÎn`†kˆ‹G ‚ o`=÷ßµ|âÆêö6¹™¥Òñ\„IgW–0rWÎ8}GïµlÿˆV&Éz]ÔrͦMd {¡ãìT‘òr÷¶wko…ÅóOÎføVl)ß'$sµtõÖV:Αz×S,†Ìï!·ŽTÒÈœœëœ}«êŸLõŽkrÝ yÂÂÆ!#Ov2Ó¹ÆIäØõÍ|÷ü5’Ìu§²ÃEˆþ ’ó~cŽãï]q¶°ëŠê}$É ÅÀYÁÔeÒ¥tî0?.øç#Ò²½orµœÿͧõ O¦º…œvÃÓ:K¿„ü0Y"r¥¶Ýs‘é¸';üûüIƒ­‡óÙõc¯ªt1( n<ÖíÀV~XzÇ5Í[u«xšKkg¶‰ÂéKd Ð9ÆJ…*²wÜgÃ;þ—õI¼úcü›ê%´¿§†bºY5΄zH|Ç9PI ‘¸<Ÿu˜äúíßÓßRÚ¬QÙø7ó©)¢’ßIΠ߿޿9ýmÑ-í:µÄ(s„;§ª·¡»ñWèî¡ô„u¥ÜŸN\ÊP€Í®Î_ÿæã9ǦGµq}~òâY.îZgšD 1Τ“ã?þÇÚ¹¾~ÿ_¶ÿ?¿Ó¥ÿ¾Ÿé×ßSÁqÔÕ'”ÊßtÔŽÿ¸æ¿SއiÓzí£GøP–É,si%ƒÎÞcºéíŸm¾3ÿâ—@=Wêóȱ˜ms>Ä>v 9<ïýkí¿U½¼ê2Üܼ6ñ7ÉR‹m,xÎpùÆ=q[ü7þ%¬þld+õ¤Ñô›7í£Žã·b<‹Çi9W§tÛ/¨­øô5·Ò¥YÕ#™Ñ'eÊJœ8·«›ŒÖbö {m–™ d2þ{Õ ½ŠÑ™#Ë[°¡†J¶{|Ú—Á<}’먖ÓñsKk(Õp§Êàã$n+ú–0JÐ3¤ ‚Ñ9ß"ºÎŒcŸ¥·QWeÒAQ$ls\ÕóÇë¶§¾H®îœ±Ð.o$ŒiŠCÙ½k¶é1¼q¬k!Žý«„¶M†áÍÈcÜûWOÐoæŒig±#½M¾• ÷øµ¸a:ª19È;—‰Œ Çz7Xµ{¥2*äsÚ±¦²x×%Êàq\÷ö/Xf[´ÉÛš›Kˆ‹Þ†±ßV¬dZ€Î;{íJLEé¹sp±ÄÃPö¬}nÍêjîÒ7%PéŠiò@ÈÏûÔ`ëÏM$ð=êè„6qFŸ“ÐÛ³ó¾ÔSbÝøø£[…goZqZ2¸šÎõSk)¬Ù˜Š °ÿV=ëiŠcr)9ÕOâ‰Ð•’±ä‚~ÜW™vÎôùrAɨxN2?ZÓU¤pÇ8È«*ìw9¦<#¹¢,=ˆ&‹OBÆ‘žÕI£Æ})·L ‘¶(MèOýéM=-¹’AéšêzLGÒ0k Û ùÆÜÖ‡âÂDt7š«F¶o/RÞÜ™$c¹®K¬u¨[+ xŒ}é^¦—Ryäb)Xì['sUzô¨ËùŽriņs½DV¡@½0±ÀÞ¢ô`eßã8ÅIÕ’v¢Æ¹Ö§È´²[‘È?Q1¹ô¦Gqš¬˜ÒjZ5M w$¸gqÈ#~*º§ëFœ¨8Þ ƒÜdUÎ9ö¨È'ªåW.¡‘Q§÷«¾Iù5fmµ=-Aï·­[*·õ©`IÁíCTííJÒ<º°u.+ÎÄ.äþµµ}adƒƒŠÈ’5CQªú \²Niˆ™‚‘Œæ½Ǹa½hcžâžžƒ"ç©Þ¨Ñ’ OyXoÛ÷¡¹@ØÏϵIТŠ@ÀïG:ÁÁ`éÛ7“QØíšxCNIíT)ÿP¨vÀÞ€ÒŒ~ø¦4ÁP5(Ll“’;Õ<\ úÐS¿ÇéJA§ã`7ãÖ˜36ÀÀ¬Ä—#V _,ØÆÝø£SèÀüÖ‹àäjÍfZǸ;qZ¶èã53íNÛé ÙK`ŸA_Lè°!t¨¾QôÔ‰‹ëØWÒz=ÔŽ¡W;×wÃ÷]6ˆ‰Óý«BÎ(ãPUxŸJ´’B$|ŠÔ‘W êúeö óàyFk2êF9.@^£r¨¹¾¡|äR)¶š$`CöªÉÔåQ…b¿Þ°óq!òÉ–ôì(ÐÚÝ’Ißzr“Bn¢Ò&à‘Ysà Ð9|ÓÐZ1ÙѾjótòW)} ˆç.úe¢+1?µs]E-<],±•àyq]/UétçÚ¹¹ø”ˈ¼Ò8f€2®g±ÜГ¦XHÈ Î+„–þæ'3·½uKÎ÷óª™8TUGY‹ÒË@¦PœÆ .°¤¤¶»–]…üÍŠ4²5 ŽQ#÷8¥Ó·º—@2BØ#=ê—W©1ˆÑ2;óDµg‘†@Û¨vÖqKtZirÕzL¶{™ãiFE`V4¦Ugy.€3ŒWEÔîlÛ0Ãpv8#VÍ©ð˜°F9ùŸQ|×õ43Í$Jw úœŸJ§ ¬ŠÂ3œ9À¦~£¹žY¼£e5›!¸E‡À…YðT¹õ4~ŠŸ»•ï:_ñ™‚¹Îäfƒos,}ZÚ6…óùyøâ½a&‹ L¸(®9<°¬kû´Y|D?ÄG*H<¡?ÜÖ_$_æè½RS{0ŠÚ ä¤`å‰;ïþõ= ÝõÙ®$o(ÚWXêaå9ôÚ²¤1ÜÝHÅ‚¤1ÆÜëi®.£ÎðÃ6¥ÒÌÇuäZ_?’¢êîç©ZC!HÚî<Å¸ÎØç±Ú¹Þ°³^Ÿpr¬Ðᮤàj_úMtÅ( ~Ëà¢aÓ;*?n $e¹Õ-øŒ©’]X p€OûVÝk)}µ,™z [uT‘|#‚H ®ãÓHÆÆ»ÿðºö9ñÂñKj ñ”‘¤* ߃¹ã5ñþ£|óÛ{s,vöÌI/Èôû×]þ}B;ªÿ—ÞK´ºCHÃò¾0¤CÆ=—Ò¹yžòÖöúôé~¹ÿORŸªÞÃ&oK-º‚,‘ƒ$`òWξ¾oz⾑úÂo¦®W¡ýGbd¶œ[€P&xlŸÊpNm«èñýMOoÒt†î”xžD(×#ÊÜ6wIß'×ãÿQZÞÞ¿W³êðKXÌ|õ†þOåÕÊé*FüïžÞ¬ý9äß·Ö~¦º˜ýÖú‡OŽí¦ z•„À+27§?™r6çjüÁ,‘Ápð,°µu}7êN¿ôõ´¶V]JYm!Sä vÀ†ã+Û‘Œæ²:PŠï««s`%„8¢&Üó·Ø×?ËÌù>Ûü}^>Ÿ ?ÁOñ>þ”EÓí­¯e¼S‰•VˆcsŸ}õW?õïø—ÖnºƒtKX£½šùÁx±äüåÇ»1ãÛÚ—¿›¢ýAôÈa£–ݵZ¸þ&p7ÈØpHôÞ¹î‹Ób³ê¾(/%ÀÐK(×.9¾ z±ô«Þ§¯ÐΦéËEüwY·I|ÑW‘q¦ rs¾rvÀÍq½y’ò^—hïxµ _l ¶OéýëSë?¨!êŸV²XYX[:!̪ÚX¾>#ÐWÒÝå{±r‚u«¾OožõÏÖKé{lö~ò{qð¡‚Rb\‚Ic’oé[Í4³XÝÍstÞ-îµ*Ã:X (öòµqàLöæHX¶»Œ0-Á/÷ýkvÛ[ý:É9rJMŸÎúXiàÖÒúcõIõHüxúz̈·'ø3œàcoê*×ý4Š%‚PÓÉ©ÀÕùŠçïÚ“¿MVóÜ£³4e>ûmý+×\Ä–ò³d TñŽ~sšÂÛ­£o¡ß¼V·ðÆÄå—~¯¥hô;¨gHÂèy1É#|~•Ç%ÓGr`®œ±È9$âŸèó½ –@òe°)ß¿ÍGÚº¾ŸOè·ÇÑdXÀÂVULÿç5Êõ>£Ìo$Ë‘ ê=é‹‹´‚ÐBÃþ`'Ö²®à1 :9×ë¾7®­Ö›XÒJÊ$ÒvÈåMt} Ætä(<ƒê+Ï7ˆÎÙÜVßD¶Ò¨Á #cIMëðÑÙ]JÀö®võ”ŒÈ9®êÖÝ.HÎ#lñ\?QŽh§ep yÛÚ§¯QeJˆí•Ú¡cÁÁÅ8QÂTl01ƒßjÃK)S~* Þš'}þÔ2Fqýh, %9Áõ£}¨%°m…\cŽÔ¨Ä8`Øâ¡[IÈÈ«±Ô8ßÖ¢1œ‚($–;êTäzÔØÔ¶1Å9Àz–o.3KÊÛ㚀çŽÔÛr6ö¢FF1CÆä“PÜ‘E ÊAÎõM9ÁÛõ¡jÃsW‘œc±DôpbŠ1ÅUÂŒp}ê…ŽNsëTf$‚h´Z°ûÕŽGoj$y8ŠÖìO5>TD@#ÎH¦¼#cÞ•Ž=$dmNBrF{W?}]u|rYì -ˆÎûR3 çšêmbñW:x¥:¼aHeù­x»|œe`+`b¦GH4WŽ0HÚ… ÆÀgïV‰TÔuw&¬®p1RŠ gVõ2+qÎh ±RÞôXPcŸš„s6ïµ3`o‘‘éOGЦ-²sÚ€cÁÎ:Ë…;R|R,T&¡ìEJ¦’ ÜÕÀŠºî?óz Ãw]HJ‡¸÷¬ömCP5/n@;íó@vQ€3NšvV¦a¼¡z­í³ÛàëՃȫt»Ø {ѯîíäSÍØ‹nªdŒ±;(!Žr?Z¤’‘Ãb½6‚vÔ"A¶6­$E¶¼&süÇïÞ9ïûÐQ0Àwõ£`*óF‹JÇö¡"jÈ'=ê®ÍŒoµB6ô£ ÑPÞ—aæ$Ž}*í!lÖ„[}ø a˜”éíR6#ØóQ l@dŽû÷¢œƒÄáF5a5o#³ $üR‘ÄIWQ&·:GO}JÎ0•2MVWQô}Œ²ºHýëìMtø£‰KO;×Îþ™"2¡{WÑ:d̶ùè|3Ó›¿·E-ÜVñcŒ+÷©³¹Ç•ì’Hÿ˜â–”,kZP;Û£¾ûÖY&Fó·Ú‡}9ÖÞ–K ƒQ |š›M½eE i$ŠƒÌvÇa\ld&Èz}@Xé,j|†;–¸‡O5™w&qûb°àêèíÈ;÷­%(!‡Úª]"Wi;—?"ºQ4%dvÛ*+zI17éµ%=Í¿ÿ"ßÖªR|¯êë+¨Y¼%3†hAO7ã9uÆÄ+¾êFÂd+(#=Åc[YÛ%ÁkbyÅgÜiË¢Ÿ®ØØF“30àRV×Õf-r'¿jÇ“£ÇsÖ£,ÒHTä€+¬R,Õ#ðt)Û“Q5v4Z²éâ5˜™ecG4¥¤Ä„Œ­i¤Ï;î¸P;Ò·Z#Ò 3ŒmÚ´‰aôÖ pg–7m[ v­.£+Ëlcµ„ɤqœS [ƪYPÀïSpŸ‡ÒAcºïLŸ*ë­v/¤%|4ÔGoŠ¢({V–@ÜÜšé:ݱ¹‘aåUµ1ìkœ¹Yb˜Ìª¥wÒÕ<#ðmjªIbR9¬Ž­k –¹Ñá»Ä#:™Íjtén'µy*œàQC½·A‘2ÆwÔÛ³w—ØúdÌÞGThV/é;y˜ŒMèÖßXÈï5¹¸5Sœ.ý½Þ¿é’^à ,¡ 6ÆàÓÑK"ê™#!™›ŸûsU![¨¾[‚öæea £á‚.ÙÕÛµe]ÜÙ)v ÷w$?‡¾˜ã]òÄÐ ·Zê¡!:fPèö r@ãÞ²î/¶ðà p&SˆÀÎ{ ŸÞ©ŒËþ§f'‘¡ŒK+¯™€Ï›ã°Ïõ¬Ø#¹«-é, 0Ûð)ɺy‰L²6¼îc’<ìs¨P?·2Q‰qæv^š²‰Tƒ IØ“Í)[]JÄE£u:A𨱅^ÉãŸÄñA„žÕ‘f“w®êanð²8ý®/¬FË3.Æ>0i|ŸLØìºNP†Z¤®qÆ=*&Vü„ãÒ„åˆ9ûb¹jåÀÚNÀoóU.ÄŸS±«xc|±ÍIMòS9ì6AÆÞµ*.ßû«é»{Ñ’0p ©°as¯aš‘¹:Žâž0`î2 TÀ ï¶ûfˆ›Èøªx„½2ð°(m8ÅV–™brh€8¨ãŽE’ç½awrÀø5BI<ïN´ ®1CH@zC‰-Ïô¦c`AÞ®cN*‘’”@ÇzƒjçŠn"¥w'ï^v\ûRö¬&±è#~þ”Ò(Æ Àâ•‘ÁnØÑaóŒ`üÔõèI¨wà3^GÃd7<ÑÍ®° Uíü1µD“¦’XnÚíÔiÏÚƒyr]HÆÿÒ•ÃçÊyçÚŠ«œäþõra[¥XŽ?j©„°É=ëKÂWвDžÆ« FZÛ~¾Ôh­òrkJ8bäŠ!HÕ{mµK}\¡ûP–اlÖŒ‡ÍQ§E9N ÉûT›n Þœã5uˆ l(VBÔ¹ª>H&´Š98ÅN‚{Ôû+"ݱ°ڼЕQ‘ÍiœÈ¬ìvÃqÚž§0)ÎGÍ^3¸`B-–#e$ïAkc§•ÀÀÉ®–Òd%UTÉÙ#êNÕ¹Ò’st‹“‚{zVrïXߟ\ëè¿LÂ%uzî-W…íŠç>–¶Ñl¤€®‡QA¨ñØ õ¾)éÅ׺¼åQ †?ZÄêƒ1ÍGU¼9Á=½k“ë]TB[Î3…;JêJ;mÞ±æ½$œö¤îI†¦$õ‘Õ/ŠåW?K‘©u~€0¡Û_ÆÇÌØû×!}{"‚ÚˆšÄ¸ëRD჊<}†Ê⃭~涬úŒ1ðË·½|&ßꙀÃ1ßnko¦ýR›—=ê§XW—ÛaêÐ:à°aHu‡†H™ƒ·ï\?Në6Óþ.“óµj\]ë€èm{v5¤é8ÍêÝbÞÑÉ!R6!©?§úÉ»¿1CMD×=õ7ŽîÀ©e=ˆÜRÿLŽmÈ…²XliéÇÚ~ŸŒB¯qÿ1Îþµ¢¦9§¼ÀwíXŸLõ!=ªZtøWJ;“MÝÈÓ\XŒ~fõ§0Ôšâid> îAæ­â ‹,ƒBr}é¸-B[«»*/õ¤š[Ϋu,p¯iʼnüÔ¼hÑé¯YÖß* ã]/¡¦ºÐGðÔòy'Ó‹ v¶žr (þJ‚{™/_KÀòƸÜûš¯Ñ4îìãhÙuãVÛ ä~¡é²Ee$v‘ÒóŽæ»;8çºbŒ¤"œ=ÍORéÁát݆’Õ6¾?Z[»AíG²º@ŽEg‘†ÊÞº®§Ò-ã ’‹æ>õÍß@F³ d/z|Ô}]Vî%Q*„y´†æ°ÄÌíqr÷¼ºÆÛöUêo­œÜ>œaŒ•à{R k4ÇÚFUíŽÿyqofn#H–mÜnÃÜÓsÚ©»U*I` XÎû{æ¯ii,qˆÀ/$óð*ñA:–%ô–9$nG¶j-”³[ßcÊ_n)z¥5ÝÄ?™Aö¡K×b à‚EpÉkÔ¿1´-z?P™räãæ‰$VÚÜ~´€þqÏzòõ°Í'ÓŽ0Ib}1U“¤”êtí@Þ˜æþR“èò)íÎÏÕn3‚ŽqUN©pFÈÞµÒŠ9Ò=x¨ÿ'‰wÈŠSåßGàæ¥êmœ)Ûzão³¶+¥›¦Ä§¿à#$¶kIYÛ[,å‰8î=h2HSlcíÍ6Ю\sIN¤’2NjBúŒàíšlI‘ÀÁ˜‘@äïZ+Á#aÍ,(ó’FÇ¿qT×:{ž(Áv푽\wjcé)>RØ"‰ ¹Î=é=œïóÚˆª7;v¥Z—IËmŽh†äŠQçhøªÅpÄn3¿ju6š¯«{P™5 ƒ¿lОRÙØwÍJ˨+JX{«¬qEŠ%gŠô(ÅO8âºeŒ‘’擼‰x§¨¬hì£'|cÞ¼öQdð{Sž Ž@íV1¶@¥z-Àíì¢Â…8–Ppb¥z3 j;c½_ñ%qœf¦ª]Ptø cÂØÓôxn Š­¼²É'äÏ­nZ£ÈeÒMs÷ÕŽŸ‹dÇÑ`Y2ííOCÓ AŸµ1+G%›æ—{µ)…<Ôÿmm>9 ‚5Ùk©«víµZöâBØØïTSâ¬xªó¬úæVD¨ÀçúÔÂJóZÛ†( 7ùâ¶ç­Œ:–%\²îpi)ƒaFséLº(ÙÅ.Ÿ¹ª¼Û+`dÛêé$oJ[:¦Å†ÔK‰Ã };h²NWÜRòN§loHÉ9ÖwÈ¡®ÜÔÎêÒÒvÇ4­Â8çmêc¼LGíšÓk$);ÕIK]èÃ*T©a''‘êv ÛÈ4œmBgQ?ÞªJÓ« ôöªù󳜚Ám[çm±FN°¤ägÚžÆË˜š óMº¢ˆ²ÒRõ&l„R“EŽ‚€nr=sBwBúsßÒ±£ê2|T[Ë6œïÍ+0±Ñ dmÿz²Ú&N e«(B ò;÷©Jå×!G¶j6¶ðç[ª’2ÇëA‹J°c5›qytç‘ï@E¿í°ÎEi7öÏ©?N ¢TÁ Ïj΄äžÕ…¥éL³¶ãŒS¶½>Ꭰ1ªñÔ[Ž“¢\ `3Ú»+©áƪ¼µpý6Âd#%«~ÒÖ\ã$ZÛŽ$G]Úê%ê„ÂNN=«‰ú‚å®.Xn9­ÙAŽ “j庄àÝoëÅkyÔùa›tE Fð+PJÂ= Ërk7ÌNØÀ­~šBŠNÜšÒOE£ÙÛ + ³°¨½\à­c¢8Aà°¬‹ùü¤'æïµ*qÆ}ap°£"ñÚ¸Sl×O¨³µv_QAâHKÎõm‚HQÅe÷VÍ–Õa‡HÀ®kªÉ™ z÷®¿«X¶Zäf…¦»l©À9¥A2 &¬ûÖ§Aë³XJT¶)¢8#Ú²HrøaFŒ}£¢ý_è¡Æ079­ÑÖ!e×¾Fã0}ë*öMx`7‡u¯1£Ó¥Ô²“ÜíWÒ²~Õ›Óä §4úJ­œ‘úÒ”¬B§›Ú—¸Œø€í‘Á§#*bmÎpMÞœ±“ƒŠ ËRwS¶­ò=iÈ]‡Ÿ×fýè>_FJ‘Æi›|74J>Ú6%]8Î6Í3 P§~Æ–±BŒHÉæ´ láÒÃq½mbÖÌ‹„”ÿššì Aî3Þ2:”žGlÓ]8¸+Œ®7>•q6œ²t“ÊÙW´Á `ŒO4º¡üE£Èé:ÀpE\‰£¿ñ“K¯Ã ¿JI­\:6NvÇ¥zÝã6À¸Ú´, 6ÃfƒZHÏ[6-ËàñO]Á)¼'Ü …`Ü5Å« Ð3F9Çj~×êZ=2¦“ÆkIJ¸¿ªž{va!`ÞµÂ_Ï!rúõz×Òþ¬”¾©c •^DÏŽßàÓ1Û(:´ý2°y»’}h†ÝÂç9ÏaJôr0‡EÔÚˆûS‘t4!AQ÷§žbX†*âM€zRºÒ^aUú}3 Ñ?ÉB.t)è¯X ^*Ò]ê\æ–Õo$LŒŽF;ÕãéqjÎßj—¹ÒÇcŠ»LÌ„ïOÚoqV±…N2 z;GöÚ¤1,­[YQ¹È<J$+Ú?Ëá/Û4í­¿ ûÒöù‘ÀÎ>krǦ´‰‘¿Þ•³Ÿ³çzú>›hä |ã«kÑ­ˆ¯oÓÝpJÔµµìN=³Zq¼¹ýN™mÀJ¿à"Úµ¡”óŒóG1.FàãšÞrÇÉed5d.Hõ­_ÃPßµTÏ#mAn !NI¥k̈ÒmÊÆU@5ÌXÚ4÷ÆIA'šëͺܮ[}ö¤/"KPtHÞ´1:Ëø1(Qƒ«p6ÆÔNrælȕꅟÌù'“šŽˆàù—`ëE¦ëZmI¤ÀÏÞ³ïUyÛv¨ú>‡~(=Rqà•z‹O˜æºÌÁ݇¡ãÖ³`Ä“aœÓ¨Ï!a¹ÎÔÇJ€¢»2àÔIív²:Ä@+m“Ú°RßK±ÀØó]'WLjvÙGïXÍŸL–9£¯±÷Yˆ™ÆÛïYÉB \f·:’fFȬçBÌj1PÅ€Ue`ô¤æ‰Wr2+æ¬ÅW9ã5±Ðz«ÛÈ¥‰ÿz¾j:ª]ÌŒ:dœ×º7TG•£‹b[œóXÖÝJ+»LG¨ÚƒÑ]mú‰|’IÂæ´õQ¸úW€Qc+¾¡’kimÖ8af8w>õ`Ï&†Ô àfº)߬1C(˜ÂƒFµæ'ªÚèOÔn"HÀKt8ï]T«¥PqïVúvÍ-zz´«7 v‘ÖúÄP»è^Hªêásës”FD`©;Vu¡K}77s–n´µ¬âö_på3•SÞ­u3´ƒE³ ܾ¡Bu^´Ë ŠÞØ–cÉì=i;Þ\9º:´± °¡u7xÐ.UYÎà5T4ÖvM¦†a©›ù böä\Ì/ðшù¬ž ãÅc òqUµ¸xŒë…K’Ç“Céì'ŒÍ(æLªšÏ¨%ÛÈ䃞ÕI¢"dÎ$Ö•ÑXíÉ?›'ŠÍre‰ÎqŽk*¸Íu.²¹SëKéÓœ¶ÔñŒÇ°Å+rʱéÛ8Àö¬ìiÒLWÃfÆÏY?PNMÈÓÁS]KtvaúÒ=N2cV9&¢®3¥¼*3’)9É#<ƒÅ?ê“C(Pe„ø…HØmYY«—·ÈŒûS±*Nq ç檑L¿lÕÇ–MDƒƒžÂ–è‘?ðÈ;S¶2øxc¿¦ÔÂrp*ÖÌÀ:¶pNß5R&š½ÄYTcWz5ɱçj!ž=Ø•'ƒëF´ô‘¾A§‰Ö¥‘:v;n!¥½Fw>œ¡àö=©Ô@’i}”žk^aT[¸KsñZH˜Ó*¨+ÜVmØ18!u(ïéOtË€W ¾­«VvŸŠ"Q‚àää N6e-òœì hX?18ÎNÔ¯X¡œ:.Pó¶àÕÈ›N*ø–ØÙXw­œD !ÃŽV%„ñÌØ$¬€~µ­i;lª”›p#2’Âê6qeƒ;JrÂ9íÉuc$g‘é^ê²3@XqÛ¸ªý†êÒËn­ Ä‘ü¦¹ë™ƒ1mû×Kõ9[Lê+ŽhÈÜ0Åqü‹‡"‰çF3ϵ50ŽÃšŒPlÄš¸šBÀ)5œTiÉá& ÓÍye‹Ì Öl‘Lã“¿½JÛ²œ±;U}«N´Ñ ;©¤/dÖ0 Vh8Ú€bõj?z0j-Á ’¢!òl7ö¡hпœÒÓJÃÊ\‘Sô^X ÓJ1ÅeÉOތΎØ;š^gÁÆ~Ø¥…°µÊ7jFÉ4㲩vp6 š ‹ dŒjÇÍ3`ûšV)|¤Ñг*œR°¡©pSqœûñB‚2Ä€1UoÔL[Ë{Ò3P dmдޤ“ŒúU\lGõ áˆÛ÷¦ñ7ü™5FrÇòlSeQ‡< ´Q/æzÆNú?j;) ÀõÞ½,á2Ð$™˜ïûÔQb!W«~ °Îr}ê¡O›9ª;¬g`¸§= 1é5ò¿~ô6wFÎ*Ï{. ¬û›ÍryF{Uäˆ=ª‰j@ü¢‡ØÓ' sWŠ3ÍM©KA…Þ¢(ÈòèýªEÚ~\äúÑ`Ôí©p7惈m«N1µY“…{ÓŠ<»°;RsÜÅ8cšx«º×VBç<×¼`­‚w¦.-íYòE#¶G½jœ2ó#(Æ~sC/Œb¨LÈ#híÀ$Ñ‘>ИæÕžØ¦â·b¹*všV²DqƒŸZѲ:£*ƒŽ +„Õ_|š$Я‡©w5g·‘î|§nÛV’Z7‡æ RÁŒkyt0ß5¿Óz³ÄÁqŠE,×Åó(ù­úpx¼»“S×Çå=«žúâìtV·ÑMî«Mvcó\ªÁuéQ½1¼fÐú±QÇs}:»ž§¶´t#è#桺òm¾Ô…ÇNžEÔ¡H?­(z\€îqšëæ×7SÛ¡N© ‹æ`@õ«Åw‚‘žù¬%é“•ÀVÖŸ±é2€LŽÊã5¯5›X_„(¡$fáƒÉÁ; µ#‡jÒŽÒ~ k¥×Ô*€°_Ì8“èöæ('“OuõÌsîwªÆÊŠcÉÖ]tÖrFin[°š$Î$s» ޤΛj¥Šøò‘* oJ{;è%µñrzrKA a·­>R(£AŒU¼óZŸNÕ¦#\SwñåSÀ$}«*y•GéZu¼;†osšå/®Ù®u½M‡\°hóŒçoZÍßËÍ”ÁÏ”•Ûù3žÛdRÃÒW3do^Õkk†i1‘ïY÷é¾ûïDé²®°¬ØÏsµ&»Ž‹1tTúæ·údRø…÷#ÐV?Ò½od”®ýwtim‚6ä óÛ5¤‰uŸHË®Ùc|?˜µw„¢:rt©?ØWξœac)lŽ+è]æ$¶Y¤óœùEmÊ+¬»¹{~Ÿ„D´¬»œÖ tŸÅ¸[‰Ú8Tå€îi±4²±–G ʹÁ£˜Kb¤•rN«ì¡xæ²³Ì6¾sÀ,3EÈ, Fd—‘•=è;§,p ›™BwÀßjS©u4”øP’±–Ûr=3Y}4æyçfœ¡ÉÒ6Ï¥sÝW¬½ÌòI%«Çl£»Q.ú –Com YrKº´“É,ÁT¶C­–òæáY? °BùäÕ:M̬’¥Ž¿ Ò’šúYÛh‚)BNNü §1†ßDiüL /¥HjÎ ² ?Í!ѹÆ5Š­ÝÚÂe^à€ÇœšxšÆä·É5ŸQQLc_ÁÞ³¦‰Õ‚Fw5³4#u^ “J¼8‰89Ⳬ•‰Ô-ȶ.ã“ûÖuÜe¦n¸Æ+¡êQ+—sI=°gU»Ôb˜lVPëÁKˆðë€79?zÝ{U,¡pqJÝÛç[…Û Š^'¬ŸÃ‘ çUa €Gæâ´fMé#vï^µ„ _lÒñ=(ÖâX°yCŒÔGn|%eÃdâ¶á¶ÅSØK2v.B`>Ûf´$Á\ŠÍ¹€³l6õ¥`Ô†0¥žçÄoCV–þ3Þ†Ö¥FBíE…e©Y² &½³6H…†V 6çÒ§g#'Ò•M‚„ Ïzb+$ä÷¤Ö9yÈ«x³ óŸéOêh HFäóV(³ºü ÎiæÆ7>ô&gs¹äî(ÝSIîcöߊˆî•¼¡ñö¤’CfúÔ˜±’¥F9¤[ZAÃ.@5@@lã·­$’¸À µÊÃ:œJG­H˜ ôM@.cÖ±Á_ç÷«ErÁÉ©öŸm’rþµYô§œÔ™~jfºF\x€mLô î$Ε‚É$£,Ø©–@ÇË&sÞ¥$'8£ ¸…5a›8íSsF™Å5Ë1ö Üc‚sL3üBÌp@Ç9ª«p_j½Òç'HϨ¥£r ¿­T9 èc†ÕzrÒ`€gzË7N­¥·ÇaEYH^À¨Ý­+F ¤m‹ qŒW=Ò6`­?n뤂hò ¤¶…Æp1ÎÔõ„q£n ŽÙâ°àºÐ@$ ZÔ¶»GT•¤êS÷b5c'½-£\EHø¬ƒ(Ô J¾Ù§lîÚ1æŸZ¹aêÓï&‚¤QFŠÛðj§¨Ûêó2ƒéV“ªÛ,}ª¦^i£…H ûR/zÌÁQ Ͻn¡Ç!†þõEžÝ7-Ǿjö±K,’dçIlb´‰Ñì0+* ¸s‘ Øä*_©Æ‘¬O°ïNP)@äC1šÈ¸Iå#lïG°¼Õ2yG VwP¿B £Äü†˜£ª†9"¢È‹xÜæ;ÖKݲ[™rqŸsU[Í6Îäò„ŒŸj_Eå­AÔ¼n¡§?”`SóËÿq½qßO3ÍpdÉÕ¬çjén§"»r\¾‹\ÕSvÁ9;×­žà±àðk¨ú­ŽÅ~àúW8‘e±·b0++}­u—Ž6çz ì mèv¦E¹$`╾…Žàç·Í†dêŽ;úPà€™ƒN˜ Ú¦( o¸sµ-'iô µ´ÑöÚ¾Çg<3ØáÜ1Æ9¯Ï>â{w9׊îþžë3òçäÖüw?h³ÚÉ‹Ÿ ùPœ w®Ó£]Çød…FÑþcï_4éÝDO|¨àq]…úÁ  Š¿"±Ýt[”»»ð•†§cŽMoGã&XŸ-Û=Íq_H\ {&\™[òÛ5Üô€ðt¯>ó2’}_é u‰cŠÝãF%‰Ç°ÎÜÇ!Õ­Ï è¿ ©¹¹%‚Œ‘é\¿P»K†RB3¾3ÀíXôÒ3L'Àbò¤Ÿ!é•$6¶ÖÞ I¬Ç$ûÖìöìÒ[±|7&“êV‘¡”± ¨7$ã&– bCx“\VØD…ÇŸ;šk¨Ü›8$xdvÆO$|Ò$Ã’0&™[ =ûš²‡ºÙ†Á~ÃØR´ä.d%á”–Œo°÷®ž8TÛ‹œn@Óé\§P×’D0 <)ìkp_êúw¦¢«kY ríHs7…6·'pz™¯¶§^Ÿ3Ù¬l ;dZ Œ:ŒcH W?z˨¸ÖæK‰dÀ:vÜVeʘBnÇÒxX2g;ŒÖQBB®3Þ£(:0’ÜéÕCºˆrÃr  zѯgb7 @«OH‘‘°*‰‘Lh1œ×¤R¬¸ÿPœ¾P— Œ£”ÉI œãfÖ=aµ±b–Ž# ÙÉÁ5£hQ´Ὠ½F%Œ¬€mœ ª°i¤PÌŒ@Î74k¨ƒä+·ªDU­•^F)Í¥‹Bö®d2cŒŠç:¤n.DÊ|º±]—àÊÊÃfË[Pöò«®­,Hø¥€ÏÓ½CÂUn‡ö®· =°–Wr¾ÕÇtë"Öòˆ$ Z]úkv@xã§>“O²ÆÒÿ âAÊÐî£Ö¢D©àŠÐ•-¯?‰ðåþµ|— Ò+)V*G©$g‘¢œÅ*àZº±€Œ‚#<Y³Ý-Þ˜æÊ8ÛW½1m$êž ÇPÊjuXÒOm‰SÌ9ØïQ7\ŽXHuwÅd\^hl`ƒšÆê¨ŠgêoXY¢õY¡žbÉ…ßJC Ÿ+ú“Y’]°Vö4T½+±_µazT†no¥€IûW­ºXd{ÖmôÍ8*T)kÓÝH‰Å(ó·åóQ©ñí™AÔÊ-nùüÄP§.Ìucã5ècb»cÛæ4|DTÆ¥—y[V•mý©Iµ†Û<íSuË~ÔPËHÑJͰÛÞ­ øƒT˜?zBy”7ÎØ¢Btß>ô˘×D‹AÉUõ¤n|48òIÉq†åÉ¡´šÎ¢N3ÆhW£¶ð+œè<äSCL㔵«&‘€~Æ´"œŒZ›pZCÂPARx¢Æpíè)‰!ØZy‘[ è”¥Ž†ÕbJãâ…u{–ÁcéYKáï¹>ÕèËM!#qî*ÙùiSAéV .HÜZù“‘¶ÕDòKwô¤V®Ðˆ÷;ðj¢M÷Øš¼rë:p»÷¨h<Àê9±Hƒw æ8Ú¼“6à{JñFä÷Dˆh4À­pÀà7ïFŽY6(äwæ‘1¾û÷ŠÀA8¤M»¸VÉ`w­(º‰hÀva·c\ø}CŽkÆãHÀaÎàQ:£O_^¾C)lqïIÉ› Xã;åª$gq“½°($‡VIã~Gö~;ÇQùø÷¨›©Èóß4ˆÊ1zP§ pvÚ—•„؃©•.3ñL~8\2†aŒn+ÞçÍÇ¥2c1((¼lNkN~L ûèà·ÄlYÈÛ«"ÒF||äù‰ôªÉ²$š¥¼r$¤î­_˜Áº¤ßðåI ÑQ tç„#4½Ë«Éc…;äÑå¸AfWôø¢vx·ÓRÅ–~çlQ¯/Ñç1£ƒÍsï)‰p…¹Èö¤ÚiRC!ÕœÕN†ë± N¯)Ï5”–ª’ @}é‰.da¸'ïPÓeFÕ¯j^hÃ$=+.ê5ÔFÇïZk!1A$ö¥Y2Þlèy¢ÑM,F7#Ò‰ a8ãž+@ÚIýèRÂËëF™Vîcs4r=½* ò;‘MX@¯Èßµ9u6:o¥®]®Õ±’jíD×ÈŠŠpÜ×)ô½†úÁÁÚºy&¸ƒ0÷>•Ñ>’í¾—‘@c,þH÷a]§D¾‘ãie`‘çʾÕñÎÔäFî6~1ù«è è]¢ÀŽUFìkNj,ouþ§$ø²ƒòæ#½skjm‹‰HMg'×Ú¶f—F³\ñ¨ÖEãà ®ÄšSäZž¦ªS6R¤^y_T„dmù@¬O¨ŸÆ@Ø‘’q°Í7 iz¶žQ‡ØHuiZ[·ŒEÆO&§Ë ZD.nM¼ $j˜'×j;ÁVKÁF®yªô_o6Èăì1LÝŽKƒ¶„P£ÜÑ}œrÍ*ËÔãÖ@Ö¹ÛN[JÖÖJ_òʦv5‘nÍþqGðÝɸÞÖ%) ŒÊIit°s¾Õ:²s7TIs‘Û=««°tx¬Çɰ'Ö¹n{•0Öå”.™7ÑÞ¢Å4îîÄQ߸ô¤f]’VÆã}¨Z_ò4ÈÁƯµ4»Û…c¨ N&‘ Œwþ´ÄŠ?iKiȽŽ3Àb3N@ê÷r1ʤsAë'¨&˜]Û#ÐÖmÄ™hŠðSšÐêRøö µ–žHÊ·ØšWìÝ ¤Y³‰Ðç|Ó×($ÒƒœgïY6W¢/w­µþ,xDŒoš¢Hs¥p9ØíZ} k¸t;ùv¤dRU¥$Œâ›éR¬S¤§eaƒHVŠÀ·6»®] jƲµ1ÝM ‚s5½3~3©[Ó½/Ô¢ ¢þ!Ç"«¬“[Iâ¥ßÜT<`\"á¼Ø5ª±E{dÎZ²UÚªÌ|§Nú£nËCcÉÅÁG°Cm“Ú’ EpAÈâ¤]Eáø/Îr 8L>µd¢fx°0wÅ ·ŠDŽHcµkõ©.)üËÏ­s—ÅtF¤ÙÝjæt›Z6TŒƒY‚id!ØóVšã,Á²G¥B¼c×ÏòtJÈ}†sFêË–ªcž%\÷©’î=8…ÚV„ÖÀ{ï@pcj;Ý’Å.Ämù;Ñ%,Ñ’RWûÔÄäªðªg=³GyWeûÕaÏD¤ñO,M c!É$Ñäv'8ª€sŒŸšxz•ÀÂÔ˜æ—'}ðjÁ@lÍ;iÁÀÜv ¯T½½ŒÍ±ÈÔÏàåAË ½iµ½H—êÔõ¥ì¼«:HeÜÞ—"@HÈçÒŸ3¼“Ài>´åÒC¹vðÆÛzÓÃV@ˆ1;й„³l œ–àgÒ‚a§ŒÚ¦ê¥&Ñ6²¹lcj¨³gq@;æ¶"äö«:¤jÁ>´çE¬£fʇÅ b,áu ëJYƒ) Ëšb®;ÆžKdHÎs@hÎ7¨ã$äÕZII0QïKhs¨,@'h£`„ññ½Qã˜÷ɣƲªœŒS9A–.rJ¤‰…Øc#}êd2>þõS¯>b¦ÔC”ª©dœŠ³éÁ\=qGðY˜dSQsiÀÛj¹…KõŒ®OÞ†#u:@?Öˆ‰0cœûSPE#6¦P;|QjuëS¡F°ÛÑ$¹€Õqk#kW €wÍGª-C”'#4²FÌàç=Å5klÇ›?ÒŸ‚Ö% •>X4´ƒ»HsÿÖ‹¥£'C}ªd–FßP?ÀËzUêoqâk,I=êfcœdúPžiÛ!Px«GÈ9*îj„‰dÆÜw©œºþFq͆8àÔ¤d`éQƒ*Ò’`{WŠ4C‚A¦]BÊÛzUÖx_Êõ+è°”o–«úñW¸‰tç'Ò/€?)Æ= BB&Àù¢Q€ÀŠþ\T<Ä ®»ú e­B4ƒ>˜ K¦¿¨?‰YQ0I"„–Þ3eY¾õ|x©°>ôÕ¢»‚§9Ò¦ÉÓ #1ïÞ¼#Ó³.Ç×½i=ÒÎqžii®` å ã5Z~éÕ€»üSÑ–“Šåã>”cs¬éÒqÀ©°x'u+ƒKʈ‡*¦™’2WRœ{šNã^ÎqG‘øñ :š¹qâÇaM¨ñ$!‰'Ò¡í¡-ÀÏÍW–޳¥óì=(.ÁÏ­hʰÆãlŸn(Ç··z<‡‹5Âhò¯oJ^\ääzVÔIcm±‘A¶U˜d«}†æ,‘ºg*qB•˜@»ÖœöŒ\(ÜJƒbª7Á?4ïEc>ÖáÉÝN}ëÓH ÷§ZE; æš¶Aý)N´àm0>õ£ÒcIcŒïH|ÅhtìÅ*à«No²ê;އ~»¾´{éÃ$Q¶qK}7 \,…Ÿe½WSµÖ]pŠv#ÒºåôÉkÈg~©¦q&v8¯ ýf4©¶›© ‹HÄ£ ;Ö-ꟕ˜ãæ©ø…uÐF6æ’¼¸Ó]\wÍM£JÎÊ“’{ûÔx^Ù¬éîN¯ÍïCŠè†äéXákBy63ЬBCùNhaõŒŒf˜‚FÈ`Tà‘p­¤†#>•V‘“8õ¦WNÀsïL$Öêžc¹îE9#9YÏüÃÏ¥K\阼ӗ3Ú:•R‡ãµgKn1êh±5cu¯#“ÆÕ*Μœ|Õí!Qœì~(’Û3 FŒ¯E:êÉ#ØÑÌêØ°²ÒNXb‰ˆ¨mSƒ,Á†æ‡â ‘ƒÅQÙ5DFŒ&à 0Hò¹aÆùÛzôçXó6}¨^(,tœ Ð¥—n)È1lF8£+é\ƒíJÇ09øÚ¬d/å#j~$l]8Š—¯ÁlýꨫìhR[³IÆx¥ãÂ]@¾{W’ܺ‚yÇ9¯Dª€g\Sk2"ãN=%ÊCÃ)¶NIÁÈ©\9eÇÞ‰3‰$Ÿj “ h1â9ܩǵ]ŽµÒ†ù¡j-åͲŒã?Ö•V&È:v¢¼™#õ5¨¯; ûU.¥·D#H¤¯Ó2=‰88¡ÏÀcž§£ÒA'cPmÝmJZie¢Ya“M¬ªˆE;qV j#cŽ1@’0XcŠu'`™p2£9ô¨–U$œ(ïŠXŒ–ǵ-3ê:F9¥8 §Œì1ÛÒ¢Iõ7”Ò6èHËc·­1Š2ÿµzNƒ8f'Ä^lì6=é›kKv|’H4Ã[ÃÊãZwÿ’†èÄpÑ®ÜL¯PÊþT«$pÉç }jLJ£#Žçà–,—R°8Ç…]Òà®Ils°¡FÂ=Ô1÷¢›™Y0«Ï4•°»ÛÈß›V;dÒǧÌ\y°ÇzoĸÛZ®jZÿÃÈ1Al's`Ë¥ éÍRÃñÇqí‘Oë’P$oj„|ùt1ßÒŠ6BwO:¸Ã¶üéxŠâC‘ê{ÓD"ʬ£;æ©tÑœx+¿é”-(Tq¾KQÑÐÜv¯G´BTž~*dµ>#‘©JŸ<¤î#i…`â£ð©€Äê÷æ¢K+¦|†`=MC£Ç²q÷«‡æaâO *z˜¡ ¡É9õø‚ÌÛâ¥îd øÉÞæØMÁÖ½à#gV2}ë.Ü*“ñD‚K¹›èñ=´yÖåÆTvªKƒ‘ƒžÂªöS´¡¤ØšõÃøxQF¸ZXÑäÜŽ8«Ä…g>Õá:¨èÛÓÖÜ`Œ”Þ‚”Cm©‡#ßzVx!„yIìE2÷J7%F9Ú³oe.þVÎx¨ËNÊ.\[P˜»r>iˆ­äq¾ÇúÐdâc±÷Ûj¹ƒÆ„ªÌ|ÛЙ–3 ã×5wóŒÒw@NETÂË 3|¿ÖžéÐ~"@¹Æ7ȬËi&“rv®‡¥YÈC0a¾üUóϲµ¹ôüRñ!*;œÑ/¡g’Há`7ªtÖžÚÕ×fïW†P°ÈžMtϤÐÚ(Ñç}'zè/:¸[Ka±8È5ÎÛÜZÚÚ ¦Œ;Á4õ¯ük³ #йô“Þ¤}<~*R]΃»[·SÇgÓ"¸wPXw®6 9n:úNdHá€eAîh½c«¹½1).䀾¤Ò´c~Êwšà»ùcEßý¨ŸŒXîГ¤œ…é¥6=-Þf€Î9ô¤-®k¸æ—Ò¢ª:éîtà ã4÷J·5v9ÔÙûW=tÒ41†oœzV÷OºT ¨Œ,|{ÒŠª ¾¬l{Ö7R…cŒò´î§fmˆË6ÞÔþ?rc.v¥ö#Ï$–ò¶ØÇØ Û¶•&»”Œn¹¬¾°¬,YÔà®Ã5eÔ ³rÞôn6‹2\´¨˜nkc¤ˆîcxÁóò+¦Ü-Ü "ã=Ç¥¡õ -:¬¦C€[Í#ÆÇQ·>b7S¸¬¹Pĺñå>«¦:o"b»äVºà‘¢aå'N ͺU0«R‘ø`¯íZ·±èOïYŽº"b@Îv¥Š/’ò6+œêÖÜVDÁÎõÌZÇ”Fú¿Zìlrê±€éÚ‰ KG\ŒœÕ/5%©ùdƒÞ›Œ»1IœÅ'õœ™ä-auü/UIòtžGÍhô›¡ ÃÄÄhmÁö¬Çnl‘¤o7¡Dæ9|ö4n ëçÆµQ¨’»©®qn² Eˆ×ýi¶¼uVG9Œ¥s×ÙCß;R¢ ·óG3ÛLÅŠŸ)¡^0šlœy—=ÒÍ/ñI6ÕGˆ“*6r(#Éj47ÛŒ×?ÔYŠ úÖôÎÑ¥»q\×T˜¼¤psSÕ<)ໟÍßµJÇ¡· žõÇ#ðæH®Ä±ù¬ý«&*’ißI#ÖœŠéqƒ‘Îy!þÒ¦+eÕ’ ÉÜБä9Æ}…%w+:ß4óÀ¸ÁàT, ÅNeD¶ã8§#,Hg>•©aÓ:Çg'zé/¾Œ¸¶°üBdzŒv§}”Žc§L©(2}³[×]G§þJ•fÆ1¦²M M˜wïB–%àšX­%pd’BÑì; ±é· 6x#Ú›…#WÉÁ§šëÄM¼ëM8Å‚Æ@?)Ç¥Ú<ÃcéZ$œ€£b©1#œ 03š4E÷ø 5±“m€Ï¥h ıúQN‚0Ry¬¡bUÆsDkS‚qóïN° Ù9'4XR9v${SÑáY«a¿ôª>G¡Þµn QùHâ‚-”‘“Ç ¥°x3FKvíQ&¶l½i4jª¤yÆß­8µm+ê,>Û×…Ì+ù›F*"*÷⌗'3 g½î­‰>sŸšNîþÞ64üO1¡,1•ÔH,iyb@?JZ>¥nÿ™¸îM-yÕ W:NqÆ %kN  ÑÏLjïñ\ÌPªLßõ³oõ2W`ϵ?I”²g“Hw V€éqÅr¤¹:kjתô[~–³<‘ë8šßTtÉãtIIßíYήý"÷Œ“q¡°=«Ú•›I|÷5vXሷ$0+6öpc%ŸƒU"îE §ÇÓÞ€Ó°b¬_~Ùâ“ÜŒêl‘½5àÇ/0äSÄh–ÒF\ê9õ£5Â)ÊF6ÛšD[xr†>)¸=9#'<é^¤I¹¼vƒò.q¶E{§æLxŠ3Í[ÃÔ“¿q^Ž2§Ê¸œ ™ÑJØ „ª‘íH™¹Âäçmê…‘ DçÚ®…[pFyØT^… ÞëQƒBŒ˜†–½MåξH=¶¥æ’OÌ0G‚¬J¦ÄoLùRY… ¶Õ{;BúXäŒý¨LP6jÓ°SRa½gÝñ¸—ª]²¤mì(‹̸'íLøÎß¶zÞÝ„„·é\÷­úusÍý³®:iTÖ¾ë=‘A1•É®‚æcèÁðkÿy2¸­>>ºGËÏ?¥ ¶ùb{WUôý¤‚%Õ°ô‹ÑÕ A$öÅv0Á¾§ã"»~)վܽÉš4‘8¬.­;xhÁÎõ¯uv&ÿ—¸þ\ošÁë1É„”’>jÞÖb›ÕAld÷­mea†äFøâ°¦½iáXcÇqÞº‚È®q•¼š©SLÇV1—¸— èNæ³úT±]u'¾ʇqBúšÕ”<ò13J† ç⣧ʖ0FŽÅ¤nS¡¿Ô#‡\§XÎ@Ïz¿DÄ»ŽI†Ìsj^Xü^”Ò°¤<ÃÒ›é12ÞBÌHsð*)´z““—'ñAK£cž÷¥úüêfŠ%8ËdûÐe• ±…;ŠŠ¸Õ‚U3 d¹-½fõ{ÁŹÈ,'ØP±K#3aNÕ“u9¸ê ã<{RòÁŽÖ[”ºé¤)È'zÅxq(üº°in‘xCșؒFkB X™öÃlG½;î¢"æK¿±(íƒZ7‘ƒ*ÏÛÖD»>yô4ÝÐkP¬rC`攋鮠âí­Ý¿—8§úý¨š"à`‘ª¹ K•‚ðLdŠìb¸ŽæÐ!mÊ`UOibÉ'‰¿óƒYŒÄ~)É¥ü=ÊÄÇ+«I¥˜æñˆSU§b„ˆ”·?5½Ò_\~…y¬q¦ÙO|S]2ä%óy³U!S—Ò¨êC ¹ïYRÜ/…’|Ãm©>·Ô]‚6 ÍbuÞ¨$„mÉW¡#ÓHVÝ´’0s½HºÕ N®äw¬é.uFT÷§/.wZÏUK‹ÜŸÊF ¬åŸ20'#šQï“N–8íKÇ)2]Ç}éƒwV¦l´[%ª•É ^£ù‚Ÿ¹«-¯P”`®âŒ=uÑõ”w¡MÕø¢·ÓWQãøäsSdªÙ²õ[5‹p3ÿÖ³.:¶ùÊ;(¿äÀ&Y†~hôx@þ#(&¦zV©Õä# IÇ|×Tœ(ýëb‘Ó´ï£>¢^•f+Ò²–±dêS Nh Ô¥Oʧô5Ð%¥²Æ@àc颀®3ƒî)Ίås¿æW,Aþ&ÿ–ª×·Ò¡\VçáÑFñsÛ´z_L$AëNõ‚{qdõCz*]Þ¢³žõÝ]ZGü ûâ‘’Î5S®0?ÓK̺˜åMÇR•‚é;°jÆË¨Ëƒæ;×Q0D Ò»J7‰„òéã~=úsPtÉ44£ÓUY:2 ƒ•ø5ÓComódûš Ç„­å8_š'pïÇ„å˜vŽQFTy6'$ÔÉç˵.LЏ ñMË}œ#R`3Šô‚&'ô¡B®w-úšf+/à°Ï¹¤$.lÛÕÛ¨ÁÜñµ=JQ˨·©’Æ<8+ì £ Ä’_˜ÓK@ã9.ÞA„LQšÚ-[Š0ŽÚæ|oµ˜´½"8ŠŸ@*ÌñóëR¡˜gÐqQ$lNs¸îh5$RWr1ŠXP^=C>”ágP³Åy¡3àdÎ)ÅK•£m}m%·†‹çÇaŠÊ»ŽYe¥Êç8ÍhÛtä0Ÿ1\ŽÔ)¬Dmä—'¿­Eãn¶þßXM ¨Áæ¬ð,Ž0XgÚˆxv?­4Ð"  œÍV3“HO…»y4¤±ã.7õ­;Œ"‚ÙàRêŽ[òç~ýꤒñêÉ!rO->IÏÚŽP¤+Ç÷ÅDæiWÿµƳ^-²æ›²›ðç Ö®—v1œ™”íEiú{ÂEÆ7¥o?µsÏ_¥äê!“+ŸlPmg"L¹'¸ª]^ØB»²ŸP(ê–"ÓÔãµgdýFÜìû«õ¥žP‚3§Òî˜Ý”íëG?RYˆÀhÔ;͸úލEÔsÅûO}ÇGÐä‡:|<Ù¼-šâ#¹Ç×àW-ôÿUéò¸Õ"†ïšííº’[ =ë«âØË¼°œŸ‡—I(+êÅ%DCœWU$ŒÐµsÝjß\bäZéÏLµÌô°WÉ¿zÚé·Q@Ìæ¶Ó°•‘Aï¾)«_¦­Û-¬Ÿ]¹¢'æoŠ ´êÄøÄ ñš-µ3%NƒkÒÇØÔÅÑì•À$þÕ£1,d-ÿØÕ„h¯¬ÀÚ§ÛO³ƒ¤X 9<àšÍ€>hqxŒÀàæ«u"Ë€~*G¡õ$JJ¨…âBÎ ÐO}«ÑÊ0ãÚ½pçV’w£q˜Ð…ÈÇÅ(ìÆ“¹c’(¶wíjÿÃ`úR*ù]ANOjˆ”2ãŸZ."uí¸:™>r§q¸ÍªÞ ¢Ò™ Æsµ,‰&K}ŽÔª¿ñX'3ÒúêØ’tnv8Ûz¨%¤ï§94v@Ø'äQ#vòóß½=g%Z'æïÛÚ¥¤¶CÇqV’ßÄlmúÕ<9”¼‹öŒ(àþµHØ):¹ö4Äd›î}jóÁ ÈϦ)y.si);ùqšb8(ŽÔx,Ù† 64ÂÚh|=¹£ÎõôKÀR.GÞ‡4 £¿z¼ìˆå}7Ú¡Q´çeÎ9§ÿõ7šD$Ù;å}(¸)å+“ëYg­ÛéÀmÁ¡üŠÑ ù>Õ¿eX%r©À£ÙÇ)|±ÀùÅs¿ÿ&Œ Ãz#ýO§‘MñO+­žႲ|ïJI!1?­s+×§¸|$¸_LÕ¤êr±ÐÒ/É"•Šñ×G¦)“RìÇ×zZòÒSÎ ëš“­¥»iT7<Ò²ýR KJòYéÔ(¡6çT¶”©e#ž@®^­%Ë‚÷ô­[.¯&%Žw÷Òx¥e>yŸ·Ó>êÖ–6mŸy1¶g5—}Œïr±ˆ”ÿ.w?5È'X¹!á®5{-E÷Vë2Û\‘é‚+;ÍßKŸÞ·‘á(úØ+3IÉ} dÉÎø®n;o©g$-³"“É<ÑéÏ©\ʤ÷ßšÒdûMøíúŽ€ÞÅ,E›Þ•[¤…“Oõ¥!úSꦄQG|ïE·ú'®Ì· 7ÎE.½Eóñû÷±õ5¶ƒÌKglšùͪ“ñA¸ú7¨¯1ð”›èIµj—¨6ß5Ÿ?ûW×?äMÿUóx0ÀßïB^¹{ø&}×jr/£-UHkæcŽÏNÅôÏLXüœv9$Ö¾˜çøâ—êÛ˜°øÅY>¤½›,W=‰®á>‘úr–U]ªëÑ~žŽM¡P¾ÀVŸò~ÿuÁ·V¼f$É¿Pî§l$9ô¯£Geôê6•…[¯(é±(0Ú®ÃbGjY _?´‡I·˜±îV´žÊóÁÕ.òEu¿‹am¨šÿ$k;ĵsäôá—¥_ÊIh¤;ðw«/Fº-¦;oÞ»{*n"Êÿõ¡þ>E6Î*ózrOÐ/q—M=ñŠªý9xÇYƶÕ×ÍÔć ûКì.ÚãÒ¥[®~Ó ÈŽÜ)ÏÅnCĨ³ßsǽR{‡g_&ùÅUÝŽ7>ø|õ‰³]Mô‰j¨[Ͱ¢Þàôöyœk”ŠâqæLìsTºê²Èr9º'˱ç™ÕfA鿇HoŒÝÅ ¦„ßÞ´Xb!sæ#÷«•4h%’áÖRµl‰Ì}2}”-å_SSôÝ{F¹‘Fã cšwÀ+l^dFHÍhLin<A&_¹Ë¶a+\;gNûÖÝñæ2Èa¶õÏõ©’£ƒã$zÖVtqÞµI Ü ªíV$Œ°“\’uS¨Ç‘§=ÎØ¡ßu]bp5Q¹=ð*¡³«½Sñ¡®1œŒñ\]ÏRa:Kâ¸5ïó|Mê>f©Ã×|]c ¹ãzVk•’™9²æêi¤¶ æ³&êAHpÞ´°ôçQŸDlA;VU¿Q)u[þ÷0œîwâ¹ïŲÜ'!H5ô«[°-£•O'zÛé}UM´Íâ /ó{¾¨mºlH­æã¡Xõ¹N¹òžA5R¯¡Oyø™3«f4íÿTX^8ÉÂÒ>kŠè½Id ³9¤þ¡ë„Ͳ§jœ·ºVe×mÆ{ö®aîŸÄr À9Å'{ÔÖáUÃDoŠ›´šØñÚ¥ã¹`s]©ËVwO8Þ²íËgÀÎտСyu®2yaÇ °g ê65sap[1!ojé:›k!â 7ß5±gb¢V ;b‰a¾w"]ÂN»IÚéΓH!™/°í]wQ»k ‡â I";n8ûÓ‹Òzg]´2Ú²A:Œ®64¼oG²8®¿Ð®zdbà Q1çµdF—eïÚ¾ŸÐíæß¦õ•ñc'H”œ‚+ëo¢ÏH±>%³n@ßö§×Åyˆ½K\Œ*AãM; lµ&©3ÿ4å²2:œÖJÌzA I¦"uCŽvç[8±–sëFxÎvTê¼S!Ö»1¯iR¡Uri»i7ëV•Z'®sÎO‘Þ/جΠªàq½c¨7^*0Ë+±çG’%"“A×ú ¶ËdàëF—^Lê>•Y`dA™|Üã4¼Ð2*)ÑÉôÍ7 L4“J£ ±;ú׌±#eU˜gcS¥,ÓúHþ ¨XÖ¯V£ŸÒ”§!£ïUÿˆWÐÚ3ÚšÌO4ª„ Ôjm¯Å’8ÅxG0b7ãƒs‡Í"äŸAKÐñ¡º$gA·j$O"¸Ô6ôëy‰šy$ŒyS½NôíÂçœ÷¯ )smnf*XUìâ}Þe zf†ñ4—Ðã§q­‹Eo&¼·lÕ²LK&œ•·+ï뚬(%ç:þÕº«ðÏÑοÌ}èñĸ,£'ªdŽ#’à è(pɧhPàqš~Vý"üsŸµâY$o/ïFµÖ&*ãïÚ“Cr²–r0ièeHÁcß¾ÔYÕLï‰Spè JNyá@-·¥k»pI “ëšôqÛI} 7j9æÏµys×ÑX§ˆ¾Ìp= Y EסØÞ¼ºc‘F=¦'„°E4úƒ˜­¿Ut,dŠ´×:ßby‚Æ«.Ì”eUfÖÀãÜTÞq_õÔûT:<šBqÜS)vm*NxF] DI‹GÞ‹¿¡Ï?ëµú3­Ê¥Y’<ûOEþß©kÝA‡¦u1ÝÎÏá´‡=»THoZL$›{×lî¹nO§8ß@^–ÓêíǬßA\¬y–ôíÛ5Ð2ÝÆu|“ü§43q òÉ3ÜQ¥{e[ýJ¬×®}µbœƒéŽƒãO1aÈÖqLøÙlx™aÀ¢B‰ ’@lpM-e¤èOFÙ ‘ŸÞLèÑc°MûéEƒT…õ#ëÊØc–;mJÑåO*ôøXéèØ ´EËø8‚Ž6¬Õ™šà+6±¢Hcñ3¬0ŒÔéyØ"Þ³>ÖêGÿZ–ê–*‘F;¥TÆ$LÅ*©¬ù¥š'#Ä J&•>ÝRò?)Ò>3a<¬[[X‘ÞëlIÜâµ!(u+€§’*wi÷êrÈ…|f]<`â–“¨]“îk8+ɨ€Ûdj’űžãŠe´Ü·—&<»š%­ÄJÞ†#šÏœ;…)—Q¾¯HÒ´?òÀ^rh¹•8¥CHS^‘ùKmšQ¤¸,Tí½1_ 8=¶5kˆV4Øîh9ì¡3ä;ÿZô¬áq¤ç×(ä®´`Ø?§µy&¸A‹±Í9R‚[¬¹•›}ÎM<­l_H Þ†³<& ‚éžh,ï›Ë‘íEªæ¶gŽN²~k:vXŸV“ñLZ^Ç,YŒ{æ¼®ŒXËŒö¤­€~8…Ð!ŸQ^óÌÚ´è^Ù4¥Ô™”¢1ßÒ¡LÉçÛèM°ËÙ30oc>´U¶ÈÅzÿJV¢Ñ§…álàœqL­Ðe,#%½­ ç<~A™FGô¢³ †lüQåvq—ˆïÎô9CäñÇ;FÈ ÌÅ’sYϼɷڟ’;²¤ñžÙŸá®šB¥O^P^¹#%Ì‘Ê<Ûš·½] vsÅ îÆP§Pþµ˜ÖÒFáÆI´çägf¾¿Òúݤ;Ie ª4Kþ¤—°GC*ÇòW»¸‘R Ì Æy¯«‡¶›¼ê ¦4ü¹æº'Ë0§½ßJ*LGmÍs½W¦K=ËJñ†ÄWÔ"žÞês´ZöØâ©qÑbhIe;d•Æ(êZsŸ¥\Æ¬Ø glŠ̓49ÆZúwYé3˜ÿƒnt’q\ÝÏGê(¥îm]S±±ë»?Myã_<¼éóƯëŒX2LÊÞl‚§kêöK5̉*6T`dWõ‡L’é1+„såÅ_;~Ó}½EÚ$ pFÔ9¯O‡£Œë8¹ïšódäþæ«uïY£’1Ik:õ\×€=ÆAíQ¤°Î),ó4Š œÅ ]”` x5NùûS,/žÝõoƒBê3´Ó³çóAÁÿÝK)-‚wÅ#ÀðàœV‡I¼Ðá$àûR&3ÜTi8ÎE?Tu£²(Q"s½v?J´O“–q°5óΛÕR;_ L VÿÓ½@¥Õ¯˜é-ƒ½>l… þ%:|Ÿ‡,W_'Ò‰ƒÆ—Ë!ðÎIç4§S´·’ýnÜ·¥ô·PéSÝ/MVXç'›cZNaiÞ£k]¶Ž$„Ç# ØŒ+‡’{¿¤úë@cÕ;vý«èi×­º7Ôg¥u#®È}{R_ãOA[ΕS±xÂà@U^gé©éÖ—ßUôybŒˆea”(wö®^¹õ@êô¿#HІì9±þ}[ø¨`é×Ò1Ð1Ç;S_þE[ÙÍÔ’ka‡aÃÖ§»¶pÞØ¤îd–v7£*`=ÏjXW¿~Œ­ÂÊpc\öÁ¢ÅÔWÀð•Wß½;|2¶Hï·za­PùÌxýèÖ}QcêÄÊxâ¥îb»Mk_B{зE%•Zœ€˜E>•>2¢J‰`.ŒžôœPÜëѨø§ã–(ÉBùnÙ«£¾5˜v¹¡¬2\$3ßPV Ú_9eÛ-Í-®âcáî½’VÄÛk)ÛïW¾Yfµ®õ0Ã2êñØ#Öª‘[E’db£RþÏc`Ù#ÙçñYy⊱\K„Ó_jMΉH‡: îy¢-߆§)È«Ýc×–¿‡ËpÎù Gt o±ì49®Re8…›>´1˜À Q†Àö¦réë[XÛ:¤Üw¦ÞÇÁ:‡›¾i ÄÄ7Ãzi. ¨VDRÕ5[1ëqn’é‰ ç¿­K›|‘â±oJ,Á‘—Õhq¬ù +0ÆÄQ÷<’Û)Lm±¡\† 6*ÄCǬæ©)žÂøHªyóf8r2—$,Q(nõ¡oÓ€L™pO5‰TkG_ÿZôIwrଌ@ÿ«7›~©Ý­WµN§¹RE'%Ë,˜C©G¥4qB`3Žs½!%Ì ÂŽûóŠ^8¹ñÌÚ2Ü9RUw§cY’uŒÊàŸå£M2:ée•[¶)ˆ4…¹¹¥8›íCžéœ…õ§áËŸ;æµ¥é"ÚXÞðJÑ·p23ê+êÞ¶‰òzÈ/RéñÛÙþ ’Dxm$ö£uY-ŒRÌ5¬‰«V;úR}W¥^F’_[Íø›&\´l7Çýª: õ¤¿Hµ­ä~Eb«¬pj§K"|®¾QÖîE·Y¹q¬Gò3X_St¸º‡B{»ˆ•N2§;Òÿã_Q0}L‘DÀ(|zʶú™îº#XÊÙp±êÆ“\;Á‡#;VHIÆËN´CÅ$ß×4u¶Ô2£õèñ˜±Ä6ÛÑE¾HØý«Q-B€vÏz0qŒSä¨ÇŒOÍð§HÛjÚ†Ú=:†xÜšŸÃ†‰E/#ÈÈ@®ûy«C`1¶ÜÖÏOh"¸óÁâzjàÅ<¤ÛÂþ8£ÈäŒ!Ó”òESü¹u‘Œo[IníÈ*NÛÕŪ¦ÒZ—’²9»›PN7犵…çá4«‚Jœæº`fH˜ûšÎŸ¥;©}Æ)ÎÓ×.ʹ÷Ihˆ-åÙˆà×%ÓØI/QŽR³FÞF K§ãàCl¡ Löòš°†-&rÇÖ¯û)xÌhõ.¿7ÔÝNÞ[’DÑ®29®¥ÿÄ·úpô{Å2* *Nø®+¡ôùa»2µ5=ƒÎíª5Á<Óþì§yæÂ]&âëüÜ_F»#dJêz—Q½ë£]«£‘šÇ´éÿ‡uM@+r+~Û ”™s¶õ_'ø©%+ƥƜc"¯-Ì•¸4ü*J®†8<€i©F©•ÔNÛÖ;u§‡5• …ÆO¤wÆjÈFLdi"µÖæâQøkfqð§znÚÙÆRêÔFqË ê­ÈŸÃf•Œ>)ˆïâR*ÎüÑ¿vpá¢=Ni¤ŽÐ‚Ë g¿¥qÐ\Í3 w,8$Ó$åÇ…q!_új¿®öÿã~õl!VcÀÚ±¦›Zc'lsBKR‡]Ë;çmEšk(b.c‹îÀSÌEêÔÚ%¤~w—9Þ›ÿ0Hü:3ŠÀn«ld+†=0jd¾ˆF ¹Lÿ¥y¥á)ÎìiÏ×nD… ¢ãÔÓÖ—wÁâ%¼#îk•’er$ó‘ÎJš¬]HÉ'…™UqŒqOÀmŽŽ~§8“ ÑñJ\^ÞJ¤ …Øv¬‰®"TpË#ð*ðÍ4±ð´ÉØQ9Áý—¨hÝÈy±Ø]g„Ëæb擸µ¿?Ä•F1Ú“†;”RâeV'aU‘U³'P:tG1õÅ-=ÜδGàPìÄîäË&N7Ú›b4’'Ö™f²dwñvò€pUA›ÏÃgœÑåŠÝ\ɜܞßzŒÛiœ“Áµû4àŠ69•ÂzñFü$O‘ êO½f;+“âJA…^) pÄFŽpy¥ÿÔiáctr„(@wÓT½¶{e,y^æ‰gÖž$Ó*:ãl‘L™ÂÀêú½¶©·¼Òv±ûf€ìªÃ[{mWºš`¹ßj«E x3YÎ4BÁ’u(2ÝF*æñYLF 7”ªÜ[Lt¬a€Æ 4­p"ê-ð”öEIDê8Oñ"'¶¢x«µôd®àïBðžI¼9!‘Xþ]C"Ѝ±H¾<UÜ”ÚEÔ¦"º“GvÆ*CêÝ¥bnjўó¢Hêm£•†Ô9ªÉqhŽ¡­˜†à“ÅOSÍE§ÿ‘Y·ØƒÅź[(}}j·k%ÉðmÌJ1’I¥3C ÌdÓØRðâÓ]Ib’ë3¨ÿ§zB;ÔD+â9îsW¸k…bŽÞDn5f³'Ã0i0[×ôùç=Qá‡Ì×$œÂï=Í]ܲ,3‘¹,6¥î:¤‘B¬¾ôésãF´Èص8¬Ï¡$_ü0J¿  ®áu¹Žô{'X$3Ìúæ´m_¦ÊÆä«Bx&¨HËnÔýb Å$`s5²i#±Þµ/K"f £wÎqYÓÝoqÚ±&,ËØO@˜—_á6÷ZN'¸Æ˜ã62SîEv–ä†ò·5+æµ!e:ÖȰî@ÅVX_DF,v…êÑ}9õ%¯VðüHÑðá—;z×Ñ¿Äo®:w]·yºdŠÃG™TãŠùTËLØ€˜ï:ž) ³rsOž¬ëSd}/ü¿K‹~§g€g-© ;ï_V—ª-—B[K×UWB±ü­_˜þëŸäŸP%ËLâò¸ºï®>¶ÿ0èÏ 3¤ìÍé]¼|ÓÅ\×§Ñ>ŒúÊ èú—Gê2©’ÉלZãê‹[îŸtñÊDMuáÁþ`6Í|ϧu›˜¯­åˆœH†6ÇóUçê1tËhY•‰IXªvÉ©¿6úTø°Ÿø•âþ¢2— „àf²lí–+"X+Rk„¿¹3N7Ú›™`ŠªŸu¬:é§<²íme•ò‘nvÞ˜=6`ºXé#“MAo4Š4³ÿ—jÓKg*…¡”Ù¸5§9cÛ[9$wÅ0l€\œ/½?=ËDÆ5‚ŒÐâŠâéØ1…çj<¦ÍI™¾Õ0[€42oÛ4Ô–sÛUÕ‡¬`íEÛ¦pçÖ‰K’=1Œi^Û ª"£ä°P{‘Z1ôø‚ÒîwÁ5Yì,â{’Û wÙøÛôDk+mfG‘¶+ÐÚ£°Q€¹çÚœvñ†—ŒžÃ½l¤Q¤BrÜoM7ÿ ]Z®€†sßÚª[ùÃê톧ś¢þXÔ²^Ž–†1™gµíš1Y¬”‚ðóؓډ0*±»ö¤&²]BKèW…¡´Ý5Ô<¬¼±óK4xà°Å€X0ãê­$®5‡Z‘,pÅ©l.;w?j$7í?NÌÉŸælS’+uµÓ~¯ë>5[x-Š¨Æ oB»êH5ÕÊ/ŽÇ!@Ùiž³0Oø>€#?êsYÑõO¨d—kx"Ïrx ¾¾š(:œÍ‡wbêLq¡¥oW²¾êÌ13A“¶EU—©à†½ã Kз¯ðÁé÷äwм४ۤŒ³ÊsÜ—Ú”¥ÞNÜui›?Ê»U-º´s–ð¶;±Í;"g“Neée ›†cìv 9¶Ó¢2ÒÇ¥k1º9|pØÚ¡BÆ3®ù@ÔõëéN¿AÌöÉ´Ñx;ìqŒÑ–pGâ2/ú³A¾¶3ŸFlõ 1" ‚TvÓN[g´ËW¸ên»Àäçc‚j«ÕaQfå—¹Å:°C4@%¨õÇ—àÐ9Q#0óãš_¼?-ë«\9Äg@>µ<¦éc€)¡ÓCòÙ$§Š£XÛ#ˆžBrE]çÿG¹ú+lÝB Þ & ç'ìÙ’e-ëŽ+PÚ@cÄsT~]@ P;äïŠ%ìµ›Ýn¦ç@ãV*&ˆ.]Ë!äâµRÉÌYuý¨×q܇U†898¥§8ôÏ·—*ÂÇTy!×JGùüjà ©ÎxCs›C†=² =‡…<Í_ÿj$;ª¼J™ŽææBÒp)ß ›ÌˆÆõu HS(È÷¤yXRÁq"Ü\½צ؅ÌñO'±m«TÅDY3 ¹Ú–QÿæÃñ€3Š6 $míw\Õ¤' "ªclzÑ «Ü(”NPmúÔ¬R$`°.|ºŽøþôVVpu"²`’pp9¯,R30vÐÀ'lQÝš <;aÜg’p4_Ä) #l©<0§?é(ÐÇ8Yä`§mDdSÿå–ì©'ŒyÊíF¸¸éN›¾H>`Ãj 1G+Ÿ €Oåòg•9“êƒtÑEƒÅΰ<º±Š½‡Sº Üc<ŸJ`tÖ•‹*¼›î ÀOÃAlÚ§Ž8Øì¤œÓ²SÛ K}Óä•ÊÍ =Áæ¤ZB÷ ߉tÈü¬64 SñQ„¡{…ÜФ1èð瘌n9¬ýhþÛ~ÖO§áiLªV@Np­¾ik®-_S¹E#ʳ½3dÐÀsO§9,$Å5$¶SᤷyJžóUš=XÀ’ú;x¼!…›:I;|Ô›ë›x@ŠbÁ»ãŠÞØ*ø‚Æ%>㊥ĥ#% µúàU{—WaC:;; ™¶ªt~™qÖ:ˆgŽÇríFêôë…Wk¸#Òwßg»èÑÇ¢ ˆØéd–§Ý)ÔúdÝ.éí.cBrtº¶­_¥Œ/ÿ*$œ2žtàSý^v§Kºö!sûšr~·'/ÓçsŽC)À˹ŽáQe‘¥n7â˜èİ ÛêÔ|­Å7^M8ÿ( òÌ7¥šâ{«ŸE +Ü¥h³Z…¼i2{Ú‘eU”i•$Áó4²$qL ÏâwÉ­hbàŽ01æ$ƒSõö'?í /¯[\eW@Ùà ­vfHä¸À<ãµzåe ºMmŽtºÐY®%\ÜÞòˆÔûÓšcM$Vñ·žrùÝXU]ƒ*´sJ[*ãj†µ·E%¯nd,rW#tüUˆƒ!ì ÜQhجk,¬3<ÿ/4ÃXݳmµÇÎݨbX­ÛLß9ÉW»–iBÁ3/æÁÜT{ý+ž¹ý®¨é; 0C‘Ãö«5ÔР†-“¹UÔ)&žw›øVäjf-½Ä¡šy€TßB 4IÓIãž¼¹•\¦’?Õ¤c4ï”(ˆÏri«X’M̧ýR¤³ÚA!DP ŸÌx­ía=Ã-£Çq@6]M—ÄOG¡4ïãÌA‘F Ë}h~"Ê€JÍ ;ëFÀΚ+¨ØfEvÿJn*b7 <š®œÓ`[Û+"ò·¡È4Ý”Éá”hÐ67'šW¤[Ž~@YÙ@$úyª¯O¸âéuÇZÙ‚âøÊÆãN \ ­Ä·ó>–,àmý©mL¶±§HòËfÈÛni[¿¦ú…ÊŒ8VåIÚºŸ©$ˆ†hÑ“òàQžã¬áþ3:‡(§µZæ¢^ÛÁo{xÞݵj’hZ]\ʲΠäï¤l l<³àHIäïßæŠÝ>uŒ;ª›VÔæ‰¬ûk-‚¬F; Ö‡§Ù¥–ÆN¢1C[i–üãqCð“!‰>½©µÜ:D>‘¡Gr zá£@ÄB§Ö–*G›voz%Í—€¡Œ!†?Õšœ?:»=ºD4ø$Ÿj¤1»¼ˆ‹Â÷ ª#â%€&wÔEy–啤Ç>”O´yp–ÞçÃ; ×­z,—¬D>,Ò6q¥(‘ d…UÎvïó[2}Cõ Ú¤æ+h“ˈc±îiIdý9éúx³”A?ˆ%›W"‡!‰˜ã'~;Ö£Å%Ì…ŒÊÎÃ.ÅI9¥ä°º$%³¹f4ìõ E$oc…†6:›ý¨ë`ëʦÛå©xâ™%«s¸ œS%t)i•#ƒA@&‰7ÜzŠˆz|Ò+pȼåŽÇ,$h ¸ÿH¢k¸‹l2¸§§lýÂïb×T®Hî­Í1È¥Zy°=MVX¯™–F o+½+x,Ì“³Žái^“çÇøé1Œå™×;oš…éÖå²låcêNØ¢~nC¸\äù·ý(¯i+ëq#…)m¨Ó½OñM6ñyÒ$#nÔeuE¼ ”f“ŽÞk†h`Ìy#õ£ÍÑc@ÂY°ìš¨<ê$ê „ c“V’þoP*ÛlIÍZߤ†P€GœlqÅ7oÒÖQüà Ž0)‹åú+o<Ífßí± =äåü38=öÍiˆ£U ŠúA¤Z$>hò¹ØûÔèÜý¼/¦q*…8㡽ü¬P+°=Æ)à#Ô Äp1µWÉ<¡HpAÎ)Ê]tjmƒ°ðÃvPcƒY>pÚ¿ÔqŠ#”X³–8ìÇÒ‡‹¯["éï¨ÒÝ/3FÔÇhá¤L(ØÞ”W*¸É'¾;Uä–3ù!È<‰ø“”ú°*³Jô»\æÒxó ÔX´a—'|‘VxELP¨pvf©[¸g2ø×æ;3K ÑÐÄàÁ§ÃÇ›|“F…Y˜²«`úRþ<Ñv÷¡þ.bp)=€£›#T<œ wñHÙ˜íúR·Ùä Õ ÜŒsAñZ;±#;ê9Ç95gð£.vS½Dwò¥Q°}#¤v„ö×ËÆCÎ÷ \\³¨À ŽH­uºJ—AÁ$ Zæx’?+ù‡`94åNXÇ‹ÙØ(ɧí­ì[L’K)éÆÂ„¦F‰šiÂälïýj«!uTEö,3qMÛ†2J]¼ªD̬xæ¯oh€™& çc€i™–$£¾FÎI¢ä¼–›uÖF3œNâò;i<0º—²iõ¸‚ÊÖšœîXšÌžé¥`W;m“Uô>šw]FÉÊĤ€m?Ú=Ä: ‘€p¡ "“D¶UÕ ï›1Žiy3è2Ý6¡ž@Þš»M‰&0ŠÐ£0Áà~”Åœ­it„Fcù[“XϬ©‰ôö'&´!6¤ü4ŽøÙ˜äÑâZrèÂÞ#O2HòáS½,ª±ª¨ÀC5z𯃸RNçFq^ü[ZÆt#±c¶¥ÍN`òzK³¥‰¦FÇ|JÉw5ÌAgäqÆ^¬'ÖXÉ a&AÏÅZ—ˆ²-¼Lp ÿp*ÿIµ›ø‹ð[ðè ˆ9?½ltž¨VÚHïmž[þ6Q)s3³±ÌPú©<~•¾"ÝCçôÎ~Ô³Òg¤Í/WdÌr˜Tž4 ªZu(Z·Î¼Tȉ,Ê¢þMDlN3^dHõ Ù®ÇDÃÑVÛÆ‹&é£-Ê$j.“g$Zäˆ9cIÀaX ObN¯š´³Ä€*ÂİʒHÇÚ£©oÒ-¦ÇKéÂ-8€&2 R{kKtM …¹W‘JÄפJFqœ ¿Zm¬„ë|‡;Ž(ç‹¿bJZX—?Ãdóæâ¼ñA ”F8c“ƒS46[Æ#F|gh¹öÍmð¡!„€OåÁÁùvUâöÒYKhÑË$hØÇÜRj"F: ªŽ’Ni¸Ò$ “Z«ÀÙ‡½R)¢FX£²¯æRâ¼!(Vó|x!SŸÎ@&ž6R@’%ͬ`÷isŸÚ•}Ip¢Lcùr­zàJ¨‹‡nJiù˜Ý‚K›Oˆÿ,ö¬^£ih¥™IlåñŸÒ©mÄL$yš)ˆÊæaڈѠ„Ít÷a›fvö©Ñ¾^ƒV DF8 µr>ôuãPd‰M”¥mìlÝu½Ìàg:‚ì~hì-ÌùåØíSaK9û$øwÈžÎÎäÐ'·•Ø–Qüʵ¢îÒhO Ámß½j‹+7N UçJ 4yc>ºöÆÓ™$˜D£}'”IQg")%ì ë[¦t§ æi÷ÒþÕ}iÓà ±IЮÞ! ƒñšS¹hò—銈“8ܱ y˜X:C«·åÜÓÂ8âÂK rFt–ù4ïMŽÖ;gðŒTD´€Óµ~r2åü)‰PÄtã¸#?zªQ®«6 îû ÖaÓ¯ I¨.ËãíKÜÃîÑ,ŽXàïèÑý¥ÑT¡Snª§òœäš1 ,. SØcûT\á!22íLÝ1š ˆ®7˜~ô½´ÙfâZJC'þÕ5c.É8ÐãpÙÈý(3YÊŠ¬ãIî‚OÚee1*é2Ãei7\O™å¹H.a{˜Òâ xÓ‚}¨½g¯øÈ±ÃÐlíaC”*ƒV=ͺA™Hf#HÏægõªAÒ–8JÏ&…Îq¶Z‰ÔŒçTú‚JѤJ-çäùMî/È–b­ø9­ Û{fð¶¦YTn_½ ]@¦Üê<“ŒÖ•¯2õö¬WòDúAËrYv"ˆ÷W/s^ô+t¸Š'Ä!\ƒ©ÛjfÞÞ]#ø-Œ²mŠ~•á@Ãè5Í8å¶þ•*’H¸åÉÎç8­3ÒƒBªÁ‘˜Ö©"O0?…žËþô´xLÚLFY†¶dóÎ}(§Aµr]yè·‘4q |ksȲ?QCPž2Ü\<ÈÐ0?Z~I½O¡ žHNCžûše¼WPÙFs<þµðeÞVÒ”©T™î ñük§º4RÏ®eúDV˜ùf;lÇQ"Xac#URqúVLµ²xšKô¾˜cËþéÈ#èÖÑ7‡a!rr|[žÀÚ”¸ÓŽ.{såDmäw ’Ðîa–a“ãcØã¹qsd#gŽÍ3Æ@OíI¼0ÄÞ,ÐÆªÛé]Ïõªò;ÅýRB0-ƈdP»eŸš5¼’P`Ô;äRêhd˜ÅºÇr«°ûÑBÇÞJï¶¥QfýÓn¯–qm94«–uff1¦Œ"hâÃHÌùg8ªþš9e‰ßÈÞ‰ qþ$lʪ²êÆøP3^/qo†ñ$MCŒ þhÐ[ÊVF„¦µ à~ô¸s4 LÒÈ[Pl>õPXÁ©ÿò3g·¥R8™Øøa\öÚµ,z|pFL²JŽòù…yL-¨û;{ÕL,QàtT}gfómTÉYP´(ˆïö©3Heñ]z¿“²Ó¬@‚Ƈ!¸ ‘9q ˜ÛcÆ)+t2Ý¥%<ù³ýé˧—ÀÓ«\cl¨¥mžVˆ¸Ò 8‡˜ý,ZæHÀuNv9ý(/k#è)ÉüÙ&œ’åCHˆ{`~cûP¥™³­¢ðÁ>_j4l…á±U'câq“¾*¶–N$†Tb9òšq™feÔG>ùÅQ"–IJ* Í’*t¶)0yj@å²vx ’¥ÔÉâ©Ë,Ò[i?œ‚sZv¶ó…,‰§\ãïD¥9ÿ°X™´x¥=]cÏïO4¡,e’Ta£9¤àFK½]—Ç!W Sÿ‹r#ž7NN“JªzfÎ-f±…†ùÛúRVñ ŸHP ž=«roê"BÛr»æ³Ó§NK;ÅŸ@»Tî&_ox‰l|CóŒØTÃ49t³sÉ+“ûÕ £5¼ãO ¼Ú«$—Õe\ÿª3µTš,öÖ{q"¬³Jž(J°°•´øY$ì ªÁ“ÎòlïñJ¿ã¤Â²Í« »UûÖ¾±n£pÊ'A¿ oñP–/ ·‚wïÅ iðær±üÌÃö«@TÝë_åUÉ$üÑuiÅé·íM…íƒÚ˜KñÝÔI¤âH‹é çþZ¬m­¢±ÜeŽMFZYZ2Cb‡[1àÍ-'OŒ°u“KžR©ªEp‰ºÆºr?zu/¡47õýjç8©·N‘—bêy"¬,ãECx ¹§šádÔ¡mÉV|—€¸xŽv- =ýª½)é-Зrƒb4oI½¼ Ùðd|¼Ø¦gêm atï¾æªÒ)eñ¢·ÿ™ŸéS}—ÿ þäœÏ¿÷4¼ªÄië+È]€ûÓs\ÆÇº0ÎÒS\K¬!Œ…Ï›#8¥ìfžŠHÊ¥ãÚ)‡O ãRŸŠÎ¼êZ¥ :zÈw&½^­äèÄm}$%žÚ2§‚ªN(ÑÛÝB„G)ÑŒ…Uïó^¯R´ä/+,óhžòx™F éÕ¿È[‹SW[Ñ0aÙ±Šõz£Êë.½P,’šIQ€?ÎàÔ·N‘¤ø·ê„ï£rGû׫Ô_¼M¯zmÂ2[õ/(ÉLJŒÒ¬¶Ñ 1‘0ìJ׫ÔI‚URò&¸)¡S< ŸzfþºXÁ+FpH½^ªý b»´ua":“€IÒÞ®Öˆó.f ugN²F~Õêõ_³“Y†Q×1]òd~´Ž î}Uˆ ãâ½^«0í|2%æ Í‘¤GºÒ±~(1†7“β?ïµz½EI–°- ‘çd'"¥à’ Ï¥N±þõêõN5œÌÚæ{t+%ÌšüŠ?ïLµÌw•µ¸RÇ;|ŽõêõgÓ;Õö"¶\¼‘3d*E}ù«ºY¼êÀÌү告„¯W«uŸ•—KÊZ9AšÞ Æ1ûRò_ÜxÄG"øyÂç°¯Wª¹öÒ|_ÛÃüÂf¡•ÜlË‚?JÅØü@¦–6…“o½z½N{ªRèU.UÊ´ÌsŒœÓ1ɦ踊0NÚ°A¯WªÿK–¯ø5yÙåÀ'óÇßš‰, 3'‰áó•$ýëÕê–˜õ´,îÐÇ+*œ~¹­,BÊC5 pN¬Ê¬vS²)#>o18ßá-ÙƒÀÄ6ÞYœ×«Ô­oÄš*Ã*j->' ¤ LÍ2;$˜]Îß&½^¥Éõsè_ÇFú®<-·ÂçûÑ?Ìš2 ÚUÆîvϽz½NñùzßJ†»Èê©oͨëBñPܱ Þ\ìæ½^¥ŒoÉÐ²Ë À`„ t’j#YÕpש;)"½^¥}.ýi§A¦”ç–Ú¨“´LåC!åY†¯W¨(<73M è¥w¥¼[ˆË Ž0­ÎNMz½S>Óo°bi]Ø… ƒåÔ1‘ö¯M,’ã3ùr»šõz®CÛ¸­­Ç€pʱ†äÔjÑ,þ0,ñ•-¨"7ô¯Wª²Ø×·4h@DZ>¿z¤s5º4"Óø„sâõêõR«j×°ÈYÂcº`‘úÓ3É+Ä b(‘ŽúgÞ½^©µWü£døÒêmôA«ÝéTHu,L[QíýëÕêR³êå"÷N„.¦‘IÀÆ4ibYy!Ô˰(Nû׫զBžÇ̱x1ÆïžŽ)i’`…¥…Ñ›Œäãô¯W©rªRÈ#"],åÒ¸"‹ Æ<ÌÒjÛ þ•êõM¬•Šà¸E ò§sOZÛMn¤zKoó^¯TwÕ“NÅše‡>2¨aÈTÏïE†òÚE¡!?ÖkÕêHÕ.$±G/oM3m88¥¥ƒZ‘!†3Ÿþ1Åz½Uµ 'ãÝŽp(ÒÏå˜]¶¯W©ÿè +Ùf ™‚ã%H;üõíêCüBÓ€Ç|׫ÕsÚïÓ.êí×Â2ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFõIDATxÚì×{o×Çñï93»^{YÀ€ ñ…€7´i%$iLR!¥ê}óúúÚwP©ÿU+¥¢ U) ­š?ª(jn¹’€±Á1ø²Ûë½Î9ýÃc0×€kh~4;öÎèè|Îsžgf÷žï[˜ F§Ñ¦_÷—ß(»±Ce°ôÚrfè|ÎÞN?tt¡PX—£(mÓwã£?>Zt_5?w×ûC:ÉÙAzm~"g‡Ž†t+ ÿÚlE냎¢è £ýfÅÎûË£ew©{Á_YóÄrvˆœ¼ÚkóogLîX¡P8ñ££(ŽTüø‘Š›÷ãOTÜ8žõ/“ŒÙJ¯)æÌбœx8Q(šŽŽ¢èI`tÑO½YvcoTüøžyw™˜æCm>ITzmþDνÒq¢P(,® :Š¢ÍÀhÝGKîÂ/ÊþÒþŠ› Mí‘êÀ9;TË™Á½64crÇ …BñÑ _ùÍ—ÌÆ_ýxÞÓô‹<.‘1[ã^;ò÷œúKμS(fî ýû±Ÿû#»~E.ÝGÙ3çÆ¨ûÊc÷ NÊàŸ½6ÿל:úÇŸ&ïŠþÝÅŸy€î°—áM/±¯g”¶iPö”âñ‡^ÃëXÿΙÁc½6ÿVÆäÆîˆ^}]î>D_ö•x’2,¸«6ÀÒj4 ŽI›êí*‡·ýÖ,ï†{ÄäÒ'L.}B‡Í2ØýÛ^¦/|ž¢¿DÙOÐôÕGh±˜ØãÛ1!A–VܤV/QªÏ,µio[)ûˆ†«r~þ}Î/¼Ï–t{7½ÂÞî×Ylϲ`¦¨øIí‡ }qŒq±´]‹Rmú:°\›¥×¾ý5ôNÛû¦“X )›¢¿ë9²‡Ø–æZó jÁÕ{¼r®xƒ‰=iÓAìcJµiеk”ê³”ë3ÔÛK÷5Þ¯Ÿ?kî;Ówàû6“µ“\mœ"ö°§ëý©—ðÞp­yŽzªLË×`„„xï)7f™­~C©¶œÅû޻ïCÔÝ<–ÞãRí=¶¦÷Ò—9Ä@ø&sÍ L·¾&N×ozM]„„„> ðg±Ubº1E±v•Rm†jsçÀyÀ³n/ºkF›UŸ«£Üº@¥}óöÏìH?O_æE²v'åøKŠ­1:m¼§Ï3ßž¤Üœ`¡9K½]¥í@¶œSÞ% ˜`Ïÿ>¸ EQ ˜- `ø8„·¯¥¦òÂé½;Û;¿èŒwj°Í»LÐÜ´ ÷Ì®_Y2ƒ[Y0¯%¸ý¢3tUFÈ–ó®c©¿”€«À…$³g€ `:¹¶<š÷·V( ¶ÃÀËÀa ïÃæ“qÿ§ßŽ X’Ã0Æ`Ìò4M¢OÙvo:À©kÇoB»•³sÄÎÇžv mç‰cpÎãœÁyc‘\Hçâ0ÙÒ3¾sq¸7e`¸” Ok ´E‘»i Ÿz}À«ÀOý>UßáÎtý_„ŽÀ¬» ½’¤ëè«Ço* ïÁ{pÞ;hÇËØv¼ü¿[9¼'³0HW9ï»æŸn—žf“,~’@¿L²\jQÅwÝ7÷Bß‚ï¶ûø«À>2Õ'ìЙtØwx¬YÞ²+Y6+™î9ÀÉëèÕ™¾Œ¿žíØ]ÜNgéßYÊÇA;»Ì%}çsàTržJ¾¯qEß º/ô-ø °È'[þe`Ød+½áÞ³©pç¥$Ó7*;e;xjó>ž:¾œc¿R¡~9Ón;_ê!œy†ÌܳqÐÈU“-:œK Ÿ%ðY`hßtÍèUx›àw€×€CÀ°í)n Ÿ>OLÞx„Ø6ä£oþvS3ó+µÚìÄNÎŽ¸`aWmUCú:©Ó³IsN Í…þÏè[ð]À.à9`x´¹™-Á¾“Ý2M:è`hóA>¼òn6§ç† ¦G|P¬ãM%A­ê¼“ïÊwjHß z>²@ðÃdÛ¿ ˜mßôtìÿ,Ø÷T?Œ¿KP"53âƒÒÞ¦‰SóIç]iHgîÐë낾ß ì~¼žœ÷tï¨ö,mlZ+ éʪ†t.©Ûâƒ4¤G} ¾x øI²í÷Íä i¥ó^I`a- é‘B¯Â‡Àf`Ð,%Y†´Öøïòßмäð»IEND®B`‚gruff-0.3.7/assets/plastik/red.png0000644000004100000410000001172612055510742017123 0ustar www-datawww-data‰PNG  IHDR=^6u© pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFóIDATxÚì×_oÕÇñïÌþ³½öÚ‰½$¶åÄk‡x]œ‚ …K‘h‘Ú^qÑ›} }½hÕ×Qm…š ŠU$DUP $MB ŽcljãÝÙµ×Þ¿ž9§+ŽqJ’Ú!)¿ssvgvΞÏ<çyæŒc­å»Ö¢»<~ÈÙZ+gæ¼—‚ËÅcÁL‡hv7“¾98px 8}¿ÐÎF¤ …ÂŽ ˜Ïçs¶µ–3³^.˜õræÒˆñVo?Î8îhšhvpÖͤ;‰Ø‰B¡ð÷ÝÀæóùAçóù#øÁ+Á¬—3så\p¥Ømæ+÷<±H&;š^ˆf‡ÞpúºN …“ß::ŸÏg€—ͬ÷r0[Ê™Y/Ìz° µÁÙ“$š*»™ô‰ÈÁ7€“…B¡½ëè|>¿È™…¥W‚Ëŗ̬w ¸Z†¶_‹O˜ËÑìàI7“~ÝIÄN …Õ{AG·9Ñ äl¥– ¦Úzóã 3çam¾Ífm‚ ó½Á…ù×€×"™tã—;ÍwúºÞ) å».d¶Úø™«¼ìµð¤¹RÄÖZÍ#ÈÙ“ ¢Ù¡÷ÜLúÏ‘ƒo …â-ï/~þ;ò«_êÇÌ–fn`–kÝ38Lƒ÷£ÙÁ¿º™ôñ?üéó·E_üɯ-@l —Ô3“ô>?…ÓZÃÌ•ðg‹÷=‡wªE2éSîhúD4;ôºÓ×uy[ôæ–œ%uô{t?6ŠÍÃΕ*‡ÖÒjµ p¬Õêìûí«Î7îÈjçf¨›ÁMv’zj‚Ô±Ibg0W±s%L­ù€#ÖÁ,N$F$ÙEÐnÓ¬Ôi–Ê4‹õE}¼zçÛPSk°ôÁ–?8Cb8MêØ$=¹)|o®W0×<ðƒû´Ñ(A·³³¶F}Ñ» ,• ÍÛ{·æKxo|Hå/§HÉÐst‚ø+OÒºx•H¹†ñ–wˆ%°N" |ê‹EfÉ£Q,ã×»üÂá„ÏM? þÙeš§¯MõÐ}ôQâOã:–Ö¿¯]®a›í»:‘¢1¬µ4KµëEEFÑ»k஽e™•«ï£öÞãûè|fŒø'hOß }é±fûÖmªÁF¢8Ñ6źQ°–ve™ÖB‘úB‰FÑ£]«a°Xî&€WKçë‡ÚÓEÖ¦K¸o~Bâ‰t>=Š»?…ÿe‘µ™"n² kÁ¯Öð¯UhÍ–h{ËøµÆú‚°0Þ§ÿvι%¶Ð<5CóÔ Ñý½¤žÍRzÿ¶å¬6ßb¶Ú}¯Ë¿\ÇÌ,á{«<Íå;Ø„Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zh¡…Zè;G7úâ«ß9ôÙŸ|òenPï‹ÿ_BÛ{:jŸ£›ŽZIöWF’#Ó+=Cç*nGuí¡ÇÖGRT³ýfy*ýÉsÛ |¼XëyÜËô \ª&‡ÏVÜxÍßÅi™±•í·ÕÉÀOÆVëÀéí"ý90| µ/¥Ž”Æz†ù²š>»äÄš8›®°ÜüníOݹ«_ûÝq–`e¢?hõwÖrˆ½üøèkè|>¿” …Â2pø8f]ç…½S¥ñžÁ}«Ã竎»f·Ÿ ãl¹·köfï8`MøÍ¹½›{tDY™ØKu¢ß4†{š@X.…‘=Ì‹á¹õáì6* úqàYàE`2²föŸ¯v ^\%¸¸¸¸N×qqˆà8°Ñƒ‘šãú»ÿØ‚6XÀƒq 5øë`0Ö`0XkÂ+,6겚é£:ÙoWÇúZ8ÎPfBäi`¸B[ù|þ–Ú½€ÃÀsÀóÀD¬ì;pn%1ôU‹ˆl‹ÞÒV´Ýð:k †€ Ä6À¬³1v½:ÚK5»×®Ú³fb‘*P £x6„~F¹ 4òù|pÛıw‹!><L„ðç€Ãµ }ð|#>x¹MÄ:8¸àÜŒ28¸ñ½·Dz#Ökí:ƒ±Aíut-`)»×V'ö~2¶xaÝùø,쯇Çk@Ïç¿tGè-ø`0.ùgñ®j09ߌí¿â¯s›ùéÆãôMsíÝ6å®k×—÷&t£ÇÅ›LQÎöí¾D-\¢× !ô|/UÀ¿è=£7áÝ?L/Ç€ñžJ°wìl3:pÍ¿}äóï|xK1³!ºÝéàî¦t¸ÛÔ;› ÒWažþ+,®‹!´}·Ðÿ½ß ßrÀ3@¦·äï?Sô}"ñ}G3÷öß6þ• æRÉ$)MtÛåƒÉ¦uXQ—7UÞéðØÒvé[AoÂG€$0 <.û£{ÖR‡>oGŽ<ÊÌÛ°4ÚIy¢×VÆ’ms«aåÝ(Hg¶)H;¾{Ùô|70üøQØx¤žH•zàwF6 ÒÕMéB˜·å»)Hz >ž —ýa î6*ïÕð¬ÜKAº×öŸKyÔÛMuéIEND®B`‚gruff-0.3.7/assets/plastik/blue.png0000644000004100000410000001172312055510742017275 0ustar www-datawww-data‰PNG  IHDR=^6u© pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFðIDATxÚì×kO\ÇÇñï¹,°,f¼.ÄØ,¾¹·JçÒ$$V¬Fªú¨‘úh_@ßEžõôAV[¥r5­ÛM©RU©¢ªnçb›¤Ø‚¹í…½ïž9ÓLpbSpìæ7tšÏùÏüfÖ±Öòmkþ÷ßLT[vb~-8y¹`ž¾R pOÇȤ¼O†Sþià àÜB;×+Ëåv¥Ãl6;Ñ ìÄ\ÉLÌ–‚‰é|àåëáMÿ¿ËwéóKûW3)ÿt§ïœÉårÿØ l6›Ýt6›}$yy¶LÌ—ÌÄÕRÐóùšÙñÀ2}>#)ÿÚXÚ=ÙåžÉår“ß8:›ÍNÍ–Ì©¹R01[2fK{ ©¸Ëx:–Ϥ¼3Ã)ÿu`2—˵öÍf‰ÅŠyùr!89W2Ãsk†¶¹³-ƒÒXڟ̤ü×:}g2—ËUv‚ö·y&Šõpb¦üèjã³%C#øfS¾X¦–ÛÉ©åö+À+™>¿~ÿ‹?Kû§“]îŸs¹\þ¶ƒl­þ|~Íœúl5øþl) Úºw¶²TÜ5ãéØ_3)ïwÃ)ÿ\.·|KÓû'¿üØþì¥öu1[ ¸²°Öï¹=8ZKûʤüÓ¿ýͯçoŠþñ/>²û{bNKòàÐ>>/µ™+†,•ï ½ëA³ÕÄ`èˆ9Ôš¯žr¾öDv~®Ìù¹2‰.ÇŽ$yòXŠGvrµ`˜+jí»cÝ».XÇ„ž‰nŸVÛP«5X)ÔY)ÔY*ÔxõäЭC« ÃÛSyÞž*p°¿‹§Ž§xn4Éj¥ÍbÙ²P2ázžÅ`€xÜ£„,jÀ•bFËìÞÙûóBƒ7Þ]â®ðð¡}œ8ÒË©â|z­N¡á’¯†»t<‹ÅÐÙábBËr¡ÆR>BëÔ›ÁÞ~áp¢«1–æ+|¸Pc_ÂçD¦—'÷àXË'‹ Juæmìíמ¸ßk-«Å +•JÞ.pϾe•!o]Zã­é5ަãœJðÒHœ™ÕÓKMš&vÃ1ÕuÁõÖaž®k±@±ÒâÚbƒÅB•BJµ ÖBhÙÍsîÎÑÎUßÜfò f M~?åñè`œÇv3Ðãs©ÐâJ¾I"îa­e­°Pj3[l°ºÖ¤Ö °Aˆ50{·Kø;™Ú7{¶¹Í äì|•³óU{;xj$ÉßgŠ4Û!Õ– vý„wöä߉)4 W*†|µ}wlq| ›ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐB -´ÐBït•oú‡=Sïþ {Æ$ÝÆÿ%4kW¯ÿíoºÿÞ_Ú?ÔS:|¹Ý¿ïbsÀ-‡÷ØS~w;ô¯€OFbùïfb…¡™vâBsÀ­…{7*»û]¦;ZŒ&*vÂ~üxçKèl6ÛVr¹\ ¸œžv±ÏïXyx$–¿ïRû@|*tÚ[C?’;Žsã›øªê:@Ž6üê²;7yÒ醌&*Œ&ªá}P®ŸE•ý¸ ,EÏÖû³öËÝår9ˆûcÀ3À Àmë N]Ÿ…ƒÏ×ÏÅñ\p#¸ã¬ÔY×wvx&ß›‹¦¶­Sk! ×+†ôØc±c]%“ôÛÕhŠ.#èù¾¬Á­@wŒÞ„w#ü}ÀÃÀóÀÓÀ±¢ÓÓÁö¯¹ý7 éã/ggo(ôúg[ºl›ã^ã±B8à×ê›éR´N?ŒÂu)‚¶nú?£·à»ƒÀ£Àð$pdÕéíûØñVÞuôÑ>Þüç•4Ž9!Ã^‘Q¿`û冃-E¨™MÉ;Ý+nHßzÞÀð½hÚ?Œ,:©ÞÿÄŽx‡F3¼ùÎ4Ãþ£E›ñ×ZQ -o ¤¶ ¤p·÷ô]AoÁ÷‡Ç€£ëp#q ×V &î×inS ]ŒÖmþvé®@oÁ÷àñhÚ­è„t=yç¢PÞI ÝUèMxHÃÀ! Uty7i§í¿4‹×&¢±˜ÁIEND®B`‚gruff-0.3.7/assets/city_scene/0000755000004100000410000000000012055510742016312 5ustar www-datawww-datagruff-0.3.7/assets/city_scene/clouds/0000755000004100000410000000000012055510742017603 5ustar www-datawww-datagruff-0.3.7/assets/city_scene/clouds/partly_cloudy.png0000644000004100000410000001614512055510742023212 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<÷IDATxÚì{lTÕ¾Ç{ÏžéL§GK鋾h©ÖJ­@sŒz0ÊäÔø†\%&>’øƒÚ&7j MäÈêýㆄ¨x¸^Ås Wo¥9,U I Pû¢Ø×´ 3™Ý}kf׎uf¨t(3í÷“¬ÌÌÚ™Ùûû{¬µ×ÞKÒ4‰‰$I3o.–óçÏo¯ªªjQ¥0Ú6?Løè²[¹ßUVÕØL&[ZZ¶µ¶¶žåjûƒiu’Ó~%tÞ!g`{Ïáp4 zUñ«äò‡l×(­0(×,SªAÖu¹|Ôë‰íŠ,Zk7Ñ™3gÚßâªöu’Ó~raá–ŽŽŽrš­éôèM~Ÿ„ûô“›¨„¼ÜªPºF>šŠÞàäeE¾iÊËËkà6..v@ª†,€¤´_t#GyÍšýçÆ}$|Qо²[ÕhÌ?MÙ)ªI7Ò¤EãmBu7Øø½ê¬3qrÓà¦:Mc££¢)!2|.*õ‚:Ég¿è$6ÊÎ=¯¬¾ä3ä;%Š3õÕì„‘ÿêId‰2L¡ „ƒ¨ä×^O€¼Nº2»ÞÊ5kþär¹ŽŒ~àÀw:ÔÏA}ŠcºŠÃ@òØ/:‰\PU[(Ì:ZfŸÂ†¿Öf f÷Ýn?p&Þ«—i’)“€p …–É‹uÜœÝÛÙ1ˆím6Û*./Ç‹nâ ö+ãpèhôË” ;·˜ ¼¾&Œ=Òòðâ™-€©šÌöç.»ÌË„£P%}÷îÝoðÛqìHûE €ÄFšpød*JÕ"fù®€ÌÚçûfç‘Ã!Ò6ýÜJ0r}NNÎþ˜%ªp HûE@ ±‘_ÜùÄæÒÌø]Êž LÓ S¨Å‰ÜJ·ñ½{÷®ãßãö‹ËÈé½$ewö´;3êâ¹ßÜ™®Ç¸Çu¥Å@&ƒ¼ýà œ’Ã~ÑB ±Q.¸H~ÐûþÕ?´CÞÏD@‹:HGÐã Ùì @b#_qKÒA…òÍå¤hThÑȺ@Ëýrâ>×h|u€d³_tŸàu±~¯,]."«A£"v ¹f ¾Æ ß4ÑéQ™†}Ag{ÐH"ûE@ ±Q/µŸ<^»uG…bJI©t«]¼) ‘I 9†•©å¥¥ßU‹Ëq×|ýÙÖ®Oœ`ûèÄYHh}HQüÛ2´ß¤ 躈e½ôWI⢈áª^4tÄM›œ\r¹äpY!>×m,¨ßþÜùÕëJóï[[m{“¬Q);†| {•Tñ˜ÉÈë u ú½ï×ï¿}ôËwšsõ¶œ…äõìËË~: GÉ>ƒÅå’ÚÓÓ³+++ë/²,ÛÅÿ««ª:100ðÅáÇ?kkk».z#bvè$¸Cu½ Ç ºìÄ4‰výUdùNgAqvÝSO¯®ÜüxuvYUq¬ì?‹³ÿ2+Q¹ULøªëõ½â™êû±ëâ÷¸úm{W_âÒÏö1‰³üþ}yØoÂt]ÄRXö9#ê™jnoo¤±±±MQ”ÂhûÂîìì|­¡¡á =:)¨Cç IûŒMç`â’2ÇAØu‘QýØöòÊMV”®huVIÅÊù|Ç'ûž?röã¾á·W¸üÌEŒs“³p–†ÿCP_úö«$Øÿ5›9uêÔÚŠŠŠMƒ!˜­øý~×?™ŒŒŒòM›6ýõê­õOLQŸwv ®¸Ï¯Àb ‹"žukÛ°aÃ{,êŒúúú÷yñ„ÔH*tGìJeQõV—›‹‹Ë°î ,\Ò„S¸ð÷¿usù‡pÎüâìϼT[X»¾¬ º¾Òh¶˜#}‡Åæâ—¹ˆ.öq.^Ì´ÿ’Ë~¦…ÎT$–óçÏo¯ªªj‰•}þ0á£ËîØ¾f•Õ@56É–––m­­­g¹Z<.c-t°„2¢Ù멊žù ç`å’®gþN=û·sö_Z»µ©¦¸nc¥=7_\ףѾ«Ýo>\úª0-½eîc»˜Æ^zþçuiÛoBt]ÌÖ±±±÷GÓ g#~•\þÐoϬ]a4P®Y¦TChT@—ËG½žØ¢.âlu­ÝDgΜikll|‹«Fæf©è`‰9)Ì9i¶kOdÿ¶pç × ÙýE.W¹L¢e¾tý.¡,mûUàOˆoéèèØ!§ÙšNNk7—a_€~r•°HË­ Õ±P5òÑPŒçQò²"ß4ååå5èCtqÜvä;ÉH„®=…î%ŸÐ„),ûOÓ‚¤Ûž.ZpKØÿ ]àZúÒµßD¸†.²GyÍšýçÆ}$´ë™·nU Î+惭I7Ò¤E£=‚u7X¼^uV«NNmoªÓ46:*N†ÞBW)Ê9– s¨ì üºv'H…µ3Ë0pjø?ÖÎóµßDèÊÎ=¯¬¾ä3ä‰\#Ú„¢¾šì ›3N<Ë6ÃÚ@\ÜÌ×ë ƒ×IWf×[¹fÍŸ\.בñññÏ8ðî¡C‡úiöv6–‹ƒPõVáÌÀœßŒ †“_>þ50…K+KÏ~! ËUµ…Á›+£ˆ9……»Öf f§Ýn?p&Þ+•i’)“E,D]h ý%±Ž›³S; [lo³ÙVqyùàÁƒÛ^صkW…FBÔ`9:"ôR%÷Ìÿq`p#¨/-ûMˆÛÖzÝKNŠšVZêŸRéº7t½H¬.þ ¿ÆE ŠxUšÂû‘ø½Jc\?¨_´ñÎó-²MMMuww?ÙÜÜ|NïÂø?ÜÙa‚äôË”Í9·˜ ¼>$ÄiyxñL‹ 6 ‹ÌVç.»ÌË„ÐEIß½{÷)ð éI„º414àñÉT”yÒvWp2÷ùÍÏÚ§a :Ò6ýœå¹>''g ÌUþ  Ç¡—àÅOl.͌ߥœÉÀ4­0…2ÞHÜà,ÕÆ ÷îÝ»Ž?~àÿ@Òg‡÷z`«$IÙ½C'íÎŒºxî77E¦ë1îÑ\i1É oãÿ2Àÿ´Ðãð.¸H~ÐûþË?´CÞÏD@‹:ÈDÐãI˜ÿXÆ>þ,¥€._qKÒA…òÍå¤hThÑȺÀ_&úÄ}šÑøêN>þ  Ç›`¿¿˜ ]”.‘Õ Q ;×LÁ×xá›&:=*Ó°/(v܃ €ÿèqB½Ô~òxíÖŠ)%u¦Ò­Jtñ¦(D&)$앩奥ßÁ¯—“®yˆ¾—è&ï{´ïZ7…ž“ ð é¹í ¸°)Þ~›RÆi4ï^|ýÙÖ®Oœà¿Ñ $°@ï²þÀ²ÕÕ¼WÕª¾mÓûöþþÜÝ€®;Ñ™9Z ú«¤‹88 …ºkÉÉ:V}ú@ñ}BØ¢ËILóg×_E–êtg×=õôêÊÍWg—UÇÊ^³8{-³•[Å„¡º^ÑÑ+ž©¾».~qp߉«ß¶wqõ%.ýü³'!ƒ„j}/ªþÀ²èqÓ_´À>€ÿâÐÍsºÌííí466¶)ŠRmC!ìÎÎÎ×>¡Ðó€ êá» q‹y_SæÜ® <£ú±íå•›­(]ÿÐê¬’Š•óùŽOö=äìÇ|Ão¯pù™‹ç)&'@‹Ä¥°Öt¯õ ¿xè/RPŸ$áÿ@ÜôÍÙæAñÆï÷»þÉddd”ÿùÏþëÕ[ê÷ªÔç)î“,°¨Ä¢Ÿ,8wîÜ¿Õ×׿Ïo'â!Ž7#p1±{ÚŒ¨õW»3¿8{ã3/ÕÖ®/+¨®¯4š-æHûýì­×üßþ‹ßŠ.¦q.^½e,ž3ýµ5rêÔ©µ› ƒ#‘ô ¿;ÕŸÔÿp@¿Wþ3­-AGjÕü0á£ËîØçz•Õ@56É–––m­­­g¹Úû›Žs6M4{=KÑ3W!n+—t=suΜ³×ÒÚ­M5Åu+í¹ùâºö]í~óáÒWÅ_Ó3S…®ƒú¢9Sqî,çÏŸß^UUÕ«õ“(úÐßÕߌ_¹Ó€¾Xþv²Du~zÄ«‰gþ®0(×,Sª!4ª¢Ëå£^OlQq¶ºÖn¢3gδ566¾ÅU#w³•4'{Uôìu¦k*MïžúUÜz½°¨!.¹\å"®©ñ08ð‡œ©ullì=‡ÃÑ4È­ž¿J.èØ'‹þôw;ýÍm¥ÇÓ¿ÄËÿ¡e¾tQÄL>‚a_€~r•°HË­ Õ±P5nÈÅxð /+òMS^^^ƒ.&kî® PÒ÷e*¾GoißÒ»»”°®)«.ðTÝ\º¨oÍÍ Á]w¦ÂùX:::vÈi¶¦Ó£SÁÇRÎ%ô ¿Ûéæ1òþܵ€>÷ùÁnU ο+®Õ¤iÒ¢‰ÑFÁº,^¯:«U'§¶7ÕiâÊÐ3T•Ŷ”´0Ãßï§ÐˆS1@e,,ƒ¥°e»el *â8ÊkÖì?7î#áKc=³:‰ô ¿ˆú[ ?ÜI×ü¼üìb‰'°ÿ;ì ž`ñ ÿj°3Úœ{:½ž9xtå·ëMLLt~àÀw:$æØº›];ó¸4üU›ózWºÄ@Äódݹç•ÿµùßÿ'ãP'›þôw;ýÑ=tvíý7þÁ|èý›¯–"K´Öf f§b®ÜÎDÃÅŸi’)“E<3²S Öqsvjga‹í͆vü~ß±cÇ^صkW…n‹€S]Þ5ýµÃÿù/Ûvìøhë@ú`á(FNæ*­ õO©tÝ;­§uÒoº¥&ü—ÐW¥)œÍJü^¥1®Ô/ÉØ8ÅÍ·Èf4455}ÔÝÝýdssó9½ ,czÝ’,4m:Gè@,ÙÌI§¸>$Ä*z›bÏ´FÝî€èG f«s—]æeB芢¤ïÞ½û ´Ë~™’#j úÐqj¡‹lTŒtWæ9YkŸ†Yü9,èHÛôs–+Zý999[øc–¨Âa^ÖHCîŸLE©ZÄVô ?âÐo3$"“iZa e¼‘סl¼pïÞ½ëøã÷8ÌË»èÅOl.͌ߥDè@DÈ^»oúïhäcnŠL×cÜ£¹Òb “AÞ¦iÚ æe,0IÊîì:iwfÔÅs¿Ð€þ˜ÓBW¤;؈·™hkÛOhUbhì‚‹ä±ïÿ…þôÀµi”ïLå¢YkÛ¯nàà‚ ò·$ÝT(߬QNŠF…¬ tuЀþ˜Ð½Yâ÷¼ß4ÑéQ™†}A±ãL0ãÿ¨Ÿµ&J—‹ÈjЂºË5ô ?âп–É$…„½2U£¼¢ô;È^Åå¤k¢ïÆ%º©J4Úw­›BÏËõRûÉãµ[wT(¦”Ô™J7käâMQúÐq@z»û÷Ì4±°Yà%,ÿ<óí³×Éѱ‰³ÓÙ.¨_¶µëÓ#'4MëÄa^Æ“$ñŒë2.÷?²gÿ–¢5ªŠj6T¦:2ѶYLýIÒ^rÒÍFв Ç*º<Å4“výUèÌy/õ7ÏI~æÖ‰ÿ“ÚÓÓ³+++ë/²,Û…Ý‹}©ª:100ðÅáÇ?kkk»N³“t °C`qú²³_ñçjtÛugT?¶½¼rÓ£¥ëZUR±r>;údßóGÎ~üÁ7üö —Ÿ¹ˆqžbr‚d·ìN ËŠ…1‰y›Sæ8Ø{¢¿!ü·è÷3ö™ÛÛÛilllS¥0Ú~…cèìì|­¡¡á =ÏSWBàîôem¿Š.@!p —4!ê ÿ[7—‘;ó‹³7>óRmaíú²‚êúJ£ÙbŽ´#‹Í1Ä/?r]Lã\¼˜i-ivîæi6@UÏzÝ\\\†H¿¶æN:µ¶¢¢b“Á`¶Öü~¿ëŸLFFFù¦M›þzõV€ú'¦¨Ï;ûâ>ç‹J,ŠxÖ·mÆ ï±SȨ¯¯ŸOPhžl°LôG徨,{û Ïfd=À§èâ¶rI×3W§ž½Ú9{-­ÝÚTS\·±Òž›/®KÑhßÕî7.}•ßþ g¦>¶¡iè Ì£åD÷Ra¾ønËùóç·WUUµÄÊÞ˜ðÑewl_½Êj ›‰ÀdKK˶ÖÖÖ³\í]$TËî®éB×a 2‹ÖB‡ýŠã.¸9]SŠžíÌtM¥éÝS¿Š[¯;ÙéE.W¹L¢eàUºCße{Ïáp4 rÖ>âWÉ¥?Y<³{…Ñ@¹f™R ¡QQ].õzbMgûkí&:sæL[ccã[\5‚.Ø„ Ñ8w¬¿ð–9ú¢œGØoXV«kJdš·ôî%¬kʪ òÌ··ŸÉѱ‰³ûÙ.¼_¶µëÓ#'Øþ:q€ý" °p‡À¦œSÌmÃe…ø\\·± ~ûsäW¯+Í¿ome´íM²F¥ìò-ìURÅc&#¯w|0Ô%è÷z¼_¿ÿöÑ/ßi>ÎÕØþzp€ý" °p‡ LXÌØ$ƒè²Ó$ÚõW‘å;ÅÙuO=½ºróãÕÙeUű²ÿ,ÎþˬDåV1áC¨®×CtôŠgªïÇ®‹_Üwâê·í]\}‰K?Ûß$ΰ_tî‚/z™qbÞë”9®;ˆŒêǶ—Wnz´¢týC«³J*VÎç{>Ù÷ü‘³ð ¿½Âåg.bœ¬˜Ü!€³ì7`P³s_‹'IÌLéæââ2¬; —4á.üýoÝ\þ!œ„3¿8{ã3/ÕÖ®/+¨®¯4š-æH_`±9†øåG.¢‹nœ‹3­ûE €øføQ믲^=óÎÁÊ%]Ïüzöoçì¿´vkSMqÝÆJ{n¾¸®G£}W»ß|¸ôU~ûƒžÙûØî¦qô€ý" °8!’ƒÂœƒ‘f»öDöo wz½00‘Ý_är•Ë$ZæÀ~и·!’sÅ ;SXöŸ¦;±Ü¥;ñê×`tÀ~ÐH ‡0×n¤ÐŽdÝ(a-ŸB×õæÀ~ÐH`‡Á9Ì´‚«ëÛÀØ€ý"  :2€€t  @@:Ѐ€  è@@Ðü¿©ŠcËhÍ›IEND®B`‚gruff-0.3.7/assets/city_scene/clouds/stormy.png0000644000004100000410000001621712055510742021655 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<!IDATxÚìklSW¶Ç·_⸤Äa+‰ì8/ËéP"+.HDY¢ªDoSÐ|˜/Ü~ëÔ"WQ[>0h #eª‘:ЍÔ`4$‚2Õ(:W Ih¡) &ŒÒ”„Û&@Çw¯sÂÁµǯøñÿI[¶}^{­³ÖÙ¯¥ýâ‹/ü,€©©)öóÏ?³pèõz¶qãFæóùfÚÛÛßðx<½|ó^•¿óûý *•JË_6´¶¶¾i6›?Ôh4æP¿Å~¹½.BÚ¤§ýjïß¿ÏÔj5Û°aËËËc:Žåçç³ùùyöøñã|úô){öì+**2üö·¿}ð;¾ùY CÄåf ?}úô§Ü›gffØ“'O„°_`¿d¿ÚG½ð‚f2™Xaa¡Øizz:äAé¢è"ø> üãK¼Ð}ô`Žj .75EöÇŽ{›~³×ëvŠXí—ŸÏçG³ii¿ZÚ¨„¢‚ÜÜ\%üæ7¿‘ëE“““"*y饗DÓÀÜÜ9ñM¼ü$9ô8u₎—|‰·|÷ÝwÂÃûå7¡8uÒÏ~U†«ÕjYuu53aO8::*~C‘~P/?ø—Ÿ\¸pa”-5ßùp_ ¦_¿mÛ6ç®]»ºÂÝ a¿Üv}¨ÒÇ~Uï¾û®ŸÚïDtðàÁöðáC¶°°°üãÍ›7‹RRR²¼m||\D AÐþU|¿û×®]{çøñã_ñ³¸)Ó Á°gÏž·Š‹‹ÛBýö ìWܳ³úúzvûömvïÞ½ 'å?ÿùÛ¾};[·nøL'—¡¶ÿÊÊJ:q‰Ëåòðï^oooïç_ýŒj zÊÊÊÔd§¿üòKÐïa¿À~É~ÕÔ p÷î]FíûÔ ®Ðãþ¥K—Ä•:܇††Ø7ÄëJÐ  ¥¥eyµâĉ]¾|ù¼ßïïK¤´Tœ !ÖœI ÑúÇOk4—óR½oß¾V«Õf±X¬ƒ!?Ô>éd¿ ±úâkåï »úŽdÛ¯ê/ùË÷åååÖP?žebâ{__ŸøŒÃ‡‹¡ôóóóOÏž=û9§ƒoþ–Ëf$A¡–ŠFzUIMT($5"s`é¬üTë) ç¥ˆ//Óg›ÍVÒÔÔTËmwkºÙ/Hžþ±’deÛí1Ù¾#ÙöKä¿M&SáÎ;+ëëëkÌfsY¸è:õ¯_¿ÎzzzÄ{¢¦¦†:tèÙðððíS§Nà›)´å2™‰sEÛ(ƒMn[[ÛïF£[­VIöôóÅÅÅÇ“““ÿú'çܹscìy’8vvú'¥_¤óÑ¡i´šQz%;ݘªö RGÿB9öL½-¦ŠïH¶ýÒ¬“N`”N°ÉétV8Kmmmeqqqi$ÞÚÚúYWWW7K ÒþÀË[Jî°EE¨”\1²P×=z´©²²òcFcuª¯×û>çli=j¤„i©×D7‡u¼äÜ RÂ~Aêê_0§žI·ÄTõÉ´_:Ižt‚ Ò{qPéÕXÈÙ½{·Ýb±”WTTXsrrÖ;àÉ“'ÿÜÑÑÑÉßRÝ/OÙ*Ó§*£™#GŽ8øŸqñJD+>Ÿozhh¨‡G/v»ý¯4–ÑS.xOrÓétŒ_£XÀž¸{÷î8ðwþö1nN Ýõ/ÈMK—(ûE¦µÌÒ?É©g¤COß‘hûUœŠVŠèàz^ Rä°Q>¶666ÖUUUY ¨_@ŒˆÝ¿ÿ{üí7RdO Ö.®Faøÿ¤soà‘Æ›f³ùÃpÔÔÔ”Hì½^/'‡ŸiooÃãñôòÍOøõ,âÖ2AÿÍŠq·_ØIfêŸ|_Î$‡ž®¾#öØÏ tðZ)z›ò¤æåƒKÛI#Æy¹Í 5êSŸ›o5 #UˆþôéÓŸra6Sš Ù%ÑwDk¿ªhƒ£€WÀkÄM:üBõÛ¶msîÚµ«+\…hµZV]]-¦%z§ßPt¥„WŒ—WЗŸ\¸prSÊPÿ -ŒÏ+¯Äåryøw¯···÷KM ‹þèd— ²S§ÂEP+Á–-[Ä@…ÀBM)´p=õ‘û^Y¨ÉäÒ¥Kb„#õ‘~wñâEQ±Æàv»?`K#A–ýÐ?È.d— OèªÉÉÉY›Í&òÅÊÓ dH ´=RÆÆÆDZ:‡ÃtÄãÕ«W©RXiiéjqáe·”¬ú ]FÈ.ºšG>¯QßF¼ J¡…êC%‚ïîî¦JaÍÍͯð_ãž’Õ@ÿô²ËÙ¥‚C_ç÷û_ %Àh cQ ºPǤí4ñÌ™3=n)Ù ô@ÿ »Œ]*8t­ÓéT÷öö¾00hêÁ•+WÂ.2 }§Åý$ëþèd—²K‰&÷ºº:•Ëåý4ÚF%>zô(¦(k%há úÙeŠìR%Ê“áij·Û-*…ú3†‡‡Ù­[·âv"šW¸wï^ñÊk΃¬ú ]ÚË.º¯¿¿¿ƒGYN—+o¤Iý¢Ð×T÷ÒMÿRQ~Ð?è_<äÇ¢ËÖ™V¾#Ñú§:yòäÿð@D->Ÿozhh¨‡G1v»ý¯4ߎ–ÓS.|O×£ÓéXNNŽXÈž¸{÷î8ðwþöq¬2È–+‰†æÉ#½ 9»wï¶[,–òŠŠ +¿®õÁŽËÿçŸ;:::ù[j&™âå)2]%ýfºQ9rÄÁ Ê•Jº—êú—òƒþ¥þ±U¦OM´ü$§¾*‡žN¾#ú§úâ‹/‚JljjJ$x‡^¯—“ÄÏ´··¿áñxzùæ'üÀ‹qn“û´RôE¤çÅ E_åJâØÖÆÆÆºªª*kAAõ­ˆQ‰û÷ï¿ýFŠ®æãu ⺤ºÛÀ£Ý7Ífó‡á¢ÏTнTÓ¿t”ô/uõ-õÃFì0“%?ùº¢qè©ì;’%?Õßþö7!1)ˆáù”Ü¢bbbBä‘ ý¾¨¨ˆ&ö|ðàÁ?ñM?%*ÒˆÀ´R´#7¯äIM,Ë$m§ÿ7ÎËmê&áeOækr3ÕŸ>}úS®ˆÍ”k˜p“)¤ƒî­¥þeŠü ©¡L1‡:ÂYNI“_àSz¼zÖÒw$S~Ú`«êÐP}“ÉÄ Å2w´vm(èÂèÀ|ŸI(Óü$dtL1ÊÎ!EšsRsVѼ¢—*)WªÄi©bæ#@”fÎ ÇŽ{›+n³×ë »¬bªêÞZé_&Éúý[I~,‚‘ïéä;’-?m°¥î(2 ywùùù"7¬ôhÏ(² ‰ùÊusi”ð~CÑ~`/?Á—Ÿ\¸prÅ>[‹æmEÿÉ #áÌ×ä I¿mÛ6ç®]»ºÂ)s¦è^¼õ/åýKŒþ±èF‘¯™üØ*í¥¢ïH¶üTï¾û®¸PjÃohhƒå˜]XxÞ±yófQJJJ–·‹È¢Ú_^M‡ïwÿÚµkï?~ü+¶4¼}ÖÙëÐ {öìy«¸¸¸-Ôo {äùA~±ËOKkÝõõõ"Sͽ{÷‚žtddDšp¿}ûv1lž>ÓÈPû?-ÏO^âr¹<ü»×ÛÛÛû¥¦ ¥”••©IÏ”S0”@÷ ?Èòƒüb—Ÿš:Þ©)€°§6~ú®Ð#ÿ¥K—Ä=jãüîâÅ‹âÂ4ÁívÀ–F ‚,†Z«¶lÙTŸ {äùA~ñ‘ŸVÞ@ùd#ellL¤§s8AGì]½z•*…•––î ^FáÖ²Õäää¬Íf:&OÕîA~äùÅG~ÚHºƒJ Ö‡Ú¿»»›*…577¿Â?~ ¿–µ¨yÔýõ Å‹,Ó=Èòƒü ¿ˆäµC§ý(]¨ýi;Í¡;sæÌCÇ·–½¬óûý¯F«gÐ=Èòƒü ¿Èä§ 7É=4tþÊ•+a'ÉKßiáÓ²­ÓéT÷öö¾0‡2²L÷ ?Èòƒü"’_LOè+AßAÖ£®««S¹\.ÑWD#5iDg° ¡{äùA~ÑËOû»ßýŽ ³[·nÅíм¸½{÷ŠW¦X7d-b­šVAÅív …¦¾ èäùA~_œšš'GÃçoÞ¼Éîܹ#–™‹¦2ìv»¸`šG™jØÒ¸ {ñõ÷÷wðÕ¢Óérå´ tòƒü ?È/~ò ™>•:݇††Ø7ÄëJP%´´´,¯XCœ8qâ£Ë—/Ÿ÷ûý}ðk©‰b©ÃCÊ8­¹ÈOk —óR½oß¾V«Õf±X¬ƒ!?Ô>é¤{_Êë7äù­Ú~Y„kÉG°tnRåGK¿~Y^^¾•k¨fggÙÀÀ€˜üÞ××'>ãðáÃb8ýüüüÓ³gÏ~Îéà›¿åz®3圸œ'X#½ª$%‰¤æ®˜3GñS­gKi )¿°‰——é³Íf+ijjªMG݃üÒJ×!?È/jû]ɱGàГ*?úÿE'0™L…;w¯¯¯1›Íeá"êØ¿~ý:ëééšvèСgÃÃ÷O:u~ppp€o¦ðb”ÿé¸Ñ”yú¦m”(·­­í÷F£Ñ­V«¤˜ôóÅÅÅÇ“““ÿú'çܹscìy’„h“¨¥ó‘bSN£]ŒÒk~*ëä—þ¶ ùe¯üâi¿¡{=©ò£?W¦8‰Q:É&§ÓYáp8,µµµ•ÅÅÅ¥‘°µµõ³®®®nþ–¥ý— ¶´ÀþÜkR¸J}f\ZôèѦÊÊÊ59ÔqH±½^ïûœ°¥õ”bpJÊk"å¦ÜÃ9 žºùežíB~Ù#¿DÚ/‹"[]²å§’,Ÿ„†æÉ–^…œÝ»wÛ-KyEE…5''g}°ƒžr䈃+ƒ‹GŸ"Úóù|ÓCCC=<ú«°Ûí¥9Œ´ ¡2aéN§c¼~EâîÝ» 'àQª˜Ö——'"PbbbBäß ý¾¨¨ˆDøøàÁƒâ›~JdâZéäÛ…üRG~L1ÿ<Â&í¤ÙoàSzœ&³ÄM~Ú MË#ýøñ}R´4'59hÍzé$¹ÒELKž Œb@›Ù7;vìm®¸Í^¯7ì’Š4ÅÁd2±ÂÂBñ;Z39d¤Ô|ŸI™¦I'üñÔâ5Ö=ȶ ùÁ~#µ_ÁÈ÷µ”Ÿ6Â>~êp QÔ^ñHEòw ‰ºa üóy$ÙBS(¿n8(*¥ùŠùùù"§®Ô¬Ä(ª¥ ”ë Óò‹Ô4577GÝ$E¨¤ ¯ã$êäÛ…üRD~Q8ˤÛo”×™ù©¢Õ?Eûÿ £¡ÐIB×o۶͹k×®®pʬÕjYuuµXØ?£££â7™*áJíåÊýeggç'.\ ÅÏÖªi1žºùÁv!¿Ô‹bùZÚ/[å ½dèŸ :˜öÆaسgÏ[ÅÅÅm¡~CýG ":}ðà£Ü¼ Ï»‚6oÞ,JIIÉò¶ññqµRKûË«8ñýî_»víãÇÅ–¦•ø ¿ì•°ßÔ©M3€²²25­¬œ‚¡¤¾¾^dø¹wï^ÐïGFFD¡… ¶oß.¦lÐgR~ê{¢Ä\ñK\.—‡÷z{{{¿Ôùe±ü€ý¦j¨CúC­,[¶lƒ< 5CÑÂÿÔ¿ì{e¡æ¦K—.‰Ñ¡Ô¿øÝÅ‹…Qh4ƒÛíþ€-´„ü²\~À~ñ„âÔê4999k³ÙD¾]yª† )#m”±±1‘ÖÏáp-zõêURhVZZºƒZ«x…ü²Z~À~áÐA¼ZYxÔøõ Å RhZ蟦m£»»›š577¿Â?~ ùeµü€ý¡ƒ8±Îï÷¿Jù¢ŽE)üB“¶ÓüÍ3gÎ<ôx<_vËØ/:ˆW:Nuooï s(c¦m\¹r%ì ÒwZÈ/ëåìÄ u]]Êår‰¾"©I#:=zS„º´èäùû…CñE,&@Ó*¨¸Ýn¡ÐÔ4<<Ìnݺ·ќ̽{÷ŠW¦XsòËjùû…CqÀ×ßßßÁ#T‹N§Ë•7Ò‚¢ÐMšºqóæMvçαÄa4Šl·Û…±ÐœLÊðÖÖ†ü²[~À~S¬—æ¨T*Zc¸œ—ê}ûöí°Z­6‹Åb5 ù¡ö¡CCCìÆâu%H[ZZ–WK"Nœ8ñÑåË—Ïsýéƒü²W~À~áÐAüšÞSJ=Êkâåeúl³ÙJšššjËËË·òb µÿìì, /ôõõ‰ÏÁ8|ø°˜Ê1??ÿôìÙ³Ÿs:øæo¹þŒ@~Ù+?`¿pè ~ M«ýQÖRl !i´†Qz¥(u£Éd*ܹsge}}}Ùl. ½Ò ’ëׯ³žžñž¨©©a‡z6<<|ûÔ©Sçøf mG¹þÌ@~Ù+?`¿pè ¾JMYw¨ÈÊMyssÜ()ø&§ÓYáp8,µµµ•ÅÅÅ¥‘œ£µµõ³®®®nþ–Dþ— ¶”œ`òËnùûM 0(.PäÎ]äºM#/iB&µQâûÿ“œ†eRNÀüÿûß^^þ—”¼³{÷n»Åb)¯¨¨°æää¬v޼¼¼qþ2È 51Mñò4S2…A~À~Wk¿,G¹ã =ó#W&E®j)€Ë‘”[Ï‹AŠ\7JÑ«‘G¯[몪ª¬Ô/%Ftîß¿ÿ=þö)2çz³ùA~d£ýRð pè`M\¥Pn{Þ4EÑëKJå–¶“‚Ptz›êTšÉÖ'KÈدòɤšrSÑH ¾N½æI MßOKJM¯¿ø¡4Yj¿’“‡C)¯àjIµŠ–IJLýR pFd·Ëo#±_¥3‡Céäœd%g²ÃA~d¨Cas0û tæpèHjˆ€C:àЇÀ¡pè€CàЇ8tÀ¡pèHIþ_€-$’,|:§IEND®B`‚gruff-0.3.7/assets/city_scene/clouds/cloudy.png0000644000004100000410000001665612055510742021626 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<@IDATxÚì]mlTUþþÝ;w¦3:Óú’¾QÚÒR­-”ZùƒºåÙB‚¿hÈ*1ñ%ÙÀ*M6jJšÈÊu?lHˆŠËº$Š»†Õ­e±T%$C€Ú7À¾Í”a¦óÒûÿ™[;Ô™éÛ´ÎMO#&•|j0î_ìöOÜL»·ýc448(\‰Lá!pðs¥àC¥1žCzYõÚýç‡=$ê‚É6 ûد°_éßýîÀ gRÅ ˆ“¢¡Ëå£t>'M¹û<‡Ãaþ¼¥¥åÝC‡õpÔ(× ~”'Ìܸšwîyåþ?4ýé_¾(M,ì`¿Ò7n5E–hEðnyü4Àž@hæË 2-çD„×0qŽ“½+',®7ê‚n‡×ëí>vìØ »ví:#T 0§ !íµÃýý¶;þéØ/À~Ž^’¨Â¬PϨŸn¸ƒãõÿ… 8¼*‡`F«—)ìMHüÝOCßGÁk,ìbä›tdÑë ?²ÙlO655çC·Q¬0{t9%Yؤa¨ö °_a¿²‘}1>/N½ýhÁ5¦’Íé#¿ª¼…ÉÇ®ð1‘‘¢(i»wï~ƒó±¢8`®Pé—Q9¬MÂ~ö;n¿ŠðÄLwE’¦ukœ7õsæ9œ`¸kzØË½þœœœøß,…€YCrÜìuxd*JUÃzù°_€ý (S<ƒ‹ß­0=ŽpÏ,|pïÞ½ëùßïQ¦0kÈ/î|bKÉòØ=ʆý@bÚ¯d»íÕë)¹)2݈òŽÜJ“Ž :y›ªª'P¦0K÷^’²Û»nž´fdÖÆ2]Ø/$žý*Š4óÄÄ5ŸJÑ®ítOE‘Àœ \´“|Fô÷Wa¿ûUôòìrÝúh×~u % 1€|Õ)I·úÊ7ª”“¢R¡I%ó›ZØ/$žý*}n‰ŠL±[Ê3FtzP¦~O 3¼Ã sGÀ@{ØVEè°™ujÀnsûØo°Aÿª_&ƒLxeªJy)Di³ðÄpþuÑwÃÝöK4Ø}ÝÆÑwP–0'ø/·<^³uG¹bHIt²]º-Á~ö°_émÛo×l^nà„9ƒUœ}žqjïaÄGt¬Wbï~bàÃןmîøôÈ UUÛ烥mé¤h^Ñ”®–¬æ¦C)‚®Ô¥/Öh.åpï#{ö?P´vceQõÆŠÔôÌôH×,û–†þÀßÒ²_éåtü”ϺŠH'd•J8á|ßUªX¦.üyÇû‚C ^·Ëýõûoýò¦ã}‘y霧Bµ Ó>%­ALÿókAEƒ,–þæZ1pVlÚ”Á!—C‡âÿâÚMuÛŸ»/¿j}ÉR³_`éèü--û?âùŒ‚âìÚ§ž^S±åñªìÒÊâhÞC{¥f¢2Ù)Á¸.îê½êíþ±ãÒ÷¸öm[G_æÐÃ|ŒÄØ{qb›ÔÎÎÎ]YYY¿“eÙ*x§ûý~Gooï‡þ¬µµõ†ˆÖ°CïÀBèo¶§)kù‰ŠA Ù‰m­Ú§°ÓŒxµ_`éëü--û?®ZËÀªeYõØö²ŠÍ–—lxpMÖªò•Ó¹ñOö=äÜÇ|Ã_¯rø™ƒ˜'+6wðÍ¢¤ïi¼PÆ 5¶µµ=ÒÐÐЪ(Ja¤tDÁ´··¿V__ÿ ×£ö…kÔÑ  ¥¿9T ¡÷$*‡”ID\Ø/xúKÇ~E&Ë´ LÚ÷@¢Ú§5#¿8{Ó3/ÕÖl(-¨ª«ÐMÆp ~öÖë-ÿù åïüU Ñ spÏt§¦PoæÔ©SëÊËË7ëtº€·âõzíÿcdff–=üðþvÇG=n?u»'²ïù˜t´Ê¤üº3ÍùóçÿXWW÷>uh:t`Qô‹Æ1L…¥û_à/¾í74qÍs‰s§žÒ4Ï!c<öJj¶6V×nª°ææ‹ç4Ø}ÍöæC%¯ò×4ÏÞÃ?~l†?TämºpáÂöÊÊÊѼ§ºâŒ^׬6ë¨Úb ŸÏ7ràÀmÍÍÍç8Z,—1†X,ýÍÔ.¦9¤¸èö $ŸþÀ_üÙ¯Ú MòÍ{X¦ üš¸/¸Éá‡kFfÑ3y™‡††ÞKOOoìc¯iÀë'»¶*­X³v…^G¹F™RuÁYvu¹¢gSÄÞÖ:«Îž=ÛÚÐÐðG LARóÙKZ,û ?ðö«LjÜ~åÇi‹_ë¡à»¨-Cˆ÷°LKPÜ€]KôÎäð4‡ILgΜÙ!/³4ž ,k7ýýä$ZÅ$—™ªe¢U¾½›QÖ£îãcEž1ÊËË«×È÷9åÌw é†9L®æëYæbØ/ý¿ø±_e‰ ø9/gü‰ C!„Àø±ÙLi¤—U¯Ý~ØC¢,¢­yëô«ýcÅ3Žê4=˜T‘i î“ïöOdŸÁ®Ùmÿ  r2µºŸ"L’ ®?¶¥yŸ ´€ö @à/NìW™a~Í+òk Ü5ƒp–?RÙ¹ç•5—=º<‘Z¤ #D|@FÈžqb-ÛLCðQ@âe¾.—Òùœ4e⼕k×þŸÝn?2<<üyKKË»‡ꡉ×Ù€äÆ¢èmht!‡¶çÑ~èüʼný*sHœbÔË• *k /F(Œ&~Eð®lN/ °':ª²Ü Ór.Q(…¦àOç8Ù»²rÁˆë-Ëj/& JQ”´Ý»w¿AÁ™‚@Òú ?ð·ôù‹‡ºä¸ÙëðÈT”~Óv{`3÷éíÛÎeGý\x9\ á®éa/MÏñ999ð¿Y" JRú ?ð—üÅCƒ.¿¸ó‰-%Ëc÷(bÄ7F+ A-n±—eáƒ{÷î]Ïÿ~:%©ýÐøKþ¤ÅžØ*IRv{×͓֌ÌÚX¦››"Ó(ï®4éÈ “·ñï?:%‰»GÐý¿á/zèÊE;É÷gDpF r:Ÿq’„@§+n~?ýÐôþ¢A—¯:%éVŸBùF•rRT*4©džã‰qñža$|u 5 ýÐøKþâÅÃŒû‹ ÚEè°™u*qÁä)ð+xƈNÊÔï ÞA ?ú Á_<4èþËm'×lÝQ®RRÇ#~‰.ÝÈ  feªJy)Di³¸kñ8事è»a‰nsÚƒÝ×m\'Hn@ôþ‚¿)'Å…lñv·K£Ùtœ¼X#·”ýìÙÿ@ÑÚ•EÕ+RÓ3Ó#]³ÜÀÃ´Š‹/Ï8õmŒøˆŽõJì]Mü”_¶¹ãÓ#'øg´£N‰_@ñÍßÖÕ´OÖ+œ²ë8uý ýÁ~cÆ_Ø]Kd|Vö)i"ì£ 7ÌyçÎJlØ.¶„{»æpX!þ/®ÝTP·ý¹ûò«Ö—äß³®"ÒõY¥.˜|—jªXæ/üyÇû‚C2^·Ëýõûoýò¦ã}‘o¿Íf\6âÐßà/Aôió7UÃ>úƒýÆŒ?)ŒX—Cjgg箬¬¬ßɲl׉|ü~¿£··÷‹Ã‡ÖÚÚzƒ´MNf[0Úöw"?Q0bÈDlSgÕ>…—•‘QPœ]ûÔÓk*¶<^•]ZYÍûÊbï«ÔLTf îãº\DG¯ºF»ì¸ôÅÁ}'®}ÛÖÁÑ—9ôðm  «Þ7ô·„ø[â zÌø‹Ô°O£A‡þ`¿1ãOÒˆB2¶µµ=ÒÐÐЪ(Ja¤› ···¿V__ÿ ׳õÍ¡PB7v?Fìûš2©€¬ZeV=¶½¬bó£å%\“µª|åtòødßóGÎ}üÁ7üõ*‡Ÿ9ˆyŠÎùܰ˜²¬u4iÇ èoéñýù רO‡Rèö+þ$n튼^¯ýŒÌÌ̲‡~øÏ×îø¨Çí§n÷ÄD>ñž_IG«LJ`­[óçÏÿ±®®î}þêˆEãæØØ}Ùx¡hŸÖŒüâìMϼTSX³¡´ ª®Bo4Ã¥ûÙ[¯·ü烖¿óW1D2ÌÁ­y6he®2ýÕ›>uêÔºòòòÍ:.=Yõ7Óš–ɬ?­QŸqƒýÁ~cÅŸÎ+úÁá¡+Îè÷ºÚ¬£j‹|>ßȶ577Ÿãh'76C²ãÏÍó…cæ¦y^ãÄÞWIÍÖÆêâÚMÖÜ|ñ\…»¯ÙÞ|¨äUñÓ4ÏÊ£=‡ 4è V™Š²3]¸pa{eeåhÞg2èo¦÷¹ùKFý×+³mС?Øï\ø“N¸U±fí ½Žr2¥ê‚³:ìêrEO´ˆ½…uV={¶µ¡¡á-Ž˜O/’÷¥hÞÎøÐÊ2mxå×ÂÑâ…EÝäp‰Ã5♇?ÌHÌæ¡¡¡÷ÒÓÓûØëðúÉî rŸlú›…gŸü%ƒþ&÷ÒcY¿@ào*þ»¶Ó{¿ÇG?9‰»ó:*3+TË'ªÜ‘½e=Û>>V䣼¼¼z ;ßü¼M°ÑÒ Ìòùh=í;Úp—2´bÖ (U+@»V(w&{ÐÀ‚ sšÎœ9³C^fi<=8XVq2 ¿Äç/ôGÓ˜ùýÁ~ç‹?eòú·N¿Ø?VŒÑW§éiĤЧí¸[|±Û?q3ìZÜöÑÐà _{.!³N@œãdïÀÊ ‹ëºào÷z½ÝÇŽ{a×®]g(8­ëU'wƒžöÚá¿þ~ÛŽ‰tôþÀøsçOѳ3RaV¨gÔO7Ücš["Ý5,à𪂭^¦°7!ñw? q|ŸöHÁÂ.F¾IG½¾ ±±ñ#›ÍödSSÓymHbt9%Yh*Òv„ÐøàüÍ?ÙȾŸ'‹Þ~´àSÉæô‰q¤€·0ùØ>&2R%m÷îÝoPp¦ ôPé—Q9¬¦ ?ðþÀø‹ ŠðìÍܧ·YçMýœy'îšö2D¯?''çþ7KD¡AKjHŽ›½ÎLE©jX/úàü¿¹ó§Lñ >,F|c´Âô8ÂA<°ðÁ½{÷®ç¿G›–Ô_ÜùÄ–’å±{–dúàü¿iñ'Ùn{g5 37E¦QÞ‘[iÒ‘A'oSUõÚ´$îžKRv{×͓֌ÌÚX¦›,úàü¿éò§(ÒÌ×8|*E»¶Ó<MZÒC¹h'ùþŒèï_Bàü?ð77þ½<»\D·>Úµ_ÝBK _uJÒ­>…ò*夨ThRÉrÒèIvþ–€¾Áì7iìWzù?åß³®"ÒÉY¥N8ßÄw•*–© Þñ¾à‚×írýþÛG¿|§é8G_d^:ÑlÆe#>¾G°Nû”hbÛ1m¸kÎ;qV,ÍÀ–„boá+Äÿŵ› ê¶?w_~Õú’ÅÔß,+ð·t´þ`¿Ic¿âG<ŸQPœ]ûÔÓk*¶<^•]ZYÍ{Èbï¡ÔLTÆ!;%×Å]ý£W]£Ý?v\úâà¾×¾mëàèËz˜4¡qÕûqb ÔÎÎÎ]YYY¿“eÙ*t+N÷ûýŽÞÞÞ/>üYkkë šØdBå=ÈZ~BØbÈIlógÕ>…Î2SÓÜäü-] Ìì÷nþÄ«Ö2°jdV=¶½¬bó£å%\“µª|åtnü“}Ï9÷ñßð׫~æ æ):çsÃz b#.…xŸ“wœ3¶µµ=ÒÐÐЪ(Ja¤t„°ÛÛÛ_«¯¯ÿ„‚ë)ûæ êÐ{âû§Lø¢è/L…þÌ~Á_âòû½›?E#p|cw±©{úÅþÍÆá¿"“ŒüâìMϼTSX³¡´ ª®Bo4Ã%h²¤‹ àä †H†9¸±ÓÚâyÓ§NZW^^¾Y§Ó¼=¯×kÿ#33³lóæÍ¾vÇG=ŽQêvO‘xO²À¤£U&E¬lÙ¸qã{,ê̺ºº÷ù°ƒ‚û<Ï!{ñ=ú5¯×ÉÁΡ?ŽôþÐ~‹?JYڰߥc¿Ò¤ç Šæ9ˆÄ¹SOišç¡yVöJj¶6V×nª°ææ‹ç4Ø}ÍöæC%¯ò×4ÏÊÿa Mì‚6æ¢ìL.\Ø^YYy š÷ùƒÃCWœÑmeµYGÕù|¾‘lknn>ÇÑ®X–kÈ#EÓ_ˆ‡þ’È~5êæ? >‡¥ÅØ}{î°ß8âO ܤ¡EóvƇ–iÿ&®Å‹„wp‰Ã5#è™/Jcnz/==½±½Î¯ŸìÚª¾bÍßzåeJÕgUtØ=ÔåŠ^LEì­®³èìÙ³­ oqÔÀ|!.†þ4›If¿ž½Æ„¿Ðžy"7è°ßøãO™bh@xšw´á%dhÀ¬eªÝ€]Kôθg ,è0»éÌ™3;äe–ÆÓƒ£e'£ß㣟œD«X¤ef…jY¨*ïÍ(ë)÷ñ±"ÏåååÕkb² ]¨óTK-’þÀì÷W éîYÎàö»¤ìW™Fâ~ÎÀKÁ±1A`(ă?æS“É%ˆ2H/«^»ÿü°‡„–£­ìô«ýwÅ~ºÕiz1©¢Ðq·X¼nÿDñe°k{Û?FCƒƒB\â}ÊM ó^Î ¨?ðûÖ¸“Ö¸O‹¿k’›<Øï¢ð'Íæ¾BÆþïšAˆÊ`Qzèæ{^¹ÿMú—/ ûb!ÿ*pÆûåv¹|”Îç¤)wŸçp8lÃÃß·´´¼{èÐ!±Gñèb ÍÆRà/9íw¶ ’Lâmò j5LÅŒJ ö»`üÍj‰øâ¡ÖŇ\PYSx¹2B•"K´Î¢x§6§—Ø ÿrƒLËYÄÂk-4%!Îq²wjea‹ë-Ëj/$ÇÍ^ç€G¦¢Ôð›ÞÛ}jÀëœXûÔÏâÏaA‡»¦‡½\=Ççää<Àÿf‰(ð—Ôüì :«Q–w>±¥dyìåŒøÆh…!èñ†Ã-öR-|pïÞ½ëùßïÁ_Ró°ßxñn0 s‰»§’”ÝÞuó¤5#³6–鿦Èt#Ê;š+M:2èäm¬Ÿà/yùØ/zè@ Ëð¢äû3¢¿9£9‡O8ÉD Ó•0úûMûE…²ô!_uJÒ­>…ò*夨ThRÉ<Ç’ã6z9²¢¿ºþÀÀ~Ñ ±F้Øà^„;‘Y§R ;×HÏXÁ3FtzP¦~O@ì~ðþö‹ˆ ü—ÛN¯Ùº£\1¤¤ŽG:ý]º-‘A {eªJy)Di³(uñ8麋è»a‰nsÚƒÝ×m\gü%7û`R܇$IbáR÷>²gÿEk7VUo¬HMÏLtÍr ›¾ŠåŸgœºüG|DÇz%öN'† >|ýÙæŽOœ`ý´ƒ¿äå`¿hÐØ Zlx/¶Ô{ãæpX!þ/®ÝTP·ý¹ûò«Ö—äß³®"ÒõY¥v¾‰­"U,“þ¼ã}Á!-¯Ûåþúý·~ùNÓq޾ÈúéÉËÀ~Ñ ±´ ØuG[ 9‰mþ¬Ú§ðR32 гkŸzzMÅ–Ç«²K+‹£y¯Yì½–š‰Ê8d§ãº\DG¯ºF»ì¸ôÅÁ}'®}ÛÖÁÑ—9ô°~FÀ_òò°_4è@lE-Æ‚D·Ø77e’À­šÀ3«Û^V±ùÑò’ ®ÉZU¾r:y|²ïù#ç>þàþz•ÃÏÄUµ|aÒ ’3Ó<÷o¾óûjÞ”ÕÔÌîÙÖº©µÉ·¯v’ó);èìFÜô³Î\.Ç^ÀÁðúÃÞ†Ýã®N¿»àbÖÊ…‚‘ì?ö¼þËÔׂ…-ëŠW>w1¹­¡Îýy§ÃÐ!.ñ¤Õë_üþýêkª¤ªœ]–ý9Œc1t(} EU±´­²yÛÆ;öާÝg^èYsª3qhÝ7ën¿m²«¾:àœVóÀá_Øoè('»F¹wÙŸúxh¡ÿ³VQà:|·‹é›-¦·A g`T¹LP¬D·X±3’•õß­ÿ}ñr½ÈáߨúU¥Øå РôtˆWvþµå¹2Ù¬2ÜHgrNõY“³tOwí*Ä+G¶°£ÏL ü9ùrfÂ’êß©Vé t5_©VT•–1Cïïëžy«zq›/»þ¨ƒeÕ½âò7ÛÝðä5èp‹§îaI‡ŽJjð@Q=sÇî¡g¥hè Ð`âžï¡[Þ;]f¶[²±îü÷¤qU4©ØMŽ«a½m.—Ôµ¹zöÕØ‘?Î{ÖÊåt]J½õÕ§>ÒIŸ°ƒ7[€:ÐÝYËr8*牥Ã]qû?Só T¾ Õ–ËLù§y–Ϫ÷>³¤mò®ó{Öþ\ý/»ôР4ôp»ïw?ž¹,Ý»Å+ægz+fÞðûãVmÅú?žöM½_—åRx®=Êt˜¸Ê+;pÉé:[‡njwû¦|ìÆ·qºj+j·ë«_.î@³$;Ï ½] Рª«›VMö¼)éháÚ¹a:JÖ;bÙ·¿Y™¤$©ø+[÷b׃@€Ò)w¸⟵Râý‡$Ò»KLÝM·Jèv×_·IHœ9ÑîrG pSÉT¦pÛôˆ~î<›ÉNøf¸±¥Ûªrg¤êÅŸÍß$ ¹ƒ@€’I~eõsë/|´ïZ°k[þw]ñðå°{ J·5Ô®Û?Gü3¿.uÍßÓϤW°û1Q ¹@Adzeo&Ý¿×ëpôu"Á)ó••æ¨¶tÏ<Ðø°øjš‹yØý Р4R?\ûdëôÙåÞd¤KÒ±+’ wK*’ÐÕ>ñüj< ©¶ ×ã£G‡=Iô ¯%£ï3\¾)¢+Ÿð*Ô/k—àÕbI¥|=õp(®Úˆ O'‚Ýr¢coßËëÙ±aãoÏ ƒ@€›'ê~ýê`Db±¸ÔT—‰ÓiÜÐö™LNã’LdÕIÂd1#/„ë¹p2ºaãÎêëYUƒìmèP©¶å?iô‹.-Y4÷î¦YSÜsÖÈõíx,+bñùLñ•™âõš*Üdž¸:HX‹«Š~—îÀëyRnÏ@nR=?ËrÃ.è·­[³üKƒ×¢µ/ÿù¡çÇõAtêóÏ~kùã«\ñåoÿú—»÷}ø®šwÙÞ¾Ü>1¸$…!öÔõ‚œc1t¸9>–ÑÔïÕÏ}vO;l‡½ž7ó¡%­ Ûß:¢o|;]ö.{û„ì×}CÐ'&;«Æ·ë’ß=î°.õvÙÿðß§3ÁµyîÓ3KLw­vÿˆdS’‰uJ&rZÒ‘3²î;5¿+|\¿FäЯÕ?½j$XåP|:âeímz¾Äe6ª†ÉTÖ®.+³ãiâ¬zHE¼lø™ØÈw¦KvnØSAIôîPO麺_©Pc@¤ŒÚõ‚ûì\ÏÌ+‹Z<é}óFl Ëњ†Ç¯o6§¸ª‘dàˆ$ú÷ÌÐs×¹¬zZ v½ƒ ÆôÜ =ã¾Ûa¦;%éÌ=àœÔ$ŽÒ•Ýø -X¿6›ŠJâj›\9óZäðæ>—Éf÷w\L¼õ•§?Ò¥YaÇÁik0¾tÐéLÆf+›+½3Üá§ïSù˜aä–¡–å0žºi®e3kÜÏ.n™¼óÜî5?SÅͪg†(½»ÝóÛÕ/MvoöD¼áÜîÒúëÞÅþß8Õ²"½ ÝöL}P‚ý^ÉŸ×æ¿€ Æ®ìòöûíF|ºnëàAíNÏ”øvÃAWË [ËõÔ,§¿Qâíg¿]P +§‡»Þ”d8ÿÙ¹aÚŠ6;”±ˤâ‹%¢¯nÙsUOÐÅãµ9ý⛹B¢½%Ô½SL=MÏ9èÖÔ_/?”Ø;}¼-$å>ápPŒ#žHå?Ç6]¢Ï;O§Òc>nôÐË^{¨ü¥ŸÎÛ(ìr'耢‰yÕóëδ÷ê@ÇÖÜîzDƒ—ò»Ý‹0ô²—ëôÍ_ýפºñ»úœôRVÿÄÂ.w?¡éeÝ©dï·Í9<¿ ôI‰§¤8@-KÏÌýuˆ§²±ð!«Ÿ Š#ñƒ5O5OŸåuÇC’Œ\–x°Sñ€®ôˆÏïÓµ¬üçñá¾#CA†b=Â׿t@Ñècà ‡gŠè‘+¼Šú¥£­2p% †d¤Ìwc3õ` ª–ºè”ãm{z^ù[×öõÞxC8 nžX cè|ô+ý!‰D¢RYQ"v»q]¯O¥²Òוx,­Þ$LÓ>ü…p]çO„×oر]]=£F?k› Š#ѲìÇ­}}áÅÅ çÜÛ0sjm­³m¶-3üùv4’–ó‘x<¦xJLq»M÷ÑWob‰DÕˆ ŸV>c‰¸}3†nG½=I‘ú„÷.=‰gõO,?pã´6 ý¬ÓÔÐ?‡V­FMÿþï¿`wùÅáòå¾å- ‡[ohùu÷=9b†ÞÑÕ{BÝ·J]=®ƒ®¶ÿœ‹Î Púû]»­Ù²¾ —O`Ä\*ȦÓ'©X wÛ´»Ä[Ñ ÁËGF<¯ræqy§äî÷ŸÊ}+\Gw°/í©7YÓ43}ýÁvþùTt@‘è°F­È&Õ˜t­'¹ËfH zD&ÕÌ—ŠˆMEÞí«•K§¶æ/ñתÇZ¬ëù]ìKmòÔ/ÿ¼mÓk»ÛÔM}¨{D Ö›ýwÙ=KÐE”±âª£Úµ÷èæCGÛc§ºÂoîú ·yNÝä-¿Y¹RÇÜUZ=ô"_uSîE=§wJuÃò-T?þο^þ§X»×­7 ú²Ïzó@Ð'>C€ñÚ#Ž\×_ÅZ¥†žbWZ.ý[éSú½´¾Üï-×OŠDãñ}N¶/ý|Ó]úv26 ·_6nÚööÁÃg/~{Å¢9÷Ý;k¶§Äé6j[ªžrROØ­YyÚŠyn†ÎöŸ: øRj\±fê’ÿjn}´{Ý¹ŽžcåMÞ…ßñþǸiWç…¾ØúgV´<³æ«ËuÌOé>÷äOZ_WϽÚúÇ·wè×ý~Ã÷è ¼¾Oò»Û³ÌÐ7i†ž»Ë ¹a ô;Ö®^öÅþ«áªWþôÎàùãzÃ=õ…ç¾¹ì‰U_Xþ¥oýê»ö~ø®ºï’õz¯õÆà¢äw±'®r¶ÿps‚>šÞ‹ª¿ÿUxî±fÚA+öú¾ú‡7×n{ë°>ðíTAìÖëcVدyzÛ‚¸5A7¬¨ë™ºþ<]þ²î׿–Ve=6 F¯ðÂúÜÅÎöŸ nMУnŒ ´a¾0ôŸøür¶ÿÜfLVt@ÐA€ ‚: èt@ÐA‚nKÿ`–%ú‚(žIEND®B`‚gruff-0.3.7/assets/city_scene/sky/1200.png0000644000004100000410000000457712055510742020225 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe< IDATxÚìÝilçÇñÿÌžÞµwñc8MÀ6‘pÒBÚBMM¯W¨© ª„Ú¤-AQ^Té‘ µEj£¼µRšŠÊMTE¥DI«–P„h "!ÂÛ>`×{Ÿ}žÝ±½vh½Á U›ïGú³»3;¥A~ó¡ Ãø¸¥ÙOnmjT¯Uæ˜u¦UF1íÜ‚¼·ú’YðÞݶ~fËœ®ƒg^kzL}®På´ªìÝ—ïúÌ[æÝ«ÞÛ­m€@þË}ÈueÇü5êµ\‡µ*ªšG>7éÉþ†i®û7ßù]µlÊêGªgwokÙÔÒèÙW3Éþ”ô6v#€ ,²Ù,{¯£\ÚÛ°FÜUÉw\Lg²Á@(ý÷=ïþyjµcÁÂæòu…_>w1¾­¾ÖùY»ÍÐ!.Ñx¦Ç·ø½ûÕÛnUqUY«2Öë0ú)(} U¾´µ¢iÛÆ;öÞH»Ï¼Ð½æTGìк¯×Þ~ÛdG]•ß>­úÃ?³>C (–]Ÿë’ŸwX¯ºÿøZèût¦ pmžÛÅôÌÓ]/†Ý?ªl* ™X—d"g$9+ë¿]÷ÛÂõz‘ÿRÿô©J°Ëè@éé¯èøKóse.³Ie¸‘Leíêµ:›ÑaÙ2}¶×uJ2rEâƒ]’ˆ%xµW|~ß„‚ª­üùøpÿÑá@ Åz…Ç¿ Ð’Ñ×ÀÏÑ•Kxê—µIàjP ÉH…ïÆFêƒÁ¨j#4ü9è’í{{_úk÷Ž _]¸Ü<±`çðýèWB‰D¥ºªLìv£¨íS©¬ôD%K«ƒ„ÉbÚG×}ádxÃÆ;ÔÛ³ªØÛt 4­ËÔöè×]Z²hîݳ¦Ö×;ÛçØ2#ç·£‘´\ˆ„Äã1ÅSfŠÛmªpâê@ –‘HTUdän´ÊKÅí›1ü9êíMŠìÔ7¼wëA<»ÀxŒl–ÓsÀ¸Å0ô#X§©Ò?‡V«ªnàÀ÷ž·»üâpùrOyKÆrñHÛ µßpÏ£FèÝ}'Õ²Õêí 誟r/:Fè@ èç»öX£eý®œ~ߨ/¸T ›NŸ¤bÁÜgÓîoU£ ^9:ê{Õ³–ŠË;%·<öƒÍ»».öÇ6<½²õéµ_Y¡ÃüôÙžóOü¸í5õÝkm|k§Þî÷¿Kàõ2ÉO·g ¡7i„ž[d¹a•ôÛÖ­YþàÀµpÍKz{èþqÝÁ¦>ÿì7–?¾ú +¾øÍ_þ|÷¾ÞQË.[Û{­ƒK’ŸbO\/Èé§tàæúXz¶K?ÿUŸ<÷X#íA+ìõ²™-i©ßþæ}áÛé‚°wXÛǬ`¿îíiôS:pkݰB]Ôõùt}þ;e-׿–Vc­ ¨ê³¼°óýÇ)vú)¸5>êÆ˜€6¬€/ ú}9ýÀ'€É.€@: Ðt@ è€@:: Ðtt@ èè€@: Ð Ðt@ @ è€@€@: Ðt@ è€@: Ð Ðt@ @ è€@àÿοýˆ%ú¢i£üIEND®B`‚gruff-0.3.7/assets/city_scene/sky/1400.png0000644000004100000410000000460012055510742020212 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe< IDATxÚìÝilTׯñ÷ÞY=¶gðcpš€m"ᤅ´…ÚšnŸPST µI[‚¢|¨Ò%Aj‹ÔFùj¥4‘›¨ŠJ©’V-¡ ÐDB0„-,¶1¼ÀìûLÏ™¹¶Çj ˆþ?éõÌÜåXºw¤çžs—1²Ù¬€‰Íd@ è€@€@: Ðt@ ãŽaŸ´4û‰-MêÕ¡Ê5ϴʸžö:nAÞ[ûØ,xïn[×Ð2{†ëÀé×›WŸËU9­*yïÕ{>÷áæ¹÷«÷vkŽOyߺ.oŸ·Z½–é°VåQUýè&½(YÃW?͵aߦ» ¦MYõhÕ¬î­-[={«'ÙŸ¶‚ÞÆf€ ÒƒËf³l…‰¼¯=ìmX=îÊä»ó/¤3Ù€?”þ×î÷‚›Z嘿 ¹lmáÂg/Ä·ÖÕ8?o·:Ä%Ïôx½ÿ zÛ­*®*kUÆzÂ÷t?Ђ*[ÒZÞ´uÃ]{n¤Ýg_ì^}²#vpí·jî¼c²£¶ÒgŸVõС_ZŸ!Ð`|±³ n\—üð¸ÃzÕûÕ÷ðïg3kóÜ)¦g–˜î:1ì¾ dS~Éĺ$9-éÈY÷½Ú?Î×ëˆú­úÓ§*Á&ŧC¼¼ãïÍÏ—¸Ì&•áF2•µ«×ªlF‡ñ4qV?¤B¼|xLläéR?;WöTP};Ô"=î¦+•ªüª’2jè@ cì½sÝ3¯rT.jõ¤÷ͱƒ+Éê†Ç¯¯A›S\5H2pDû z蹋ë\V=-Cïcô\=ã¾Ûa¦»$éÊÍpNjGY£ŠÝø 5¬×ͦ¢’¸Ú.Wμ9ü§¹Ïe²Ùýo}íétÒǬ`|ʸmíö Ý™Îdl¶ò¹’уáŸ8½ŸÉ‡ù*׆jËa&<õÓ\ËfÖºŸ]Ü:yç¹Ýk~¡þ‹›MôÐQz¸ÝóûŸ4,MölöDJù‰î²†ëbÿœª­HßCŸ=S”àE_©äïk³ €@ÇØ•_Þ¾`¿ÝˆO×Ù:xQ»Ó3åc¾Ýp «¶ÂV»žÚeâô5I¼ãìàÓå:Š ²²qåôp÷›’ çϦ­h½óAëò·L*.±X"úê–=Ùô@ £xJmNŸxg®hßA õìSwÓ3Et«ë¯Û%öÇNo W¹À¸ÁEqŸO¤òç±M—èûÎÓ©ô˜/†]ºÝÁ*µ‡*^úù¼Â;è(šøWW=¿îüG{¯ú;·æ®p× ^Ê»¡t[ƒí:½³ÅÛð ©iú¾¾'½ŒÍãCî_hzyO*Ù·ÇmsŸ…üýRâ))Î?Pméž¹¯þñT5Îr±ù€@Gq$~´æ©–é³JÝñP§$#—%ì’D< +½âõyÇÔxÀPmåÏLJû z0ëÿ :ŠF_g8ü@¸îó'Âë7ìØ®ÞžQ5ÀÖÅ‘h]öӶǾ¹ðââ…sîmœ9µ®ÎÙ>Û–>¿¤å|$$)žSÜnS…ûèW±ŒD¢ª"Ãw£UÌX"nÏÑÒÞ¤È}Ã{·îijù`|0²YNƒNèhú¬ÓTéŸC«QU;°ÿ‡/Ø]>q¸¼¹§¼%ã~¹p¸í†Ú¯¿ïÉ=ôÎî¾jÚ*õö¸tõýá^t ‡Ž"ÐÏwí±zËú5\1ý ¸T ›N¯¤bÜgÓî’ÒÊF ^>2b¹ª™KÄU:%7=Ÿ®Ï§¬éú×Òª­y~U}V€~)þç;ß Ðqk}0ÔQmX_ôŸøþr¾?@ €"1Ùè€@: Ð Ðt@ @ è€@€@: Ðt@ è€@:: Ðtt@ èè€@: Ð Ðt@ @ è€@:: Ðtt@ èÜvþ+À#…%ú¶Ï IEND®B`‚gruff-0.3.7/assets/city_scene/sky/0200.png0000644000004100000410000000404712055510742020214 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<¹IDATxÚìÝ Œ\eÀñofv¶3ÝnÛ¥--ÝR)¤XkŒÜG ±`bB$ÓH< jT@PÁؤ‹‰B6B ZR´Š@@®RZº¥7lW–m»Ýn»÷¾·û¶h‹^›ß/ù2³3“ÙdÞKþó½kRår9'¶´t@ÐAAt@Ð@ÐAttà¸Tå#R©T¥¾àÅ#~³øwu‹ÉíAù^3tŽƒïÉ—»áÿXøýK ¶F÷k“ÇR>AçĈy6£Öô¡òLØ»™¼”ŒrrÂþûÃûc¾pþ×/ùìegÝ=<_=­TêÛóäyŸœü©èf‘:€ steV=sÇ“'ÔÜU(víÚݽ´£«§±mgçÛÍž÷¯èùBöbòúܲ'n¾aÚãoÍdÒµ¥bßþ+F¦<* lŠtAç(Ê6¾»»ö£§?»¯{gÈ”¿p\¼Å¼~tè\ó«ÐÛWlêí-léêî]µ«£§)[•™rêĺ¯Æ/—Jï{³±£sSÃÀ>ôLØ{Ô;‚Αž¡·íìÈWU}Ýí¡TìÝA§C}U.]?<—;Ìè\ÿcÎÊ÷5<—>9 ìCÏøhŽx:R/¼òVKOo_gu¾.šu÷֨ɧÇÅ]Fõ>³t#¬|ïƒOmyâ©×g²ùPU]Û??œÑð÷oß5ÿÖ+/ŽÞ{d4† ;Àq<«s…¯!² S©x;z}4>ýï×ï7aÜȉí[¢Ùvñ°ß»«§¯¡©¹ýwçξAôgw4âíùƒGÑ|›°: z<{3ošså5so¹î¦žŽm¡³msÅþG±XnoÞ¶û§_ÜôÐwþÏ·’°Ç;âKÖ#A§2A7…Çû»'Dãì§ýÑͳ.9kÆÎæ7B¡·³âÿo{[ç¢u›[~~ÎcOEvDëQÑRt?èñM|LDM4¦L=}Â¥Ëÿúã¹Ý­oæŽÔÿ6|LhÙQœ7õò;o‰Ö£Ý–À±ã´µ¡%Þ§ÝÖu›ßÙܰtÇø±5§Tòdªr!?úÔ(æãB&› ï´6Æ_ â£á@Щ°òs¿ÿâõãêªOù_皪t&ò#'†ÜÈúV»ßs=½…j뀠SYý×g¿ï¶KfM=µæÚréðbž«…|RÿíYÙÐøæs/5¬ ®" èTL¼}ØfN:mÖy'ÿòpgæÃjƆºúsÞ÷øö»v.zòÕ—üéù×–¾²vuôPC8• A§BËrÔ7N¿;›)Rú€ë³ÙüI{îwvõô<»tõ÷?üìòÅK–­‰j9`túøÊÈ-¼óükêF¤.Ï<¾¦{¦º¦ÿ¶*ºMgª£Hîa|iØMËCGëÆÿôÜȰlÅÆ ‹ž|eù]ó5žœGc[ðø~{òø ¼‚@ЩŒüÌÏ\uÃøñõ!]U}Й|aH¥«B{Ëê|~ã–ÎÆs?÷ÓßFwߎƻIÄwF£# lbü9Ö’@Щœl6?6}(1tÒ¤s£™ø¨°mÓóû¯Ѭ~cÓî7ÃÀþñµÑhMfãñŽùø2åà@8AçÈÛÖº«}ëööxìx÷½¶í»»º^~}CK:•*-yvEËæßxÅŒ ¦M¯{fÿii-žÙó“«ñ¦ùõ›šãK»¾ædV^qAçÈ+Üsßß~ýÈã/ŽX¿é½Lß¾dfÝ•Ü/%·U3gß¾nÉÃ?øÚ—M¿¨¦nJ˜ø±«BÓªÇB±Ør#&„ç_z:ÞobïNfåÇ\úu¨,ÈT*¾âËøhÔ…óÑãx’ ï»Ï;^àÙäµÓæÞrÝÕ7͹òKñ{ ÝaËÊ?†ì˜s¶×_pÇW¢‡V„Íí ºõÀ ʈgáñÁkÛö w9‰ñà~ïAédæ^üÞíÛÚ;:~ø­«¯žÏå&}âËaýÛ­ñ¦öøR®½ÁfvA稜wí;q>àvÏ„>mƒ³øŸÝ½¸{í†æ–ï™óͨé¹Õk›V%Á/:€ sôê)då$Öñ¹äñii]þ奮e+6¾÷ŸoûÎÊ5ëÂÀp‚p‚°}¨,ÈŸOýÄÐå£qr4¦|üÌúIÑ }st?>Ê=>÷ü®!k=tŽmÐcé$êñu#ÃÀAt[ÃÞÓÕ@Ð9‚>õl2â•"¾¤ëÓ :€ GJÚG‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚: è 耠‚:: 耠ûû² þ%ýIEND®B`‚gruff-0.3.7/assets/city_scene/sky/0000.png0000644000004100000410000000405412055510742020210 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<¾IDATxÚìÝ lœeÀñçîzÝݺn+ÛØXÇdáÄùþ,&hPDÀÄ„H &f‘ø‘`P£‚ F’A&*1H„tE _dl¬ccÐUJ·u]·~÷î|ŸöíØºboô÷KžÜí®¹&ï’çßçýºL¥R Àû[Ö&At@Ð@ÐAtt@ÐAxOª± €±Êd2ÕZ`Ä?,~¯s)}< _ VèÀ{àïtq1þoK¾}Ö`ó[“çõék›xÄ<ŸŒIk¿áªgÌ{4TJ“~ñ“Ëæ'¯x÷=ÚÇù§ð•KÏ>ªm墻™=å•Ò@ˆ£¿¿ÿÉ{EsŒžcè@µBž oî&/§£’>†°ïñð¡˜/Yüå3?yÎq7/ÖÎ+—ö¼yòGg,yXj…‚Z¹Õ^Þìu7îÚµ»wYWO_sÇÎîWO¿hÑ?’÷Ó°—ÒŸ/,àªËç3ýš\.[_. ì;1å*“Âð®xAA¡|óë»ë?xôôãzw†ÂaÅÓ¦Å=æ“C÷ÚŸ…þRKÿà–žÞþÕ»ºúZò5¹9GÎløbl|¥\~ˇM\˜†¡ç›g½‚ìzÇήbMí„0ÐÛÊ¥þ}'šlh¬)dÇ §L™\zmÿUùÞÆ²‡‡ácè9›FÇ '@5dž|öå¶¾þîÚbC²êÓ¨+f§Å®'£v¯U: èÀAV¹õö‡·<ððó÷åòÅPS[?´Ëhúë×o\|Íùg$Ÿ=1ã„ðWµ;,cžH2™¸½1ÿç ·.š1mâÌέMÉj»4æÏîéhjiíüÕIÝvGòÏÞdÄýù#gÑÿ5aAªô¸zžœŒc¯\xþÅ7]}é•}]ÛBwÇæªýŽR©ÒÙºm÷oyjÓßüñß_NÃÄ—Íc è@u‚w…ÇãÝ3’qü#÷|ïªgwöÎÖÃ`wÕßöŽî¥ë7·/ùôÂ{NþÙ•Ìc%ÿ º cz|ˆçäÔ%cÎÜ£gœµâÏß¿©·ý¥ÂÁúãÆO m;J‹æž{ÃÕÉ<¶Ûÿÿï\¶TK<¦Ý—Œöõ[_ÛÜ´lÇô©uGTóäj ¡8ùÈ$æÓB._¯µ7Ç? âÙð‚Ž Û@•Uÿíg/›ÖP{ĺÖ|´²¹|(Nœ C~\ý>ïõõÖšÇ@Ðêº?û¯¯=sÁÜ#ë.©”ÇóBýŒ$䳆ßΪ¦æ—ºiUp9t jâAôqŸ™?ë¨'þÓ±®ÌÇÕM '¾åõí;ví\úàsÏÜñ‡'ž_öìº5ÉKMaøR6t›¨Ò\2éú+N¸9Ÿ+Q~›û³¿ùâa{žw÷ôõ=¶lÍ‹·ÝõØŠûZ¾6y©m¿Ñmóƒ ÕQXrÃ)7LÈœ¿Ï<ÞÓ=W[7ôX“»âÆÅ÷?çÉØ–<>ïLCO´ùAÐê(ÎÿÄ—OŸÞ²5µüá)³O ™lMèl[ó¶ïoÜÒÝ|Ò§~øËäé«Éx=øÎdt…á]ì#_ÇZ¶éAÐêÉç‹S³£‰ùˆÃf”¬Ä'…m›žØwRJVõ¿†¯KF{ºæã d*Á‰p èÀÁ·­}WçÖíqìxýŽ»{zžyaC[6“)?ôØÊ¶ß-¾â¼³OwBýÔc‡.KkÛð螯\»æ_ÙÔoíúZ2ZÓUyYÄAЃoð–_ÿåçwßÿÔ„W6½‘Kã;®¬{Òçåô±fþE×­è®ï|é¼sN8½®aN˜ù¡ BËê{C©Ô f„'ž~$î‹»Ø{ÓU9pný Œ}"Édâ_¦'£! _ã=˜yïcÞqÂɧ?;嶺/½ðÊ…ç.~Fi°7lYõûŸrâöÆS¯ÿBòÒÊ0¼»ý€A7:PqO^Û¶W¸+iŒGŽ{Ȧ+÷Ò·®»³ÔÑÙÕõݯ]xÉøb¡0ë#Ÿ¯¼ÚwµÇ[¹ö»ÙAÐCjdÞ³÷Ây¿Ç= údtŒ¬âtó}½ë6´¶Ý~˯&M/¬Yײ: þ  ƒ ‡Þh/!«¤±Ž×’ÇËÒzîùÓÓ=ËWn|ãÉ?^ûUk›×‡ááÞÇбO$Ã_Ÿú߈'Гqx2æ|øØÆYÉ }sò<žå¯=Õ=dÍc èÀ»ô(›F=žP71 ŸD·5¼y¹š ƒ D=ŸŽ8)Å[ºî2 ƒ Àÿ¶¬M‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚: è 耠‚:: 耠ûú—™ð² ùÓsf®í±ƒÀà*ê÷#ý=3w9–Î<üî9w#—Ë øl3ét@ èè€@: Ð Ðt@ @ è€@€@: Ðt@ è€@:: ÐttŒbÆ–f?¾¹©Q½:T™£Ö™Vciý6ä½Õ‡fÑ{wÛÚé-³¦¹öŸz³é õ¹B•Óª²^»ç ošs¿zo·ö€@ÿ÷ëÒ¶¹«Ôk¹kUU5}iÂK’3ü S\ë÷n¼û‡jÙ¤•UÏìÞÒ²¡¥Ñ³§f‚ý+èmt# $#Ì\.G/\«ƒ®>ímX#îªÔûóÎg²¹` œù×®B›\í˜7¿¹|MñÆgÎ'¶Ô×:¿h·:Ä%–Èöø~ø zÛ­*¡*gUÖzÂ÷ ÐKèFQ•/n­hÚ²þ®Ý7Óîs/u¯:Ñ?°æÛµwÞ1ÑQWå·O©~è௬€Ïè€a§ Æ–ëR˜wX¯ºßüÌ÷}>[¸6ÏbzfŠé®ÃîÑ@.l¼K²ÑS’‰ž–µß¯ûcñz½ÈÁß©?}ª’t9€@/=âo~¡Ìe6© 7Réœ]½Vç²:Œ§ˆ³æ!âÃ{dã#L— üYù²§C’ìÛ®6étµ\©RP•’QSïèãë‘yµ£ja«'³w¼_¾&kž[ƒ6§¸j•Tð°$öÐó×¹¬zFЦÞ ÐÇèùzÖ}·ÃÌtI&Ú•_áœÐ,ŽòF»‰›jXï›KÇ$y¥].Ÿ~=zèÏsžÏærû:/$ßùú3Ÿè¤[ÁÀ5qÛÚØè@wf²Y›­bŽdõd¸Ã/Nßç a>ŽÊ·¡Úr˜IOÃ×ÒuîçµNÜqv×ê_ªÿâ¦ëŒÐKCO·{þðÓéKR=›}ÌSì×ãTmEû>úì™ü „.ø½R¸¯=ÂW ÐǯâÒ¶ùûìFbªÎÖÁ‹ÚžIŸºðí¦]µ±ÚõÔ-§¿IgŸ.^UU+¦Fºß–T¤pîÜ0m%ÊZ—¿eÓ ‰Ç“±×6ï>@×ôÒñÚœ~ñÍX.±¾îÙ!¦¦gKèÖÐ_·N:Ö®rŒÅ]Ÿ‘H¦ ç±M—èûÎ3é̸/†]ºÝÁòÚÕ/ÿbîaÊ@ —Lâk+_X{î“=W[òW¸ëŠ….¦ÝKPº­Áv¾Yâ›þM©mú¾'½œîŒSîמZÑ“NõívÛœÃÇ?á@¿”yÊJóT[zdîoxT<ÕMÅ«\t?€@/äW?Ý2u¦×wJ*zI¡.I&‚¼Ü+>¿o\AÕVá||¤ÿðP ‡Âñ^áñ¯½dô5p†Ã3Itå^…úÅ#m¸C²Rỹ‘z(Sm„‡>Ç]r¬}wï«ÿèÞ¶ný[o ÷ ô['ìºýò@X¢Ñ˜TW•‰ÝnŒiÿt:'ý1IÄ3ê a¢˜öáÂuŸ;Y·~û6õö´ªz@ —F²uéÏÚÿÖ‚ ‹̾·qÆäúzgû,[vøüv,š‘sѰx<¦xÊLq»Mî£C\ij©ŠßV9m±¸}Ó†>Ǽ½)‘íú†÷n=ˆ§ûcaärœ¦½f†~ëUúçÐjUÕ ìûÑ‹v—_._þ)o©D@Îj»©öî{jĽ³»ï¸Z¶R½=¦]}?Ü‹`„^úù®=ÖhY¿F*§>0b— dÓé“t<˜ÿlÚ]â­j”Ð¥Ã#¶«ž±X\ÞIùå‘“ù§Âuö„ú£±¾¸:pÈ™¦™íuÈðϧ@ —ˆÖ˜²)U®¶‘»bšc‡eBÝ<©šö€ØTÈ»}õrñä–üú2½Z×j½/L±/¶ËÓ¿ycëÆ×wµ«úR÷¨ªóÖÁƒþ¿LŸôÊZáªC7¼sÏ‘MtGOvGÞÞùQ_Ë솉›¿b…sWyíÐN¾ÚæüN½§vHmã²O5ª×¿÷ŸWþ-ÖôºuР_û­ƒ0&œC¿^#®\×b­Q¥‡ØÕÖ‘þ­ôIG_^Wé÷VꢱDbïþK¾Ü|—þœŠÄáöˆ[ß=pèÌ…ï-_8û¾{gÎò”9ÝFÝãKÔ&'ô€Ý•g¬0ÏÐù~ŒÐK/­ê²5RsõÕî g;{V6{üsû‡ûŸøÉÆ]çûãëž]Þúìêo,Óa~òtÏÙ§~Þö¦ÚöJÛ_ÞÝ®÷ûÓú'ïÑx½L Óí¹¢€ú-¡çYAnX¥ýŽ5«–~eàJ¤æÕ¿¾7xÿ¸îØÉ/>ÿ¥O®|xÙW¿ûÛ_ïÜóñûjÙEk¯u`pA SìÉ«9߀@¿5>šžåÐÏÕ'Ï=ÖH;d…½^6ý‘E-õ[ß9¤/|;Yökÿ¸ìW½=ï@ ßž@7¬P×#u}>]ŸÿN[Ëõ¯¥ÕXëªú¬/îôkN±óýôÛ胡nŒ hà øâ ¿áûËù~:ÿ'Lºè€@:: Ðtt@ èè€@: Ð Ðt@ @ è€@€@: Ðt@ |ýW€çR%úvXIEND®B`‚gruff-0.3.7/assets/city_scene/sky/0400.png0000644000004100000410000000404312055510742020212 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<µIDATxÚìÝ}l”õÀñßÝõÊ¥@)0ÑÀØt.ËÄW%KÜâæœºd‰™Y\²™½$.lË6uºM—™€.Ù4Æ™)Æ ãœnnNâh—"ïZ:KR }¿—=Oûu{`ˆŸOòË]ïškò{þøÞïykª\.àø–6 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è èÀq¨Ê M*•ªÔ¨xÄVŽF1y|_årÙFÀ ýÃþ>|yù¯%?¼ ÐxßÎèymòZÊô èÇG̳ѳþ™[Ì;ÖS¡\ó»_]37z-'èú‡èÔÌoî[W_xr˪…ž:mÜÏÊžÞÞÞEïåm*Á1ô# y&¼½›¼”Œrò¡ÇÃûc¾dñ7ç|þ¢ÓÌWÏ*•ú¼yÖ§§}&zXj…€ [™5OÝrÉ´I5· …}ûöw/ïèêilÛÛùÆyW,üOô~! {1ùýÜŠÇ\;ëÔ‰7f2éÚR±ïЉϔDŽ]ñ‚€ CÙÆ·ö×~ü”‰§÷uï ¹òçNˆ÷˜× ëzûŠM½½…í]ݽköuô4e«2Ó§N®ûzÜør©ôŽ?67# CÏ„·ÏzA?Ú+ô¶½ùªêQ¡¯»=”н‡Nd:ÔWåÒõ#s¹³ÇÍõ¿vøªü`#séÃÀ1ôŒ©`¸œ5t©ç^z½¥§·¯³:_­ºû†5jòé q×£Q}Ð*ý(+ßyï“Û{ò•G2Ù|¨ª®í_g4üó»·-¾ñÒó£ÏÂÀ^uºÙ'*•Š÷£×Gã³ÿ}õÎ…“&ŒžÜ¾³!Zm‡ýÙ]=} MÍí˜}ÅÝ÷E?vG#ÞŸ?xýÀ· Û A¯HÐãÕóØh̼~þ¥WÞ~ÃÕ×÷tì mÛ*ö7ŠÅr{ó®ý÷,{~ëýßÿå¿_Oˆ/ÙNze‚ï wOŠÆéËúÉ‚ysN»poók¡ÐÛYñ¿·»­séÆm­K¾8ÿá'£;¢íT´ôá=~ˆÏ9¨‰Æô§Lº`åßz{wëÚÜÑú›#FŽ -{Š g\|ë ÑvÚo+ð^\¶vdâcÚ=Ñhݸ¥ùÍm Ë÷L_sR%ÿ@¦*òc§F1Ÿ2Ù\x³µ1þŸ /èz…•Ÿùã—¯™PW}Òÿ»Ö|¨Ò™lÈžr£ëCvDí!ïõôªm'½²úïÏ~×MsæÍ˜ZsU¹4¼˜çj'E!ŸÒÿønV74®}æ…†ÕÁ]äôЉ¢øÒÜ)'Ï;ëÄ_we>¢f|¨«?ó¯ïÞ³oïÒÇ_~ñ¾¿<ûÊò—6¬‹^j—²€ Wh®ÆÜrÝ‹²™ÒI¥w¹?û‘ÈæO8𼳫§çéåë^»û§W>òÄŠõÑK-‡NÓ€ WFnÉ­g_Y7*uqüÿÌã{ºgªkú«¢Çt¦:ŠôØþ_Œo »§ieèhÝòÞAÏ+VmÙ¼ôñ—VÞ¶øÑ—ãÅy4v%Ÿ·'!OÂ+˜~½2òs?wÙµ'Ö‡tUõûþò¸iç†Tº*´·¬{×÷·lïlœý…Ÿÿ>zúF4ÞJ"¾7a`ûà¿c-™z½r²ÙüøôPb>è„)³£•ø˜°k볇Nz´ªßÒ´m8>¾!­Éj<>0ß@¦œ€ }»Z÷µïÜÝ=oíhÛÓ¾¿«ëÅW7·¤S©ÒO¯jùÓâë.¹ðœYgÔŽŸÙYZËæ§üËÕx×ü¦­Íñ­]ߌFs²*/‰8‚~ôî¸ë¿}ðÑçGmÚº#“Ä·/YYw%ÏKÉcÕÜ+nÞøÄ?úÆ%q^MÝô0ù—…¦5‡b±'äFM Ͼ°,ÞïbïNVåð¹õëP'*•Šïø21uaàzô8Þ…$ÈóŽ'4›üî¬Ûo¸úòëç_ú•ø3Š…î°}õŸCvÜ™»ëϹåkÑK«ÂÀîö÷ ºí€zeÄ«ðøäµ]…»œÄxð¸÷ t²r/þàæû‹mí?þÎåWÌçrS>õÕ°éÖxW{|+×Þ`7;‚~L ®À»^8öx`A¶ÁUü/=Ò½ass˽wÌÿvÔôܺ Mk’àA?ö†z Y9‰u|-y|YZ×C{¡kŪ-;žûëMß[½¾qc8NÐ¨ÇЇ:Qÿ>õƒˆO ËGãÄhLÿäÌú)Ñ }[ô<>Ë=¾ö|H÷µô7è±tõø„ºÑaà$ºáíËÕA?‚>õl2âIoézøÉt‚€ ÀGUÚ€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠ÀGÏÿJ² nqñQIEND®B`‚gruff-0.3.7/assets/city_scene/sky/1000.png0000644000004100000410000000457312055510742020217 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe< IDATxÚìÝ}lUgÀñß9÷µ·í½ô ¥0èÜ -Kè¦0ÆÐ1œog„˜ÝTF–ýaæËF¢’è²X4™3,u‹YD̦Q†à„°1 ãm¼´¥è Ü÷÷s}ž{OÛÛBÚ ÆåûIžÝ×sHÎ’ó½Ï¹çܹ\NÀÿ7“MAt@Ð 耠‚:t@ÐA€ @Ã0nvhÎ[š›Ô­K sÌk¦=ŒY‚à6ôÞÞǘE÷½íëg¶Î™á9púæÇÕãJ5Üö({ÿµ{>óÑæy÷«ûN{Àÿxßâ¹¼}þu[¡c­†OÚG?7é%ÉÆižû6Ýý=õÜ”ÕÖÌîÙÚúbk“ooí$çÓvèlFà&>Açr9¶€ñí@®ØÛ°gÜÕé÷\ÈZ¹P0’ýÇî÷ÙZãZ°°¥b]ñ›Ï^Hnm¨sÖé0tÄ%ž´zý‹?xPÝíQ#©FΖ};Œý@Д>èFѨXÚVÙ¼uã]{ƳÞg_êYs²3qpÝ7êî¼c²«¾:àœVóСŸÛ·:p-'›ÀD».…Ãã.ûVïW/ôÚ* ®Ãw§˜¾ÙbzÄpF­ — Š•è+vZ²±3²þ;õ¿+~]/#rè×ê?ýj¤ØäAPz:â•my¾Ìc6«†éLΩnkr–Žñ4q×>¤"^9²„•ý‰Àô¨àÏÉg&,©þê-½#AWÏ+ÕjÕH˘Cï:€‰ÏÎõ̼ÆU½¸Í—Ý7Ô¦ê~qù›íixòÆVèp‹§îI‡ŽHjpÑ =rÇž¡g¥èÐ;‚`âAÏÏÐ-ïÝ.3Û-ÙXwþ÷¤qU4©ì&ǵb½l.—ÔÕ¹ræõØá?Ì{ÎÊåöw]L½ý•§?Ö¥OØa \¶`âtÐÝYËr8*牥†»âöªó Œü:Ôº\fÊ×8ͳ|V½÷Ù%m“wžÛ½ögê_ñ²éfèJCn÷ýöG3—¥{7ûbåÑü“ÞŠ™7|ˆý¿q«uÅú?~ì›ú „/Ê¥p]{”ÿA0q•—·/Üï4’Óu[‡Njwû¦\sâÛ¸ƒ®Öµ×ë«_.î@³$;Ïýº‚ ª«›VMö¼%éhá»sÃt”lv>IJO³2II$Rñ×¶ì9Ȧ:€Ò)w¸⟵Râý%Ò»SL=M·Jt{ê¯×IíOœ>ÞÎrFá¤8a$S™Â÷ئGôuçÙLvÂ'Ãz½C£Ü©zù§ó_¹@É$¿¼úùõç?Þ{5ص5†»ñð¥Âa÷ ½®¡õºýsÄ?ókR×ü]}Mz›Á!w™^Ù›I÷ïñ:Ü#óƒHp@Ê|e¥ùÔºôÌ<Ðøˆøjš‹_ò°ù‚ 4R?XûTëôÙåÞd¤Kұ˒ wK*’Е>ñüZy(Rë*|82ôp$Ñ'üü+@ДŒ>Îpù¦ˆù«¨_:Ú.Á+!1Ä’JÿøfêáP\­#2ü8ì–ã{ú^ý[Ïö ß|S¸ ènD¨køzô+ƒ‰ÅâRS]&N§qCËg29ŒK2‘U&‹éùA¸žó'¢6îØ®îžQc­ t¥‘j[þãöǾ¾èâ’Esïmš5µ¡ÁÝ1Ça|¿eå|,">Ÿ)¾2S¼^SÅ}lÄÕ„%±¸±‘«Ñªf,¯Æðãxy_Zd‡¾à½GOâÙüÀ#—ãk(ã܆þ Öijè?‡V§Fýàþï¿àôÄåñçå- Ê…ÃíãZã}OŽš¡wõôŸPÏ­Vwë «ý×¢ÌД€þ}×^{¶¬o£UÓõ ²éöK&Ê?6)¯n’ðå#£ÞW3k©xʧ䟞Êÿ*\Wox ïO¨9Ó4­Áp§ŒüùT@‰è°ÆíȦ՘t½7y+gH(~D&Õ/êˆCEÞëoK§¶æ_/ 4¨×Úìû…Cì¡KòÔ/ÿ¼mÓë»;ÔC}ª{L ö‡ýïrx èJȲ㪣Ùµ÷èæCG;c§z¢oíú°¿unãä-¿YµJÇÜSQ7¼¿®%¿PßéR×´âš•ê×ßý×+ÿûðºý¡Aߨ:P„ïÐŒbŒ:s]ÿk­zŠ]cOôßJŸ2xìå Uò*ý¦X<™Üwàdç²Ï·Ü¥§Aqyòâ¦mï<|öâ·W.ž{ß½³çøÊÜ^£þ±eê-'õ„Ýž•gí˜çgèì¿fèJ/£Æ{¦Þ%…Ÿ–Ög»7žëê;VÕR¾èï;>8ðø7íê¾0ØðÌʶgÖ~u…Žù©3½çžüIûê½WÛÿøÎ½Üï7>qžÀëç¤p¸=W40Cp‹fèù§ìöÐA¿cÝšå_¼­}õOï]?®w{¦¶c¯Ÿ›ùð’Ö†moÖ'¾*нË^>a‡ýº—§±ÿ:€ÛtÃŽºž©ëïÓõ÷ßûyý×ÒjíׂjôÛ/Þ)ýÇCìì¿‚àö}(êÆ˜@và‹CÓ×—³ÿ:Ÿ(&›‚: 耠@ÐAt: 耠‚At@Ð 耠‚:t@ÐA€ ‚: èt@ÐA‚: 耠@ÐAt: 耠‚:t@ÐA€ ‚: è|âü[€÷%úÝ „IEND®B`‚gruff-0.3.7/assets/city_scene/sky/2000.png0000644000004100000410000000405112055510742020207 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<»IDATxÚìÝ Œ\eÀñofv¶3ÝnÛíAK·­R¬‚#÷ÑBc‚E,˜˜4ƒ‰i$ 5* ¨`lRˆÅD!¡-AE+V®RzliéÛ•eÛn·Ûî=‡ïí¾-mA©vÚ¥ô÷K¾¼Ù™ÉL2›¼ÿ|ïšT¹\Àñ-í#At@Ð@ÐAtt@ÐAt@ÐAAt@Ð@ÐAtt@ÐAt@ÐAAt@Ð@ÐAtt@ÐAtt@ÐAt@ÐA€œ*ÀÐJ¥R•š Å#~±r4ŠÉò=•Ëeÿ3t†úû@29þ÷Åß½¤Ð¸hGt»6¹/åãtŽ˜g£1jòÛoœ}ÑŒ§B¹8êW?»vVt_NЀ¡ ôáF8^ç¾6wæ)-«) ìCÏøhO˜z©g^xµ¥§·¯³:_ͺûŽhÔäÓãã®G£ú€Y:‚ÀQV¾û¾¥Û[úÒ#™l>TU×öÏÀd4üí›w,¼ùŠ‹¢×aÂ~|+t… €!^§Rñvôúh|ò_/ß½`âø‘“Úw4D³íâ¿vWO_CSsûoΙsï¢èÏîhÄÛó¢ø6¡‚@E‚ÏžGGãôæ]qõü›æÞÐÓ±3t¶m«Ø{‹åöæû~ûä³[ïÿöOÿñjöxG|I€Ê=Þïïž3Ÿ|è7ξøŒ™{š_ …ÞΊ¿ß®¶Î%›¶µ.þ켇—FvD(ú/:GôxÓTiÓOxɪ¿üp~wëºÜÑzÏaÃdž–ÝÅÓ/»ý¦¨ûüŽN[xˆ÷i÷D£uÓ–æ7¶5¬Ø=a\ÍÉ•|ƒLU.äGO‰b>>d²¹ðFkcü">^Ѐ +/ûÝç¯_W}ò;×üp¥3Ù9)äFÖ‡ì°Úƒëé-T뀠PYý×g¿ç–‹gOŸRsM¹td1ÏÕNŒB>¹ùnÖ44®[ö\Úà*r‚@ÅÄ;ч}nÖäSfŸ{ÒÏtf>¬f\¨«?û÷ïÚ½wÏ’Ç_|~Ñ—¿´â…룻ÂÀ©l:Zºíú³îÌfJ'—Þåúìÿ‹l~ÌþÛ]==O¯Xÿʽ<½ê‘'Vnˆîj9dtúø€ÊÈ-¾ý¼«ëF¤.‹Ï<¾¦{¦º¦Y-Ó™ê(Ò£ûŸ_vwÓªÐѺå?=72¬\½eó’Ç_XuÇÂG_Œ'çÑØ™<¾Ýž„<>¯àãt*#?ëSW^7aB}HWU¿ç“ÇN½ ¤ÒU¡½eý»>¾e{gã9Ÿùñ¯£›¯GãÍ$â{¢Ñ6±þkÉG/èTN6›—>œ˜3ùœh&>*ìܺüà•z4«ßÒ´o]Ø?¾1­Él<Þ1_@¦'è};[÷¶ïØÕÝo¾Õ¶»}_W×ó/onI§R¥'ž^Ýòû…×_>óügÕŽ;½ÿ´´–ÍOíÿÉÕxÓük[›ãK»¾ædV^qAàè+ÜuÏ_ùà£ÏŽxmë[™$¾}É̺+¹]J–U³æÜºé‰¾÷•Ë/=뚺iaÒG® MkÅbOȘ–?÷d¼->ÞÄÞÌÊ9¸ô+ÀP¯ˆS©øŠ/¢QÎGã]H‚|à>ïx…Mž;cþMs¯ºaÞ_ˆ_£XèÛ×ü!dÇž½«þüÛ¾ݵ: lnÏ ë€:•ÏÂãƒ×vîrãÁýÞƒÒÉ̽ø[ï/¶µwt|ÿW]3<ŸËMþØÃk¯·Æ›ÚãK¹ö›Ù€cjpÞuàÄùåþ }4Úgñ?¹ó‘î››[î»kÞ×£¦çÖolZ›¿ è‚À±w¸§•“XÇç’ǧ¥u=ôççºV®ÞòÖ3ºå[k64n  ú Æ>t€¡^ü|êÿ#>€.“¢1í£§×OŽfèÛ¢ÛñQîñ¹ç‡u Yt†6è±tõø€º‘aà ºáíÓÕ]Ð8‚>õl2â•z|I×C¦tAÞïÒ>t@ÐAt@ÐAAt@Ðàƒèß ŽÎ² 8Ã+PIEND®B`‚gruff-0.3.7/assets/city_scene/sky/1700.png0000644000004100000410000000457112055510742020224 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe< IDATxÚìÝilç€ñÿÌžÞµwñc8MÀ6‘pÒBÚBmM¯O¨© ª„Ú¤-AQ>Té‘ µEj£|µRšŠÊMTE¥TI«–P„h "!ÂÛ>`ï{·ï»;¶×µ/à¸ÏOzÙ{¼Æ+=óÎÎì¹\NÀ'›Ét@ÐA€ ‚: èt@ÐA‚: 耠@ÐAt: 耠‚At@Ð 耠‚:t@ÐA€ ‚: èt@ÐAt: 耠‚At0Æ‚nÆÇšýøæ¦FuêPüê6ÓÆõ,‚~ zo=G³è¼»míô–YÓ\ûO½Öô¸º\¡†Óeï¾rÏg>Ø4ç~uÞn=‚~›Ÿ›ëÒ¶¹«Ôi¹Žµ5jýÜ„%gø¦¸ÖïÝx÷÷Ôu“V>Z=³{Kˆ–FÏžš ö§­ÐÛøþ¹\îö>koö6¬wUêyç3Ù\0Îüs×»¡¿N®vÌ›ß\¾¦øÎgÎ'¶Ô×:?k·:âKd{| ß{PíV#¡FÎYëtÈíþýA7ŠFùâÖŠ¦-ëïÚ}#Ë}öÅîU':âÖ|£öÎ;&:êªüö)Õü¹ø,AŒ'ö±²b!…ÍãëT?/ÿÃó}ŸÎ׿¹SLÏL1ÝõbØý#K$ï’lô”d¢§eíwê~W|»~ŒÈÁ_«úÔHò§ôÒÓ¯èø[óóe.³I5ÜH¥svuZËêOgÍC*âÃÈÆG®˜.üYùaO‡$Ù·]Ý¥g8èêz¥J€)¹jÓ;}ô³s=3¯vT-lõdöÎñ+ɚ†'®o6§¸j‘Tð°$öÍÐó;×¹¬zFŠ6½@ÐGôü =ë¾Ûafº$íÊßàœÐ,ŽòF•ÝÄ -X?6—ŽIòJ»\>ýjôÐç<—Íåöu^H¾ù•§?Ô¥[aàm¬¶¦ƒîÌd³6[ÅÉêá¿8}Ÿ*Ä|#¿ µ,‡™ô4Lq-Qç~vQëÄgw­þ™ú)n^f襡7·{~û£éKR=›»‘˜ªÛ:¸S»Ó3é#;¾ÝpÐÕ²"Ör=uKÅéo’DÇ™ÁO—€ —@UU㊩‘î7$)¼wn˜¶’ÍÎe­Ýß²é„ÄãÉØ+›wàÏ è¥ãµ9ýâ›±\b}$ܳCL=MÏ–8èÖÔ_/?œÜ?u¬=,ìå'ÆÂNqF"™.¼mºDwžIgF½3ÜÕC/wpxíáÊ—~:wƒ°É@ÐK&ñå•ϯ=÷áž+Î-ù=Üõˆ….6»—`èe .×é›%¾é_“Ú¦ïêcÒËy ƃ±°É=<µ¢'êÛí¶9‡×/Â~)ó”•æ¨e陹¿áñT7ßäâ% 襑üÁê§Z¦ÎôºáNIE/I"Ô%ÉDP‚—{Åç÷jáÁ@P-«ð~|¤ÿðPÐCáx¯ðñ¯‚^2z8Ãá™$zä ¯¢~ñH›.ŬTønl¦ ÆÔ2ÂC—ã.9Ö¾»÷å¿wo[·þõ×…cÐýæ‰;‡ŽG¿<–h4&ÕUeb·×õøt:'ý1IÄ3j%a¢˜öá„ë>w<²nýömêìi5x zi$[—þ¸í±¯/¸°hÁì{gL®¯w¶Ï²e‡ßߎE3r.ÇO™)n·©â~uÄÕŠ@<+јÑá£Ñ*§-·oÚÐ嘷7%²]ðÞ­'ñ¼ã‘ËÝÞ·‘ ÃÐÁ:E ýuhµjÔ ìûþ v—_._þSÞR‰€œ?ÔvCËo¸ïÉ3ôÎî¾ã꺕êì1tõûs,:€z èÏwí±fËú4R9õwp© ›NŸ¤ãÁüeÓîoU£„.q¿ê‹Å唿>2p2ÿ©p=¡þh¬/®Vr¦ifûB2üõ©ôÑaY‘M©1áZwrWL“`ì°L¨›'UӛмÛW/OnÉß^æ¯W·µZç ›ØƒÛå©_þeëÆWwµ«‹zW÷¨ç­•ýsÙË@ÐK(kÅUG7¼sÏ‘MtGOvGÞØù~_Ë솉›³b…޹«¼vèA¾ÚæüƒzOíÚÆeY¨¾ýíÿþ_bm^·Vôi¿µò@ÐãÂXx½ø¢þ(Ö5ô»ÚZáÐß•>iàèKë*ýÞJ}§h,‘Ø»ÿDÇ’Ï7ߥ/§âq¸ý²aãÖ·:sáÛËξïÞ™³³ú«ËtÌOžî9ûäOÚ^S÷½Òö§·¶ëÇýaý÷è ¼¾N ›ÛsEfè7i†ž¿Ê ¹a ô;Ö¬ZúÅ+‘š—ÿüöàñãú‰O~á¹o.}bå–}é[¿úÅÎ=¼£®»h=Þk­\Â&öäµBÎ @ÐoNЯµAþ«~óÜcÍ´CVìõuÓ^ÔR¿õÍCzÇ·“E±wX[a¿æái@ÐoMÐ +êz¦®ßO×ï§­ëõ·¥ÕX·Ôè³^üKý×Mì@ÐoMУn\hà |qè?öñå@ÐÀ˜`ò_At@Ð 耠‚:t@ÐA€ €1é? «.%úE©“IEND®B`‚gruff-0.3.7/assets/city_scene/haze/0000755000004100000410000000000012055510742017241 5ustar www-datawww-datagruff-0.3.7/assets/city_scene/haze/true.png0000644000004100000410000005266712055510742020746 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<UIIDATxÚ¬} ’-ÇŽ1¡•{ ^‹÷àE`éöçd1õÆ ‡ŸæªoŸS•™L ü¯ÿýþomÿÁ÷ÿòÏÿ+àëßåÏ¥?Çñgœ?«úãû?S|Öôæ÷>~Ï?ÿN~ÿèïÏóóÁæÙ~ÿN Ï.þþïWFønýÙÞ÷ñ³gáðýþýŸSü{\§jŸ‡ðîÏ¿r¾3¨"þŒ÷ãÛ}0íÁ7ûwø9VXÿ°NþžØç˜öÔâ³Ô¶Yï‰ó{ˆïØÏL÷ø•àþÕb1?ÆãV‹›˜-ÎdŒaúZžßã/wœ¯ÃÔ¾ †ƒ/(šÐV|>ÔP/ï|çÆØ\Ngù}Ü£½Pl/õÑ?‡Šb3‡„…ýûöÂçïî›R~—ã÷c Î<¸­‘ø.r=ËÕáw\?kþîc»˜øxí•8˜ã¡"ˆÚÒ}äÚõD¬¿'µŽôIR¢ó¦~®ïÁ~ö‡ç† tð Äãù3Æ\òñnX9ñ8ŸÝ&«oõ(ýWTÕØÑ’ùŒÇEŽíEnžùçs¿ÃcŸâ¹w¯äò÷> ƒãNB‰µ?¾Ú¥“ \kûý$ñ&v¹wE´}gÖ¬¼èílÜq”¿ïðß ýo»×{†{l˜žY³Cœàøw¸žÁâçæ1•\ØæynÌöÉÿ|Æï‚‰ÿ|D›…©L} âîBQÏ ŸÝ³R¶Ó6R%è.Tˆ}öçÝ@_Lxî ¨ªæ¦¢Å­‡@$Î=+/Üï1^æð—JÃ\{•‡ž½ ¡)—\ÞÏlº¤z‚п?Õ]/Î{õÄõ l=±SŸ× +œA‡dáŽH¨“KUó¹öq`ˆ*É<’«¾v`ø~ 5ýE"—C‚f’¦W(®ø3¤êú{(´Ð`pk×Þ‡<7á2vEŒ=oýî„)’~’±ïbóßþëzq¦2„z ~Ú@éxf\b¿a Ô!qÝ ªú!CB3œÁsˆáRï¾îïO™ýˆWDq˜RâRZeˆ”m3B$}ñý> ñ{袱©ŽÚ3ST½<ÊöwS nÕO¹ÏlUÏ—Õïó³ój+÷†Ê´‘öóŸ 0,jŠ!èó¹/à.“T¥ù¬òNX½ àÚ¶ÇÈÏþ½öÝâì+ئÃÀR«)Ë k‹TÚW¦!âg?’æóÕûAHˆÄß½ ª¶þÄr= XqQ³Âû¦¼Šî׿–‘.‚ø¿‡.cy=Qˆ»Bwœ5Ô€ óW¼ã¶ôg~@ïqªËˆ’¼>:ûwÙš‚|ús ÑnÃS_¶܈&èwõ~­7ýåãÖ¦´ÊpI—i k>³l8•&ŽQ¿Ã‘ç¨ ¦=Äpa•´4*«‡;<í‡ © ¦$Hq¾OŠû÷Ïÿ^b~ä}ÆÇJ×%•¿ëƒç£7¤P"0™·Ï‰ÞÕG¤z$Ã;H#íÅš“vE¨Ê¾÷º\hÑ–¢ÜPÍ=xé„J" DW,FNÑËkCK­P1‘¤¹>{Vņ÷M§AûÙù~¿úÅOŠuÁ— ÌNñ]óÔµ)«98ȉbßã|6,Ë¥¡7çSÔ‡„Šj0Ëãàµe=T Q Nû_@|·¢” M$YÑb~ÿlØ+r  3G÷Ù¯ü“>BLI+m^”Å¥Å_áp1+ ks‰›DHÑc¨°Wjæó¯u ÿRt‡J“ž>éT[’tSG†F©†üÐÑ@ÑörÃr·º÷óÃWåê °R_b$h9Áˆêá »^GNùà eÀ^Å@I¡b³¨Z –8·½P3ÈV¹þ‚=!|:ˆÕPF6^P@¶úk—íÕHt&È\ìÝ#I¶{áüªdí¸å#¨’C—P„wþxìã2W´Ò£ÃÛ2Lï¤tòÎÒko8¶»™ê}a\' u'|4üu…†Í ò7ÐÏTÃÚW!âÿÏÚÙ¦¸k³¹Š¯nÇ5‹¨8™`© ãŸ?<cèºj)^Š‚ö ª·a¤JÊÙ¤«Œ®J[=Í!š²uÃWÒ­ïP™ƒ3|HS¹¤&W9ɪºBǶªÔÜ~ ¦«UAßLÉîÐlfÇŸÔ%vV¢ùîÑ=ü¦ûZŽé@…€´œg—í¬C­m¸Ô, ’´±)íï'Šd]ã‹d‹~]g…b¯'Ô*§‰øì0OHDò.!èÔp7¼³¯=ðõíèµí{2raܹš‡Í\žë¯"ú6»õX •ô™DÀì•«ú€7*#/t0<ù7\…w…Ñ/dY¤±l÷&Dv‹ª8/¨.z*ˆEñ©Ð|K¬äB‘ FñÜWg¹hð’£Pêܸ¤LuÕOü­ Ì43¨|g~¶ó‚v2¢Ñ*hö÷ ÓŠ2 0"Z—?„\8jŽ\%Z;BbGPa:¬/Ú+ T ‹dËl{AÑW;’“ìÏ7­eÕ=®4Ò zì#c…dâû?âør—vÄõ2 ziôx¡gñµÆxÒ µ@н¯õ@œî‰{n æRòd®Âø®P‹½‚;&¡2\ÿ×oÞï.ºŠ¡|ÓÔÀÝ$^¦z†«ˆê*fɉ¸9\äí¨^j¼IcYM¤@&¢ê.“M_ËÎ[´AÿtZPŒåȶ+kÅÝ},’º«²5ãkX4¾ÙKó÷õU‰.B…ÝøÒó3ãxWŽ=hû½7u^{Ó%Ñé}Wí¢r&+=‘„«ÊL#A]€a—<^0êñ¹ºbc˜cu(ŸˆWpEƒ½ƒÓý2¢JJ§ç¨á’7c¢¤GmÏ;é:”Â¥‡^ HD@“z“æ(òR‚¾â@ó¥WĤ‚RAîYúëŸ_ô·ä! ì•‚võ™Ë-D“2b°ÉáÍÙ*Ã6n#Œs₆°>ÑáûA%Y¸/88xReÞðÛFa Ô— h’",²j‡öœ L¦­ÆÕÒÌùtckjìE\J ­Iù›uCíô  P{>.„«™J|ž V˜ªÈ\ÁÊî`Ó0Å‚žyè(ð b—xÊ™8¨³ë”OºÈŒ.8a#‹øpA'œýuªK}Òw0Èu,±Ð*pÅ¥š@@—Õ?‘iÊK KPu •åöƒ8#}zãØÑâ3mš)‰0u4U¼§§Rœ¨, ܃›âñðL¼$Sݨ„ãI°¬*Ò,dž( #ªQ¦5ä³½Ä.üx£õ j…¶óÏÙ§ R²r”7?pÚˆÔ”?‘|x¨|Ïï ÞˆªúØáÍ'£ ÕÞíTPÎ(·:íSŠÑf;†M°Ãq Ï÷2p}‚ˆ—= œL ?ª‹¥Ê‹¡WNüDØóA5³Ëóµ~þ/´f׋nRT…*B†‰•`ÛI1ëʱBâ\ èÝ]|=ö/8æsïE*lê·aIa!T D¶Ðx•全Êp0M”p=€¾{8ЭåºóýõÏÿ÷·ÚmùÑ$£Yk¡èš6c0+h¥oª8 0Ó»2)8÷2_‚_•,£‚U#ÙCfàåÏ3Èq`aƒ#I§Úwy´Êì •0—:M‚2T¾ÚIÃÍ—»=Ÿ ËñÅ„Ó(§]ïÐTü,?ÏíxP5Æ9õ½`¸Ä`YL¢@â’ÀÓtŽ0¡.%º®ÿ« \óÕø»!t—`«î/(ØUÎè[K,0žáÊB`0qKõÏ`¸Hl.·=Aûj|-ÝÞerÓ^§xL¬³í#é—IL‚ëÏïj…e$]fªâ ÖYé\c†¼SÃÏíryа*66ÚNqƒ©a0u¨*Î ÷ïKéóJžYË@¹„O±ä"—9R Jï¿CMâ]œ‡2™‹¨nuh”(LF£ïÁ‡^u¶MŠfm5#Z ‚À™ýýJ¶xºð]‡oå@å¦1ÔÅÄUÆy_hxûìË1“œC¾ÎÛdšd”©žjc Þ*ë~¸êÿºðè+ô»ÿˆwå™’}.iFd£Â¹ê•óEÕ”¡ñ6g'!Ç%¥DƳÍ’R³c{Ç·9 4”y6Ñte¯~y°ÄH™»Dç:j忍çáL3ÏõÓ}é -´ÑššòF4Þä¾ÃEæ¼…[\À²PMÍ ÙbÕìzeÊY;%Ps¥?þÜI£´É…žNRÅñQ'†¤¦‹'(½ã…[œÃÝϘ꺋³XÔn£×}^„iraã(X¾vc†JšUiíKt¤îQAJH5ª:Táñ;1˜è,hšªAõ’ tÞíì]ûù‡¬ÐØß žŽCf¦j׉¨+”j_¸pû=* MBXÈN‰ˆsˆÄ!Ø9t·à0ÿγ”h¹w™ =§FÎɦ Mh°%E“ Ù…®éÝš’êHì3OpÊ@?¬,Z«uE·¨‹žQuÇNÜV•™o‰zLù|ϲ®Á*(~­*Ju Ý¬úñÙ†Ï?K]ê¤æ¾Ìͼ²ê1@ÓB/½O{#Ù%mÚ¦-.ÉÍý¹†G'ÿ,y¤Á8Cÿ±jš¨œ@-a™°!©}m¬‡9ç$ í|@ÿáwª†ÃíûTZ*¹1}ŠbUý Õ±{Ç£kU¶@¼=È®zŒÑ"ÏÑ×MÅ`иèß÷S¡;iIÕU,ƸF1”TíÕÍTð¾N#uð¶ÑÙòÕ͹næ•>¸˜õ¦ãëÍ%`Õ‹œ³ÒuC®ác6˜ÁÙËàiÚvÿð•%‰ŸéL0A›X„ ê`¹gMçd:8Ù¬uM|²ü|prLžÚ=!òb¨!ye½ºå®DÇœ‡ŽëÍao Ô&ñ쨔Ó> 9×Íܼóð2°X§$4Eƒè*ªFh†Népã_C/Á&©‚¦S_ˆê‡B-h½!©¨Ð øóþþ½Ðÿ; „—q˜9¢ãÐ_Ïnñ" 8®áå@›Ù?½ö:¦„Å$CÍ¥gnxÉñº¹­—TÑ…(IVŠäƓʦu½Ê„m gDs†æ>g¹€tù޾ñ~tè‹ÓÕ¯ ĽúLþ ôU§5jЉ ô„ŽÀ‚òQBFHÝÜ ]Tù§l’îGujL3\ÿ†EByë<üÆë! •©Cá6IŸðg÷öEÂ=æÒ°æ>Š%Uyªäë…5-Â…í5XõÞ_úVç.gºX§Îv']%. r@ üæc¦uSÅ™Q4™Í2tV¢"w;š-ô¹n5_‰òS%Ÿ :êšVÜ—»L‡ÂÄŠ%“7r&.4l¹Õ€,ÄUeª¦Ã¡:§H.xÙ3Ýühv·QÄP®Yñó³õ)ÙT낌ÚÉÊ+‰0Ô6¡²fÁíçÈM…ÈËM1’Ê*ß:X¯¢|ÞEk1P©  ÚSÌ@ ©uMz[ªè%µôÅ¿ã‹Cž½‰³ýãJhRõyA¹¥¹Æ öŠ©˜½úsÐC‡t" ævB8† Žo\TÄñ`•ªnáËw€ÄZ¡‰¯Á ˆ)QùOϳæ›f>7 Wš—IT1%,IÇ&9NrÈ´Åõ¹GãúV¶¨rÂQêyQÄôd¿BòläE$ôT;ÚBºÔ¡V Éáî6`‰ºò¢)”£BlJØÍnš ”–E…‡É¸ÑûT$^l8ärñSæ2XL*Züd®m–ø³é :ïu“+Ým9ÿ[ÂãXew|‘ñ†NúRUG«zmóJ>\Ðfðñ-YÉ.x³“c™Í¢S`¨Å¥Í »šæÝ©éŸÄÍ1!ƒIHœ_¯€¨µ¹BNØ]üpZñ–šÁ¢ÒUðòï¥߉zN&´dƒ†/­èça`“)“cˆÉÐû )&s¨0)bLÍÒ¨H‰u@>/:T}¯9GH©Ð6©4…ªˆIÉ¡Mª™ÒËRÿU?nk•u’m…$ªÔ ì§‚^ä 6NFƒpR'bÍ ;™Ít‘ÀTÉ×¥_þ©Ìºá;º•™K_ÜKgš¹kW]˜Pð‘:Ð˦£òÝ7&‡Y¸µŒlmWAù$O!Ò±m¢!rb7l$/ßÈb.€¤J)óaGk>| 6…ùr© ûzÏ|zV0_‚LÎÆ%ÐÑDÃtÀ«„wòˆŸÆ‰Í™¹¥_áV— ‘+P´ûL2°‡ƒÜpgVPذÑP&Ð… ]ŽyL›%e£lÙ¡‹øŽß Át ¶˜7¦ R½ûôÑy.º·è‰Q÷¨ŒÐû0øì)¦p#Ã9O6qÛT[¥„v©»c7ü)â ;ñ­ÿ²€m§„ ƒžˆwÂs'LÓ¥~A ê£P šNîËõV²ch(UAüöï0?ë%WÍÒ§ï°ªþ;—~WÒPç²%0hø•B:Ó…-Aè{ÉŒˆ>þÛ€$Ù†`AÙÊ1i¼§õÞ8×=ºýÛZÙ§:§®EVþ×6»RÒ sù@—Œ–A“r§¸£åç ¼*t=^“{צú^H"‚âÂÝVå‰&À …%uq¸ýáÅ6ãV\ŒŽlaÜ@IDÀÌÌÊžÓG·v]†¹–UCªJÓy<âTñ}½EÔ$ø¢wë”§Ô™ãa‹*À¬ËXá‚ÙTrö€ÍMÈhÏ;I O6º=A¥)Æ’çzrÎäÓ)*t3³$vߊ„[臃3[Ò5Õ/bibfê,½‘Aÿ\è½ÄÀLÏ` ¸Î~z)Bg†!7LU–°§É- ân„W%Ã"ÛrÛ^P‹j'I#®ŒlPÑmJ]’W§ï1FÆ ÉÄ÷Äñå®J~«ªUa,nS}¤€ß2Ÿ«Ùûß`úyá_ë_écØs“àL½Î|«s¾Ç´Wp¥ÉÅLÿèÙíú&±›€–!‰5µ$‡ þg†e%%’àáäí¨^B»’ÞŸ4žL4DÕ]&™¦¢˜/~ 1“Îa±n4ŽJXËgŸ}ùüѹ±9©‚nÝUR O]XÝ„ûøÝñPŠöâŠgî¾wu^›ÓeÑ/­2u© žù}rfUÁ‘ jigí²Çÿœsó˜Üz¸¬JÏ å`>gTCõµ,U NKIWø?mp3s¢–/UzàWÆ{Psâ°‚ÝØJº]À>+IKª`fåYS² ,)‰Rë_9h[ËÕé,¤„Xlnü&Q Tp˜}€Z,|òFžÛsö{ê¯~ào$Å)” &I®Ô»Súð\¸.BÄ˦„ N"ýb©2Ïè:v¿#ìùÎ®ÎØóR¿Ð‘Cã¹u»^|“¢*T2L¨ ÛŽ²tlM}/.L}&èÝ]|=ø/8æsïE.lj¸qöº5ÈðÖ®«Ýö‹TY±˜9{¸ž À»é%¾µ|B›GÏ–`TÅ-ª~€$Ñ:I…N [™dשׁ*$‚‡€éDrñ Ó5„r¢±%ýSxùóÌMc~ð8¸ê?§“@Ì“U.^O¨„¹Ôi”éœÂÐÕN:n¾Üíù„X6„ïæÐ¬ -ë £ÔÒïxP5Ç95¾`¸Ä“ú¦ Q@qIái:H“Özϸø]r%'º«ów3Bè.ÁVÝ_P°«œ)à·–X`<Ä•ñ‚ûJ$Ç!©s>!;ªÚƒvVCÁˆ0e!Åj~?›‚-Úv.“˜×£cËLU<¡:+íyÌwê×áùœ]-õˆ†(l¬1±¼}jPU”JúظYÍnØ)Šr‰žbIE.ãq¤œ«Ô£Å ’G`83J¦ £!q&õÐã¿ ÷ɶTV>¢ZA Ù‘Ùà+ɾ8‰`0±tóãêâNâ*ã¼/4¼}6昂I+Ë•°©¬Ê<1,êue –kcàÞ* ¸êÿºðè+ô»‰w噲}.yFdCB¶¦rŽênÈ G«s@-H4M‡\Ui€v]CS<¿ÐPæÙCÓ•½úåÁ#eîq”Sh¨•{£žgÓ6•}oH0ˆ´ í‹“~ÝÊ ~ºéÓç§=†)>'h>P{ö;$ŠcR´„†¬å”@Í•þøsC"Òú#x:Xo[ÄGPœûÔrNImá—nqņ n¼zSfÓªë>“ka»^·aÀ&Ã_ø—ƒááê¨BÐd/'¤:U“U®¸©©²«Ê³ÞÉôÃ!”¦šê !×åóà Vhìï¤YºÊ9df®vˆºJ©ö• ·ß£Ò$„…씈8‡H›Ľ6 æè…Cêvþænšgx÷ñê´X':ˆøä¤CORÉ‚}æ MèriëXů (gõÿ<×/äNñ¯._§Y:´ªc.8ón$»¤MÛ¸Å%¹i˜®ŽG'ÿ¬yäÁ8Cÿ±jš¸œÀ-a™±!©}mÄ>8ç$ î|@ÿáw¾ñ°—‰áù,ÆøáºpLŸ‡âXU„…ÇBuìÞñ(ÇZ•=MÒy®C¤«s´ÈsôuS1D.,÷ç”%UW±ãÅPRµW2Ó—`Š®¹MüݳàHIÏ8$h³•>¸˜õ¦ãëUEM¹çÒ—1ä>FƒŒ½ F mcð]éP‘AÑ™jÞ!h €œ·Ã4Îúå¶6” |èàd7²ÖEñ‹‹Æ9ÐXó®t.¼U&n¹+Ñ1‡ÁA†ã‚sØœ µÉ<­7¶€ÓÔÁŽpææ‡—Å:%¥)HWq}4B3—>s¢S=Pµ3Ã’ šêÔúP|‰×’Š Í€£ú¡«ÀMC_nUƒhRL,Ńò²œ/zíuL ‹I†0œ™KÏÜÐ’àuS[/.©¢÷ ±ª-¦Â8cR™Ã´¦W™° ô ’hÎÐÜç|Ó#îÞ©àáäþß)@©/ueÔœ¡h×éˆd @_uZ§¦X@@@ ,8¥d„ÔÍPÑE•qÊ&ë~T§Æ4Ã5pX(”·NÀÃo¼îFkŠ®fÉbpªúHãOÜ‘ŸŸ5·†5÷áP--Ýl%_/¬iÅ…Fγÿ×X`eØ{[eÄÄØe!¾HË]×Tø¢6ƒ„í©yΤ\%.Çeµyg¢ça+J3Š&“Y†ÆJTÙ½ú\·s¹LˆŸ¢(›ž::êzVÔW™s6Ô%VD(y,¸‰³v¦ÿTèØr«Zˆ 4ªÊÜÚc)½³QrRîL7?NŽjØ@e¨ ×­xùÙú”mªuA†íd啌DŠ›PY3ÈàöƒäÆBä妪˜ Ie•ï]X¯º¼‹×J  âSÐ@Š“ñ$%ü¦¹nƒè¸q«ö0×þ8Û?®T@¶Â5P†‹ Ö‹çý9UqÈRQŽŽd8ó *Šœ¯,%d¸ùkQ“:€O¤xåÎQKXÆšuÕ ãá÷¢T¦{)h¦ŠÊ•zÜÑÈûØ‹¸ÕCtüóÕ×_¨ð6ïܪƒª\&6Îù%>89m¥Ž@Ùt¬«üLm™ Zq®~$­ìò|PDCÜ%¦ªÇŸ=žõëËYG8ÅõŽðìÖ¿l Åó9˜ Aˆ£–ûgTR+ƒdp6tˆ‡z>Z^ÚÒ¦ jÎШ‚Ü,úÙÓ4‰S•ñzPh`3µQÕž3ÎyšˆŠ~%™l¡4#³«ÄƒÞß8o •„¤CŶàº8žWÓ9Wb@.à»íeu˰¡?‡ênæáÍXÈÕ0‡Õ|kxDB…Rr¯¦hÚÈí¿ú—ƒ“-c»œ­Qû³È«¥æ“ÚUq¶·ÚÂtÅ6óÌñ"¤çDe¥}泊7£_ tEª„â<¨¢>>`´ÃÁ«0ž®À´•¶þÆÍéÚgŸ4W&_no‰ Drñ[¢<ot Kgl2þ åØ_1]®IìñøéÒn¨ ]q5=bØseè³~”_˜^ŒTP÷p’ÊÉjÓu„'ùÑ2b&X UªÃĺ¾Ç°|G4; ‰\'Ó%÷Ô­ %7Õµ>òûÝõèU˜¦ÊIÑFÐÚϱµªyîUËU%îØtXŽ%|9óÑpp)³B•…­C—¶»t”ù „]$U€St…ã^ƒJÖcÜoÉM.D‰ïCh€ÃT6¤«Ú•ž"‰E%[eàuã*µö37sYJÝÓD°štrRxR¼¯ cœ<¦_Â|®Íž±£¨i_¦¤ìì ýõ¶úÎŽK"1Ž>‹T}^Pniª±‚»bD*¦F¯þôÈ!†E‚¹‚_ƒ£qBØEl˜›vÝz\èQš´š„\Zq莻S’§.mçHê…¥_ÿvYž‚ôŒ‰‡HЉÉܰ‘¼|#‹¹@’*ñÀ)Sšê䫼p2㔸ôñ¿íìb‡/.³¥F5ø­›Ãµ®´íÄ‹Á¨Ç­ì#7<=Qqjuj£w­wš¤ù‚±ÚÞË=ˆ´F5‹ÒŒsÿæOc:€¥w|¹xÅUæš)1Õ^Þh® Ô…AFšX˜Š$þÙõ,ñ†§eeÙ÷ LµýB’{£z–žw´(…¾§8øŒ–Ê!rÆgýnkíçú ™,¾9éÆãr‡ç'zg­¶õäMÀ1;¡9´ /7Æªä¥ YB.µ&3Óm3¨§ÌЙ6$nHÁËK¥¢»ú„…Â-Œù&¡RÝÁ’øŒ½Wâçï¶~ݦ*Ä(âpË!¯PQ ³ÁÐåþ”.ñäZ6™·Lñ¢b[™¢„€ífíûÅoe]«…žžmûƒÔ´ˆñÊî‰6<·­€Ã,²œòàâ"uÉ([rè`DGŽq°j¶-¯¨Ø«ýGç¹hÞf 'FÝÿ¡0B¿Äùl)¦0#Ã9N6QÛT[r‰?ö©ÿTèW> Ìe.=~8½áV®ŒTlÈ8sªVø³ˆßîå/¿ú(Øj¤-‰„@$F Ñi&õzWÇâg½äW_/=o‚ø¤¦”ʽ  ¯œ“`85¸J°ü¥X¢ékÿC_LmF´¿£eoél³OKtúL½õgvUŽû÷Ð%¯*N?‚ðF °cGÊT2‚sª•ì²ùþ4•«A“¨îÆhGQ`⦓h“ µ:ð)QX("‚~®Zi ÀЙk%u¹ýáèšÍ´“#[WÑ%©¨=×ÛZ™¦SÁ-^×a®¡ëÜ ð;ÞÇU¦a±œåwµi7²“½|æÅƒêN«Bxf]FÊ×Í ’³aš@FÞIkx²Ñu\’áϸ”–©J=3?™„8Ø+*ðœx¼åx½áÑ%²â%S>ð=褗¥ÀŒ1¡!³PÜ ºW£qîÑß[óøÚg.)Òã8Ú})o+Ößïò)R.•Ä)—W‹ä`Ì´Ú;u3+Ýó--ø&éGÍ–³[q³ÒÓcñ‰Å»¨ÌøóYø:dìל"X`S)w³—ðÁ7Í`o²“h s"acZIYWím«Ôì¡~Ì?ßõ€HÍ…a4D½ûGî~§HÖäXE…*/xkÓ Óõá1$òû+Ø,‰“„þöÊVìe†ÊÒ]Œrd² òT sò%d.]‚ò> £ »‡¦¦,“ì;Mo$Q’Ijuãޘм_C¾'Ð ƒP|œI­é —¦Q®Ò5gë³>x>º’O…¡âüêïwj²¬ì©pÝ n/V¶§vô€mTFó)qž'ŠrCm\‰ïg3$T%ºb±HÀ/ôcÛ>°}+p0ÁbÎ »nSaVpÜ8BË·Ï9^É-LW3œ¥ì`ö_‰Zœfè¡ý– þóʯz:¤m`±>raVB}Hdƒ’›¦h¥õ•®h’:[«ÐG4)ì³ÕÅ)žW%š×Ÿ {åB\E8ºÏ~ýªö8åZôLLÍbî¯Lv¼ŠÂÚ\â&Rô*앚ùür jú—Mœ¡¡2Ò‚J’J"á¶z "9´‡•‘¾Mi$/¬F“¶‰Ò1™t+øiHC¯/ÕW¿w4 Wµ›ÌJ÷âQA<çÐOpâ¹&h8©Ì©Žxìø†h÷k¸‘tHdÓEÏŒ„2Œd¹,J&&=ÐSÜÚ"Uœ¾‚’¥ZØ`ƒé`t™œ, |çÕZ? Ûi²ÌZr±Y{p7ó1Ά,Æê‘òê½XËf5õˆI‘Ì&.Iî8ò˜’÷þÓ%Qs`¶Zª—¢–ßÝIåòVȬ B5¢7¡“ÌñÂ}÷®Kß³ÀL•DÊŽÁÅ.x÷ÒãF;S¬‡ K<ó„ê\÷òØu•çÿ«få¿2ÉÒ`xÇÆ³]¢ºÿ|Ù¯ =|©ëÂDkê™àTå‹M”±X4Cƒ‘Úã8R f¦ò³Unš}TçT(<]W­³ƒæ£¹áìà!FN”ƒ[>«ªåFЏkâq®Itë;TæV‘- Ü, \å$«êšL« uÔÀ!šïƒªkšîüZ@£¼uÝ+QQö»ùÎŽ%N<ôÔ÷áf°ÅTKµª¸‹ D1!@¥…J€¹Øzáðä̈œØÆäŒÂbÚAì.‰¢Æ™LY ĘjpA¬AÀ]¬ßßΉêȼè…jR¡šÿùÏ_:}¦©:"ü6]’W5‚¡’>m%Cf”¢¼žmR0ãÇ ^u1^EèW÷ YBc,Û½©æÒW~ÀA!ɺ̉êekå(Gçø²òÜ ÈQ(unBóžÝCSxU‘¼|7ðÝ47­’0SÅÒÍþÔYz­ƒ^7 Å6~÷t0<çù镆Ü/UYÁR^$³$ˆ»^• ‹dË¡=ö‚Z;IqedƒŠfSê’¼}12VH&¾ÿ#Ž/wUò[Q­ cq›êÛ üVù\ ýÆÒÏ ÿZÄé·çn-÷‰²]g¾Õ¹N0ê´Yp¥ÉÅL€èÙí)¶Õ 3/ã'à*"'Ræ†ixC·@ã¨^‚»ÒXŸ<žL4DÕ]&›¦¢˜/~ A“Îb±n8ŽÊXÃTgŸ} )Þ‘¸y&»ËEã›±¬@CjÈB°;?sì¼úëèÇW]Z¶ZÃàD¹ÚRM  ÀËêŸÈ4%yÚ§®¡£²Ü†‡äj4;vôívô‚3“…êvvÃ÷JëV&H-\ {Õ1þÜH£´É…žÞÛñQ'†¤æìò½2U•a—…dt*$N¹äZÔn£×-4°Ið¶ÆåÐGx¸ÚiíKt¤„äµ „T£ªC¿ƒ‰Î‚¦©T/JçPƒ›â-X¡!°¿<)9†ÌLÕ¦}v Ë0ÉEåÂí©5 e!;&""‡ð&so Ȱ)z庄¿¹çÞ½…¼ú-Ö‰">9éДTG²`ŸyBSúÜ_Ú:Xñk ¦;vⶪ]:õü¼r †òùže‘Ó×® øµÖ»fiµ·2ݺâ³ Ÿ~–º ÔIÍ}™›yåIâ9×Pĉް(ÌPedœü³ä£¯ú[æ ²MIgO’— ’Ø×FëƒsN’ÐÎô~§ÕVßhô=h|®ûÆôy(ŠUõGXt,ÇýŸ/ 9Öªìl²Îs!"_õ˜£E¤¯›‹Á ra¹?'-©ºŠÅ×(†’ª½ ™¾SpÍmâïžGJx"Á›­ôÁŬ7_o.”¹Pœ³ÒuC®ác6˜ÁÙËàiÚvÿð•%‰Ÿ©æý‚6±1Ày;lÇYÓ9‘I\$äad­kâÿ¬/3 )Ä圱 Þ*‘ ·Ü•蘳àÃq½9ìÍ„Ú$ž•rÚ4ç:¢™›w^딄¦h]EõÑÍ\ò̉NyŒ­ácβrò šêÔðNÐG^oH*’Ÿû(è*pgør+›œxˆ;a×™¤GqŒ»4ä1êúRÂb’! ‡æÒ37¼äxÝÜÖ‹KªèB¬lc ª0Ö˜Tæ0­ëU&l=ƒ$š34÷9Ë݈¤Ëwôð£C_œ@¨~e îÕgòO ¯:­QSL\ ' t”2BêæN è¢Ê¿8e“t?ªSã™áú7,Ê['àá7^wŸŒõaEW³ä08}T=Q¦¾'ú^‚¹4¬¹s±ô[«Í@8lp€-Ýàƒ1Œ¼¬2bfì2‡`¤ç®k*|Ñ„›BÂ6ÕŒFª*qÇ¡Ëþ‰’í^N¹’™HU¶]ÚîÒQæ7n‘TñMÑŽz "Yq¿%e4™%º¡SL¯ˆÎ( <Å‹B¶ÊÀëÆTj:~ÆÖäÜG–R÷4¬&] 7ë§”=)ÞW†1NSª/a>ØfÓX˜1mÌ”•M ¡bâÞVßÙqbI$FÀÑgõ‘ªÏ Ê-Í5V°WŒHÅÔèÕŸƒ:¤±H0·ÂA0lp|ã¢"ŽçªTu _¾¸ó#Ö’M|µˆALéš~Ø<;ÌšošùÜ(\i^ÖžoøDSÂ’tÜ<ØÃºh‹1ö§ˆq}+[T9áÆ(õ¼(bz²_!y6ê¢NzªÀm!]êP«†Çäp÷@°D!wüó}Å|²ì4.ÓQÏ oº åyÂ1FoàfD'Þ§æC.?%>!ƒÅ¤¢ÅÿAæÚæ`É?›ªó^7™±ÒÝ–ó¿%<Ž{%ƒðN§ sê´mÁšTòá‚6ƒoyÄJvÁ›u˜ËlC ÚS@£x*êW æ˜ƒÁ$$ίW@ÔZ?Çj9awñÃiÅ[j‹JWÁË¿—"|'vê9™Ð’ z¾´¢Kœ‡M¦LŽ!&Cï7¤˜Ì¡À¤ˆ15+£"%ÖùüêrGkpq~ÏLSËêâ®Ê]†r°-ü¡R£ 6}oµÁQqL\À±q2„«ÆÑ£Øé<Èl¦‹¦J¾.ý ð¸HeÖ ßÑ­Ì\úâ^:ÓÌ]»ê„BÔ^&0õïFõSÐ#Dn-#[¦UP>ÉSˆ€tl›hˆ„œ˜Ä ÅË7ª˜ ©œ¥ õ›l•Nfœ—>þ·]ìèãEe6¬Ôèq ¿u³£Ôµ‘¶h1õ¸•{äF€§'*N­®môÏ:|CWo›\‚ì‹v%R⟚‘¨Æí?HrJ‘ ‘‘:¤`2CjGCu$+KŠN̉s[¸©ªê]Ø ˆÉ½§ä‹í’³•§)ÚÒ)¹ÙphÆ‘îQ¼»·_«â ï Ò~ÈMw;À¾]ž!Y’¡ÄMš7Úü^n†O½„.G¬hiDO!+ÿ…Î ¦¹äZø4Í‘fºƒ=­êª¶â^γÁ!B'‹#±åPtô"¨«& 牔•Ÿ”ù°£5>›ÂÆ|¹TÐ}½g>=+˜šŸ9ô¿{€b‰—8@ HŽUɵl2o™LâÅÁ|u('î°ôåBä ”0Ýþ$“ ìá ·î_¡ôÍL0ï³B….§áREÊFù4m˜l,9ǶQçÚ #½Jíð½éÞf 'FÝÿ¡2BïÃà“Ä¢p#ÃIwMÜv•ÁV)¡]ê®ÃØÍŠ8èN|k¿,`Û)aÃà„'âÃðÜ Ó !TcUõQ¨M'÷eƒz+Ù14”*4åöï?ë%WÍÒ§ï°Žá\Àêî‚ u—XšAèįÊ(Й.l BßKfD?zÏ6ª¶ÙÇ,Ô9~&/WåTí¸\ >Úýƒ!ÁFx#yý*¨LÀGÇ9‡T˜ï¯’Ñ2#hRîwc´£`0qÓIµÉÌ…Zø”(L:Ímí¹9ø.|æZ`I]n8E±Í¸“#[7ÐE03³²'Áô‘À­]—a®¡ëÜÍï‡êVÆ™°Öç™À÷õQ“à‹Þ­PžnPgvŒ„P³.#å€ëbPÉÙ67”çhÏ;I O6º=A¥)Æ’çzrÎäÓ)*t3è²$vߊãwþ©ÐñæpŸ—ÊLz#”hÈ!®ª8Ž¥dœö²˜1&4dŠ›.z'V`ý½5¯}á’"=Þ‰´»M°3MÕ³©X¿Ë7TD!“Ø;wËËErpfZíº!±•îù–|“õ£fËÙ­ºYeî[¢ “ÊYyÔfþù¬|'dLÑM؈3u³—ïÁ{¹cà)í{l@e1ÍvqûÖœ¹‘–Sçfê :ãåŸïzÌ?¤æÂ0¢ÞýC„)¡J­}NŽQÉÐí!Ó Óõá1$‘fTû–™¢_›*oO~"ÿ\sèÒx¤9&.ø—!‡Ä¨Ân¢m˜±DØp›÷•7n_ìö¤8à?Œ§s˜£ï PäÒ5ÊUºæp}ÖÏGWò©ý}aŽ·Ò!«CÞ³—ŽjL{±²?µ£l§2šH‰Í=ed©+ñýlÛ‰n.Z´®²½^Ë–¶ú*æ¼°ka6FÇ}#¤|û˜ã—ܺÀ ªaØ©‹ð•¦Åi†Ÿ¨Z^º%1rPætHÛ b}âDyPŸ9Ëï¦)Bim¥+ħG!øÿM ûluo¢K¿šLóú³a³¸Îaij8ºÏ†ýªö¬›ÕVNí¶AÚÏnçÐV³ªä¹Ôs0CF¸~àóË)¨è_vq2”ä‰\’”z·TÉ¡¥8¬ŽômJ#ya5kœÄM\'~ºüßñSRxl„›ôè+À“—^õœ¼™¡gK.>,$áøÒ :WŸ‚êˆÇŽnˆn¿ôÓ.î]Èž hžÛAq¼Î$Q¤oÕqÃj+nXAÉ0S,X `WÒ£’“…^„ï¼Zër;C–YËEãìÛMÜ|Œ³½bj ó‘~çPnÆZ6«©gLŠd6sÌrÇ™ÇD¸H—DÍÙŠ´&¡73¬V*—·Df:¨Ä žä¢ê cP¨MYbá~ç @\ôE8Àê.ØÛ¬ÜU¹»ªhCüµFÈs×Užÿ¯š•ÿÊ$7J€áÏv ëé‘*ŸzòÒ~ªòŒÅ&ÊX¬NÈ¡¿Híƒq)Å2SùÙ*Wu¨Óç™rxĺ¦Z5fÍGsCÙÁ#Œã$[>+ªåÆ,¹ëáq¦Itë;TæV„) ܈wqAî®r’Uu îe6*Á$fÛŒÐtñ:˜ò‚<¢ìwóKœxè©ñÙ¯tî¹TUu‰ D1A@¥…J€¹Ø|áð4ƃœÙÆäŒÂcÚAì.‰¢Æ™LY Ęî†wöµ¾úâ¡¶ý%ô¢æÏ|5¿²66:ò }›.É«ÁPIg¶’¡ 3HQ ^O†6)–q@cP¯š¯¿"ä«û…,‘1–mÞTsé+;à d]æDñ²ur”rªtYùóíL´ä$Ô4¶Ù »‡¦$ðçBÿV>{臓3Í[Ò5Õ¯bi‚fê0½ÖA¯›r0Ó3ØB.‰ ½¡3æ*KXŠÓ‹ä–q7«’a‘l¹€m/¨Eµ“¤WF6¨è6¥.É«Ó÷#c…dâû?âørW%¿UÕª0·©¾ RÀo™ÏÕìýo0ý¼ð¯õ€¯ô1ì¹¥èÓ›àÌ—:×ñ{L{wLš\ÌÔùžÝΡo[œ0Ó20Õ3\AäDjÂØ0+Ìfà iT/¡]i*« ’ÉDCTÝe’i*z€ùâÇ3éëF㨄µDqöçBÿlÌçÖÍNtkߨ²jxî  TØ ;?s+.¡xæ¾á{Wçµ9]ýÒ*3R ¢:w‡…Ø]CÌ£¬.+çmݪÔ`w”ÈRЃƒùœQ ×Ö’T58-%]i àÿ´ÁÍŒ‰Z¾TéOTïU@͉à ^tS+éBt{ø,ÛÀ44a3Ы0÷ýx#oeP¯´­åêtRB,â57þ “(P*8Ì>@->y¤ž®%šànØ9‰NÒÌØ›$‹ê»æê7ø^»?ZîcVíà#Ùƒƒ3[ʘ&u¦~iºKIJI†Ëa·n¸@a`ájÏÇ…p5S9Þ1¹~M³«¢‚•ÝÁÎ4¢ô¬éSžðn¶¹ÄSΜÀA¸G ]ÒÅA×Û YÄg!™ù诣\iõE8-A…¢C…ÀeOŒõ‘§à¿ª¡¡²Ü~gäj4;vôA–Ý},eœÎ«¶¿DSñ§Ž~ǃª9ΩñÃ%žÄw0UˆŠK OÓAš´Ö¯„ë»äJNtWçïf„Ð]‚­º¿ `W9SÀo-±Àxˆ++â÷•HŽC Rç|BvTµí¬†2zaÊBŠ!Õü~6[´í\&1 ®ùEÇ–™ªxBuV2ט!ïÔ¯Ãó9»Z4ê QØX;E ¦†ÁÔ ª(7”³–ÇUOu…¾q‰žbIE.ãq¢~ÇÖ¬È Ëš2À¸±É30% S†ÒÎ8“|hêR4‹«¡Ñ­†äÈlð•b_ ”„ JrPΠÅUDÈâ*ã¼/4¼}6昂I+Ë•°©¬Ê<1,êu% –kcàÞ* ¸êÿºðè+ô»‰w噲}.yFd£Â¹‚›Ë.]A¥†£Õ9 $š¦C®ª4@»®¡)ž_h$óì¡éÂ^ýò`iwKy‰8Ê)4ÔʽQϳ™|:~<Ö­H Ú¾h=Myü.tÓ§ÏO{ S|NÐ| ž%0I%†ï•Ö­>:¯ÀPy\©WãÏ ™4J \èéà½m!Åq&ƒ—Þå{¥ª*Å.ß4S ÍèTIœr›Éµ°ÝF¯[ˆ0`“á/|ËÁðpµÓÚ—èH ÍkA ©NÕd•«njªìBre/JçPƒâ/X¡!°¿“fé*癹Úu"ê*¥ÚW.Ü~ H“²S"â"qo÷׃° Ä®'(èFt´ˆœ)’Jz6Ð%–E ×u¹¶ž¤:’ûÌš2ÐäþÒÖ±Š_PÎêy¢¶ªÝ9õü¼r †±5þÌ¡?Ë"§¯]Añk­wÍÒjoeºu Äg;>üœlVïä[CÎ+OÏɸ†"Pô±-a†â8#;ö%àäŸ%<gè?VM•¸%,6$µ¯Øçœ$Áè?üÎ7ö21<ŸÅ?\ŽéóP«ê°èX¨ŽÝ;åX«¼3£H’®ªˆ]õ£Ež£¯›ŠÁ qa©?§,©šŠÅ×(†’ª½™¾S pÍmâïžGJxÆ!A›­äÁŬ7_oîE¹çÒ—1ä>FƒŒ½ F ûO¹­ñà+L 2#(>S üO܆ gî°gMe:8Ù¬uMüŸÆâ¢q4Öã¼+„ o•Ɇ[îJtÌapá¸ÞöfFÓW‰§õÆpš:ØÎܼóð2°X§¤4Eé*®Fhæ’gNtŠ¢ªvf8C2ASZ?Šï1ÑzCRQ¡pT?t¸s |¹UM F:§„¤Ëwªx(àG¿8!€PýÊ@Ü«Ïd @_uZ§¦˜¸@@@è,8¥d„ÔÍPÑE•qÊ&ë~T§Æ4ÃõoX(”·NÀÃo¼îFkŠ®fÉapªú¨L z¢L}Qô½skXsÕÒÂÑÍVòõšጇÊö ¬ {o‹Œ˜»Ì!Äi¹ëš _ôàÀf°=5#Í™”«Äñ¸¬6ïLô<¬‹83Š&“Y†ÆJT¤nG¯…>Öí\.â×âùŸ MOöÍG+îË]¦CabU„’É‚9¶Üj@bª2·ö˜FIïlD”œ”{ÓÍ“£6PjÂ5+Bc~¶>d›²z@†íd啌DŠ›PY3Èàösä¦Bä妪˜ Ie•o]X¯º¼‹ÖJ  ÚSÌ@ “ñ$%ü¦¹nƒè¸q«ö0×þ8Û?u­p ”ábB§õây?FNU²T”£#Îü‚Š"gã+K n>ÆdÔ¤à)^¹sÔV…±f]4CÄøß ÝmF)M÷RÑLU•+õ¸£“÷±?ª‰Èl¾>ša«-Á{9¨Êebã˜_⃓ÓVjtMǺÊÏÔ–©  çzàGÒÊvïâ.1U½8þìñ¬__Î:Â)ªÇp„g·þe)žÏ¡TBµÜ?£’Z$ƒ³ŸC<Ó“ðÑòÒv6MP³†Fäf±ÐϞΠIœªŒ×ƒB›©ªöœqÎCÐDTô+Éd ¥™]%ôÆøÆyS¨$$*¶×Åñ촚ιrßm/‹[†µý9±¾*tÙÕÎáPv‰¢a/ªùÖñˆ ¥ì^Ñ nUHY\ÝÎfR¯=d‹‘WKÍ'µ«&âloµuéŠmæ™ãEHωÊJû ÌgoF¿èŠT ÅyPE}<ö|À2h‡ƒWa<\i+mý›ÓµÏ>Y®L¾ÜÞˆäâ'¶ DyÞè–ÎØdü*ʱ¿bº \“Øã;ðÓ¥ÝPºâjzİçÊÐgý(¿õ¼HTP÷p’ÊÉiÓu„'õÑ2Z&X UªÃĺ¾Ç°|G4; ‰\'ÃÁ’û/|û¡cãÁŒõš ÐÂÊm£Ûñ …$.jqù™ø¢û¸ªÄ‡.û7.J¶{9åJf" )TYØ:ti»KG™ß@ØER8EW8î5¨d=Æý–”ÑdB”ø>„8LAesAºª]Ià)’XT²U^7®Rk?s9÷‘¥Ô=M«IW '…'ÅûÊ0Æ©cJñ%ÌçÚì‹2¦}™’²³$ô?LÔÛê;;J,‰Ä8ú,>Rñy!¹¥©Æ ˜ú¼úsÐ#‡t åvB8ßßã¿l^:UǃuÀ—Z"oRš@DÈÚË·¤pÆW«¯»Ñ gxŸÖ©JÌl°U §í«Ý€hjj ¦ï Èëšï¨ vH¿4ó{ÑS[>:Ù`¸= SŤÍÝþ¿üiLÔoš®ïAìM²[ʱG~Ïeh£æd€’ ˜Šü‚ƒë†¤«Œ5ª²Ï2 w¯Q“ÔˆÑᩚÆîŒËµï?;Àç„9ï¼·r{gØû?k*ü½Z´HB«­ui$óáãÑåÔ; w e5˜­¯ˆêþ‚Øw¢÷GöECü*Å}Ï¡[µ*ÓM(«N |ÕbÌ$As2h«LÔÉ®¦ywjþ'qsLˆÁ`ç×+@j­¡c5 „œ±;q§o©,*]/ÿB`ðØ©édBK6ðaøÒŠ.qvDª|@ÃÆ•ªí7¤*ŒC…É;È fiT$T'@Ÿýû)X¶ïµþû­Ïü¦J¥©TELJmRΔY–º&5M‡š*ÕR”’yîHiVhÄK c[‹^CoP©ñQ¬k|7¥ •F]d-Ý÷µ¡Tã%3ÍÜ´{>È—ô+î±#¸‚¤Õˆ@?$Êi*´ïÛ"Á]F ; ™¡gL4D‚ND惜zA,Qáȵ¬žaæ}£/ ³ë…“§Ä¥ÿmG;üxq™ ,5‚¨ÁoÝìÁ¨um¤m'Z F=ne¹à鉊S«+ Œ¥¯€--3à´½—{ij¥çþÍ;ž¦t:KïørñŠ ªÌ5%R4bª½¼Ñ\ñ™AFšXxŠ$þ9Ý ž–…eß+0ŒÖ IîèYzÞÑ¡´%ÿE”ƒÉ7» þÒ´"#ÂÖë¹^ô|yù¯%?¼ ÐxßÎèymòZÊô èÇG̳ѳþ™[Ì;ÖS¡\ó»_]37z-'èú‡èÔÌoî[W_xr˪…ž:mÜÏÊžÞÞÞEïåm*Á1ô# y&¼½›¼”Œrò¡ÇÃûc¾dñ7ç|þ¢ÓÌWÏ*•ú¼yÖ§§}&zXj…€ [™5OÝrÉ´I5· …}ûöw/ïèêilÛÛùÆyW,üOô~! {1ùýÜŠÇ\;ëÔ‰7f2éÚR±ïЉϔDŽ]ñ‚€ CÙÆ·ö×~ü”‰§÷uï ¹òçNˆ÷˜× ëzûŠM½½…í]ݽköuô4e«2Ó§N®ûzÜør©ôŽ?67# CÏ„·ÏzA?Ú+ô¶½ùªêQ¡¯»=”н‡Nd:ÔWåÒõ#s¹³ÇÍõ¿vøªü`#séÃÀ1ôŒ©`¸œ5t©ç^z½¥§·¯³:_­ºû†5jòé q×£Q}Ð*ý(+ßyï“Û{ò•G2Ù|¨ª®í_g4üó»·-¾ñÒó£ÏÂÀ^uºÙ'*•Š÷£×Gã³ÿ}õÎ…“&ŒžÜ¾³!Zm‡ýÙ]=} MÍí˜}ÅÝ÷E?vG#ÞŸ?xýÀ· Û A¯HÐãÕóØh̼~þ¥WÞ~ÃÕ×÷tì mÛ*ö7ŠÅr{ó®ý÷,{~ëýßÿå¿_Oˆ/ÙNze‚ï wOŠÆéËúÉ‚ysN»poók¡ÐÛYñ¿·»­séÆm­K¾8ÿá'£;¢íT´ôá=~ˆÏ9¨‰Æô§Lº`åßz{wëÚÜÑú›#FŽ -{Š g\|ë ÑvÚo+ð^\¶vdâcÚ=Ñhݸ¥ùÍm Ë÷L_sR%ÿ@¦*òc§F1Ÿ2Ù\x³µ1þŸ /èz…•Ÿùã—¯™PW}Òÿ»Ö|¨Ò™lÈžr£ëCvDí!ïõôªm'½²úïÏ~×MsæÍ˜ZsU¹4¼˜çj'E!ŸÒÿønV74®}æ…†ÕÁ]äôЉ¢øÒÜ)'Ï;ëÄ_we>¢f|¨«?ó¯ïÞ³oïÒÇ_~ñ¾¿<ûÊò—6¬‹^j—²€ Wh®ÆÜrÝ‹²™ÒI¥w¹?û‘ÈæO8𼳫§çéåë^»û§W>òÄŠõÑK-‡NÓ€ WFnÉ­g_Y7*uqüÿÌã{ºgªkú«¢Çt¦:ŠôØþ_Œo »§ieèhÝòÞAÏ+VmÙ¼ôñ—VÞ¶øÑ—ãÅy4v%Ÿ·'!OÂ+˜~½2òs?wÙµ'Ö‡tUõûþò¸iç†Tº*´·¬{×÷·lïlœý…Ÿÿ>zúF4ÞJ"¾7a`ûà¿c-™z½r²ÙüøôPb>è„)³£•ø˜°k볇Nz´ªßÒ´m8>¾!­Éj<>0ß@¦œ€ }»Z÷µïÜÝ=oíhÛÓ¾¿«ëÅW7·¤S©ÒO¯jùÓâë.¹ðœYgÔŽŸÙYZËæ§üËÕx×ü¦­Íñ­]ߌFs²*/‰8‚~ôî¸ë¿}ðÑçGmÚº#“Ä·/YYw%ÏKÉcÕÜ+nÞøÄ?úÆ%q^MÝô0ù—…¦5‡b±'äFM Ͼ°,ÞïbïNVåð¹õëP'*•Šïø21uaàzô8Þ…$ÈóŽ'4›üî¬Ûo¸úòëç_ú•ø3Š…î°}õŸCvÜ™»ëϹåkÑK«ÂÀîö÷ ºí€zeÄ«ðøäµ]…»œÄxð¸÷ t²r/þàæû‹mí?þÎåWÌçrS>õÕ°éÖxW{|+×Þ`7;‚~L ®À»^8öx`A¶ÁUü/=Ò½ass˽wÌÿvÔôܺ Mk’àA?ö†z Y9‰u|-y|YZ×C{¡kŪ-;žûëMß[½¾qc8NÐ¨ÇЇ:Qÿ>õƒˆO ËGãÄhLÿäÌú)Ñ }[ô<>Ë=¾ö|H÷µô7è±tõø„ºÑaà$ºáíËÕA?‚>õl2âIoézøÉt‚€ ÀGUÚ€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠ÀGÏÿJ² nqñQIEND®B`‚gruff-0.3.7/assets/city_scene/number_sample/1.png0000644000004100000410000000405412055510742022014 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<¾IDATxÚìÝ lœeÀñçîzÝݺn+ÛØXÇdáÄùþ,&hPDÀÄ„H &f‘ø‘`P£‚ F’A&*1H„tE _dl¬ccÐUJ·u]·~÷î|ŸöíØºboô÷KžÜí®¹&ï’çßçýºL¥R Àû[Ö&At@Ð@ÐAtt@ÐAxOª± €±Êd2ÕZ`Ä?,~¯s)}< _ VèÀ{àïtq1þoK¾}Ö`ó[“çõék›xÄ<ŸŒIk¿áªgÌ{4TJ“~ñ“Ëæ'¯x÷=ÚÇù§ð•KÏ>ªm墻™=å•Ò@ˆ£¿¿ÿÉ{EsŒžcè@µBž oî&/§£’>†°ïñð¡˜/Yüå3?yÎq7/ÖÎ+—ö¼yòGg,yXj…‚Z¹Õ^Þìu7îÚµ»wYWO_sÇÎîWO¿hÑ?’÷Ó°—ÒŸ/,àªËç3ýš\.[_. ì;1å*“Âð®xAA¡|óë»ë?xôôãzw†ÂaÅÓ¦Å=æ“C÷ÚŸ…þRKÿà–žÞþÕ»ºúZò5¹9GÎløbl|¥\~ˇM\˜†¡ç›g½‚ìzÇήbMí„0ÐÛÊ¥þ}'šlh¬)dÇ §L™\zmÿUùÞÆ²‡‡ácè9›FÇ '@5dž|öå¶¾þîÚbC²êÓ¨+f§Å®'£v¯U: èÀAV¹õö‡·<ððó÷åòÅPS[?´Ëhúë×o\|Íùg$Ÿ=1ã„ðWµ;,cžH2™¸½1ÿç ·.š1mâÌέMÉj»4æÏîéhjiíüÕIÝvGòÏÞdÄýù#gÑÿ5aAªô¸zžœŒc¯\xþÅ7]}é•}]ÛBwÇæªýŽR©ÒÙºm÷oyjÓßüñß_NÃÄ—Íc è@u‚w…ÇãÝ3’qü#÷|ïªgwöÎÖÃ`wÕßöŽî¥ë7·/ùôÂ{NþÙ•Ìc%ÿ º cz|ˆçäÔ%cÎÜ£gœµâÏß¿©·ý¥ÂÁúãÆO m;J‹æž{ÃÕÉ<¶Ûÿÿï\¶TK<¦Ý—Œöõ[_ÛÜ´lÇô©uGTóäj ¡8ùÈ$æÓB._¯µ7Ç? âÙð‚Ž Û@•Uÿíg/›ÖP{ĺÖ|´²¹|(Nœ C~\ý>ïõõÖšÇ@Ðêº?û¯¯=sÁÜ#ë.©”ÇóBýŒ$䳆ßΪ¦æ—ºiUp9t jâAôqŸ™?ë¨'þÓ±®ÌÇÕM '¾åõí;ví\úàsÏÜñ‡'ž_öìº5ÉKMaøR6t›¨Ò\2éú+N¸9Ÿ+Q~›û³¿ùâa{žw÷ôõ=¶lÍ‹·ÝõØŠûZ¾6y©m¿Ñmóƒ ÕQXrÃ)7LÈœ¿Ï<ÞÓ=W[7ôX“»âÆÅ÷?çÉØ–<>ïLCO´ùAÐê(ÎÿÄ—OŸÞ²5µüá)³O ™lMèl[ó¶ïoÜÒÝ|Ò§~øËäé«Éx=øÎdt…á]ì#_ÇZ¶éAÐêÉç‹S³£‰ùˆÃf”¬Ä'…m›žØwRJVõ¿†¯KF{ºæã d*Á‰p èÀÁ·­}WçÖíqìxýŽ»{zžyaC[6“)?ôØÊ¶ß-¾â¼³OwBýÔc‡.KkÛð螯\»æ_ÙÔoíúZ2ZÓUyYÄAЃoð–_ÿåçwßÿÔ„W6½‘Kã;®¬{Òçåô±fþE×­è®ï|é¼sN8½®aN˜ù¡ BËê{C©Ô f„'ž~$î‹»Ø{ÓU9pný Œ}"Édâ_¦'£! _ã=˜yïcÞqÂɧ?;嶺/½ðÊ…ç.~Fi°7lYõûŸrâöÆS¯ÿBòÒÊ0¼»ý€A7:PqO^Û¶W¸+iŒGŽ{Ȧ+÷Ò·®»³ÔÑÙÕõݯ]xÉøb¡0ë#Ÿ¯¼ÚwµÇ[¹ö»ÙAÐCjdÞ³÷Ây¿Ç= údtŒ¬âtó}½ë6´¶Ý~˯&M/¬Yײ: þ  ƒ ‡Þh/!«¤±Ž×’ÇËÒzîùÓÓ=ËWn|ãÉ?^ûUk›×‡ááÞÇбO$Ã_Ÿú߈'Гqx2æ|øØÆYÉ }sò<žå¯=Õ=dÍc èÀ»ô(›F=žP71 ŸD·5¼y¹š ƒ D=ŸŽ8)Å[ºî2 ƒ Àÿ¶¬M‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚: è 耠‚:: 耠ûú—™ð² ùAçĈy6£Öô¡òLØ»™¼”ŒrrÂþûÃûc¾pþ×/ùìegÝ=<_=­TêÛóäyŸœü©èf‘:€ steV=sÇ“'ÔÜU(víÚݽ´£«§±mgçÛÍž÷¯èùBöbòúܲ'n¾aÚãoÍdÒµ¥bßþ+F¦<* lŠtAç(Ê6¾»»ö£§?»¯{gÈ”¿p\¼Å¼~tè\ó«ÐÛWlêí-léêî]µ«£§)[•™rêĺ¯Æ/—Jï{³±£sSÃÀ>ôLØ{Ô;‚Αž¡·íìÈWU}Ýí¡TìÝA§C}U.]?<—;Ìè\ÿcÎÊ÷5<—>9 ìCÏøhŽx:R/¼òVKOo_gu¾.šu÷֨ɧÇÅ]Fõ>³t#¬|ïƒOmyâ©×g²ùPU]Û??œÑð÷oß5ÿÖ+/ŽÞ{d4† ;Àq<«s…¯!² S©x;z}4>ýï×ï7aÜȉí[¢Ùvñ°ß»«§¯¡©¹ýwçξAôgw4âíùƒGÑ|›°: z<{3ošså5so¹î¦žŽm¡³msÅþG±XnoÞ¶û§_ÜôÐwþÏ·’°Ç;âKÖ#A§2A7…Çû»'Dãì§ýÑͳ.9kÆÎæ7B¡·³âÿo{[ç¢u›[~~ÎcOEvDëQÑRt?èñM|LDM4¦L=}Â¥Ëÿúã¹Ý­oæŽÔÿ6|LhÙQœ7õò;o‰Ö£Ý–À±ã´µ¡%Þ§ÝÖu›ßÙܰtÇø±5§Tòdªr!?úÔ(æãB&› ï´6Æ_ â£á@Щ°òs¿ÿâõãêªOù_皪t&ò#'†ÜÈúV»ßs=½…j뀠SYý×g¿ï¶KfM=µæÚréðbž«…|RÿíYÙÐøæs/5¬ ®" èTL¼}ØfN:mÖy'ÿòpgæÃjƆºúsÞ÷øö»v.zòÕ—üéù×–¾²vuôPC8• A§BËrÔ7N¿;›)Rú€ë³ÙüI{îwvõô<»tõ÷?üìòÅK–­‰j9`túøÊÈ-¼óükêF¤.Ï<¾¦{¦º¦ÿ¶*ºMgª£Hîa|iØMËCGëÆÿôÜȰlÅÆ ‹ž|eù]ó5žœGc[ðø~{òø ¼‚@ЩŒüÌÏ\uÃøñõ!]U}Й|aH¥«B{Ëê|~ã–ÎÆs?÷ÓßFwߎƻIÄwF£# lbü9Ö’@Щœl6?6}(1tÒ¤s£™ø¨°mÓóû¯Ѭ~cÓî7ÃÀþñµÑhMfãñŽùø2åà@8AçÈÛÖº«}ëööxìx÷½¶í»»º^~}CK:•*-yvEËæßxÅŒ ¦M¯{fÿii-žÙó“«ñ¦ùõ›šãK»¾ædV^qAçÈ+Üsßß~ýÈã/ŽX¿é½Lß¾dfÝ•Ü/%·U3gß¾nÉÃ?øÚ—M¿¨¦nJ˜ø±«BÓªÇB±Ør#&„ç_z:ÞobïNfåÇ\úu¨,ÈT*¾âËøhÔ…óÑãx’ ï»Ï;^àÙäµÓæÞrÝÕ7͹òKñ{ ÝaËÊ?†ì˜s¶×_pÇW¢‡V„Íí ºõÀ ʈgáñÁkÛö w9‰ñà~ïAédæ^üÞíÛÚ;:~ø­«¯žÏå&}âËaýÛ­ñ¦öøR®½ÁfvA稜wí;q>àvÏ„>mƒ³øŸÝ½¸{í†æ–ï™óͨé¹Õk›V%Á/:€ sôê)då$Öñ¹äñii]þ奮e+6¾÷ŸoûÎÊ5ëÂÀp‚p‚°}¨,ÈŸOýÄÐå£qr4¦|üÌúIÑ }st?>Ê=>÷ü®!k=tŽmÐcé$êñu#ÃÀAt[ÃÞÓÕ@Ð9‚>õl2â•"¾¤ëÓ :€ GJÚG‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚:: 耠‚‚: 耠€ ‚: è 耠‚: è 耠‚:: 耠ûû² þ%ýIEND®B`‚gruff-0.3.7/assets/city_scene/background/0000755000004100000410000000000012055510742020431 5ustar www-datawww-datagruff-0.3.7/assets/city_scene/background/0600.png0000644000004100000410000005510512055510742021532 0ustar www-datawww-data‰PNG  IHDRôdÿ¥U*gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<Y×IDATxÚ¼½ v$É’+fðÃkiZÖ …@3C2Òðñ`]é=õ™éÛÅJFFxø€ø?þ/æçŸÿúOü׿æþ~~Îß¿]Ûõù•ç/ÿ|lÿ;nßR/b·”¿rû¢—»zÿùï¥þû_X÷0ÿöà—+ƒ¿W«÷¹›ú¥evƒØ»‹{“{çõµÊÏç¯Û[üùà÷sݾèýõÕ˜¿Þ_ÿ½;Õ§xé<·[ýÇc ®‰§x¿s¶×ùrK»Ë=öÒDõÙyÒ¸«Ÿoñw™IòS,ŸÌ+Õó>÷™ûë{ïr÷)¯¯oŒôë€ýëÏó¾ñ?ÿÃõß?¿‚ÿþ¿ÿþ®Ÿ<k­û7õ¯´|Op?·øäþ]~V Ï×뛀ÞË÷­ŽÞ°ý\OÄÏc~ÏãŸÿ^”z“ˆ¶†µÃïSìþÜßïï}ÎóŒì ­•½~›r3ß×ä~.½yüö6ü¾î}Aü®m`¼Vþ¶óïq÷+~ž÷ç¿ñû“Ö-ºÜz;oË'´Yðùɳïÿ{n«=åW¡ÓßÓÍö/B›+n þ3Öûžÿïó°ñʺåz–Á§•>ü»ÙÚ#˺ýO` %}ðÝ&ò·Ù[Öƒ|Fñï§ù´ƒ´õOË µsÔjŸðõæŒÄv›‘À5³él†ç>ñyïØcdýÖ~Y­ôAÙÂX_ŸdÌ"fo›Ê(ãeâÿúÁ×O³Â[¹ÝÃe;øôH¶I–Ÿ[ÄåÊ{u’×OX"kêÏn¬Ø <·Gj—…~±+ŠïË~ž‚åéf/fÔc¤QŸûu ¬»è. ÷Ï¢ÅÖ°ñ?ó|‚°ÉztpM+·ì¬:ùâÚ†ÏJ̵Øàç¼ïÙs"ÛïE^ ½‘iW؃ý&÷œ }.Îç1×õÞ:bÌBGÄÏÿbu˜6@vßF]†G—ÒÛgÚôW&Æ“®±ŠËnÚÞ‹­Å6|>¯†¥çüü.WËü~Ò_:ü0Ty/{2í¬í§Œ©Ñ¶BƒÚŸ¾÷û½gÏúïè‚îdS/[<ô—Š¿0 ÙcþÞ⩟Çà>Hd­†÷ûòúCè à>¨&BßbÏelÀ·ð²‹ù>Pýnö/½ÖÞuÊß@wñ"l¿³ŸúÜÞuŒïçOçÏ&jï%w”yø{™ëêåûñqà‡0Ô3þîœõU¢u†¼­§­pmž2s½uõ§K\Ú9î´Ô§8­‡¼ Yh¯ãmYÒ?ŸÖ¼·kfSøA­ÍÜŸbn×Ù‡–ŸÏÂ=pGkå¤E¿¥ë·íCÂzKÁŸW—³?û)è¯ïÝ4ÝοZRzNÞÆ}¿Œµ;›OòÌðô{Pø(ùÙ¤z>‹‘ûÇÑŽÇY$ÐjÉÒEVƒôïÕ—èÃ×­Xv¹¼§3}ÌŽ£_2fÏQøÝ\Ó©;—ï&zzböØçÝ!YžßãôãÛ£IZÉæ%ÈlC…yí¶Ðìëÿá ëù¥ÑŸÝ"7}š§¶…ÆÚ„}v_±kî­k"n”îõ÷[Ξ;¨èÁ\î9»&}–9ÏìCýÒ}WOÈxý•°JxÓ_ο҃Qý2×ðsÚÅýØ1ëc£ 3Ù˜õ\þ+»1íÏNG{žÿ=ß“øÓ´çÔeÆ{Ž­L^Ç.u ]q1°çÄ µg—³ðÙg¿#»çXiö~FìFÎ5üvì Ð3ïûK` ¨Ð[zÆìÙƒæ™a´#y3Ò»ñ3ÍM£Íl„B¯/ÝLÂg«K'irV~þöèì üuc»3Ä‹8(P>Äq0wB«³ŸîµVr#¨ë)±ˆ‘Õw¥™ÛÅþ R€vwBÏÑq<ñý…b}@ÕÎdíÎ 3ACÏÙ>?ÓñCˆàÆYR¹ž‡Û<6Ý´P/(CàùF ý[aî‡FÞ@®”UPšÑ¾J@ø¢•z;ÔCôŸw´_dƒÿ!Ã!l•SÁÆÁ¬îGí´öÔT5¼n¯ñ®xÊoí=ÊÀGøÓ‘ê‹Öm¸Ö†Fí|Œ „LœDЕïæVãÃfëqŠ‹zö  "ÖÒYãÐLé þ@›«ŸvíƒrÅ"€#°}=×,±¯ùéäÔq –QÖô%ö5mòazì¦6*BylTüŠó% $e0˜‚BVT~Zœ ž!w¹9j¦D+ æKáiKG¡ò®¼£?¶«ÚKñÚ»aÓ&±åƒí¹œÍ 1Iz©}š1!„1Øhœ§‘T:„BÇže‹F~Ž5wî=wSäz0q·] lOmgÝzÜAJÑúî€Æ—ÄnW¶át’hZ‘ѱórÈC{;¹i…ï…½ïÁwâ›ñ† ¥vØ’ÃN° x¡››4Ɔö\pd «‰†”!Ž8Ÿá‚?m°¼ £¸ŸÛ†) B¢ŠF¡ÁÖHÑã„Îc©Ë¤mcºó=ØÜ‡•/§€è€=ï0Æö£û)¡^ЏboÓ6ÉËÔ–m¹ôj&ZÏPTNÐðÕXÏ·æ£Éù•œï[ÅZ<2õúŸíê/ør}žW†K·CíC\“ VŽ ¹[Æ$:¨èël8n º÷ä(ðb,º\ƒ ïP©ì{ÚÕß×W<ñ-ùùÏ¢*Ù÷`Ù}žåÛ©ƒâk´f÷ì»­¦±P“IÌ„êªJdÓŠ¾É¡ÃÄ©YFé„n®…-2AqjÛ‚)u²\™üöû+¨<…ê D_ ]Ï&5Å¿v¨+:€6µBm«tnm–âµ³¸ÍíeO}~WA+cIYºm^EqGe›¿ÿëè 4¼N…R•Äð²ËV…É{˜ÉŠQÄ´-üîÀë}e©Ÿ‹¼-¬Ç°—¥<¦GÝ\mù-:"™c•Á¤z§*sbr¨“>˾êóÞ¶–±¡+4ª„AJƒ¾{õÉ"¯g|­Íë1*>´í'Mc‚ûEìÛ–/IÏÿ‡7þå ÈßV0ÖÒµËæÇÔüìzʧg®'bGcó¸„(QÒéÕ[ƒRqZN¼Ìûð 騈Íú.1‰ ¸t&hw2¹ùzv1ôÂ1—a¨>é#j'MÙÑØ~eÁËê;ÆaK€ØV0ÊM®/d¸ýl]å–;÷Ù ëH\\"ÜcZhÝÜØYªÅƈë-¡Ú­aEêjÄ0 ÊŽÍb;qŽeŸ¡¡–2[ †Í(ê×´%¸ÕôYÝé”WDI%³yÍM/E8±#ö¾ÇV86òöoÇ™¯Bؽ—Š H¤R¼ÚרYvè;sî2QÙç­í¹îRö´ÛW®ó{Ù‘Õòœ›¦pxv¬²µ\æÌgØìrnK9*Œ{fèn1Õè¦Ø›5öeÙ`…)éB[x0ZÅÊ…Ï øþ  c îÁÿÙáÂÑ~€­ Áz¡gä¸M³¶êw4Ô•uÖõ‹ë™+Ø·#Åt:LÜäø¼¦$B µÜ™O¹eö½IQXÎÄa(<é>õPzÿϯ?ÂAP*‰X¹msƒ56s‡kE‚›¡YÔ:Y”l!iˆß¶_㉕~oþN­¹‡d‘.ŽôW<Ÿ3ëLÇ~‹jŽ‚l€·]¸¨T·Oß§z–MXµ¯Œ¦ïâÒÔš(ÙŒˆõŒuÂ(mKb2y@—Õ<~m(ûø2kævi„VF`Sh¥Ä0' ?—Y]Rúö=­lhÚ´Â%ÀhSÿØ6ó,{ÛZÉ™nø·éa]î¾½ÖN†4ðb¼5µZ'ëVTl¾—‡¾¸ÚU¥CQ×Í\J(ž«#ÂKåQNf£;Ы«—Ê׈èÛ P´ŒS@êE£»c· Š¥ 98Eƒªü¥pßÌ ©å~ Sª«¬ó¥ÖTáÓ–2¸ržÒ†¦´Ö®2ZÏ)N«ÝcøYš<‘·ÄÖ(,ñ4æÚÙºŠ!™aŸfš‡îwW 6øìÜçbÓ,ƒ:5ÿA}‰238ï…*l%¹îÍò?¿X% >eOµ­¥õÌs?1±©úàDj³5N5H©¾ÁUûƒÿ$Â$VûIomžK¡j1S çÇbÃüØù|ÔÞ× ê›jñhS¾65N[Ìs"] ËpæfFÝ~hEdh:{/§‘þ±ûh¢Ïµ}e¾™e’À ÷mû3…û=7?püMÁú‚t¶™¦}¨GÙÑ5De÷ÓÂ]äžQ^}’Cý×Q®üzdýÐj¸r¿Rör¿ªÈ†éž“ò  d¶0ËôÎ3§ž¡ÖÁŸtÉ#®u$e¸V‘VÚÅA‰Ç¾ƒi$T¤‡üW}RnA×Þ1„tDqR»I©p±/Ò:Æ,Ï"ãã«¶,·EU¹uÂCt7ȹkü£T®„üÄʆ‹³Rµ½Ü÷t³zWþº gq{ßÓe ®˜[ç3ž h7¹ç÷D|BŠƒ¦9™W)×À9%^u‡U‹™jìÊÁ†ÚðA®n¯¼\ßZÊ`b¿¨ :°™{UI"¥P(¾û2OQñ>¶ã¿Ê²r‹íš¶­ÇlÓ— ÿ3¯JokL_»nžM9g]™!T"EÀËüÅ6§0­.©?çeI‡¸ãÞìqòup'QL1ÑE˜„ؽݴ1¼;£Ü§ÈË2ô€MоOQzÇÜ`R±éÍA™†„/ˆ ‹ÉGL†yé<´";žò™·Ï%t<ð#*c1›3ÖŽ/CšNlÝ0§<ÔöË32 ì1ÍNjÄvRÎ ‘œrÛ)C~›s>ÒL#l a¬ãhåšÎŘ¾OÓ†±Ø0¸{J±:ÍÙŽD£ÛüËh*~2 xAg^ãÂÁ>^La¹¦ú¥'Ä´Ø&4\¡'²¤÷aÜ7!Þéý|÷í/#šy¡:¤.æýqazȵ*p¢0r;Zä·ðòT/GÝoÚš¿åPy”s©2ZEb”àïöœ`qi¶¢f‘zdK˜œH–1<^<,Mä‚ Õº0Ž´DKÝL;ºF†ð’VSúÛtEUïQ<Ãt‰Œ5áêW‰ýþ5\Â_ñ“„¿qkmùïÇ‘чÿm2âÖ!÷.„(ÀÜVsÃSA<&e7ëJ5SìÛЍa¼ƒ&ˆ¨häºEb@S4Œ*¹E¢)œ©ØJG¶9·Ë@v½tN°Ë4G®S3Ë„`Ãó‡Pm’;R™"ȸ…¢ÍMB6¯ö!es­VO{Ûjã•ÕÔ•ö¤ô”E7EÆTR OÛ÷dáeÝ¡TMUì!I°­{©‚HÄ•éE›zæNÒVN!F<­óçÉçÖñ07)KU¬ár’¬¹íÓÆš@ej%mø÷™<éfLrš¦(wߢt3ã"Φ(“4:ô "«ÓðV³/nާ'G^à}êçqò5™²`ƒ3cÅ¡¼'¬¡±ïü«d LO_ü—1ó"¢¸e¼áEXbC—ÿÏKnFe¢ßÙjô2ñZÃùÁ1j}Ý¿œÈÞV¥ÂÙ¾ÝRŠ €ÅWÎ`DÙrM ü’Ø;üÑ.»)Un׼ ŽíÎ@¾v•y7zLO…P ‚WMW7à âJÜåhÅÅ¡%[µ–YÎՔƤGÖÔhw’VÛEJX‡¤Ñiï2WQYW³ „à[Ý8æä^>ÖZ¨ nkçë\&‚þúÐvBI­…ùÓ³‘¼Ûm rî3ïÕ ˜É%YLý£8m×à¤Ç@z{ñòP3’ìŒСÂL¼‘ u_§qÒŸÉãQq*‡ŠK{vÊ0@Fì@~0Ü 6#*2†æRõ·ЋòYM‡Ø„Œ~ì Âiv¶ ÓMÃgõ,Ð7}ʶó8#šÎì}Ì‘‰·ró­„¢l,þb´*˜ÙÐNÑ…]ToµÑJzJõâD2ª%¦RíØÊù#"§ÍJ„yž®IâaI"æ”çµJ¢x fÏ–ÙEVÕøïÓ ø˜NË,’\öS¡:á¦"F¢àXÿæ'Úø©ðå3ªç1뾦Sþ\yß¼¸>’]J5þ?ÖÏ8#Ä'ŽŠ/Àåúÿ16 €§)Ò Ò‹Gíà…9 6qçÑFØ€ûfžŸ©ùlLÆl Ê"}ãæ!þ£x,ƹùbÛiâWê°‡úç ®Ô–\T'?“Êè¬'މ;’"ÀEPçîNR…m¾Pfž«Umˆe€¢9ØS¶ržTD]ÒpI'çzãcªe­¨xV7VWÑÏ(Ð5ò£œ¹ÔBçùoW#¸1ؾ2ÉÐ|êí]kq?Yª|ïµy, 7#B¯²hÚoÇÔ, ¿XÙŠE)a·­â®¤FÅ>_”ï›ÿ¨mÊqŒ!ð 4ãÖéäxI G³M‹US[tVJA 3¬ñ+ÉYcéÆXο•“ˆðæ$ 53‚©ÌE3ý€?WE½ |>üñÒÛ_)’¬ñãf XíÀ‹¡‚½²³K"Öœ[M@ݡƣO³JÇmÃÆ®.““òHcb"ë'§<6gó­Ó5…5#¡,Ò—À^¸¿MÁ€(z@‘uUÈÁHÈb.‡¤dözãÃ%=);Ùqðh N¦’žÈóœKò»ŠEŽ"tÛXÖÌ2ê´CÝcaÔÀC·ƒ½÷4 úº‘*s´®|š¿ð­²ÌICÁI-<0ö³51£žå«`­äjŠÈ’²`4÷>ÜEDs}ê”aà/ žÓâ£ùåÕàCò•Gù (&>A ä#EÉ"TKt•x¢Z–MuåEk1L3W™îàVÅ& ²ƒN1_œË'_^:ªž²)¦+³Më U¥Þ,¯€1Bt´¿.}@KÛ6S&N <š‹<Ú„[Œ—®ƒ;ÆÌEh?víVÓó@»1Ðt€aç[§ VIR럵6˜?ILÍ2—ôé· žŸ•£·‚:«Þ,€øÒ*%@W/Óúäa3IŸˆÚتÍs'İkbæ…' D£4*û8—VýïÛ;ë0«³ÀQU/4Tù®ßÚôø@ äñ"p”2ÁE6‡.È©~»Æ ³$¶P“†´ ía·ëa.Õxšù—ì¿–c6CtFÊß\ö<È÷DpüÀNc,›÷Ú¸“fÈçƒRݶºžÕæ%¸e„óÑJ×jA‘l_zÌʺž6$¥¸ôy­«úºžJÓ«`âµ,ÎP·ˆ—5ñ¢\“: ¥¶.ù°ß¿þå–¹ô©M¤QjʉýìQ T4d«Öè’ ¡I)ªD¾GsLÏ1€&õ …E`Ãý©ã¢Ñ‚DJ•žcµ»Ðt 9,eƵZYÿésÛÅt´V`ŽOÑ ¥"TmRbˆÊ‚*¸º}?ZN7©ú¶¾Î{9´Ú2¼Ì‚Ȧ,{ ¬ÑÚŸL Ù…£>UEn0MùÀ"F|ø;+ Öªw®ûz§, M6kä¨!¶Wt¼tŒ0›b²I8Òßì§vRQì5há¿ô1ìm…–V…D TÅ*}nŽªZ0EFÒi ™áÊôp5º™ëqùY%±Ô$Å“¥Ñ!)ôsŸ"&ëVE6RçerëþØPTä~ª#n°ê¬¬.O-¹™÷÷‡÷¨š‘¶–‰Í™T ;¶iޝukɶ=ÔôfÞ‰"´ã„Ÿþ´$?¥ s8Û™!nÏÚjîÕæq6M£¦º¨;h^¢¼ "mƒI‘qd–@³¹ôŒ¤”'펴? •º¹ó6ç eã9§ „ÜŒŠ$°Evœm¦VÉöÈ6\žBKxÒNǺVñŸ‚ U‡ô‹¦™Y_]mé 5¥öi3aînÙ€ë—Úø5Q|—çâÀ¥@Þd ÞH«E*–±ì«ýúbMü¡fªMM½§³Ók~WͲ}°³Ýxv,ÏÌJg¹êÎÇíË›ÜNÎS³2€®›‚n÷µ-› .mÊ\Érµ].¿Ë¡Õƒ6˜Ùæ¡?µ™î$EÈ#?±bfÑÆ1R>6T˜½zÛ¤‘ ξ)±·¬å#Ö¥×t{ Æb,J ZÖJÍ]….°¸øÙ/?BO‚V»N'TR…±Å‘Ö, ÚBQn(<#u 7‹²F ]ŠÁIÜ÷CTá ?çæ‰heQ@îÃY–Äó7ú´a^ªZCé+EÚk6ÓG+›7ô¼ ±²ñ7¼sæ­Øã6âP¶ª²:æâPÿ˧Ó÷€üP¤&‰H7"Z\6qÑKµ›-¿g SĦ9!ÊÙy´Øq«Þ±n± #Bð Õœq©PÔ;“æé­uO¬æ`¾ÿ9èGÏñt;Ó,;~Áº=³l—º£¨ »¸¸“Ÿq]À–LØ;šZ;š@=Ö¸ÛÒ[. ˆmR“¸%x~c+sÙƒ……µ$ƒæC-—7ó82S噽feœ:6(vù¿8ïH5ARY=úu'ìûR×w²ˆÅîy^Ý®-ölói'ÈôÄͦQ¸Õû'Òî{…p»áMVÚ™ðVfe“œîÜzXneŠÏˆEÌG??9͈ En‘߸•‚æóW€Z%ªQÄíp=TËFïóE­˜sÂU"Ñ*„eˆíç8T£-o¯º¹¾ÏËþ6ÙZª‘ÏhA§Úa+r‹»©):ÎR`ø¢LIaµ —ŽyMSØÄç4ØçÓ_¥Ãñâý6–ýÁŽž¦Ëw%*ÍÛBáÐM‘k¥eÕ¨úìß4q†rJk^<â‹27\˜í|ø:†MU@º¸0lL‰½#6`úæ?‘¢… æõ,ÕÀì9o õË,U¼êP¢ ÍS35^x9ÍÔpÐ…¤ùíLßM8ílT5djE ¥¡“—Q¬è«°´±8©IgÏa¯ rË×ÜPÆdu£Þþ™Bc„**8JhC¼] m6jQP¯pbc.û×bïÊ +â+¾P¡öõ÷ZÑ;áËa•Êá~Àµ7OÙ8Ù¦¡¶rpŠ9¸ý”?(Ì|t¾IßþˆCn5‚ª0–½´†GQ]$ÓÙÖ|Ëh Ïñ"­jÆÿÔDÝÔ»Ë?Ýc‚sÞb‰½DmÒ²:Y !¾ƒ—¸h²~ã%O#4§):„Ú3™U"!Ø‚ê»8á“F¨Z„7?å]ì´MÇ+>N÷ÐUÂXÆc`wyª\ †M)/©³h™3ÜN±©VPÂØZÛj¸ËÅt*•©o‘T1Ñé‰7Ò\”­~²žnžñÉj¿\Êú¥Ô:z§çÿѹヽ³ÃW£Z•b1QCQKÂóï`8#žôOzÀ0t¶PiÞ3RÁ/“/<éÛÎqzz¦³£j“ÐðÜ6ºùzÄŽ½œ 2BÍ1<Fì]5M'*EFK²–Rû¨å° °ðM9é1°u±ð"râs…]~iÍhƒíóE6Òöת´Úzü$¼ÆMm$>{‚ß6Ç4ˆ`Ü ˆKàhóY8áA1 ~^î‰",ZèÒf`„PRT¨äcŸ%¿}æÝÕlaðÁ”ÍÓüéÓ0Wý‡ÝcI÷g„x4ëч~7^Æ6Ãs©JD’+#Üõ(ñÎx­‚f®éÀL{l«qÔ ,CD#“s<€×NÙ%»c ãc®U8§yiáj”jÁŸùš ÷›N)pØÏAMŽÇ¡™e /b×ÚÐV¯¨Œ›qfïu`Ïtƒ&BÌrí´ÿø z^I 7îg,‹Hbd´wBç’,íD]øÑ;±QýdÆaä…#Ï´ Û– ¡ŠÂ±$׊¨7«…‚¬ Ø\L6­ã—óß ‹×œ °Ÿs½Q3Jê«J*#÷¹º2Ny€³—HbV²Í4âwY’rÅTš—÷˜˜fãЪyNÒŒlŸZhäKÖn^Ê"@yYHn o1§l7ï=3”<7|üÖßÐðhÞǬWÅC•ë¯x#¨Ðõì·¼Ï:_õ,”ÆýÖQ©®¬E b,Së_fx{á-_ä÷ï|ER7w¶j„†å}Ñ’¯ýd.pæÊ*á=Ÿö½W§þkÔðiÕAÂýÏäN=ŃBªÔºŒÍ/•üÕ°¦Ù…6¹ÜI*fTpuq•G…˼—l ¸²)LNÑoì‚#ËêÔ3é‘R5r*~è!ŠH`ôÖmFf ηJ«i™Ñp{U!“íXë­ÓÔÅ1Ú lû†°‚¡¹Sð>§ÀѪZ½½É›ôåîÍâÈî‘'v+ô,вÄ*•Å{±`[Ñ-0Ú—¤oœQ¶3—óX…#_!´Ôgm/á‡Uò±où´{J1Wa¢X-bU«±n¼B%ñwì…A·Ã¤½–šGM¦õ8Ü=èF#™lùi"‘I«²&ŽØã îÕåP|´4T*;ŒgÛºW“úÓ½>„åß•úfæÕÒ>[r›­¦¸Œfm¡[Ï/#7±–‰¶þr9˜«}Æ“@΢à6˜p?Xj*¨Bx€õþ^eñG5\0e?g1R@§…#b9ÛñîläššŠg>ÃS ¼Fˆ^+d`£2`ã¹OQÏ¡‡Êžv@+‡$_bm.¯™B`ÔŠó øÎ‚ég=ÔÉÒ…³pæp“%géJ‡¿o®|Òu5Žî¹c1„#†Ç8Oj%£E]OI=Y _3öìL5Eؾ¤Ô‘å>3ôÔ{‹¢³ò`ÒéœmÆwT5Öþ ¸(˜[Yâ?8èÙÓršß’ª8- ¹xÀK3UÍ Ùbî*ëé•É{œñ’Ñ]¢|F’=¸–„òÙžœú¥V‘Øç¿îäë;­-Á¿+N·ôjùÃ?¢ï´iФÕ⎂¾®d~ô°ó½Rã‚ø ™µˆwT¼£ºgŠø¤ÛÂeìFSéÝî'cH«5c"žŸp¸Ê€Õ4ÎûáÔwùDgŸ•™·_7êïÇBm"ƒ˜A2i’NtáÐÜ#KÇÎ Ä ¥\øy¸»o¥ûê/¾y…¿qkß#ÇÐJÚgŽ`Æï±õ÷àÌóbÒch1U—u:-ˆk«àÂÖæ¯[8×dŠzÕàÈôMUì”—‚ï{-ð{!"Æ2׺¨}Rß)ñ`¼T X¦Uj¼×‰ ¦ya®¶ËØV¡¡âÚìèÔ F=ßYYuÎC@Þˆ`Øër‹¸œ¶Çß;ýkï”A Öåî.áV„¡z ¸[*‹¥—•[ÒþÜWŽ—hÐKŽè¤t~øW‹¸>ù $4¼Ð†|c•݇+ Ëy!Õ/´d¯Å»$"¡™˜¾p°`—6p^N|ó'5„ûì_€¥ø÷²g-`Æ…ûyéŸöø¼œ†¥mQÕ_@ä•Ôî¨Òú~^ÓL½)"îÏ6w5žõ$&h™R@(­››upsyýÄ0é{ý°dúF*e·)‡Yq‹TôçófûoüØÛ«¤è™úþÒé‰&É?Q¦h@'be5]¶E(œ‘”T˜œæ^Øigy¨=œ(" …6ô¥eV­Æþ«cô×x¿Ý°!Ó€>¼·Ý^±©¶ôà@z©dXRbÖŸ1uZ!Gêò,j»VœMwëÁ‹6#듚ëáYc0[ÆyK6Yáê®nc$î†1­Üd5n« ]ì;Ó\N)Ur’¬Ù^â©HÑ~ S@$'›áD-ƒVçê…ìªÇÝì+ITÉs fOmfååtû!Zò‘Y©±œCÓçú‰–¶ùTj…³Ü™ñùt£àÑ–ÞQ>ŠwÝ«–ȼ8½$©|¬žéÖ\ãU¦Ø¼%"ÿSÇÃN}zèAÄÄÔ°WpH„‚ù9ÃëimZfŒZÛIbÑY¸I}º†¿c¼˜sãì^õ:2Ú“¤„ƒCc›žzE[–H‰Äš…O”Vq®u§™NüአÍÛÔ‹Uèè"—·myF&)¢R´Yʺ“r²Ð?®¢[5·ÕGÉ¢KÅ8ü4rBe´kÐ2eg£ G¥Ç —î xS§jÙüËh.¹Sl&ÙpxÐXǨž‘_ÿ6‡z“k£kª­Ü纊ðùBÚ¬ih{;íYnY hëÙKèGÎTËÖ­„9ÛÝE?ÚËØ.wqÛƒ‹âˆªæ‚Vs˜'.NAðž=Pìþ™Î’ò]Ÿ,D4„ÅÅšéÆŠ{÷ªÙŠÂO%0 Š”å>­F¯ ®V)þ…@Ñÿ`´® i½!¹Vå×¢›0ÝgT ]F=d›h^¶ VqVÚ¥tË+þ͉!4ÏPšKgF5¹TûÜëöje6Å’µ÷άF‹mÆ«ò“S#«Îœf¼`PË×·Ò†ã>Àß—ýœ^Ë`Ñ„÷O{A¬ô"Ü&…˰t)àNƒ³ ÝYX'N¯êë%I' X)\\":/F É¿™IKå63ŽÎŸEO©½IàÏ,z‚]¥§öºKŸIódv#¢eذc¬Æ ¥ùó Mš+ÖÜÂÿZæýd¤¢Ú åc «ôTBpgÚß‚<À½P Uf•g±@j&é3 –7†<È“l»–q|߆‹7x×ïs—tžãðveÄ´–:”R¡Y b«?åqO”.u‰]õq_¦Èñ‚‹¤%à ¯KëÇÈ´þ™;ÕkÂ⚥ö*¹_¶W’cNX3NYŸÆž×¶?l•Gv”±ol‡x)ÅÌl­¼Õ໬Ðâýnëq-­¼Õ@¾è£œ¤yeìÁnÅÇ$Ðpi‡{³¤±"š €FÄÑÙˆ:D¹pݸórh´v)_ºM` eÎÜ} §饟«7»:5nƒ›£ Ô¨N¸Þ\mÙ³Û\þB˜köÅ[ýêe8bîdsÚ­áÇ*Â&"ÃîR¥¯ö;Ÿ|ÂZç,›³MgqÀñ[4°U‹¡„ʧÃÙ®m@EtÀP‹Q‡qÌ´ÅWD,–VâÔ#¢8Ú;‹èÛŒöYk§9.Ý´>`q4»ÅÂíJ–4ö£VZ•9FMƒ·(›eòêxlþ·îúÉ¢Û žÕ) ÑTá#ÌÂt p÷WšÊD$ô‘ÇãîÈpM°”¾Xü|`•\PS¼t…LâšI;Ý¢€FY‡…õUhýD\ÌFÙ©DTBFKè´¨£Ôùmâøð͘‚Ƥ''—œ õ¿4“ÈÝÛ°1ǛЪl ؾþ™\‚ÚAvw³dÞõq…Ôv†±V°ªéÉkO‚÷4âE'B+ìÞ̆v…ѯ•VP @ºö¼$cí°˜±03Jt!ó|7« ¹À‹ 6'dl¡Bó·¹qØ/³-Z5\%Þ;YlEœr©P¸¹îJ=ªŠL¿Õ0÷ÞÄ2!ÕR²í~Ð×Èûè­þ|Ô‚tßá—PŽ_|"i35Š•£ÉFuþ{¸‡.Û&+ýê& .’T1²Û¨žZ/À¹2Ãlîqy‘Z:Qa2N¯w˜œ ”ü<ðM½•”E«•ÿM¸­S]+¬6Ø}.U(2(Úä Ì OV´•æãbLÈK‹ÐÍUWC¥Úxé‡v*žÆ­~¡š È‚û¸²RZÎÛ:x`fØJ·%ŸÙ.î8ì„jº6–ÍPTiÆxÃÍoÃMd0ÍgtÏcµÔ0O~b2DÛ;Edìä\zWÔY.=‚|¥ÿŽMx76»•bJu™þq4äl•è©€l•í¼äé|(¾kfÿîŠ_›£àir¾=k"°¥‚°³‰æí·ÑöVja”¯Y¼IõÿŒ€ºŸ’Ä>õFUXBö¼ä×” ¯`ž7çüqøÔeoT¤áxHÖˆj*›¿2Š.šë^~ÄëXØÈeˆÚØÊÔ}&µHaýàì«sÕæ1r‚£˜KpQ)Žž³u±ÎpÀY8jÑõg6Q®‚ ‘Ù¸Û2„="’K‡UB¬†Ý ¼eE =Pów|Ù#'?á¼×ÈAf>±*TΈc¶„2Χúϼǘ^e8‘Û»QÝǺ1»[4µôö¦E•ZûïSÆ¥¨@ÛD¾z %x4ÅÊ&TµËmjÊÕ¡#õ~(9º•xbÞL¼8¸*§w/bQܤ”÷,¾C¯Ù݆ݟÒð03‚"¸öùq­Ø'MÜϸò¼wŒ>+Œ€Æ´ÄD|Œ_çˉuŸä‘’ñ ]• ¯g{¦ ¿wªœ¶1ú%ÿo’íÔõòÈW ÊÌ*`šµç{ä‹× ˜dÍõÌÈ:•\&‹Ê=Ó‰Ç^£TßTêyx• ¬{Ð(ßÏ6èôâ# ð7)pìb¤œLPâ'JçÅ[˜¥Ý¼cLÁ!Ê{ÉxXƒîÔ /DüfÜžln ø ËTTÈÝÙó ú”±Ýnìx+‚I³ZÌZÍ-¾'á]Ù.^hÒ}«èˆ<Þ¿âÆ ¿0-P¦S/T-£Ç[ÍH¯xlw’_WY8´•¿œ6æ^Šb97B¢RdõJ.Ý].`kk7¸aâ\‹ãê„ v2ãÚŸÑ«´Š·m%à~'•5ÏJë[Þ%·¨éTGúý½ÀFÝÏ¥ñq)õà´y×›„š£N˜¾v6òÿ:9Ìõn¿çË¡g4yü{<àDä^ï¤â ±Y®ÚÈ,ƒªUôˆDïÁa#üñÓ÷æ²’t\«FRof’åõ>f,R<Ж±X!¤|Æ4 á–  ”d83[®¤î«(5q©\d¼.ádg£ÀŠTwÅ{-ˆóeH 8}¿’Ê…8ÚÍðb¿AKcF©ï•±‰¥O™’WGî.z kuFp.$’–~M(Raˆ0µÄ× «®<Êçì,={£0üD-ÀÄPmO[ï'£…·­çÁî_+…ðœbû¶>.,3×쬃VimÔ±9]¡X›#Å 50±]ðÍÑò(jVgƒì©#£)E»bEC w6Ö}þ4HCÕ>òùÕÿ¼°En”VÀf¢{Kš'Ôì›Ú¯bå`pHPÕ!=œk@Ø!IÇQæyšÉÇÏQS™òõmqT Ó3™…#Ú¼y.@öó€égG±EËÛ¬¼Ã™7 I=ˆ?DîÒ¸±,ª «4?Åt{jÞ—=Zyb¢s$7™5ŽN;?{’|ª[-Ýž¬§þêÜES|åÙÞ¡'Vl4•øŽ…›ô4N3èµ9¶ëIuö4ΨüÓjʮ۩讀£Yœ¯»ø2Zj`ÚÝí­Á±â^çD@zå­AçˆWœwâ5ÆkݵŠ;+Á=ªF˜Kôß¶í¦uFÛïTìdánŽ;ýq”·Ü„§íVŽHn䦨¹žfÆ’NÖyðÛ\RG´Ãìi}'…îs=§¸ÂV äìídTœÝ‚ÉðZ†3÷òÃí &£[wZó}eÊtÍË{[ eŸñPy·XÅ´bÐHI[|ÁômÃW'.w&ÝwÂ*æ·˜QyËw{T$_½üïæ_8ãz–G;ô\J+çÆé¿ü½M+gÉZçBK¶ )w«MØdÞê&j&j5›|&ôj7tšëöªpÉ“{'ºDáûKO+_:Ð\ìáî²ï¾R¼2É¥®µC^t¼±70º2–xwÚÙlrŒàËÛªþº·Äà¿›ýW¤ÉJ¸ìrÎtj­náÇËfóPÞÑ= ^ŽÂïûûh=Ot§6§nàxý$îDÔ„ºÑ]¦Töö¤6|vmÍó_•øb²yücpÞêèw™µÆ¬thÞÔz“¶„ÞÂ#pǽ[ú»Óë—¢¦—Ð iY‹¿*]‘u@¦¹6¤r$Í®˜Ùòò èµfµÞŠ¢ÉPÅv JÛê‚•3]æjÐZˆc­1¡yÏ5Za‡ Ð ŸuîÓ6Ij¢s´s³0¬xñ­ó(` k„V´¸ÝyIb؈Myt¦æâéˆÆ„× È,…«N^¨ÉS§¯lIZ æ7õ1¾•¤‹-=-C ¬2ë‡6ûo_Hæ‰%ßh¼–CBÛ$ÀBÔ°XÍq­Ë>‰4(U‡QT ˜WÀ]ÌöÛ·Ž¦ºtWKo[•î|dë¥îY²ZǤ`Õ(ÊØ‚gó.À:#~‡£ÓÙ„‘ÿÙsÍxÅU—9VTôÙðG‰¼ îz´.ÆPÍ$roô,ÏèhÇðìCº&Ühw=Kùë>ºe›3—âÕQ¶:?.’kÔÁ2éujàÚÙÄÔV€iJ°Ÿ¦)<âuO†ÕFÂÑGõÆéÅTN4ï3{¤jk%ׂZ1eýg'êX³eI˜†6:¢¸ ÊûÜg$šmcÃûp F.êÂÆí sa80‹G 4(üpÆÍïÉU!$ƒn-W_h d9pE;,Û%ý6PqG².“5.h4f®¡åvÏox~÷hdk„¹•Õ{·HKt¢ºñOÔ/®)”8ŠÇ¬lµP2ÞʳàwQj†•h¢]Ü+ãßã?ìjÝÇË«¬s3k¿[¨Yϧ˽Nˮʵj¿‹+¸ÿç±”Íîh$Ó\Û¡¾}s(=çµ–ÛL šœSM”–ÏO§»æ/–Ë&¨žئš[5Ö¿p‡Ÿñ‹û„P‡‚Åᕟøš‹oR¥.ÿE |ƒê®@XŽ@ª É#(çLÁ@óžG]½*[˜7v1+暸d"îb:×á‰Ò­ˆQ—c‚³/ ›¥ü·7øw?Eù÷¾¿J›öQª1X+ÈãMuvZòjó–Ùãx0™ó Gê'^¢àDÎÓ§¯âû¢H:R½K`ní¶‰œß% ø³¿¼ºKò>A³\ŒFÊüÙuk{ÖG½%ÊÐ ”þüúûc =vîšm>¶®ô±8uC®7›lÖÒžpRß‚xpHIZæÒA§,áË;1´r3JB•…Üš¨Á˜|±u¢KôpëÞ‰] v»Z>T^ª»Íe"º½Ä©¸ü¦©_æ ü5ÜÔg7S,ÿ®‚ݯé¹’äfbœLdu†:{§ ¶øM8qoø¹hšÍÀLQoI `pñÛÞö„é<ÑÅl˜2÷±}î"SF-rÔún:q"²­%™ÃçÈû„ûÂŪAØÈ°h.BŒ¢Ù†®Äÿê×o’{¹rœgD¡†ƒ…M TTáéœR¿HCºä‹¶Áç,9ì}Ì6Ð>ÔÇb`/áô@ÕÀL*AÑ¿tÒgÑ*àov 6á¡èæ0t/¦'i+cóŠéÜÇѪ©wË03¶^ ®JšZ>ÝÌëR)4r>{/þÕ^”teÁ©áŽT3ä'Å^tÍQ_i™´¥û&!¹Æ(>¥z+ilð±°,ë¢ò«Ôx9›ïlºõD±ëK•w¦ù1— ,JT˜¯@º´l²â<1¼µ¿>6µ åy‹5hDÔÍ^Ö(I,–âM\šµYHté:¶áAÝœÕ.‡"ª« “saÈ%÷ŽÒ°Ç‚&J™LG«;¬íZlÛà“ÉnÓÐ,™n%uM–¶û!ëÐŒ£‚ÞŽQÄKÜVÌ5?'Å-xÔJW“'žŽå…`LÀiFíÑ…2A™˜û÷ -¦¢ûÊI7üLbæeM?gçVÆ6ξֺWÛá J£É>ìÚ%™°1w¨(¹=x˜í¤h`&Ü«ëìtÛâZén7p ¸2gŒL}ÌJóž®PŒyÊ;¸áÇÍ#WŠé« pÊñÖ³c"'ĉx´sÜľÞn!ôñvxLùL?!Š/ –)ɈEÛwP •ªijáó­$–èh²V¦;˜g6•;k]P„ÖâX=a§1/˜ ž~Q•ùÀ±xœÓ\"&¦ˆ” ¸§ær§Š¹]µ`DƒÂÐô?¥SQèrÎZ計v®Ö³•æj¸ƒ7?K.Ëß"½ˆ”m!SÙC;ëyBÀ~Aßö[E/â·êOÕ !jýnžÃvàóø6tykWô—õâ²c‘bãô{¸Ÿf&ø (_Æ¿ãöjŽúÚ(ÞÔíGšV©@&’&;ÆŒ£l©Þ‰Çïö³æ5i7Ú‚ÁmËÃØžL3 =pèÆ Ç¦­ÛúÖjL0Ê쫾¼ ‡ò 7÷0â-²l]8º-+ߨrûäЪ5îÎÆÞnX„XŒ{°‰Øšå"€s¨)òLã½'.¢]{²ãJ,ØÓåV…š¾Ã-ÔA~‹®’ò1£K˜±ïñ±âsoítæ ‡…¹;ÓÞÑÆp0•®$ö¾Û“¦Q#]'O ã#|wÀSM|¾ñë%ÓGöyÿhÛíJšn䦢Ùs1á<’×ür§xw·¸;­ à›è­²ZK{ n-йâ™5( À7Œñ_VHçèe•j~8æ";jm:é( AêsêI¿l\`4¾çââéôÌøoM›Fy*XÙÔ\UXà´®×ìx{Ö|öÖ 3fVêÇ+{“L¦dÒ%‚ºÅ› ‚ú²E»Y¯0 ÓkÍV¯E,yŸÜøÝ"›¡Å¼¹÷$µ0·§KÛ†¸çÄ j í˜pP’mb¿Ô,ð"ÉÒÙ_RhE~–tʪ{F(ާ´Wv‹kwüä¿ÅЮí3üƒ ¡”Æ þ¾ÀÇÃÏ•÷\ 5•ÝÖ¬G¥Vˆô|QÍŒ$t{¶ÝzàgCm`‰^´VÛ Šç²ŠŒžÄ¿¿èЃ±ê’w:XgÙé¶ng¹aµ?©¬Ç܈ðú+i8g)‚®êŸ„Ø? ¢xçI ¤þ­šÙî—5é·7rhO X=ªÀŒ ”â˜øô ¯Ý;ŒäoVÑ ÆÍ!6A6$g×Ü£H?e"˜€Ê$í¹ï!ý¦Üö†¿á4èù¡[€,ÌTæ®§©=¨÷)~…0Å>¢ë›Eù¤Ç-Q’¤‘÷„CŸ»¶”5”¾·ÒӾΙŒÄdc¥è!ÔI„ŠSÕhñ®‰«àÚjç"ÔŠ(»›ƒK¬(#1•²Àb•Ww_$͵2µ‰€,u«uLž¨£é~†`¡zп$y¼¥7|àø(8íc£ tFm:n‡z4d ùŒ¦_ÎÝ;Íè—5ïœíí£€ïqLJ'ÕL°]¨< Òý¬Ôùñí™—kŒ7"4ÜÉy„W’UK¬ žfÆ9 '”Üúàê„gïvž`h¤A±ïhXˆµÇâF¨ €â1«ïE¢Z|«Bõ`T*'¢2xõ¬ßcü°y· Å²;ä/æ¾;:)áO ‹Ô­"<‘ÄÚï[~D¨]âˆDôIìÝ¢Zi¡U)a73Ý"`ÓP«Ïwƒ2g;.Æ!©î…PÂ3cülPݸæ¦kÚ›¹PyŒUçSgˆ ?“ÓÙ °]ßí×!ï·Ë6*¬gq?#†f›7»Ë%ëV<ÜK5]„Ã%c}„¿\|é‘M mâ«y5^Þ¦ZôDb¾¤Íèja³ /96©2:=ƒîÆ7%>•‚i|,% -—Ôt­ GÏý:èØ˜'½"Us¸À…7þ–6¡ÃS ØMW<$¸õÜ~î†n×Ò»´=HEWÙ¨ ñ"~3¢ª‹€íg¡Õ£  ƒFÇ&y4qã2[ÄÌxÍã£ýš’Œåb‘¼hæI•4S=9•Rã¶o…13wLˆµF*Y ,•Ðg‹”q1±[¯x¢NúèbF4Ÿœmì4&ÐjûÑ Ð}9r„õú¦™ ¶±Bǃð˜ní¼Šœ|)Þ¥>a”´øæ¡¤¼ì”Jt5Û¿%ΛˆÊ}þ%Ó-xÚåjûDý5ÐÆ,FðR­:²=íN‚­ÄDVžw?®p›Õáö–ˆNn²ª‘k'pªpÐ|ÄÒb'0{I´O“›FŸÔؤH<Í׋Trxly|)âñœÃJ-/øÆ“HÝ@#ñå>QX¦—wjÂŒª˜jy¸»ìy˃÷W|·2âºx‘c5@K­t—?LÙšèj鬷êð«8 ÅŽ©”E/²Ý%.½m¥GhBÞÄãÓÆÝ笔<ÐЕ˸ð¿½ÔÔh‹Ú…h2ŠËæÙå.³ç"¸µú M¡î‚Ðwx·~;á­„™9FrŽlFŒl™çWVžÉãš“ý1:W³ÇÕ¶þ¦ÅQi•¬>Œ¬p‚âœìüñÍíœýtÉ=\^ÛÁ"Y@Co4þ@ÛüF”Ÿqr´˜ ç_¨NËŽq¸ø``ó]¼Úîùd™*gû(§WõU€t¹ŸÖ¶/Ú~îÍùd2M±y¿ÚD¿}¿™ –²ýü-=ëÙë¢Å¤mYZ¦¬«ÏràyJ„tû2Žçèn÷Ä¥ü@KNa˜ "}"•®FžœÔ1åæ‘ÍÅë&ýat‡3sÝ×ï¦>• ÖŸgÜfºíþsp\„è\L2ôUt9ax‚Œƒ±ó ÙçRÓñ\Äœ—¼K •²!'|fìÄÓ+= È>"ŠØ:—ý~p˜fHûQƒU‡µ q£’,âÅkZŒ½*ÃJÜÊ%~–{}dè fŠ8]N*Fð[Q¾+vC¸v ™ MÝÁ1‘j-6ëÿ™¤‹÷hmó„HÔ&öšŒ—í0",µ³/;ÖBBRgs–ùÔd¶3–Ù[Ù–÷T— Lðä÷—ˆhÒ–R Go¾¼Ÿì[3V tb;=#h“ £õt5¶(WJ>iK{A Üú^|¸´D¿Íq( ‡‘í‰q›ˆµHÈq‹,A<=Ë Hs½¢æе_&•™@BG¥H©½Ý•MTáÑ’šª,ÍuM¹ïêŒ T«Ó«ø ¾jÜE—9þÒmÚ}ö³ûÙ·t‰°éYÐ_“ÍøìzDÔEߌˎ2Å”! þy;”ƒ‚€yd }ᣵ…j‘G•N"æ‚ÃØ5³œ?ò;ÞÐ<À÷­BÞ©,[5XO—°©v+4ï *û; Åd¬Àz^k„5”>²`JÍE€ƒÚ‰~÷Ò~†k¢Ò­ÑÚ¥'g-`h'ãYzߤèe*{D‰#Ñ:P«>ÌEßÉ_…1ãþé&¬_ ½yRRÝ ŽK8Œ#6Íi?áÔãIæ»·D¦ ª ¢¤%ò¸…/t@ÛìGÈ@Ú,#‚Ü<ÊÞE=%´ó‡éZl°¡@¸\Ѓ ‘P"›{b™7SF»”VxIQBUOÒjš*Q² cÐ#`9…¨ôº§N×3\ŽG5®hÄ@¦Øš H‰Ñh™Ñ@/kNVv—)ØQ qVö+°¥_YI½/Ýrº¿Pîý½çÇ<–®ãå'-½gÚ0é–q¦Ÿ»³ÚÁž¹RÓ4H|Øæ,²¢›‘ÈM›²­zժ݄k a¶÷Ù熽×MÄÞËIýÑÄNÙò±Æ«QËÛ '\Þ ;–-C…)®…9SjOR,TL·ucå?4Ð’¤å}ýˆÃSª6©~ª0Œ1ð}ï¦mòµž¶—14o8ŒaI¥UË·’{kp¹(Ä—V OЗÌÖìéÒ([Â}X=p¤ÉðgOW•ùH ‡°®Þz÷}ƒhöD¿F°c%uP(Ï„KÈ%D¢î†ÆÀi¨§ÏœIáø0Â1V8¥ºmà3›-ã°ªE¢bÚÑóÿü¿Ù™Ý¿E3¾5.eÜÿ™ ÇÓ¯ ò¿ÜØŸþ®óï_ÁnÈÕM¨“™È_çÕ6 ÿËoþg–Ïþ¿~†HÈü×/e xÓ4üïøçÿËÅÿ£‡ý_xKæ¸÷ÿÿ?ÿѤôŸ6Çÿ‡÷^døÿëfÛ…ß¾A´ZZùåAKøµj*n‹RƒãËÖÉÀÁºÁyN×0—{ÈÛ¸IV§®QdÉ•W¡H@Êö±s(»àçÖü›ò›u¸ñxM s»Ó\J®;Ê»÷“œÏtsêž#íÛë¸àµÛċƥUÿ¥ÏàæÑú§czÉ%Bm5Óoµ"HŶ!u”;tiͽ'ü§O] ›ó"yrÁóǼZ¤Y(p9¨¨iÄôöÁe¦ªâåuhÔïÚ'ò/bÓ‰âm‰àÒuêyäFë×@5C›vÛÏŒ ^Ú ºnó;›xBñ³©£ncÕÍ›a¤¨tšnd'¿Ü¬íy#B@á*œH©ë›ªÌ{ûa±»±µßý„Æ]ÓÍ»Fø.Wp©Ú3ñ5ð,BW€æ–Õú C—£ÿ¶‰¼®™gÉ È[ßÕq…| Å|•îÈ&Ò4l/"Þ/•1•ç0Ù/a¼…ÞÝR0_2G©¢€qn’ãRŽ®íÉ.1W]ê»»\áܶ´ßúʘ.Ë—R1»W9çi)#py†}/†Ûk]ÍD†N(鵓PlA¬ûDQ,ÌG0àÉ›IÃ…'«@cÓçÆÍè;´øC½¦¡…u`½t¬Lm4»#ZLzÜýÚÚFÒ»]>uqA-Ù5ú=aF;aÏû]¯^\ )|—º >Q(€¶•ëï*BK€®€:"@'Ä£“ß©l°~úååÔåSršÚýJ± †øûukÛQîN€£NÐ(òi@¶¨q|XÌÛñ[ÃÙó°2¤/Ký¸[°Õ³QjÀ¶ø†SÂçE½û?ö°^‰û8“Ð#÷Èe0K“3M3¥¼;¯vÙÆ¶3Ë¡t¹Á$A¿µUÃ^L$æ’þ¬±–@{ j¨°é{B÷ûα›vçEPü\¶:“lí¹K  Ï'7! ®›zòmª†±#NuÚ¹ Ûn.Žâ¸£¬êH¶ K¶ä ]ªå–”TœKÀÖõiÇ ÝŸuiÁŲWrùÛ¡‡¶-…'.ŒîšÓV:Sš÷P¢ª°˜ïw5»MA£! ‚,í|ú1'ãy,iÇÊë“,ݳÚ6Bœpr°˜Å ÃØs?7ÂþS(M-À›IEND®B`‚gruff-0.3.7/assets/city_scene/background/0000.png0000644000004100000410000007312712055510742021530 0ustar www-datawww-data‰PNG  IHDRôdÿ¥U*gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<uéIDATxÚ„}Y¶$I®á'W¢­Kû_”áF Eu«Õ¯êæÍÌh0àÿþŸÿWßÿ° ÿß¿ÿûþ ù÷üûÏŸŸþûàü¿ýûﯜàû“÷ßþ}øïo~>îûŸOüüÿ¿ÿ„Ï/óüò÷ÿþÚû9ïÏk¾°¾vþÿ÷«¾ûþÂû/¹È:ú~;ú–¿?쿈÷·ß?Ãûo¨’›87òïßßù\ù{/Ÿ˜Oþ>®Oäó ßgðþÅÏ ¿/ ¯þ<ˆóðÞKø>ï÷ûþ}(Þ§|.’úåçýû%{kõ¹ï3ǹ¶ú÷wß'¯—ÿþÓç/ÕûköšÞÇÄ÷a|oýlßø^ÎGÍõÁ¾í]3À¼ÎêÇ~xÍë|oñ½¤Ï¢ãyÂ×T~kýB1·VÅ÷YÙÊ>_ä½¼káüÉû`ÏŸ/íÍõþ°¾Ù˦Wæûµ(_s8ÛR¶Cõ…ñ}ÅúâåAÙÖeQÎÿ@>¸_Ž~¬n}]g›Á·R¯Åyê~I”hsþž•þ½ÞyŒïS±-?oõ„ªê•Ä‚.hÿϹîï­zzïc®T¢P¯O¿3mõ·w_=ý»ß×ûY¡Ô©dÞEoŸÙAçA|.žú0ùœMÃóX%*~ùß-àßîzC}?ñ»i>Ÿ„Ù~àùÛïïžÂû;x_ê÷”8'ÇYÊïgzÞ¿þ}Pçwô9þ‹^Eì+­³ ð‰ÐÝ å<ßö@³\ÎeŸ‡Äó혧÷{ñýp ´q–uUõ_ü>H””KÿsÞç9ÀsÇýoã÷þÎ*9‡gKt(ù.Âþ Ÿiß?k6ÿ{[ïÓ˜íÌyÚßKdÿõóÐ8+¥$n¾±ƒ”°F|¯õ<7=„'âÉï;þ|-Î'ôššçª{ý«ôÄáe}Îk´5!«B"÷¿mqbĉà9ùz¥}ß&Þ`öî}Ôl_ô«šGrnz–>õ$—ý0!³î$x~fò}~ï÷½ÛsİC6 kT/ºF1η—¤€rªÂ¿jTYéeÏÿ³Ùë^’5ð„ªï "â­¿KS×öüùw냽0fÛ°"$OÕÌã}|œä» f+k®#q'ï|WŠlèþ.yÜ%É@ŸMˆžoÿûž¾fËÖÎËš°ZöJûYw „]Ï]çÑž}OÌMý K ä]u˜Àìb¾èýûOÉ6x7:5}€œgÕNLÛôß"⥔%Q™²#èÙ@Mj4iâ@Èÿ oÄÉ á¿¬áFªŒZÉ÷{tŸ«(yÎoL²l–[@Oy}àœMë@.=@æÐùãüŽ\ö÷õâĉ“Cé‘=9‡@Ù§?ZËx¥Z,ðGVy”"nÂk§Ðû>[ç`£o͉ô¶%•Rà½ÄR‘à)xB{XlB†¶NM)%ÃlLœ[ëóIOÙØÅˆ ¾CÁwàœÙsYkmÈ1z¦ˆ>dzÛúUR“ù•åéÚæù¨Y°Uó>FÂJyfkM‚sþ;0ô.ia¶úà ÏêZ‰Ÿ¬æû¨uÅϳû÷³~(¢:ï͂”nÕ¿|}A^³þIÞ4Í•6 ì\¯Yár©EЙ˜=7Y?%àòJj¬¿Â“DZ©ü¾œùŸóR¦Iƒ^¶23²Ãw$âÑŠz} äzFuMÍë¤úv‚NÙðygèwLÍ?­ž.WÅŽêbX%åÚ$Yo yŽ[è~±Wß™nß”z{!aQƒ¦ìUhû/‚ÕFñã …èMQyBèBÒ"sV¹˹¢ÎÄûñ@÷¡$¸ïIÁ“C¼áfr“o±€ h”ARb÷xúî»:—¾×ÞÀÔ2†ÝM™Ezæôys:=k5¤q$H>ÀÁ©AuüƒÙ ˜ßÑïŠ <c½Ì[…ãf--l0K¹ §~Y(ÎÖè¹g÷EkHÃA=^8ôAyÛŒdÚâJ·9УéÎ$™ÚW¢Ë›vo–Ò^¯ 8pV6Ö…/©h°-çwåÚäg|ç¢m9l4Œ¾¬}“½“0žù*çÒØNmªr@v‡A¯í¼›$@®m'‘TLµ|eϳâÈú™ÂQ³ãúÅÁOó•½9•Ũ"dÝϼçû8ìã›5mél”3Õ œ„E ï3¢¬pf~ËŠ³ì¤šãލz®ÐSá~Ö9º‡¼D=øÉºô‹1dÊ­÷<'ûŒ8~Hu+d†Jl䛉D6çÄr¬—9°ÍaÑ;Ðr)o’Ãi¨[ë]§Gï>èã\ð*ù¾,¢Ã"hLLç`O>¨ÍžÃýû°?Ž27T=ttl¾:£cúË } t8ÿ:D·A‹5(1úÒe5WˆÕ!}ðƒ\Ñ yѤAáóõX ½¿Þ <‰NNK¿°!h(R„YîT<ßý9n‰UlŽ/)¬` ÂÒ“[ xŽn®žìÙ—6ìEäéÞcž~ìX0Ä/§#ˈiN‚«e"ÒBÐÀ_Gÿy°N»™Y>úžû‘MK:æ—¾øoÔê†Á¥Dp&6C?÷YµBû¢Æ#hÀ( ÎÁRƒä’WˆH¢; ¨MØL¼"‡ðkeÃòÞJ¢"¡ügG^Ã)û“9Rav@0c<ŠÙ¥z†leÖÛëx“¨çÖÀBBm—À'¨¯Øj²¦ÿVúE·ˆ2Ž™:VŽQ;mKuù†fœ#Oúñþ^ä×3'WE¶¿|öÿ†‚’Mßë °uø¤m¼œ´]­5@îð>`¼’“°OÛeL©_þ¸tgë SŒû®Sò(Âf‚CòÉŒþ¨_&#ÌÁf©È}Ž8 Ö‹‰Q|ܲ g¶(žiY/Ñ¡æKn…2gÙ}›’€¢œKkj M»‚§%k°Ëø­FH›Bs’8ðHäEÌêØ«×z6/xþyÁ°ùßäà,46(~¢ÉÃÆùê¡¥¬g§@Å80Tm…ïW4)äí‡&Wa2Ú{Ý„€Y®¨‹˜–±—³´Í|Êad£P"…4(ýFhªç$ ÿþÂm«uPM°sôÁû`a¨° o ÿ¼¤%£!*eŸû‡ö?°'ši]»`y¶ Ùñu0`äEâ@>·é±1k±&‰¢c¬çbj\²‘œâ¨ô…Ø­0bú"È·YL8‹Ziš9 ?§e,{ÔÚ®‚W·¬ ä¾—€xÌ8„OË 7$és`Å0!€!ÔwƒÊ Ckƒf‰€£IALRfù"ð£j5÷¹›A9u˜ÌÈÐ ÌcxŸ%ÂqÌÙ›Pðf2&!…å/zègH#™D&ç”̆Wñ`•ë¼+  /&|Î2͵ˆìvÞ|gÜöfT:6¤œR“©(›)¾àX×óLñä}1áçÀ‘ÍÀ˜žè«›p2÷#@@áWA::*9¯ ãפJVóïÑ£W.ãÙ{ª˜¤ŸC œT¦É(‰`’% ‚–­¹„™ÒGÃÕä3ju@Ò  ÖŸµ®ƒæ~|<‘Zß,uœÌÚhíEËoXEÐB3¸À½F°BwE“âMÕæ}ë‘ÐÛ™räèÉDÇÚöüuÔd4ö½Hµ0êHFQïðTi‚ã›iÙ£·?i®|Ãs“)Ò0(­¥›w¸—¼ 6¾½_%ŠÉJøˆ£?¥Œ4ÊAƒ£fÒù78ï"`B5gOÓ‘¡3 ?HžÃˆê!ƒ ÙX$T¦³:E@\ìòV%JT\Z‹JÖ!O}Ôqià)2æHæ-Äе£Ò¦¤õÔôÔxAù€sØ/«ú zµ›É·Ã~ª‡Ó'’‰üÃŒ¶bûÓ6¶²&äÎñ*úPç±CKGÄZ4î'†!ÌÙîÔnðl†G…~D¡åͨ µuÐ]`CϨ2÷"‰d¶¬§§¡É‹’{ ‡¤òõU±òüdm  \ª>Ié4RO&y,—>óñ?D-¨¼9w*q«žhx,!.Ïdà=±03ÝJoMyç[ˆŸäó†תé­%{„©±- ê‘7y©3i4y²(³ °Ÿ>ŽA«2²÷Gà×Ï}õtF7[WëaÒ–X,äoßð)f—’¢T(­åßsy²sIƒZ=@T.ÒO"§,›¼í%rCqu'z€"6cb%‘GKTôø2–M9_G …*Ð8B–,Éš$R0P¤ÈœIó ßa¥êè#|'‘”Gæ9(u~aœY‡8B€¶>¿ï¦Ï`À‘W2ö9Љ à'’DV yŒ~ Wyôû ~w¬u_ìɲtÛû;ö¤d…èÊ)©OÇRq%0¢÷ÉDË¿´}YØüI22…xa(ëv$”6ÐrhÎfûÚɻܦ®EO9#qtáú†BÚdGÌk€œÓ†¹C˜UïÆçÈÖ0)$ÝP„½ )ì úò”ÊßÜH?B~ù­˜£ªåÃÏX7ñ$Ôƒ›>ypã›D–'ú“m‹Œ*ûT*_ÚLr¡èû¿‹ÄnëÏ9Ä’G6 6øz×ÕrõS`\ ‚ ݉™€âà 7£IfB€®ñ+.O!mÕ>> ¸R$ã&R7Ø|êA‘ ­AÅT÷æ>@6à £3ÍNàxÑ#/RKœiÔ DŠeÒ×Ýø:ÍÓÓÆðâ]„ƒÍèý(,¬Mð㬦#ÜèÁùJCT ÌCµTÞ¢5T {J‘/—²”£ùí¢ DbÄõ!ÍaaáCDE'P!Ÿd³Ë­!Ó9Óõ>(ÈÙñT¡-J£ h{—Jà7–@:UãõFp2¾ª±uäžÖvçD„C±¬JßU ù 7/+÷Ñ$€Ë9ÉNð¡FJ Ü ß™f ÛèÅBʧâ>(Ízž883z9ãtUzîÆ*“ÌšzÈÉyó~¾úøl:=R-1µ,éu± ¥fBQzz¦€> c0\™Šž‡iúM¢õ? ]ˆ£I2m¨ƒŽ8Kç.o·sfyPCÊušÛg'F~Ԕɕ„u@™‚¦•¸d¬s’ÉR8À«”MlŽ+Ä©š óÓåRt‡+l 6þ˜¤õ Å‘R0†`Ȇ7eZvGO¾§{ï .l:v”ôƒ>äKHÓOÏÁ’7Ú€µ’“~.ÞÌmüƒ‹ÒwfýÀ§›˜Koç†É£ó3ðsï¾c«ž"…vï³Ú[À\D«,D*:b%àºO¾/¿÷ûÈë~tìqFœº%à!ꢆ™ ®ŸÖpN ÔžO¶ÙÃÐÊ®qÊTÌ\"9 x=c¨¥¦Žúö7P7 £M†7Ç+mÆžš4«çI$ òiVÆÌµƒª‡7PB| ,ýXH…ãu¶%‰t¨äBñà€È7NJi‡¤ø!Mþ8I´²Ü Ã.xö&¦†V‹4åD0°7Pœ>è…›ÂbQ£Jø˜RÚ¡`M¯*Ü<Ž´,ýpÕD†HÙ·ñL±™‡!¬Á•¦&åÊš[™Í×ÞŒ¯ùCto[ÓAQ`ƒ ¦ŠæÅò|1qØy2cÆFX+o²€) !SG›†âjËaAi92 Q =dèEyŸ|‹†F-ÿ:íMÌ(w0&µô•0Óda œÉ Rc+¤ç~žúcC¨ÂôEÆe€F„Ž€à%C«™¬ÃKçƒc…_I>9?inþk5Ñ󱔸à°O L˜!¥uÚô”¦‚Ϋ›ÄåŠ/¢F0Å\U„ò´ EÛø™2‚‰i98° Z´Šï(Izìú ‡/'­¤Q{Ámu”臫RéLî3¹†”¡2÷i¶Ë–¥ãìzc»™Ƙ•€)mU;¬¾[‡ &—&©%4ø¾V„‘'†šôAÐ †mûJ %lý*_kqfA½¶»yJÍL«9EöÖ‰Äa7-Ŷé°ùFôF¾3§2TŠ+ÿƒIÒ‘(D(hŽ“ Qe^Ç'8 ¨Ô ’ÂlWÃ5.O±™E_•8Ht“'¬4¢¡§õ™ƒe|?"³rN>8ÇK)èâÓs7¡lìƒF€x¼à7ô»*')†â¸T­××cÍQµÉÑOÍÒæâTRô¯?° bg \¢'•t¡ÙÚzyT©€n¾ ‰rõr EZÇ\•²—Ši†|³ÞGXëzXÏQÄ™e6‹å#^Ôùàˆh³û^Än¯ÍýHM¬,(é™þÊ ¦¦~“Ç[ó3¹r+®M˜ô|‹ö˜ºÄòvÀa’›ÃÅ^­H¥ìˆâÑßÈCÁ©ð†Ó‘†6}>ó˜çy÷uÈÚf+æ 8ŽÕ5Lw,YèAøtµ´ä“€kf>þs9³RÿìÁ%K¶\Kñ)¨º6•V¹ñm6íTo®l•þ g0ï¤Á›,Ô2Ђ$s¾R»-ÚœŽiܨÆZëÆC¢xUN2$êÁ´RÜ0l7kYLèó”T1çÃX†W9NTi-•Rº[rŽ5,÷âHçm\ÔTŒÅ´nâð•A&g¢‡ë¤w³ÂK b.^~Ì#ÙÇ7Õò®Ðƒ*¶Vjfa$r7fÚêIÓé*?¨ÐR4šü­=´•Ñ3ÿÈfðF9oXe8ÓØ‚·ot5J•¦F@“»§>ä«5ða–'Ðßl3j×5¾ì2Sw_h Ñ`Rܾ1U‚©vœ #Ä¢ÖÓmã+bip|ÿéO]GÌ8‚MhËé“àèn^R™ƒöÌŸ©%‚¹å‡åâÛ zHk.±ö+­s¹ôù8N=n2“&ÖðÇ0)iJ™´7¶éÖƒ&Óà„*¸ýÒ°).ì¨ï·ü€¼\˜l˜•´R¡icìù'±ž‰( fŦ ×§ãç·d?*v÷ò’rFÌ×ÆËŠlthÔ©‘†¹î¨â·æxãhÃx{¸Ìå2íJàÐÏ©&×T“6Kü/KÕGÃ݇']–Üîâ¿‘v˸[’]rW>­H è6jxAk˺n­–´ÂlÐÁ\6)7éÖ«Ãnßoó½°ç2G ˆÇ2 êlæâ@ëVÅ¡ µTޱÖÇ6„F0²3hWˆRßkø°ë>J5s“À@˜Xm2““û–ìÿ NÖô¸xÁÏ (ÏL8÷º9šgÔSú”©²b—ƒ éóEGÀßé¦õÃz«< 1ôߎZXNO69Tt.`¸-(*˜öx®VÐÀ^Q'_Z¢Ùæ3Häú”AHíùfê»I²2¿¯YÕÃE~P"c ·u9*Žª®lë¦.•.n5æ– á×|1Yk§µ4p³E·qš Âdns5mZöÃÙÚWeŠõ¢ž~l»4”8KKd?ÿ}>a‚3gUŠ˜Ú/†m÷›Ã©Ø›ˆ-{¤¡5ƪfÖh⨃g<3‚ŠÛú@ÅàÃUëͱíèÈt`݃wJ¯…•·©Ñ0ʤqfœ'# Â:}´CäÃ…YQ"-5jyÓ©.Ð@£u ·)^Š{’æŠÖO“þ”Ð;†v„AØB5¹Á45…ÚÀÀ®t)Zãeè´ ;´F=›A+“!EÞãQ èQe™ØB?S0=¡@P¥b8[ ¤¡¨bÞÀ‹/×Mƒw‰,FT…Ô £«^P)ÏÆP(#h²"¬lÓÕeêGw„¡áñn‡À’lÁü=ÎÞ‹ÝGÃu»99ý2s :U§ ¿ *†[f("ëðïüWdײx1¬µŸƒ )JÕ­Åÿ`­ÞãO¿¶Ó©=¼Š~ØTõŒ¡ýx'†NœÙËtÌrÏeá‡6:Ø€žþ C)ê±!mØ—Ž×•ûá)ÐfpÜ­Ñᘽ;Œ³yU|yŠÞd…BA†Tºúšïå!ÐnTL‘FeKÄ#™ÄèCÐ<’8´ÖÂËq86¿ͯ~X+þ»•fúlKÞ—Š’´‰²>8­ë¡|‰˜—0Ì=­‘º®Üdf¶u@Ù–HK+ Ûî´YNŠ¢‘>š ˜žÆôÌ€ƒ ù7N•R6Ô?)ºëÔ$Ò\¥w{Õ›B)j]šªS.FbR!¸õXÂ4ß…ãíl«-áâ‹ÛšBqTµ[+ôˆ£éF._ÆÓR©¼-ÄŒÌwKv:9dã $‡|„1 ÈMx*× Éqw3P;¥ÀéËÈ*ä>¾×ñç8S Vš(‘õr…Wy„SaR¾fÉéÂн4“¬¡‡F×2§b =çò†Öc‘¡}RK¿žB•A7ŠY1W6ò[´Ôx——&·ÑÒuUê=­Ã#q‡9r“„éòÕXŒ!ª°#ªë¥)‹ ÂH|{?B•UÖwóÚÝMÌHA‰œ±Ã1—?ãDaDØ©¤µ¶š¤FWˆ5B¯~|ÙüDÊ.aK[·åId7ÞÛYžÑê¹4©‡g)ƒüctD×èmYU¶~á ¨Á3ØhnX´Ú;†s6†xùÍ‹i^×ͦ“Áâ¬+²öð@0 ¨Ð™žÉÿlÃ'å;A>—¡~ê/ó%4NzºrRá S2”æ@¯dbi·³ÆÑr:6Ë&0‹ÕÚnß=Âßm×q`ʪ ²Ü8zóH2Cz‹+±9E*]=˜|Ð2X³œ2Ug(²%*äµzËÁèôÒ|t©§csÔR>ºôÔþì0Õ1aJè•ùÍõØ*€E>ä²[náÍtB”œ" ¡¡Ÿ#[¬¼ wº;2éÐOÁGÒ’9q3ͺ¬BC@²…T;ŸãXáØÞtªQÑs˜|~™f!"'ñèÂȥ峩þððªUi“Fd­vLâ@f’JIr] çM‘ O/ïFå F#ŸJe5þ½BÀýÛ˜>.ᢠ*í1ëÊÆûzŸ®ŸIæwLBSDö®?–ÿdöf/jVË* uXJ´)'s8£BˆHÃï5ìi7‚òj(¢Â¨‹5/Ì/#ÆJØÂd—JmÍ+.\”¾ËAHv6 ù:ÒŽÓ—j ü‘Ó~ͯŠn³Sœ„OS6Æ n‰“ ǽ&_bgÐsãÜ%½¬®ÏSÈ\­cn¦}ª¹>"£A9Öa¦ÒÖi­ŠÒü‰¼–æÃr¯sÞšv¾ FB»¿¤X=U3ÆÉLõáN–Sv¿·9N)=9 ®þÌSCi2ô…Û§ qqVU7Çr»¿X³òJ5ŒÍe‡Îõ°§aå„InDÄc<0Ãß40QÕÔ¶É™¤«Ã,rQaF¨VL7;bÃ/┓a)& 7µhÅÐÔùßûå™®wïP ˜¢[Óã¤$cK ¦SÂ¬š®†´[F3À8(ãI„~+B](ÚFsWq$õkѶëDòÃðYQØ_è{¦@AùX{¼¤¿ghÊkµú7É{8¨¦›q@Ü&4Ó¸xàm$8–3å» øØ qö/7zÂÆÇ®©M! ˆBŒ¶eÌ ÉÔ Ë´¨Ë@’ÉQEÁ' Sô+å`kbI)øìÂSóé…áPÄ&kµ*ÒfÕ|p <`Š’uQˆ½A$‘Ó“réQm3c ÈHÇê&Ysâ+/f`ë-) 3Âd¼ãÂK¶s~ov7׊)¦ñÒ¤Ôà2 aa­µ2µ)}Y"¿ O6|Š©±YB+LÜ46ŒæiøÛY~K*H`®æ··÷‹ ‹ûg·Í«ûLº¬p‰k·H«2•Ý÷"äm©„U†EëQh]m¶}^>s!áèëv5rj‰Ïa)¶@§`poû±Bçi9b ¬q¼+àºÚ¼)œds2ã2×?çWhÖ™ï5j_Çe#«h~!b^©©MäÃÖœü!˜u m)ì¥Ý5ÖV?Î ?a5®œg„¨é½’2'mÁVˆÈÀ ”±Šº S¿.R“k_O³úIí09&ïR‚ü±0\Ú¡â+n=X“ækp%éûMá&ò2CdHÖ•u{Ü–F­4u›u ÆeÒV·c$0MˆÔ@ì€çaÈ÷rÑ^Q øµ—¯:\×ÑþJ’Œ[1»ÔR4üΩ‹«8[&*Ö¯ô‘‹Ð˜º¸‘<îWÎ%‡i¥gŒ°Q¿kǧIõÜ‹ÔL´ËïëÞXxÚŸÝŸ3¸7® ~‘´o9–®‹mÛ öcŽªªæ[IÑÖ‘ç/¾ˆþñ+†,4¦¥µP)Ÿf‡¥ªгO ‚ø„_¶Å$ˆ¼¬>\Ȇ‚hP0þ9ÈqDþ‰È?± ;‡À%w^ÚEΰ“û¥Á vë- fæ‹èž kìÖ«OìÕ|ÖôsYu^Þu!¤ÖE¤Óá`5®Ì2$f2Z]ŸÝUqóf ÙØ¨ a?®Û)®õ%ª<¦eª¤¤¹Œq)PÜÂ8I[FR…Ì”I4(T‘Û~²®<á ®·x©~BùªGÉ^ò*X( “ t+—Ih —˜^¿ÀµP{‚õUSä°¦=tP ‰[î•-æfo+}•„¦°éM_Ë\»B‘ɉâ7UEYTØÅy+ĬÙE¥ ûµH³ ñØ7ø\êIcû»€«,–û熟Âźã¦÷ë=db¤ š$¨ =”¹2÷iùz¢˜ƒ}Þ§ÐÞ]VPµæJgÊ£èæ¬öP”Î#Z 7IÏíÉ2]E‹§Ë î9òÔüXÉþ],”%…ésIâGë WiV @¸é_êl&³V¤Õj0=š¾·„(ÑÆ&nð[V˜(ýó‰O{BŸá‰ñÊOÃè©ݹqbq,êcZíoÎèZ*sj‹Š©š(ˆ½Wa º}¼Ï‹•Áœž^cUh Sò3„·ÃžÆæÕE7ëŽÒ߭ϰ»&ÍâÁÑø±à¿±Í¥ËF™¬$#$ñf)]¯‹œ¦3Ì«&x¤Yèqg.¥«z°Ò[ajãAæô™½ÓóÑw1Ü ~lý0â=Vuér‹p ¶Ø_L»Ì¸©¼7¶áœhdÎ<ŒIrF=”Í,C@Pd—E†¢´=Ku+Þ5æpl#éîbï 0Ò¢¾®>VˆppbLÖÐl»N²*¦»77äñPL å]ø<Ò€#ß94 .ìáÌ‚éX7EH‚®-ÙàHæ Ýµé °4jÁÙ;Ñ{™”î(Á€KvL±N%Pè\Kd(ÇGH…ÓGt—-v}u¦ãœe0RŽÞÖ‘1·‘®Ú—CôT[Øgæ‘S·wkEÔU š!~~"(8Ñg†õ£Xó%D÷·$‹(mR úÝž{ì'pÄþ]Ÿ}×Öýew°Ïwü™\_‰ qAí‘ÓÆ€DL‹¬pÃ5ß #aí …ÇÒ e*í hä)Ú2ÃÐ8•ɦºU­R¶QZ®uÁ`@©£^9G”ˆˆ«•”ˆµq¼g+1˜³Ü Ô&¯ 3bûs8,bës;a¸¤pFæ{üü¨’»‡nGí$Š÷º Òa¨0ß$C*S R^ÚUKxº^¬mÝÌåt´1†˜fÆB@{ê¤ÐTÎYv+§ÐžpÅr5(¤y¬n[¤‡*z„¦õ”¯ƒ~ZûOä>š =©§BHH*!Êô¢²™ÜØjÒÖžj‹Ð åÞàü4¯F-X>p;‚¥ì¸8ê‹t·EÊK1¤Ê ­¬õ:Ãta£ìÇêätþ’èÚÇ#.‘¨Ö,ðHt‘O—›¥›9IL¡fO¹ã`t6ž`Aù CM FhËúŒ`p™.¨ASÐd_Ésžuº‰ú¤#Ó+t ë Aé eˆ:û©+î0¹+ D¨;zê=“öÒ /LÁº:¹)Ò¦VL³BŸ.Ê=ÐÛV€ ^‰oÚï+ óÔçKÌ ¥Kó/™ V™ÒµŠ} rˈ "f¸èPïßÔŲ!ƒ:ÇH±ae Íy›W"1îaäªRÑHa 4"з>QM¶’‰É»æ•ZÑ[a»¼l–ú_6")¾„â+¢ºä‚¹ÆevÌEp·ºgØy¡ÿæ€(`uy:Kfˆ‡Kë )èQáSÓÝXyXª¬ù ]ðc»9@Å—ãPqó#¸¼‰N„viàmSŽ™¨õ§ÔD¹¶£Ó‘'°)U uc¼.ÒÇèÓf$Ó‡:Í’l«t-¿®çý‹£<ð–.EÙ5‚‡ ­¨£±§Uqƒb?,ÚdP÷ùØ6}°ÕÒ[hiHÉÖÏo2·Î#9h3zvNñ#›LÍ'Å!U4Õu¨<ÌRyÛîæCÔ’HI”Ä‚3éÔÑ0mtFM½Øf&Òf2±è&•¤Ö!û¿6o–u~pÍo{ÝBù£ÜNœ!GÙa˜- ¡~0©ö*Âã£9?’í‚óvž¶FÞÛVµºKKšW<1#ÇRúÁ¸^ú¢ ˆÖìTËZ1) Ÿ)òªÞÛ滛•MÏ€[—¤~ÒÖ'ñ×m´ÂS%Qtà ÓÚ£Ð~”À!¹7t­‰#ž™A0ƒã5h¶‹g§FSQgLY²…iÁh‰àP®h“à¿?ù³H˜ ã«ùv’z1Ž€œ[JÇäOà®ôìÇÈß¶Ç«µ1ϰ¯p˜@`ϧ]v×’¯«hÈÑœâšJQÔ/ ¡5z‚æ~޶9¢Ê«†Ei íÈAU0ä /¦ñ)Ê$!^¡2_.ô ÛAäA¹7§*EC.JËyÑÁ!pƒÎYŠJO…h4o?¹:Pۢ͡MÁŒb¦¡ú†Žn0@¨é6ö6«mc9ˆŠ‘è…Ðz\ÃøiœKÊ‚€Ø«RÜkA…zNzÖu·_ô4á’H@=ÏXI¡ Ðó@Á_›q"Ö]UORqÂÚ•æô Sz¡;|Ú·}%!}¿gó© 2üë2T‰£ërú­‘<ÍR0A=Çk@¢ !úò!2ûL;(ÏQÏÔ¿øOÏ‚-BŒU¶¤ÍˆÞañÛ!)™Uªã(ÒëV[¹îÔ‰@&^ ¯ò¨„QÉ <ô²B*Æ?°Ž¯s!(*JÝD`ù-¸ØÔüè‚ë7Y`ø¸ŸÐq~<£Ljm˜që ¿"š†Ì›îYÐÆßú“-ÅAC·-<ÈŸbãvMÕÎ&W@câ—Ÿ,ù‰Úø9*Ô¸ _ .V½þž¸$mq)0&št㢮¤óÕë ª·¿r#Œ  :­ÓlIDÞË,ðΛñœŒ³f¬LZ™.:”H{AMË xÅÇ#&“{û³ï®™ú.ß×­þ>2Ü%qñà)ÁR´Ýà9<¢¸UvÊ]y'ÎèÍ&‹‚œ¥‚<é¤ìn €fª}ÕT™ÅèªÎ¹7Îg(¡¤Ö’µÒÅæœ¾_äââwõfz{-HW*ÏUÎD,uEì÷LTXný®H.öƒt°¤øÕdYø‡[Š“Ñ¸”ÍÌ&ÐY³±°‹Zà쬛EâÐIF#jÖc:y: hÈúZO™PµrÆ61ÓD6”L H?…Y'áüΣì.—ÉyÜÙàhŠ—*:ÀŒ¯/Ðeן1ÒÊædšýÈ• 'œr8†/žÕaŒ ¼c_È0ªŸÈGȈĴbˆíÖ@رeË8øóé`Ü(»î±‡Vì9Œì‰_Ò[ /åàSÉÇ‘«¾“ZCY«œ£}ÁÕBúïX™âbÖ ¹q"–ûèd°­PBSÏSªü o 2õaz®LMƒ4@ Ãä$ìýÊžäŸcÙ,ázui·U@…‘Âe†»D]´èàæPfésE³Xú.˜‡µÙ¾7J³~¥ÛÔÕ`«@x$7Wýö]É»(>¸rG]]ýå'XÜXŒàrÄ–äX¡‰+AÍÁxH²’yQÓ躡#^†%fS!¼ÀM&CU¶m'×™š ZÆ…›^¸²Æ£( Ð!&ƒð2fÉÂU&_¢]Ò®á} >l3:±Èù߆Ζ™Ïn̺Ì&zNªa£Êâ–ê²E°+ìO/ªË´° ÔUÄÕ\ONw¿ðTG§i0–¶ÆÚñ)Ì…©_™4{󟀪µÀø…ÉÔµrÞ¼vÄl­N…¦™)UÃÍžŒ\$5 ÂYŠ-Ï”QC>1hå<ª›F½Â§Ñƒ´“iˆ†°5œI› Z(S3š)aë'¤K" Z«Ð.§¨®õ¼há%¤âêDù€=À3IÅ ¹§eǵ÷ÿ(Q¯t¤°_R]‚‹ú1Ý)š2HyÊåÖBfª†޾\¥')(Ôm7êM„dZ#šöV”‚nÆÛ švo•EA§7+5Qçà‚Ñ4·ú˜¹õŒ«Â€«vsH›&ŠAqÒJ(ä#t”JœË!á¯Ø×ñH Ê_€ÿé\#õ´¶p¦Eõuè%èLô’ÙŽD™S²bßôe%nl` ‹/P'º€É8kîiD̪ØŒb_ÛxôWÃf Dˆ8n&¶6=_ñ¶F-þ¡W>-…~LµE2‚{µk’Kzxv)•œ¿VŒ¡.W{a ®y+:DòZÎÌX >=H ¾f$Ñ÷þ#üÊøâ8®]>o'€†éÛŸ%óßd9õx-Spj£^}îÓN‚‡¶ÔÕ°X.vU*z´À­^ž}ø.2|³r ?IäciñåbÇÙ8+=ͬ¡Þ˜—W¯m ¬:HN¶¦Õ\Ò¿¦ 8é¡38°"m“.[á!†ÓÒºZ\–â¼Í?#À›Ã´þÉÞ̦­Qåí ~L|$77 Ô–ýPè2Rž± ¶™ûot™ j§5Èhrç#^Rh:¸úNòQkc}³‰ç\ÌUºfð"¶¨–üËkÙ8¬—@Õ—ªÃ¯Ïà-ýä6]¿ G#G‚0iš=¦¸ê¨ËT0ŠAÆ Š”äM]ÄP¸ UbJêV­Ig“Bk›Ñi®·5 F:2¡´ï©ƒ¶!1põì¥¨Š„qèž}ÈþxF›§ä0 LáE«‡õÀ="¾P‡1k‰D'Qƒ Ëg2Úqc¶L’Q†t O†ü‰8a¢]Û¨^_dÁÄÜ‹*sP[ö9t{L@êßC{aÑli!¤¬™Óœ`Цçûé@2GJôƒ•ÁÔ«1VŠƒÈ?T#X»gH¥°q*ï7Î!f†P¡ø~9 •û½öœö%×mź,zy ÅH9f2,=I÷Î|¤¢R1þƒ–Z"$HQsÃäõ4pºADx'it¥yCk9 ,ªñ”Þ±€Q ŒG{ÕßGm°Öj}Ù}€s‚Ç‹ ;ƒBä>P·AûEHͶV‹¿ÜóêËPU-”œÅFH7à€ýüèfy„TjˆÙyó0D¢Ò6i ^GðÕ´¼8ûèæ¢„Ðq 5¦™#«²W¬²”ˆQ Œó„obRci×…EˆE©U¢. ZÖcÓB²A±PiAµ,ú"—çTû*PäÐ:/±z—ƒI9"f×P‰5ÈŽÞ©…LïÐ@p=2_>È %ÚtƒŠŸÉÛÐÈ«RI™È‡qj‚ƒ¤Â,V I/¾8zNžüIÒ#îïµ=±ÜXàóÌÎZfÂÈ »‚†xi5!ÓyPÉž”ª hÿ% Š„­e)h(7CªŽYåQqYíȳ<ܒÍöàLÄ‘h'àôÌÞKä¼»óo\EYpù´Uß´›h¢]ïpGëèÎ(S?c9c<çÖ`jUúPÛ—£9%jÊêøíÓДµšÊ Ï¢ š Ú·Äˆ¥eŽ+ž^¿d|‡nÊ1öPÙ«öûP6;ÊX|ß>±fÏ}¨/ÅŠ1ŠF„tÝ¡˜$ºˆª°â=ˤú‡é,;C=ÞiÐÚS.‡D!©ËßF,/xØFR“ä"ŬUZÕ<[ˆ:¦LuÞ©iš:îo…¼á=û³}ñænZ'šk.±²:Ъ!畯ç (‘à=>iÄô[™28¬«fÛHíòfÒ/áOÎ[¤3aý•HkíPWj»ˆ5*å¨÷ bOJÊaËr¡¥ïV€s‹ ˜áE9«5* ¥|åÀ”ª¤eñöq³ç» µñTØ'Áóhc{$hUc¸ZLv 1‡îo$ïÍv¦ð-[r˜jÀ=®dÍðR̰n>Åã[í#P9ðj!£¶WóölÜ çb’Ñk†KO+߉Ě)N.̱ó‰aÊ0 MЇJㄘ\n½BÚaî&_NÝÐÞ•Í]¦Yw*íP½…ÙöÝaRc3 –žå· Ë™±ýŽT– ,¦Ü zƒ ^ðH†©ŠÚÙTÍše90=`ëFã²"ôñõS•s€%L[¸P¸z®LÒÿ& g˜*÷Rá(íÎ5ßìæ îrhÍ#ÜfMNX?íPLõ쬕åœ%iSš†—C¹—– xNq¸î•åR9ÏôÚÖ¦t@s{CÖ¨Jaù)•t×Ý¡«1Ú~&œ4’—Q —µRuä\ÀŸ1B§hª4X>DçFU5—vZ²tïäIÜ3~úïÉ•»p„ 9r´Ä€«¦‘y^“ÝvE2¶&^¿o„sK'¬s³6)uZÿgþqñX§M8'µKJ—ç[dg?²òúø ÇKT,¸‡jÿ Õñ‰)ÚBq%]§VëÏÄ"†º0Ž3]RÏé àæ …¬Qa²¤Š¢¦ P^ˆ¤ Jñs£g$’:¢¯Õ8 ‰5ì½Ñ1T5cælÏÖ‚J%?–ƒ#¡D´ Ò 9ÓŽÑ”F^eQªì mLFUÏrì!´®P-ÊK›YŠÖYõ3SS4êKʪó¬©É€)Ñ‘@$[gF°º‹ÌÆPQ ÊQåR '1S¥ÝWLtâš1ÒMiÀIèûÖfÀ0Š6-ÈeÚ+§o.dÇ·jÔÙ×W–º…nU‰­ ¯!eS0ëùVÑRŒ„À+µö¨Ñ*9Ý5¢V³ž]@¨ Û,\I~M±_ ¼Ä‘íia]c@û$]´y†Î.6m­Å}l*Ú¦ùëû>){ÙÀ„G•‰IáˆëN!zïÛcÓ£÷,¼!£Ÿ ”c%ãÕç|!#¢¾Ç—¦gÍgx¢^ÉRÅêSŠ÷|½{´ý|ÓÍAÂj–Nž¥ãE·J¬?U•úB´)‹Êô¿“0’0M„¥/ˆÁ`Aæi8龡s±¡ræ*Â$nJ·a¨]+.D™¤5ß”ÑÒ#¦§ºÕpæàò!K(jü‘K%¨ 6z Aj7Ñ¿v,Ø­š¸¹rRiEŒš‹AÆf 3Yîe-ä|øKPm>U§ïØ<"kB8¬¨8©"÷˜ŠøÑ‡íÓz6€¶7S~TåÞ r`@,oÓ-©£ ÕQÅ¢Cr¤ ¬BZ uº–“”¢ çaMÏûŽbiGi‰³ÂbtvV9nËrœÊ2“³}ˆÕSÓþ^Õíê…'­.cÂ’Þýd<À-çgôã–^DÞßÍ…hè¸u6S¿xY~èSJ¬ @GLt¥ý€²Ö!âVT„9h¼ûEÒVçˆ1³Æb™}@ ‚cû §œQ!k«M ÁŸ¿c$FMN1ê‹IƒLù‚' ¹‹ó—oi°±e­Cšq}`†ßÖV°S±äð³S>l«JYƒWÁæ>G®œ&˜"+-å>&Ð pU§ãg–W(BØ1>³¥wÉÁ¯aéÝBqŸ¯4Ê(‘ÛS2"(› ¶üH§¬Qö7Æ©7L %^ ªƒ¬=‡;‹Óºœ÷ÍÇ,GG逷­f1ló|ÄW&ˆ P¾ÜŽÆžÏ´…Ü@—í¸„Åu>º]Ó‹+i¹ËJS Ç÷Ó.|héÊ Xn˜"¬].ªE%_Ú) û¥yl¥ºUFb¡¹†IK3÷P>ÓɨH |MŒ`qî¬Ò¨«)¥¡°4ϵü¿|˜Ç S 8¡ŽQ…^˜˜òM+ßsK±¢0Rª «)ʮ廰 õ^%ñ“ @?„é`ª»”ôÁVЉ”}àØdºÞÀVí`˜v—“q_"ÞtS*¹lv µñtE­m*QžðmúeD‹ª+sKý«èئ›¯¸AÌœˆo¾â×G¤e+L‚Œ7^¶Â¡°È ê êdaÀ[Æà: u Ò™œ››ìI5C0…¶SGÈÌBBÜSfêøMƒï®Ãv[ÆÚ$äôdóCܾIõ—J&5ÛdÓè]ޤxT¹Acb™Jn[iÐËÔ;½ÿÉßu BäÏÎîq´zm;YûÓÔ?ºLvb»Iÿî$76Ü¡§¥È6:¹ èêÖ|‚s ÷s‰ aÊ´$ G˜"åÈW½{ »ŒFåøZ1¬?Ûx†Ù?ñçöÔ6óùÌî‚ñèÜBD&”’qC z.Ôßm4½6¡ûUîøðཤ\<®)´S~[ŒKº ’’­9-°WÔUrcï~qÙ%å<š%‘]£¿[‡ª3ÅG.ë©›ê®üå^'3OJû¤¦Þ|ß³¢Á³vu‚6.ýt¯æ§·7¢ˆæº%![uÆP ãë¬L“@†\oÊŠwu{ ǧÊò|Sò*E£š±:‚ƒOœŠ{Ó]䟸à ðæ î³[L‡R“ðÐ ¢Ìc†‹ájeØtHì\Ðöº‚T€âÀQµËAUJ’°b½… Þj 1)ÍXþí»¬GJ¦@¥¾¤âæ +tî‰n@î,@%hí¨…§Œ¨R\ ÙoÔ0ÖÞt.E™b‰›=xˆQ—œ„,].±ªÀ1Í^à‚FF¢&šP¸PÁ 8`ùn,õ¨ðC'Ýê‡ ¢–ŽöP ƒ‚²N HY‰»SÖ’H¶´—ézãN÷¿Dç%‚¦À¯‘§ks‡ A,×åÃrÌ¢cZ›A•ÚAq%f¸"Î<èqå‘y> šDNþÉ$º'…Ÿ8ãÔ ŸRÙÈ“^ÕÖ¦ãá]VÚ"lÕ&ØÉõ\{ËÜ]©IFqYµÔ’³ãßFîrÂHYÇËn»Bש´GVAò²K¥ÓºÕ 8ƒP±š+7¢œ_Ó _$åªÜcJ<è ¤hG%rœU¥g=¸r¦mbûæé¼6ZAZÐQ= º\~›‹!BÛlã¶Õƒay½‚‰©ÑlâMŠé†;ÁØTh«›Õžða&PF;ulk9<èpdn¶Šse©¾’AÅYËÅQ‰ŒíØa’£‘­Õ;cB‚±>‚+àñ¨j®¹âÓHbË>M»ÚÝ“¬[zÒG^¬jqf-èµ8¸`ŠÝö~Ÿát¥‡ç(0Pû[í³ÂJC”=Œ<¦e|¥ŠŸR¬žawâÔV0Ï™ÙV¯¶„ë|èHÑ ýRrFáÑç=îHæØÝU+IËê ŸöøTšiû“zÿ–@,P,½­Z/Ü”–Í‹L=euš´[œ¶YÆæ%ÎÑcNÀÄŒs ¯*[Ñg`»­×$ø ÐôL’q,‡é8~fÎÃYmä³Ý (‚L„šLSOÚ.M@„ˆÛ¨dX pB¢9/®ðg4e7Åâ-–„RâŒÆWÎìPÃè˜Õº;—½uEL´!¡)h¼#ˆwsÖbâ ÙCiK`IEQ}A‡jˆI[ükñ,Gª)wÅrx.57“©²äS>ˆßä@,ÊhÚy>5ÜAR”ùjC%Ë9χÄÊó,÷¤Ã¦Ñ“F˜¼<ó˜IÃÖ˜d*^HÕ½””9o°T'˜ß¦ò(¼$¸*ÜÀYd¥²{“ã/T¸Ù:DbIƪô±(JyÝwƒ®ù¦ƒŽæã†P•DQiï¤ÝfZK¾‰Q€Zý\42˜ã‚Í$õ½©? ­¤—iî÷í¬ë„/µqÚ*~ò;ìT‹•ÀJ*ÜXÏ{>/ÎZÛ¾£‘ôJjº5¸oMŽö˜üRX®Ý¾z.NA‘°n,ÆÅ&èN¥«E¥î‰BÚŸ!ÕÝ(~îJœâö,ßF{¤c÷é´‘²ÏP{åqˆS”¤eÈåÑ»’T‰yY¥LT¶®Õoǃ"·0–4[×òF¢ÁúJËW±ØÖS™vôàÊ3ÅL§4iÙYª'O 熸á÷ä wD:Ë0zÇ×ù¶ÌpÓ`ûæBìkR…ÞÙǺ8´iÄðlŽ[Œ^ê¨cZA&[ã!­Ó1X1Â{ì'Wµ¶Âg/I¤H?†_EÚ =„å´H´,” ~×ë¨A¸¤UÞ²~¯„ 蕞-åvèå™Òµí…u™Ïº'L¿€Óyr˜š‰’ ÐÊ(Ε§Ý,KÔ—¦4USKY™½%EJC'Ó,ÿÜu#’Ù_oŽÕ:¢:6µŸÁ¨ÖúÂÝÞÆdýÓ÷GÙ@‘RõuÎî¶žEÁ oÇ×sùM¾›—“š[óòÞF9Ô§&ÜÓ ðÄx3d¯â¤Ó¬‹>׃48ãÀÇ Ú† àr!)®«MÊ?.™„´"^—/ÝÏ‹h¬S„¡ ƒ½d¶h TŠÛÊ[û.Ýâ£ï8ªšßn¹0j—AzjÓtÇ(<´„Ãßù3xÏVV¢º‚ £µÓ³wE¾5oWh¥Ú,Á¨©Í\Wa'Þ¤ ès=&¢u4 $—¥=tåeR¡}Áoß‘RvÑ&¡ô¬ IækÕ|‰0SqÆé]èy[-«3dÏ@èV¤YECœ‚†ýæäí¹ŠpSÓt;們ҒénÛ=ä‘KÓ³Þ| )+æg÷»òüHó7Vî¤ î!Åš™9¨»ÖÝ’b + „ÉiJãJFyªn.^áÀ²q+¡(WÀè˜÷e©G šê¬ÝH«¹Uq¯¼ä;K»Ëg©Š¯ÛꄟÙv÷Qi ïó¦úINFù0 1¬l†q˨¡KK2„MQ´“飡ҽ N|râ]NŒiå (Á™·þº2©T?Á§°€(«=:$D9Lló1ŒOˆúìg»>käY[ k¤S/Ø`óMLýz” 4¾ÛäIŒ6”8Ÿc4¼äÙ¦øødò‘lÙ4³ ý¥åö°¡"ÿ¾=‡rž×vAÕZŽ a!(ï^.¨çWÿè‘9ýsrGÀÇú~ÿ}ÄCäb¬´ð-^›f.y µ­Äd2ªÅ¬XÖñ†s£¨ÓA6óÀ½º!Zyè„4›}œÞ¨ÍpÖ#0aHÎþ¨œ„ ˆÍîOx¤Þ”4/¿žÅ3O9‡ÏAU2T¡S? ¬z²À} >¤I·ÖÓ³†›4ãBV£B!#ÃÇ@ŠÑÁ‚ÕË>RïŽàr¸ãsJ·Rj-B|oþËD¡ÇÊZ3î ÃÞ2þñl´ÑDËÇK7+@øÒC$ÕÜÅédžQ‚­wÒ+8dFQdº}Ñ ñnaè*läÂß.©ù®ŸO¸¸Æ 7Œq9*¬O›qŠH‡–<¦h7Ú;\ä f÷<6þÎY—6t¹œš9¦Í…Ð#½Á¿<µEÙxãTýXÉÒ†ÐNŒöô¨ [cM–týÅkL8°U… ©3¢YÊ5P'AXœ·‡¸U¼87Ñ©’Mÿ§4¤0î¤ÒÝWÑÝð'‡ª*[˜#´9Þ8ÍM7ˆèB ltèÄUÍ£Ò-Z!”<¢ã£¥ËTÌ‚Éi!uã+èjþGåÝ ¡Ú êÈÐ#Dó‹5%ÂaÓ´ÂáPE±C/ëDƒ*U¾ê±Ê¾Pg:”öÐÙ‰p¢¸úÝxA'¸ÔB_¯ùP÷ÈLqÀ„þy×S¤(Ð}N£2~µ¤ÄІ„Þä.CcvÕûDò ª/Ûî€mMf¨x0Ô:>ªòé@;iB Rbôh¢åÛÁª«òÉÞ LŽþR²—#ØUŠýíVôð\Ê]: [d¶Ø×¹3»Pvy-ƒ\¶æiT­'¥ýºVƒ1»ÏÀ® @•i·×A@•ØÕð4„ ©ÍÕÑ ×ŒŒ' ‹´hø„:·ÒN«S–’ž¨×:ŠJÿ²á„‹Æ•<ÒNyµ)ÞQWuëœý'3û÷.HÉÂ)'®Î„¨Ä yÔÓàôÚµ·ÿ×I€c#¯Cå nÈ^¦R"ÍD…mµ¬§µ‹„Év4M¶cÀø§Y$Hãí¡`6æM!»Å‹vouKƒÎ§òÜÎT¹C.iGÅäŸÿˆa…©“‡Gll¤Óúþ¥GžG•37޹¥#P¦ÙndÐT´–2!]DÓCJœ§BIj?ÉR4â ċĜ£Eò¶Šwa¡Žîò’¡pÛΆtBIÀØÝ‘ÂÝ™Ò=mŽ$jýT©ú+ÿµ’(–.V!¬;ÿ×P›ÆbxçÂüŸs*J‡3µs–w¿DÌS9 ÎlCÀ5€NjieÑΡ¸?DSÀh6QþüÜf܈$ -LÝ!=g¹SÍ·jí€o3‰§“_@ünl F$%ªHC˜,vC8༞éŠJeG¯¥ƒ9DLN¬‘7Þ(™|j#*”g«Â3-F)3¬x8ƒ87K³ÌþQÅêº?IÔU)S‰‡˜ôŒš³®m$Þ×¢Ùs>þ,†Ç{å¨dÖÐ}få¸Ë›r!&穳FuXÖEÔPYé€K¡vÒvØeèr¢¶ˆ£® c¹k÷×ù&VðŠTj)««{2t±2UWa!®j¹çhD:¸sñ8ìj†úP/ÿõ¶áÚLiJìÙÂÈ{.ý”›f“"ŒQuÓÖ X-Á0ÔHgRëô¬²y$\q‚®õ¶D4‡'MÁÿÌo £§80½àòщÛüÓ”¼°(StˆéZŽi9A¦CR àˆÊ_ì7¿ôœ5ÊÏÙ=\ð°Xœ3ryý®uQèYU"¦ÏzÈνÃ%¹9¯¾Ô§l1(Žòž9vF\=L§4sÑhÆo ­7ûMü©”}î±äQB‰]s± ûL_P–-ÊÒû=¹ÝGW ”~g]Ø›åz¾ñ|œŠñêrhÄüTí[¾ù?6 {‘Áìi{ïªóUUQ>³îÊ•WüÍ"¦qK`MÆ/d7?œHÜT5XY…Ö Xl¦u±SV^ÎLþßX)9°/e•`J|€—´‰ŠéâEiR¯aCöJ0èH:ú^H;ËÅ~vX+á"ŠÈÛ§p=1ÛŒ—/ÕÔMn!­ë‚6`RüOU]eþ»é÷ÏúúÑþЃå[k)Gš>Rl,¶rEªHzq1¤ ×Ç!N\±¼y™g/v`Ü’™ëÎ".¡Ëßóêžµ¿Ö[«%”¸kØúAs¿$Xàå(xnóØ«Màw¯2ž¯øj?m½Y¸`jU"¢¼ûC‚xzš­Üù¨‡5¬Èr¾™ÊŸ¢ÔYÝyMíB¼°¨¿á`;}Š,ý_¡µ »¿¥ìD MüCyÛµYýJBÑI„Ú!qg‚ý%sù5Šïï‹ÅÞ}É`F4á°•x¯XœK=…@РY[½òípRz& ÍADз+*ÀV˜Ç&c0õ2Æ/mëy©ÝÝÒަGô1Z2é9Ú4“¿<÷ÏÔ¢é¾`8NžÝû9P ©íŽ>éK@‚Û„ðôllª¢-õEZ¨s“¥+¾å‚½ ¦¡™Q22½!Eƒ³ù=¡) Èù³a6ž{ÿØÙp¤ÖàŽLÅqé÷蚎д¡kMOC?K¤YS¸+4#Äi\‰Ó¼: Ãt\üé #éŠ$KKMæƒ1ºAžøó°r3±‰ÉûXˆù…f´éçU 䪑ªÞ¤ œôbeI;Äiðp!2cŒÕÚTo(æM ãò¢@Àã•“Ê.EÙ“tR,}Ð+‘‚ãÓÒØ å,ÜÄÞÁXX“0ИÒ`¿bÑ iM9Ê$Lmz¤K*nœ¡÷¯k†CPœ ¡ÖÏn{‹«[sŒØÔoöªŽ&-wF"‰´ý7î®Á£GE%ÅWéAÛÄ1ž§@;«G2Aª¾ððRt¢Ék”œÕáOÀ.“1úâ—ë—íM=ލ*GsÜ4§ù+ûˆ÷Q:=c5T‹È„Tøá*¾©f¯ÙøÍÈŒ“–QQ¸ªv}«,k\†É+S¥ÌÝÔ 8utUü Õã³Öh}ž$" l­Œ˜ptͱõSº"yK´ExȧkôÂ#åÜoÔ"§#Pó… Ýz/….€Ç A\Ì-NFÄT®Ii=ï \» &ÆTµØ?‹ÙÅ–F¹¢‰~Ýê¿Ã¯nhK´¸·dMsV¼‘‚ÝïÒCD)ž…‘+0a¯$ëuÿDå2HºõM›ÊÞúöš–ûcŸº¬S?€Û“umô^ cÂ..Ƶ«)ŒèiáÓ¬é~b %Q[”S)ÜÏ0èff\’OºÅ•7 —-Úô\-cKE0öð´OñZÅ8¨;M>}>!úᩪHõöUlûðºSÕôž® /ŒÀˆi¨€Ø(?·–‹†e”Ockµ#—+Œ P-„Çt(‹j×¢(ÀþJPa^ë,Ûð|³†aÌsü÷½k\Ê…ÚZNÞ³BŽÛ•³Ôƒ•ºªÊ¡XýO@Õ :2ÈAêÌ ´ƒ2Áõ‡ÈhXõjGX Œî7ó åš>ÔHß!X *wåÜŸó:,©‰L>Ë%;mØ5WÕpW ¦Õ‘Ø’z°É:~¸!ì㓌éBÃöøËrH]r íÝ©q0aV¡wX"sËw†lµ¹,K;6”ç(=ÕL¢i#•r‡U¡^÷¡KƳšLß@´‰ì@¸ž(Qcö Õ„Z„¾|B¨â¶eɳ„Ä´o«©²í,B9Ô0µFà°Ç;ó dÖB·¥#èÜÙ7…iQ Û»Š+0[ÖJ¡l;èéÊy„èAe2/ Žéü ê–ž3êÓ]Þ°ƒGNÊÆŠâzlÔÖs€øHÊe•bÊy4„DÔŠa*ºY 1ø,ûe—›ËUo]‚sþHCŒãPâ¾3 tOv5•EÉ?é†v¿ì«1[ÖªldhKÞÉ>‹²ì…Ù:•ᜩño?cÆT÷íf`´’¿©NícÎ@Ú(·ïè÷Ý|ÿµY#B˜Në™Áv4Ô=ìUGDl”«Z}^9lgµv—ì=EWÔ…°aAß|ºé›l T¹i•»õ‡”[E oçfg]Äs@p=†*_l¹ÍÁª[~̓¶¬ŒR5èɳ)Êß}œêÁ:Í0£ŒÓ­·ÏŒÁërÔ¸. ™†Ò6h?gBn ÚÕácâ@>N½L÷Ïc°¼´ºÔÑB»y©’L·Ü½€%jqô¬bé_¿dÿâ &¶ÓœSšzbгìSQ´+¼•÷ç¦4Eà'!Ü#ÀcìaJ-®ø2`tœ©„*‰iÊ”mƒûü÷ “ä)¨iCgƒS8 ^ÿ ý9LRàrJ0é;E_2…EÜ!ªeßí Pšç3¾?•u ‚…GðôIF.ßIiâ˜f ž «‰Ý·õ0›—4ãàÏ>‡Jtæ«¥t(o–É–Qc­?!¶Ñ—ÙñâU×v"œd ‘Ë6ÙEg^mî…|Ù'EïÜ1S€§8kÀ§™9Õ(ª†½à‰tÖo׳M›~pñµ#š›£Š-´Zý¢KLêê¨1ºÑ§¿$¡ä-Ä(bìC†7¼×wÙüe¬C¡ šø³êK5} îö‹°á[#F*ÜTÑ’ÌÝ<ì†38 ˜}µT,¿ÐýþÖsm’™ÏLG-DÑÑìÕ¹‡lb…;³aM%'µ³f¹ˆ×Mš¤4Ï1Ë`õN¡C ÅJËoƒ¹!&# a©§=Au1&Ô܇¶]ãJ-+|bÄìëyrOluÊyI}±ƒÒöwÄKš³’„k­AH†ß *ÝÐJ›1C’q¿ìS:¼¦M^î ³…RMý’æîv´¬gŽ]®m>"=”+¹a×}¥vyìœKa{hÞ®nˆ2µœ“³Ùy"ª¾%3!VM‹—IKT~þ`” }X®°e!oŠFùo.¶XÑõ(SØv¨å3BíÐùCÑôµQFŒÉYú™wawŠF׆/!Ò¢Õæ^r-Og ß•T yé ÔY‚nš(zã&áQ&^äÝ~[zÒE¬2˜·ÍaptfXáq8}fˆ)Qn´ô“`&sÐŒU¤j7¸¯ µ pPO-Ž}kóÎ#7ý…9 Æ£¾4á3·^¥vîÈpmÀ (™‘Îñb§jÑ%éA¦ßËÚ–ˆpœ&€„q§™xt'²7Z*­sØÆBóù¢SY=ÓFï)³ŒË§±ó\Uä¡Ãå"zºåäÇA¦î’»{TŽ«#€PUrx´‹¦ÙÆ„Åðå ÍpͬB4àèÁá:Ÿ7¶‰ª…kŽð*‹ñ’{I˜í¼c“E©|C€¬ÁJ³1un4â3â¡ê®:îS!E:ƒæ¸Û`kR¿¸b—9¾á}Å·T+Éà!h1¬?aRÆ4ˆiÑHý〠4,¹A˜ÀliÍ ‹>¨·›éòB2…Q#VLJ%'Q»ñ±éZ¦r¾sŒa$LGt ¦óó¯bpj-6-5Åe,òêI‘ jõƒ {±¦#TFBóþBÐ)ÐgX„5ûRU½…!µÙ :¨€͋¼ GxÑ|ýH­ç #8ïH CTRBVΉ¬pÌý7ºS³ßg_<’…e”¼_öH¦æC¿£˜ªÓŸ"qljùš>þKK\A¦÷Ã*šè#¬¡-K¤Ö]Il‚O^m'š'9]­Ó<’æá?KãHS ±Æžv™¶óÑBñî¢AmÓ…O@“ñYƒ¬hˆÚGLØ=­SRh>£ÿØkJšY0n%¥é‡ÖÆ¡‰X "óËž=O½§ym‚4†ógê‹D;ž@i I±.E“×3\¥f3å}R“½öÓWÏ5Kx¯Èeȇe ÇZwà‡@$s:ŸŒyvJ•ëíBJê»äX.,Ÿ®ð^®ìzŽ1&õ×°P‚£,…~KÆËà¤7Î0Óp¹cÑk§Có¶,2ƒ…­r5sªð cir6,“ÙPšDd¥W«Ð`²ÐpÁ>þXß1T‹s¶Tº©á›ÎÍÄÚšcW5l`/(çFȰ–uØâÉEi¤ª8 ø«ªo²<„)/‹»÷¡$€îÇ(Ïê( (꣡þCâ‚þûÓ?ß..©^i\´A7„1ΔA ·²hb‹ÐihYóoº ê9µ#KxHpÛÆiGM1·À!4ö¶ï”üÍôÕÃ ×æ‚™”Šé ݇!„ëjo‡q¼PjÑTÒ•z:¬†¬¡¦²® â- a‰¿,Ù—!ÕÐUC¶ÒÇ¢k8SqŽÝl—¢l¯%è-×&-ˆ`óØ%½T-·¾S½ôS¸H¬!§ þF0|ýhúצ³JÙ*š®J^ÅÍÛ e¹Ï‚ê7IoÌ9õZôXd‹_•ÝÜæÃšÁL‰z²f]ZZâNÔÂP1ÌdÔÖMÄ)™ Ê®ŠáÖ÷7'T(™ ¾ ¯l´WéÁ@ÚL€‡â‹¸ ¤+~¿g$Ðz×e­CL%-ÌóÐ 7—¡âÆÍ= WŸ¾Îèðð«ç~•»²]` ªHŸÍVrRQ÷´ñÎ N‚ {ã¿Rf׫·)EpJ£×‡ûwHx"Õ«ú^ô±†%z¾©øx ô˶_Ur°(ü .Û%xÅmV¥7ëæèÐK‚ZXYÓ„xN×Ï‘5‰ ‹=øãï4¼ŒyÍ¡æ*c<Wgß©®˜ÀWšƒÃ¦*6ËÐ >!Êl³H;¶o,cGVE^ݵ£FG–.žÚ{„ :›XóÑ­ò8léŠ2¥©Mך€øRø2Î ’ùª$U:MGÇDÑØ+SYÔ¿%ÃJ>TT5eïÖ"qLƒ£(*&W˜ æž>¢?¡LÆŠ w/®aG8e¸Bu°VÒ¿„lã–4ìÒ@RﹺlôO¾eXaÇg%3’‰¥· ¼ÍFæB_Ÿ{ó«èúŽö›ðir è\ú~èÚÙ¼Ô?·«0ÌɾîÙjF›k^nª;sNq ¸<ßñZ…Ë”:¶?ÊZ¯fSê6ÒÅ¥ª».ìkÀ¢'mž†æ­á7<k»ˆü>ˆY)0RëU–õ:ʯªÍyß~ âcYkk#üRó•Á´¾‘?öH„”¬Wµüãéí<?2×Ö 7Ô¤BiÊ ×|tá^^~’•–BºQÇ Ä’~‰‰.àvÀ¸>^NÚJŠ:Vo%Z!Jd¡ò‹Hÿ;E¼ú]'%åß*ƒøõ9³®Ù˜§*ü±¸±µ¿o›rÄøÕÁ|2øqøáâ ƒ<„Z*Íá;©MÛºZÕx×øcüŒ*•6oZ–ŽvDûœÊˆOm…_/¤WÇ ýüý8Ÿ øñ›Ê‡«O:ƒ?ôTL»UÆdy“µ® ÊG‹x$ÝX‘mu%)s{ðÓ@.³oc¦rÚ~Ù€¼mà<¶õèñ×UDÍ1ˆZŠ=ϯ‹ã®¤{€¼Ž°©˜ÅHË·¥!‚,¥<™cÒÀ©Åµm2Îó6n)½BU0Y•KBô+”’«Ý!P‡!›£1Ù<#²Ô>òÏtáP)Já´Aþ®rbeº¶º”Ǩ݂©RþIÿ[­“Ã&òIsSÚÀßÉÞ¨–‘{ÍÉÁ5щ°Bߟð𬠆àš:–㟡¤÷ ù×uz'1ê1P¦HŽ*j½Œ—M7Ê=÷Æ—XOï´Ñ9änA_†õ­GZÝ~pƒ‘oyzç×aɸ½)©ž·R®s? m¢üÝ«€ å¤Cк¥«Zà¸VüAmD#‹ªZ"Œv]1Ýí×ÀUSxÜeD©´¾bf/é¼i.Î<Š«¡Š®4“_³º[Ñ”£Æ§¢ŒQi›)‹ZS“–Õ•WašR+¼çhXIˆ‹å·Ça¦?‘‚Á®,)P „«ÔÊRïûónpJ˦½5)˜Óô(|·òáSë©0 Äð|<ÚM—Ž’ËLq̲‡#®¶æ‚½;ÔéQcéÀÖA颟­¦vXîNúàp–…õÛí÷Q*.È ú0Œþ§Hc»ÁU¨‘8gÜä Ôû\dAyp”æãàÒ¨~¶Šç·Be¿ kkñFí«‚`Ÿó­âøº³å«D v9Å%6Ô)ÀM ¨‹0£ †‘¤Ç üg`½Q Š´ã+•¬ª–Ë@ h*•8ÜcÏ&XC‚A³mQg+tH(8ëág»#H)¯’\ÇþêW``xÕ}9m\)“5w]ÖN<…Ì~Þ­1k•}ºaáÝe6:U*Uj‰6uó7A %©Îð4kжO§H½ ø¡zœ—Lj닜·zØô‡A¬Ã4úÚĈ(tùD´Ú2"Ð ék? h×t3÷ªŽ'zE)‰#‹ðÏŠ «ËÏùÀ#`¤ÛÃÐ-ŒÉ&ô[Ì¢À°Öåê<@^:RqK´;rªázçÕʱ›¨l\s u>¼ òš“ˆ *ßEEÏS¬†kì®çpಠ­YÅÞ"iÃôéÁÌéSáAý¶Ÿ{ÈÏ(–£9ƒ\pM=-៹ h<àä“„DÖÚi©$û× ‡Ý9Ú¬-œt¤U…CGç9,DE4‚¬¥E>µˆ`kHƒ’+wŠòH3ÁKçÑ\A ­w">o™ÉõŒ BkâÞº”=¼§“Ô¨ï hû½ÁŠ€8åø9œ…¶ßǘ_¸¼M³:ÆHÍáÍ­YçŸlÉÀŽ+®/AÛ²¯ŒB¸ ¸-uã\!6Ó‰C‚}Z:±v"5ŽoMËíq.Pd½ék4ªFbMdL´?ÄiMÏãí|,ó”(\…Šþ->­ °Ôw+€ 8UšÄÍzóÈähh&-LÌçYì*Tˆ“”òKµóÝšÀˆr]ËŸ‹Hõúý‰ƒt—‘Ä]¸:ëeЂȷ̕ڽÍÃ%-À40³÷÷Ú>Ê5Ïl^§•0¯  šÀ«_¨ÞcP|ó “ʤ©¿Oࡱj—þš°‡ @ÏJËDo­1âÏ:^Yl%d,´“{é-#Á©µ Å×kˆåÝ’¶K{ãÜ­U>XZú 2¶M”£xJd $5Ìåy#ܨ؇hõkf²10½©»¨˜Ð©ÜžDðëͼÅ3¥T]Ƽ'‰TåX8‚÷q…ÐèWÑÛp’éxâfû#1]{¤·Vâl?£@œÐÎhª¶Üe3.=•‰§I¬)OÎl¡#ÚlT› ƒo¹ÏX›4O+§Ñ;좃£YTÞ ø¥pÁÑzó’3«]€ÀÕØâ¦¢nÂÐiMººX&ÇPEð“0Ùw¢A_ê[J·e¥û‚¹ØûX‰âý 4@`zŽ%ü®CÄBuÕÒÙ-y”Cˆ¢ò@¨²»á‡_*î†9¦ðYVJÓ¨¤¯ÏŽeö·Ýy×qëøG8h›ÐrÉf˵o8rýWcÝlêã¼,]™B€”C[Œ,Å¤ŽŠ`ý]Š.8_OŸ?–ø¢Z›ÙóTâØwTÉÖ¡Ksî€Ô)"FÝô-A†¼þ SG;› K;V0¢éœ´î(·]Ç4¦ê)þž*È1¼9¶hëJë "¦Š£Hƒ€›•ÁÒde^b´Ö²gÂP l•Ð5ùŽ+óårÏöï•¿³æ’W§|'¡Fš0DUË+N¢9^ùVN½…ÉN -”sìzÎ}¬¨~P˲w q’>ýUq«Ž-Cueܧz¥.<¾d=£*-lx¤»¡â÷çóD¸jä§S"r%ô,^ÁŸW©G(FÁàmýªøž~º¤Å÷šLWªm¸[¿÷]JjA^‚uÐ`}€BdY°•®^gï9t[ÙmÙaY¢Y«aK1QŸgð®¹î¾þ0*sfÂ#@òÏ×Á+ óbE gKÚ×}ËCÕ~M3_ĹVÓ],{¹Éœ±Ç0›Z× î‡ó 4¼ˆt«TU±3Âe3Œ¥a<WQT{ai;Sìê‡å;òÚ„é~‘"DB^µ´eòÁž ÎxlpÏl]èÖˆVÌ‘ü¨ÇMê¦!:‘Òz¿Q†Ö ŽÞÈÀK«Ç43@¦Ï„aA­fº+…,9Ž˜•6a´ôsEbm|—e¨œrVt Cæo¿ôÿ³u&¹uA m¹ÿ•$VKÚxõý Cê¡8ÎÓ–¼¬hUb^y:¿É!¡»„ –º/Ï®ÓÌö9¡­È™Ò„N½úámÚ¸}RT<ÛÛ%¤ÖÊbõ_-ö8:Ÿ—² T¡;5‡ã™Üñv8>ëÜÑ \®f‚l/Ã-u7û 2m\“Œ>7*<†j Ÿ­êDðÖ"5íù%ÏX=ׯx;dìч-äu£ß™(¡« ¯š[ >O@<ËôiÛbtæìÙU7dêÄY ,±:Mkû½Þ³¨£ÔÉùBõfÂÊß~1O|…™¸‹B9¼6â%Eåñ±ßÇ”½rª_ÐávªÖÚyW²5׈Ì`3PùjÑè\ §mhˆR“€%Ѷh¤–íúˆ›õ«‘°*Š)üUÈþ°Ùf÷V™ÐLX õ/u†Š“w$»mI¾ã»í)mf>”õÉíoЯhÿOGGãÒÿô:pýO§JvZR¹rC>¼±üøœë$ïç¡›Do´äøË=âzâ}t«Ìg¹Ým+„RrÏPæ[»BÛíu³ûðßà¨Q5nøø>¥|ØŸG×̾º5{0pÖüúõbƒ?Ä”V!Ùç¡ý›‚¸H‘€ÃAæ6;á©Ét•wüûñcB©n—–¡möùNœÒù0ÀòÑO(5Y”Íê°ÂjN/¯8‚èÊ™êe3ðùp<»Ä²Áÿ}îuª2/;qñq&ÃHݦçÜÞ¬eÂ-.-÷ê1ç6Þý«;óµ×J UõÁI®1ô a¦4g×V¢!ÀE3xÛMëpÁÙŠÔ°mÞšÆ+(ì]e‚Óëâ(#ënrE˜Ôü°J±R$t¸”é¶—xÙËÔŽøÍ\(1†LÞa2”iß2ÕsYómƒûÿ?Ò©¯´YwÅá#žž÷+j-¢ÍspR©>ûP<ê`b§6ÜÁ I©àZÝÁk¶!‹êFÒ6&ïý«xžæélD±ª`vÎÒeu:¹„ç_iYÓŸQ]ž1`˜t9ÝÁ49°=gmgÍh7¢jÄ:{¥ó9ÕDo¶½åN3àÄVjŸºt·ãÔߦr—œ Ó¿sou«˜Ø Zþ_ùÖËÔúÎ,ñt+3¦·ÖÛu/0¬Np®M½4)˜™´½]¥°j<0Ý”0f‘9^ÐÿC€·«¿N½Á ¦úÚƒEpǦÇ\$Â*U§Ùo<$¼Ïv/] }ö ŽnÉsèl†Ïj Š€Hò"3Þ5Z‡¶¼û-Ú0’ð¬Z)H@Ž ¸îIiˆª¡j>,´“îãsGˆÿ`wJE¯ÓÛ¸cIEND®B`‚gruff-0.3.7/assets/city_scene/background/2000.png0000644000004100000410000007312712055510742021532 0ustar www-datawww-data‰PNG  IHDRôdÿ¥U*gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<uéIDATxÚ„}Y¶$I®á'W¢­Kû_”áF Eu«Õ¯êæÍÌh0àÿþŸÿWßÿ° ÿß¿ÿûþ ù÷üûÏŸŸþûàü¿ýûﯜàû“÷ßþ}øïo~>îûŸOüüÿ¿ÿ„Ï/óüò÷ÿþÚû9ïÏk¾°¾vþÿ÷«¾ûþÂû/¹È:ú~;ú–¿?쿈÷·ß?Ãûo¨’›87òïßßù\ù{/Ÿ˜Oþ>®Oäó ßgðþÅÏ ¿/ ¯þ<ˆóðÞKø>ï÷ûþ}(Þ§|.’úåçýû%{kõ¹ï3ǹ¶ú÷wß'¯—ÿþÓç/ÕûköšÞÇÄ÷a|oýlßø^ÎGÍõÁ¾í]3À¼ÎêÇ~xÍë|oñ½¤Ï¢ãyÂ×T~kýB1·VÅ÷YÙÊ>_ä½¼káüÉû`ÏŸ/íÍõþ°¾Ù˦Wæûµ(_s8ÛR¶Cõ…ñ}ÅúâåAÙÖeQÎÿ@>¸_Ž~¬n}]g›Á·R¯Åyê~I”hsþž•þ½ÞyŒïS±-?oõ„ªê•Ä‚.hÿϹîï­zzïc®T¢P¯O¿3mõ·w_=ý»ß×ûY¡Ô©dÞEoŸÙAçA|.žú0ùœMÃóX%*~ùß-àßîzC}?ñ»i>Ÿ„Ù~àùÛïïžÂû;x_ê÷”8'ÇYÊïgzÞ¿þ}Pçwô9þ‹^Eì+­³ ð‰ÐÝ å<ßö@³\ÎeŸ‡Äó혧÷{ñýp ´q–uUõ_ü>H””KÿsÞç9ÀsÇýoã÷þÎ*9‡gKt(ù.Âþ Ÿiß?k6ÿ{[ïÓ˜íÌyÚßKdÿõóÐ8+¥$n¾±ƒ”°F|¯õ<7=„'âÉï;þ|-Î'ôššçª{ý«ôÄáe}Îk´5!«B"÷¿mqbĉà9ùz¥}ß&Þ`öî}Ôl_ô«šGrnz–>õ$—ý0!³î$x~fò}~ï÷½ÛsİC6 kT/ºF1η—¤€rªÂ¿jTYéeÏÿ³Ùë^’5ð„ªï "â­¿KS×öüùw냽0fÛ°"$OÕÌã}|œä» f+k®#q'ï|WŠlèþ.yÜ%É@ŸMˆžoÿûž¾fËÖÎËš°ZöJûYw „]Ï]çÑž}OÌMý K ä]u˜Àìb¾èýûOÉ6x7:5}€œgÕNLÛôß"⥔%Q™²#èÙ@Mj4iâ@Èÿ oÄÉ á¿¬áFªŒZÉ÷{tŸ«(yÎoL²l–[@Oy}àœMë@.=@æÐùãüŽ\ö÷õâĉ“Cé‘=9‡@Ù§?ZËx¥Z,ðGVy”"nÂk§Ðû>[ç`£o͉ô¶%•Rà½ÄR‘à)xB{XlB†¶NM)%ÃlLœ[ëóIOÙØÅˆ ¾CÁwàœÙsYkmÈ1z¦ˆ>dzÛúUR“ù•åéÚæù¨Y°Uó>FÂJyfkM‚sþ;0ô.ia¶úà ÏêZ‰Ÿ¬æû¨uÅϳû÷³~(¢:ï͂”nÕ¿|}A^³þIÞ4Í•6 ì\¯Yár©EЙ˜=7Y?%àòJj¬¿Â“DZ©ü¾œùŸóR¦Iƒ^¶23²Ãw$âÑŠz} äzFuMÍë¤úv‚NÙðygèwLÍ?­ž.WÅŽêbX%åÚ$Yo yŽ[è~±Wß™nß”z{!aQƒ¦ìUhû/‚ÕFñã …èMQyBèBÒ"sV¹˹¢ÎÄûñ@÷¡$¸ïIÁ“C¼áfr“o±€ h”ARb÷xúî»:—¾×ÞÀÔ2†ÝM™Ezæôys:=k5¤q$H>ÀÁ©AuüƒÙ ˜ßÑïŠ <c½Ì[…ãf--l0K¹ §~Y(ÎÖè¹g÷EkHÃA=^8ôAyÛŒdÚâJ·9УéÎ$™ÚW¢Ë›vo–Ò^¯ 8pV6Ö…/©h°-çwåÚäg|ç¢m9l4Œ¾¬}“½“0žù*çÒØNmªr@v‡A¯í¼›$@®m'‘TLµ|eϳâÈú™ÂQ³ãúÅÁOó•½9•Ũ"dÝϼçû8ìã›5mél”3Õ œ„E ï3¢¬pf~ËŠ³ì¤šãލz®ÐSá~Ö9º‡¼D=øÉºô‹1dÊ­÷<'ûŒ8~Hu+d†Jl䛉D6çÄr¬—9°ÍaÑ;Ðr)o’Ãi¨[ë]§Gï>èã\ð*ù¾,¢Ã"hLLç`O>¨ÍžÃýû°?Ž27T=ttl¾:£cúË } t8ÿ:D·A‹5(1úÒe5WˆÕ!}ðƒ\Ñ yѤAáóõX ½¿Þ <‰NNK¿°!h(R„YîT<ßý9n‰UlŽ/)¬` ÂÒ“[ xŽn®žìÙ—6ìEäéÞcž~ìX0Ä/§#ˈiN‚«e"ÒBÐÀ_Gÿy°N»™Y>úžû‘MK:æ—¾øoÔê†Á¥Dp&6C?÷YµBû¢Æ#hÀ( ÎÁRƒä’WˆH¢; ¨MØL¼"‡ðkeÃòÞJ¢"¡ügG^Ã)û“9Rav@0c<ŠÙ¥z†leÖÛëx“¨çÖÀBBm—À'¨¯Øj²¦ÿVúE·ˆ2Ž™:VŽQ;mKuù†fœ#Oúñþ^ä×3'WE¶¿|öÿ†‚’Mßë °uø¤m¼œ´]­5@îð>`¼’“°OÛeL©_þ¸tgë SŒû®Sò(Âf‚CòÉŒþ¨_&#ÌÁf©È}Ž8 Ö‹‰Q|ܲ g¶(žiY/Ñ¡æKn…2gÙ}›’€¢œKkj M»‚§%k°Ëø­FH›Bs’8ðHäEÌêØ«×z6/xþyÁ°ùßäà,46(~¢ÉÃÆùê¡¥¬g§@Å80Tm…ïW4)äí‡&Wa2Ú{Ý„€Y®¨‹˜–±—³´Í|Êad£P"…4(ýFhªç$ ÿþÂm«uPM°sôÁû`a¨° o ÿ¼¤%£!*eŸû‡ö?°'ši]»`y¶ Ùñu0`äEâ@>·é±1k±&‰¢c¬çbj\²‘œâ¨ô…Ø­0bú"È·YL8‹Ziš9 ?§e,{ÔÚ®‚W·¬ ä¾—€xÌ8„OË 7$és`Å0!€!ÔwƒÊ Ckƒf‰€£IALRfù"ð£j5÷¹›A9u˜ÌÈÐ ÌcxŸ%ÂqÌÙ›Pðf2&!…å/zègH#™D&ç”̆Wñ`•ë¼+  /&|Î2͵ˆìvÞ|gÜöfT:6¤œR“©(›)¾àX×óLñä}1áçÀ‘ÍÀ˜žè«›p2÷#@@áWA::*9¯ ãפJVóïÑ£W.ãÙ{ª˜¤ŸC œT¦É(‰`’% ‚–­¹„™ÒGÃÕä3ju@Ò  ÖŸµ®ƒæ~|<‘Zß,uœÌÚhíEËoXEÐB3¸À½F°BwE“âMÕæ}ë‘ÐÛ™räèÉDÇÚöüuÔd4ö½Hµ0êHFQïðTi‚ã›iÙ£·?i®|Ãs“)Ò0(­¥›w¸—¼ 6¾½_%ŠÉJøˆ£?¥Œ4ÊAƒ£fÒù78ï"`B5gOÓ‘¡3 ?HžÃˆê!ƒ ÙX$T¦³:E@\ìòV%JT\Z‹JÖ!O}Ôqià)2æHæ-Äе£Ò¦¤õÔôÔxAù€sØ/«ú zµ›É·Ã~ª‡Ó'’‰üÃŒ¶bûÓ6¶²&äÎñ*úPç±CKGÄZ4î'†!ÌÙîÔnðl†G…~D¡åͨ µuÐ]`CϨ2÷"‰d¶¬§§¡É‹’{ ‡¤òõU±òüdm  \ª>Ié4RO&y,—>óñ?D-¨¼9w*q«žhx,!.Ïdà=±03ÝJoMyç[ˆŸäó†תé­%{„©±- ê‘7y©3i4y²(³ °Ÿ>ŽA«2²÷Gà×Ï}õtF7[WëaÒ–X,äoßð)f—’¢T(­åßsy²sIƒZ=@T.ÒO"§,›¼í%rCqu'z€"6cb%‘GKTôø2–M9_G …*Ð8B–,Éš$R0P¤ÈœIó ßa¥êè#|'‘”Gæ9(u~aœY‡8B€¶>¿ï¦Ï`À‘W2ö9Љ à'’DV yŒ~ Wyôû ~w¬u_ìɲtÛû;ö¤d…èÊ)©OÇRq%0¢÷ÉDË¿´}YØüI22…xa(ëv$”6ÐrhÎfûÚɻܦ®EO9#qtáú†BÚdGÌk€œÓ†¹C˜UïÆçÈÖ0)$ÝP„½ )ì úò”ÊßÜH?B~ù­˜£ªåÃÏX7ñ$Ôƒ›>ypã›D–'ú“m‹Œ*ûT*_ÚLr¡èû¿‹ÄnëÏ9Ä’G6 6øz×ÕrõS`\ ‚ ݉™€âà 7£IfB€®ñ+.O!mÕ>> ¸R$ã&R7Ø|êA‘ ­AÅT÷æ>@6à £3ÍNàxÑ#/RKœiÔ DŠeÒ×Ýø:ÍÓÓÆðâ]„ƒÍèý(,¬Mð㬦#ÜèÁùJCT ÌCµTÞ¢5T {J‘/—²”£ùí¢ DbÄõ!ÍaaáCDE'P!Ÿd³Ë­!Ó9Óõ>(ÈÙñT¡-J£ h{—Jà7–@:UãõFp2¾ª±uäžÖvçD„C±¬JßU ù 7/+÷Ñ$€Ë9ÉNð¡FJ Ü ß™f ÛèÅBʧâ>(Ízž883z9ãtUzîÆ*“ÌšzÈÉyó~¾úøl:=R-1µ,éu± ¥fBQzz¦€> c0\™Šž‡iúM¢õ? ]ˆ£I2m¨ƒŽ8Kç.o·sfyPCÊušÛg'F~Ԕɕ„u@™‚¦•¸d¬s’ÉR8À«”MlŽ+Ä©š óÓåRt‡+l 6þ˜¤õ Å‘R0†`Ȇ7eZvGO¾§{ï .l:v”ôƒ>äKHÓOÏÁ’7Ú€µ’“~.ÞÌmüƒ‹ÒwfýÀ§›˜Koç†É£ó3ðsï¾c«ž"…vï³Ú[À\D«,D*:b%àºO¾/¿÷ûÈë~tìqFœº%à!ꢆ™ ®ŸÖpN ÔžO¶ÙÃÐÊ®qÊTÌ\"9 x=c¨¥¦Žúö7P7 £M†7Ç+mÆžš4«çI$ òiVÆÌµƒª‡7PB| ,ýXH…ãu¶%‰t¨äBñà€È7NJi‡¤ø!Mþ8I´²Ü Ã.xö&¦†V‹4åD0°7Pœ>è…›ÂbQ£Jø˜RÚ¡`M¯*Ü<Ž´,ýpÕD†HÙ·ñL±™‡!¬Á•¦&åÊš[™Í×ÞŒ¯ùCto[ÓAQ`ƒ ¦ŠæÅò|1qØy2cÆFX+o²€) !SG›†âjËaAi92 Q =dèEyŸ|‹†F-ÿ:íMÌ(w0&µô•0Óda œÉ Rc+¤ç~žúcC¨ÂôEÆe€F„Ž€à%C«™¬ÃKçƒc…_I>9?inþk5Ñ󱔸à°O L˜!¥uÚô”¦‚Ϋ›ÄåŠ/¢F0Å\U„ò´ EÛø™2‚‰i98° Z´Šï(Izìú ‡/'­¤Q{Ámu”臫RéLî3¹†”¡2÷i¶Ë–¥ãìzc»™Ƙ•€)mU;¬¾[‡ &—&©%4ø¾V„‘'†šôAÐ †mûJ %lý*_kqfA½¶»yJÍL«9EöÖ‰Äa7-Ŷé°ùFôF¾3§2TŠ+ÿƒIÒ‘(D(hŽ“ Qe^Ç'8 ¨Ô ’ÂlWÃ5.O±™E_•8Ht“'¬4¢¡§õ™ƒe|?"³rN>8ÇK)èâÓs7¡lìƒF€x¼à7ô»*')†â¸T­××cÍQµÉÑOÍÒæâTRô¯?° bg \¢'•t¡ÙÚzyT©€n¾ ‰rõr EZÇ\•²—Ši†|³ÞGXëzXÏQÄ™e6‹å#^Ôùàˆh³û^Än¯ÍýHM¬,(é™þÊ ¦¦~“Ç[ó3¹r+®M˜ô|‹ö˜ºÄòvÀa’›ÃÅ^­H¥ìˆâÑßÈCÁ©ð†Ó‘†6}>ó˜çy÷uÈÚf+æ 8ŽÕ5Lw,YèAøtµ´ä“€kf>þs9³RÿìÁ%K¶\Kñ)¨º6•V¹ñm6íTo®l•þ g0ï¤Á›,Ô2Ђ$s¾R»-ÚœŽiܨÆZëÆC¢xUN2$êÁ´RÜ0l7kYLèó”T1çÃX†W9NTi-•Rº[rŽ5,÷âHçm\ÔTŒÅ´nâð•A&g¢‡ë¤w³ÂK b.^~Ì#ÙÇ7Õò®Ðƒ*¶Vjfa$r7fÚêIÓé*?¨ÐR4šü­=´•Ñ3ÿÈfðF9oXe8ÓØ‚·ot5J•¦F@“»§>ä«5ða–'Ðßl3j×5¾ì2Sw_h Ñ`Rܾ1U‚©vœ #Ä¢ÖÓmã+bip|ÿéO]GÌ8‚MhËé“àèn^R™ƒöÌŸ©%‚¹å‡åâÛ zHk.±ö+­s¹ôù8N=n2“&ÖðÇ0)iJ™´7¶éÖƒ&Óà„*¸ýÒ°).ì¨ï·ü€¼\˜l˜•´R¡icìù'±ž‰( fŦ ×§ãç·d?*v÷ò’rFÌ×ÆËŠlthÔ©‘†¹î¨â·æxãhÃx{¸Ìå2íJàÐÏ©&×T“6Kü/KÕGÃ݇']–Üîâ¿‘v˸[’]rW>­H è6jxAk˺n­–´ÂlÐÁ\6)7éÖ«Ãnßoó½°ç2G ˆÇ2 êlæâ@ëVÅ¡ µTޱÖÇ6„F0²3hWˆRßkø°ë>J5s“À@˜Xm2““û–ìÿ NÖô¸xÁÏ (ÏL8÷º9šgÔSú”©²b—ƒ éóEGÀßé¦õÃz«< 1ôߎZXNO69Tt.`¸-(*˜öx®VÐÀ^Q'_Z¢Ùæ3Häú”AHíùfê»I²2¿¯YÕÃE~P"c ·u9*Žª®lë¦.•.n5æ– á×|1Yk§µ4p³E·qš Âdns5mZöÃÙÚWeŠõ¢ž~l»4”8KKd?ÿ}>a‚3gUŠ˜Ú/†m÷›Ã©Ø›ˆ-{¤¡5ƪfÖh⨃g<3‚ŠÛú@ÅàÃUëͱíèÈt`݃wJ¯…•·©Ñ0ʤqfœ'# Â:}´CäÃ…YQ"-5jyÓ©.Ð@£u ·)^Š{’æŠÖO“þ”Ð;†v„AØB5¹Á45…ÚÀÀ®t)Zãeè´ ;´F=›A+“!EÞãQ èQe™ØB?S0=¡@P¥b8[ ¤¡¨bÞÀ‹/×Mƒw‰,FT…Ô £«^P)ÏÆP(#h²"¬lÓÕeêGw„¡áñn‡À’lÁü=ÎÞ‹ÝGÃu»99ý2s :U§ ¿ *†[f("ëðïüWdײx1¬µŸƒ )JÕ­Åÿ`­ÞãO¿¶Ó©=¼Š~ØTõŒ¡ýx'†NœÙËtÌrÏeá‡6:Ø€žþ C)ê±!mØ—Ž×•ûá)ÐfpÜ­Ñᘽ;Œ³yU|yŠÞd…BA†Tºúšïå!ÐnTL‘FeKÄ#™ÄèCÐ<’8´ÖÂËq86¿ͯ~X+þ»•fúlKÞ—Š’´‰²>8­ë¡|‰˜—0Ì=­‘º®Üdf¶u@Ù–HK+ Ûî´YNŠ¢‘>š ˜žÆôÌ€ƒ ù7N•R6Ô?)ºëÔ$Ò\¥w{Õ›B)j]šªS.FbR!¸õXÂ4ß…ãíl«-áâ‹ÛšBqTµ[+ôˆ£éF._ÆÓR©¼-ÄŒÌwKv:9dã $‡|„1 ÈMx*× Éqw3P;¥ÀéËÈ*ä>¾×ñç8S Vš(‘õr…Wy„SaR¾fÉéÂн4“¬¡‡F×2§b =çò†Öc‘¡}RK¿žB•A7ŠY1W6ò[´Ôx——&·ÑÒuUê=­Ã#q‡9r“„éòÕXŒ!ª°#ªë¥)‹ ÂH|{?B•UÖwóÚÝMÌHA‰œ±Ã1—?ãDaDØ©¤µ¶š¤FWˆ5B¯~|ÙüDÊ.aK[·åId7ÞÛYžÑê¹4©‡g)ƒüctD×èmYU¶~á ¨Á3ØhnX´Ú;†s6†xùÍ‹i^×ͦ“Áâ¬+²öð@0 ¨Ð™žÉÿlÃ'å;A>—¡~ê/ó%4NzºrRá S2”æ@¯dbi·³ÆÑr:6Ë&0‹ÕÚnß=Âßm×q`ʪ ²Ü8zóH2Cz‹+±9E*]=˜|Ð2X³œ2Ug(²%*äµzËÁèôÒ|t©§csÔR>ºôÔþì0Õ1aJè•ùÍõØ*€E>ä²[náÍtB”œ" ¡¡Ÿ#[¬¼ wº;2éÐOÁGÒ’9q3ͺ¬BC@²…T;ŸãXáØÞtªQÑs˜|~™f!"'ñèÂȥ峩þððªUi“Fd­vLâ@f’JIr] çM‘ O/ïFå F#ŸJe5þ½BÀýÛ˜>.ᢠ*í1ëÊÆûzŸ®ŸIæwLBSDö®?–ÿdöf/jVË* uXJ´)'s8£BˆHÃï5ìi7‚òj(¢Â¨‹5/Ì/#ÆJØÂd—JmÍ+.\”¾ËAHv6 ù:ÒŽÓ—j ü‘Ó~ͯŠn³Sœ„OS6Æ n‰“ ǽ&_bgÐsãÜ%½¬®ÏSÈ\­cn¦}ª¹>"£A9Öa¦ÒÖi­ŠÒü‰¼–æÃr¯sÞšv¾ FB»¿¤X=U3ÆÉLõáN–Sv¿·9N)=9 ®þÌSCi2ô…Û§ qqVU7Çr»¿X³òJ5ŒÍe‡Îõ°§aå„InDÄc<0Ãß40QÕÔ¶É™¤«Ã,rQaF¨VL7;bÃ/┓a)& 7µhÅÐÔùßûå™®wïP ˜¢[Óã¤$cK ¦SÂ¬š®†´[F3À8(ãI„~+B](ÚFsWq$õkѶëDòÃðYQØ_è{¦@AùX{¼¤¿ghÊkµú7É{8¨¦›q@Ü&4Ó¸xàm$8–3å» øØ qö/7zÂÆÇ®©M! ˆBŒ¶eÌ ÉÔ Ë´¨Ë@’ÉQEÁ' Sô+å`kbI)øìÂSóé…áPÄ&kµ*ÒfÕ|p <`Š’uQˆ½A$‘Ó“réQm3c ÈHÇê&Ysâ+/f`ë-) 3Âd¼ãÂK¶s~ov7׊)¦ñÒ¤Ôà2 aa­µ2µ)}Y"¿ O6|Š©±YB+LÜ46ŒæiøÛY~K*H`®æ··÷‹ ‹ûg·Í«ûLº¬p‰k·H«2•Ý÷"äm©„U†EëQh]m¶}^>s!áèëv5rj‰Ïa)¶@§`poû±Bçi9b ¬q¼+àºÚ¼)œds2ã2×?çWhÖ™ï5j_Çe#«h~!b^©©MäÃÖœü!˜u m)ì¥Ý5ÖV?Î ?a5®œg„¨é½’2'mÁVˆÈÀ ”±Šº S¿.R“k_O³úIí09&ïR‚ü±0\Ú¡â+n=X“ækp%éûMá&ò2CdHÖ•u{Ü–F­4u›u ÆeÒV·c$0MˆÔ@ì€çaÈ÷rÑ^Q øµ—¯:\×ÑþJ’Œ[1»ÔR4üΩ‹«8[&*Ö¯ô‘‹Ð˜º¸‘<îWÎ%‡i¥gŒ°Q¿kǧIõÜ‹ÔL´ËïëÞXxÚŸÝŸ3¸7® ~‘´o9–®‹mÛ öcŽªªæ[IÑÖ‘ç/¾ˆþñ+†,4¦¥µP)Ÿf‡¥ªгO ‚ø„_¶Å$ˆ¼¬>\Ȇ‚hP0þ9ÈqDþ‰È?± ;‡À%w^ÚEΰ“û¥Á vë- fæ‹èž kìÖ«OìÕ|ÖôsYu^Þu!¤ÖE¤Óá`5®Ì2$f2Z]ŸÝUqóf ÙØ¨ a?®Û)®õ%ª<¦eª¤¤¹Œq)PÜÂ8I[FR…Ì”I4(T‘Û~²®<á ®·x©~BùªGÉ^ò*X( “ t+—Ih —˜^¿ÀµP{‚õUSä°¦=tP ‰[î•-æfo+}•„¦°éM_Ë\»B‘ɉâ7UEYTØÅy+ĬÙE¥ ûµH³ ñØ7ø\êIcû»€«,–û熟Âźã¦÷ë=db¤ š$¨ =”¹2÷iùz¢˜ƒ}Þ§ÐÞ]VPµæJgÊ£èæ¬öP”Î#Z 7IÏíÉ2]E‹§Ë î9òÔüXÉþ],”%…ésIâGë WiV @¸é_êl&³V¤Õj0=š¾·„(ÑÆ&nð[V˜(ýó‰O{BŸá‰ñÊOÃè©ݹqbq,êcZíoÎèZ*sj‹Š©š(ˆ½Wa º}¼Ï‹•Áœž^cUh Sò3„·ÃžÆæÕE7ëŽÒ߭ϰ»&ÍâÁÑø±à¿±Í¥ËF™¬$#$ñf)]¯‹œ¦3Ì«&x¤Yèqg.¥«z°Ò[ajãAæô™½ÓóÑw1Ü ~lý0â=Vuér‹p ¶Ø_L»Ì¸©¼7¶áœhdÎ<ŒIrF=”Í,C@Pd—E†¢´=Ku+Þ5æpl#éîbï 0Ò¢¾®>VˆppbLÖÐl»N²*¦»77äñPL å]ø<Ò€#ß94 .ìáÌ‚éX7EH‚®-ÙàHæ Ýµé °4jÁÙ;Ñ{™”î(Á€KvL±N%Pè\Kd(ÇGH…ÓGt—-v}u¦ãœe0RŽÞÖ‘1·‘®Ú—CôT[Øgæ‘S·wkEÔU š!~~"(8Ñg†õ£Xó%D÷·$‹(mR úÝž{ì'pÄþ]Ÿ}×Öýew°Ïwü™\_‰ qAí‘ÓÆ€DL‹¬pÃ5ß #aí …ÇÒ e*í hä)Ú2ÃÐ8•ɦºU­R¶QZ®uÁ`@©£^9G”ˆˆ«•”ˆµq¼g+1˜³Ü Ô&¯ 3bûs8,bës;a¸¤pFæ{üü¨’»‡nGí$Š÷º Òa¨0ß$C*S R^ÚUKxº^¬mÝÌåt´1†˜fÆB@{ê¤ÐTÎYv+§ÐžpÅr5(¤y¬n[¤‡*z„¦õ”¯ƒ~ZûOä>š =©§BHH*!Êô¢²™ÜØjÒÖžj‹Ð åÞàü4¯F-X>p;‚¥ì¸8ê‹t·EÊK1¤Ê ­¬õ:Ãta£ìÇêätþ’èÚÇ#.‘¨Ö,ðHt‘O—›¥›9IL¡fO¹ã`t6ž`Aù CM FhËúŒ`p™.¨ASÐd_Ésžuº‰ú¤#Ó+t ë Aé eˆ:û©+î0¹+ D¨;zê=“öÒ /LÁº:¹)Ò¦VL³BŸ.Ê=ÐÛV€ ^‰oÚï+ óÔçKÌ ¥Kó/™ V™ÒµŠ} rˈ "f¸èPïßÔŲ!ƒ:ÇH±ae Íy›W"1îaäªRÑHa 4"з>QM¶’‰É»æ•ZÑ[a»¼l–ú_6")¾„â+¢ºä‚¹ÆevÌEp·ºgØy¡ÿæ€(`uy:Kfˆ‡Kë )èQáSÓÝXyXª¬ù ]ðc»9@Å—ãPqó#¸¼‰N„viàmSŽ™¨õ§ÔD¹¶£Ó‘'°)U uc¼.ÒÇèÓf$Ó‡:Í’l«t-¿®çý‹£<ð–.EÙ5‚‡ ­¨£±§Uqƒb?,ÚdP÷ùØ6}°ÕÒ[hiHÉÖÏo2·Î#9h3zvNñ#›LÍ'Å!U4Õu¨<ÌRyÛîæCÔ’HI”Ä‚3éÔÑ0mtFM½Øf&Òf2±è&•¤Ö!û¿6o–u~pÍo{ÝBù£ÜNœ!GÙa˜- ¡~0©ö*Âã£9?’í‚óvž¶FÞÛVµºKKšW<1#ÇRúÁ¸^ú¢ ˆÖìTËZ1) Ÿ)òªÞÛ滛•MÏ€[—¤~ÒÖ'ñ×m´ÂS%Qtà ÓÚ£Ð~”À!¹7t­‰#ž™A0ƒã5h¶‹g§FSQgLY²…iÁh‰àP®h“à¿?ù³H˜ ã«ùv’z1Ž€œ[JÇäOà®ôìÇÈß¶Ç«µ1ϰ¯p˜@`ϧ]v×’¯«hÈÑœâšJQÔ/ ¡5z‚æ~޶9¢Ê«†Ei íÈAU0ä /¦ñ)Ê$!^¡2_.ô ÛAäA¹7§*EC.JËyÑÁ!pƒÎYŠJO…h4o?¹:Pۢ͡MÁŒb¦¡ú†Žn0@¨é6ö6«mc9ˆŠ‘è…Ðz\ÃøiœKÊ‚€Ø«RÜkA…zNzÖu·_ô4á’H@=ÏXI¡ Ðó@Á_›q"Ö]UORqÂÚ•æô Sz¡;|Ú·}%!}¿gó© 2üë2T‰£ërú­‘<ÍR0A=Çk@¢ !úò!2ûL;(ÏQÏÔ¿øOÏ‚-BŒU¶¤ÍˆÞañÛ!)™Uªã(ÒëV[¹îÔ‰@&^ ¯ò¨„QÉ <ô²B*Æ?°Ž¯s!(*JÝD`ù-¸ØÔüè‚ë7Y`ø¸ŸÐq~<£Ljm˜që ¿"š†Ì›îYÐÆßú“-ÅAC·-<ÈŸbãvMÕÎ&W@câ—Ÿ,ù‰Úø9*Ô¸ _ .V½þž¸$mq)0&št㢮¤óÕë ª·¿r#Œ  :­ÓlIDÞË,ðΛñœŒ³f¬LZ™.:”H{AMË xÅÇ#&“{û³ï®™ú.ß×­þ>2Ü%qñà)ÁR´Ýà9<¢¸UvÊ]y'ÎèÍ&‹‚œ¥‚<é¤ìn €fª}ÕT™ÅèªÎ¹7Îg(¡¤Ö’µÒÅæœ¾_äââwõfz{-HW*ÏUÎD,uEì÷LTXný®H.öƒt°¤øÕdYø‡[Š“Ñ¸”ÍÌ&ÐY³±°‹Zà쬛EâÐIF#jÖc:y: hÈúZO™PµrÆ61ÓD6”L H?…Y'áüΣì.—ÉyÜÙàhŠ—*:ÀŒ¯/Ðeן1ÒÊædšýÈ• 'œr8†/žÕaŒ ¼c_È0ªŸÈGȈĴbˆíÖ@رeË8øóé`Ü(»î±‡Vì9Œì‰_Ò[ /åàSÉÇ‘«¾“ZCY«œ£}ÁÕBúïX™âbÖ ¹q"–ûèd°­PBSÏSªü o 2õaz®LMƒ4@ Ãä$ìýÊžäŸcÙ,ázui·U@…‘Âe†»D]´èàæPfésE³Xú.˜‡µÙ¾7J³~¥ÛÔÕ`«@x$7Wýö]É»(>¸rG]]ýå'XÜXŒàrÄ–äX¡‰+AÍÁxH²’yQÓ躡#^†%fS!¼ÀM&CU¶m'×™š ZÆ…›^¸²Æ£( Ð!&ƒð2fÉÂU&_¢]Ò®á} >l3:±Èù߆Ζ™Ïn̺Ì&zNªa£Êâ–ê²E°+ìO/ªË´° ÔUÄÕ\ONw¿ðTG§i0–¶ÆÚñ)Ì…©_™4{󟀪µÀø…ÉÔµrÞ¼vÄl­N…¦™)UÃÍžŒ\$5 ÂYŠ-Ï”QC>1hå<ª›F½Â§Ñƒ´“iˆ†°5œI› Z(S3š)aë'¤K" Z«Ð.§¨®õ¼há%¤âêDù€=À3IÅ ¹§eǵ÷ÿ(Q¯t¤°_R]‚‹ú1Ý)š2HyÊåÖBfª†޾\¥')(Ôm7êM„dZ#šöV”‚nÆÛ švo•EA§7+5Qçà‚Ñ4·ú˜¹õŒ«Â€«vsH›&ŠAqÒJ(ä#t”JœË!á¯Ø×ñH Ê_€ÿé\#õ´¶p¦Eõuè%èLô’ÙŽD™S²bßôe%nl` ‹/P'º€É8kîiD̪ØŒb_ÛxôWÃf Dˆ8n&¶6=_ñ¶F-þ¡W>-…~LµE2‚{µk’Kzxv)•œ¿VŒ¡.W{a ®y+:DòZÎÌX >=H ¾f$Ñ÷þ#üÊøâ8®]>o'€†éÛŸ%óßd9õx-Spj£^}îÓN‚‡¶ÔÕ°X.vU*z´À­^ž}ø.2|³r ?IäciñåbÇÙ8+=ͬ¡Þ˜—W¯m ¬:HN¶¦Õ\Ò¿¦ 8é¡38°"m“.[á!†ÓÒºZ\–â¼Í?#À›Ã´þÉÞ̦­Qåí ~L|$77 Ô–ýPè2Rž± ¶™ûot™ j§5Èhrç#^Rh:¸úNòQkc}³‰ç\ÌUºfð"¶¨–üËkÙ8¬—@Õ—ªÃ¯Ïà-ýä6]¿ G#G‚0iš=¦¸ê¨ËT0ŠAÆ Š”äM]ÄP¸ UbJêV­Ig“Bk›Ñi®·5 F:2¡´ï©ƒ¶!1põì¥¨Š„qèž}ÈþxF›§ä0 LáE«‡õÀ="¾P‡1k‰D'Qƒ Ëg2Úqc¶L’Q†t O†ü‰8a¢]Û¨^_dÁÄÜ‹*sP[ö9t{L@êßC{aÑli!¤¬™Óœ`Цçûé@2GJôƒ•ÁÔ«1VŠƒÈ?T#X»gH¥°q*ï7Î!f†P¡ø~9 •û½öœö%×mź,zy ÅH9f2,=I÷Î|¤¢R1þƒ–Z"$HQsÃäõ4pºADx'it¥yCk9 ,ªñ”Þ±€Q ŒG{ÕßGm°Öj}Ù}€s‚Ç‹ ;ƒBä>P·AûEHͶV‹¿ÜóêËPU-”œÅFH7à€ýüèfy„TjˆÙyó0D¢Ò6i ^GðÕ´¼8ûèæ¢„Ðq 5¦™#«²W¬²”ˆQ Œó„obRci×…EˆE©U¢. ZÖcÓB²A±PiAµ,ú"—çTû*PäÐ:/±z—ƒI9"f×P‰5ÈŽÞ©…LïÐ@p=2_>È %ÚtƒŠŸÉÛÐÈ«RI™È‡qj‚ƒ¤Â,V I/¾8zNžüIÒ#îïµ=±ÜXàóÌÎZfÂÈ »‚†xi5!ÓyPÉž”ª hÿ% Š„­e)h(7CªŽYåQqYíȳ<ܒÍöàLÄ‘h'àôÌÞKä¼»óo\EYpù´Uß´›h¢]ïpGëèÎ(S?c9c<çÖ`jUúPÛ—£9%jÊêøíÓДµšÊ Ï¢ š Ú·Äˆ¥eŽ+ž^¿d|‡nÊ1öPÙ«öûP6;ÊX|ß>±fÏ}¨/ÅŠ1ŠF„tÝ¡˜$ºˆª°â=ˤú‡é,;C=ÞiÐÚS.‡D!©ËßF,/xØFR“ä"ŬUZÕ<[ˆ:¦LuÞ©iš:îo…¼á=û³}ñænZ'šk.±²:Ъ!畯ç (‘à=>iÄô[™28¬«fÛHíòfÒ/áOÎ[¤3aý•HkíPWj»ˆ5*å¨÷ bOJÊaËr¡¥ïV€s‹ ˜áE9«5* ¥|åÀ”ª¤eñöq³ç» µñTØ'Áóhc{$hUc¸ZLv 1‡îo$ïÍv¦ð-[r˜jÀ=®dÍðR̰n>Åã[í#P9ðj!£¶WóölÜ çb’Ñk†KO+߉Ě)N.̱ó‰aÊ0 MЇJㄘ\n½BÚaî&_NÝÐÞ•Í]¦Yw*íP½…ÙöÝaRc3 –žå· Ë™±ýŽT– ,¦Ü zƒ ^ðH†©ŠÚÙTÍše90=`ëFã²"ôñõS•s€%L[¸P¸z®LÒÿ& g˜*÷Rá(íÎ5ßìæ îrhÍ#ÜfMNX?íPLõ쬕åœ%iSš†—C¹—– xNq¸î•åR9ÏôÚÖ¦t@s{CÖ¨Jaù)•t×Ý¡«1Ú~&œ4’—Q —µRuä\ÀŸ1B§hª4X>DçFU5—vZ²tïäIÜ3~úïÉ•»p„ 9r´Ä€«¦‘y^“ÝvE2¶&^¿o„sK'¬s³6)uZÿgþqñX§M8'µKJ—ç[dg?²òúø ÇKT,¸‡jÿ Õñ‰)ÚBq%]§VëÏÄ"†º0Ž3]RÏé àæ …¬Qa²¤Š¢¦ P^ˆ¤ Jñs£g$’:¢¯Õ8 ‰5ì½Ñ1T5cælÏÖ‚J%?–ƒ#¡D´ Ò 9ÓŽÑ”F^eQªì mLFUÏrì!´®P-ÊK›YŠÖYõ3SS4êKʪó¬©É€)Ñ‘@$[gF°º‹ÌÆPQ ÊQåR '1S¥ÝWLtâš1ÒMiÀIèûÖfÀ0Š6-ÈeÚ+§o.dÇ·jÔÙ×W–º…nU‰­ ¯!eS0ëùVÑRŒ„À+µö¨Ñ*9Ý5¢V³ž]@¨ Û,\I~M±_ ¼Ä‘íia]c@û$]´y†Î.6m­Å}l*Ú¦ùëû>){ÙÀ„G•‰IáˆëN!zïÛcÓ£÷,¼!£Ÿ ”c%ãÕç|!#¢¾Ç—¦gÍgx¢^ÉRÅêSŠ÷|½{´ý|ÓÍAÂj–Nž¥ãE·J¬?U•úB´)‹Êô¿“0’0M„¥/ˆÁ`Aæi8龡s±¡ræ*Â$nJ·a¨]+.D™¤5ß”ÑÒ#¦§ºÕpæàò!K(jü‘K%¨ 6z Aj7Ñ¿v,Ø­š¸¹rRiEŒš‹AÆf 3Yîe-ä|øKPm>U§ïØ<"kB8¬¨8©"÷˜ŠøÑ‡íÓz6€¶7S~TåÞ r`@,oÓ-©£ ÕQÅ¢Cr¤ ¬BZ uº–“”¢ çaMÏûŽbiGi‰³ÂbtvV9nËrœÊ2“³}ˆÕSÓþ^Õíê…'­.cÂ’Þýd<À-çgôã–^DÞßÍ…hè¸u6S¿xY~èSJ¬ @GLt¥ý€²Ö!âVT„9h¼ûEÒVçˆ1³Æb™}@ ‚cû §œQ!k«M ÁŸ¿c$FMN1ê‹IƒLù‚' ¹‹ó—oi°±e­Cšq}`†ßÖV°S±äð³S>l«JYƒWÁæ>G®œ&˜"+-å>&Ð pU§ãg–W(BØ1>³¥wÉÁ¯aéÝBqŸ¯4Ê(‘ÛS2"(› ¶üH§¬Qö7Æ©7L %^ ªƒ¬=‡;‹Óºœ÷ÍÇ,GG逷­f1ló|ÄW&ˆ P¾ÜŽÆžÏ´…Ü@—í¸„Åu>º]Ó‹+i¹ËJS Ç÷Ó.|héÊ Xn˜"¬].ªE%_Ú) û¥yl¥ºUFb¡¹†IK3÷P>ÓɨH |MŒ`qî¬Ò¨«)¥¡°4ϵü¿|˜Ç S 8¡ŽQ…^˜˜òM+ßsK±¢0Rª «)ʮ廰 õ^%ñ“ @?„é`ª»”ôÁVЉ”}àØdºÞÀVí`˜v—“q_"ÞtS*¹lv µñtE­m*QžðmúeD‹ª+sKý«èئ›¯¸AÌœˆo¾â×G¤e+L‚Œ7^¶Â¡°È ê êdaÀ[Æà: u Ò™œ››ìI5C0…¶SGÈÌBBÜSfêøMƒï®Ãv[ÆÚ$äôdóCܾIõ—J&5ÛdÓè]ޤxT¹Acb™Jn[iÐËÔ;½ÿÉßu BäÏÎîq´zm;YûÓÔ?ºLvb»Iÿî$76Ü¡§¥È6:¹ èêÖ|‚s ÷s‰ aÊ´$ G˜"åÈW½{ »ŒFåøZ1¬?Ûx†Ù?ñçöÔ6óùÌî‚ñèÜBD&”’qC z.Ôßm4½6¡ûUîøðཤ\<®)´S~[ŒKº ’’­9-°WÔUrcï~qÙ%å<š%‘]£¿[‡ª3ÅG.ë©›ê®üå^'3OJû¤¦Þ|ß³¢Á³vu‚6.ýt¯æ§·7¢ˆæº%![uÆP ãë¬L“@†\oÊŠwu{ ǧÊò|Sò*E£š±:‚ƒOœŠ{Ó]䟸à ðæ î³[L‡R“ðÐ ¢Ìc†‹ájeØtHì\Ðöº‚T€âÀQµËAUJ’°b½… Þj 1)ÍXþí»¬GJ¦@¥¾¤âæ +tî‰n@î,@%hí¨…§Œ¨R\ ÙoÔ0ÖÞt.E™b‰›=xˆQ—œ„,].±ªÀ1Í^à‚FF¢&šP¸PÁ 8`ùn,õ¨ðC'Ýê‡ ¢–ŽöP ƒ‚²N HY‰»SÖ’H¶´—ézãN÷¿Dç%‚¦À¯‘§ks‡ A,×åÃrÌ¢cZ›A•ÚAq%f¸"Î<èqå‘y> šDNþÉ$º'…Ÿ8ãÔ ŸRÙÈ“^ÕÖ¦ãá]VÚ"lÕ&ØÉõ\{ËÜ]©IFqYµÔ’³ãßFîrÂHYÇËn»Bש´GVAò²K¥ÓºÕ 8ƒP±š+7¢œ_Ó _$åªÜcJ<è ¤hG%rœU¥g=¸r¦mbûæé¼6ZAZÐQ= º\~›‹!BÛlã¶Õƒay½‚‰©ÑlâMŠé†;ÁØTh«›Õžða&PF;ulk9<èpdn¶Šse©¾’AÅYËÅQ‰ŒíØa’£‘­Õ;cB‚±>‚+àñ¨j®¹âÓHbË>M»ÚÝ“¬[zÒG^¬jqf-èµ8¸`ŠÝö~Ÿát¥‡ç(0Pû[í³ÂJC”=Œ<¦e|¥ŠŸR¬žawâÔV0Ï™ÙV¯¶„ë|èHÑ ýRrFáÑç=îHæØÝU+IËê ŸöøTšiû“zÿ–@,P,½­Z/Ü”–Í‹L=euš´[œ¶YÆæ%ÎÑcNÀÄŒs ¯*[Ñg`»­×$ø ÐôL’q,‡é8~fÎÃYmä³Ý (‚L„šLSOÚ.M@„ˆÛ¨dX pB¢9/®ðg4e7Åâ-–„RâŒÆWÎìPÃè˜Õº;—½uEL´!¡)h¼#ˆwsÖbâ ÙCiK`IEQ}A‡jˆI[ükñ,Gª)wÅrx.57“©²äS>ˆßä@,ÊhÚy>5ÜAR”ùjC%Ë9χÄÊó,÷¤Ã¦Ñ“F˜¼<ó˜IÃÖ˜d*^HÕ½””9o°T'˜ß¦ò(¼$¸*ÜÀYd¥²{“ã/T¸Ù:DbIƪô±(JyÝwƒ®ù¦ƒŽæã†P•DQiï¤ÝfZK¾‰Q€Zý\42˜ã‚Í$õ½©? ­¤—iî÷í¬ë„/µqÚ*~ò;ìT‹•ÀJ*ÜXÏ{>/ÎZÛ¾£‘ôJjº5¸oMŽö˜üRX®Ý¾z.NA‘°n,ÆÅ&èN¥«E¥î‰BÚŸ!ÕÝ(~îJœâö,ßF{¤c÷é´‘²ÏP{åqˆS”¤eÈåÑ»’T‰yY¥LT¶®Õoǃ"·0–4[×òF¢ÁúJËW±ØÖS™vôàÊ3ÅL§4iÙYª'O 熸á÷ä wD:Ë0zÇ×ù¶ÌpÓ`ûæBìkR…ÞÙǺ8´iÄðlŽ[Œ^ê¨cZA&[ã!­Ó1X1Â{ì'Wµ¶Âg/I¤H?†_EÚ =„å´H´,” ~×ë¨A¸¤UÞ²~¯„ 蕞-åvèå™Òµí…u™Ïº'L¿€Óyr˜š‰’ ÐÊ(Ε§Ý,KÔ—¦4USKY™½%EJC'Ó,ÿÜu#’Ù_oŽÕ:¢:6µŸÁ¨ÖúÂÝÞÆdýÓ÷GÙ@‘RõuÎî¶žEÁ oÇ×sùM¾›—“š[óòÞF9Ô§&ÜÓ ðÄx3d¯â¤Ó¬‹>׃48ãÀÇ Ú† àr!)®«MÊ?.™„´"^—/ÝÏ‹h¬S„¡ ƒ½d¶h TŠÛÊ[û.Ýâ£ï8ªšßn¹0j—AzjÓtÇ(<´„Ãßù3xÏVV¢º‚ £µÓ³wE¾5oWh¥Ú,Á¨©Í\Wa'Þ¤ ès=&¢u4 $—¥=tåeR¡}Áoß‘RvÑ&¡ô¬ IækÕ|‰0SqÆé]èy[-«3dÏ@èV¤YECœ‚†ýæäí¹ŠpSÓt;們ҒénÛ=ä‘KÓ³Þ| )+æg÷»òüHó7Vî¤ î!Åš™9¨»ÖÝ’b + „ÉiJãJFyªn.^áÀ²q+¡(WÀè˜÷e©G šê¬ÝH«¹Uq¯¼ä;K»Ëg©Š¯ÛꄟÙv÷Qi ïó¦úINFù0 1¬l†q˨¡KK2„MQ´“飡ҽ N|râ]NŒiå (Á™·þº2©T?Á§°€(«=:$D9Lló1ŒOˆúìg»>käY[ k¤S/Ø`óMLýz” 4¾ÛäIŒ6”8Ÿc4¼äÙ¦øødò‘lÙ4³ ý¥åö°¡"ÿ¾=‡rž×vAÕZŽ a!(ï^.¨çWÿè‘9ýsrGÀÇú~ÿ}ÄCäb¬´ð-^›f.y µ­Äd2ªÅ¬XÖñ†s£¨ÓA6óÀ½º!Zyè„4›}œÞ¨ÍpÖ#0aHÎþ¨œ„ ˆÍîOx¤Þ”4/¿žÅ3O9‡ÏAU2T¡S? ¬z²À} >¤I·ÖÓ³†›4ãBV£B!#ÃÇ@ŠÑÁ‚ÕË>RïŽàr¸ãsJ·Rj-B|oþËD¡ÇÊZ3î ÃÞ2þñl´ÑDËÇK7+@øÒC$ÕÜÅédžQ‚­wÒ+8dFQdº}Ñ ñnaè*läÂß.©ù®ŸO¸¸Æ 7Œq9*¬O›qŠH‡–<¦h7Ú;\ä f÷<6þÎY—6t¹œš9¦Í…Ð#½Á¿<µEÙxãTýXÉÒ†ÐNŒöô¨ [cM–týÅkL8°U… ©3¢YÊ5P'AXœ·‡¸U¼87Ñ©’Mÿ§4¤0î¤ÒÝWÑÝð'‡ª*[˜#´9Þ8ÍM7ˆèB ltèÄUÍ£Ò-Z!”<¢ã£¥ËTÌ‚Éi!uã+èjþGåÝ ¡Ú êÈÐ#Dó‹5%ÂaÓ´ÂáPE±C/ëDƒ*U¾ê±Ê¾Pg:”öÐÙ‰p¢¸úÝxA'¸ÔB_¯ùP÷ÈLqÀ„þy×S¤(Ð}N£2~µ¤ÄІ„Þä.CcvÕûDò ª/Ûî€mMf¨x0Ô:>ªòé@;iB Rbôh¢åÛÁª«òÉÞ LŽþR²—#ØUŠýíVôð\Ê]: [d¶Ø×¹3»Pvy-ƒ\¶æiT­'¥ýºVƒ1»ÏÀ® @•i·×A@•ØÕð4„ ©ÍÕÑ ×ŒŒ' ‹´hø„:·ÒN«S–’ž¨×:ŠJÿ²á„‹Æ•<ÒNyµ)ÞQWuëœý'3û÷.HÉÂ)'®Î„¨Ä yÔÓàôÚµ·ÿ×I€c#¯Cå nÈ^¦R"ÍD…mµ¬§µ‹„Év4M¶cÀø§Y$Hãí¡`6æM!»Å‹vouKƒÎ§òÜÎT¹C.iGÅäŸÿˆa…©“‡Gll¤Óúþ¥GžG•37޹¥#P¦ÙndÐT´–2!]DÓCJœ§BIj?ÉR4â ċĜ£Eò¶Šwa¡Žîò’¡pÛΆtBIÀØÝ‘ÂÝ™Ò=mŽ$jýT©ú+ÿµ’(–.V!¬;ÿ×P›ÆbxçÂüŸs*J‡3µs–w¿DÌS9 ÎlCÀ5€NjieÑΡ¸?DSÀh6QþüÜf܈$ -LÝ!=g¹SÍ·jí€o3‰§“_@ünl F$%ªHC˜,vC8༞éŠJeG¯¥ƒ9DLN¬‘7Þ(™|j#*”g«Â3-F)3¬x8ƒ87K³ÌþQÅêº?IÔU)S‰‡˜ôŒš³®m$Þ×¢Ùs>þ,†Ç{å¨dÖÐ}få¸Ë›r!&穳FuXÖEÔPYé€K¡vÒvØeèr¢¶ˆ£® c¹k÷×ù&VðŠTj)««{2t±2UWa!®j¹çhD:¸sñ8ìj†úP/ÿõ¶áÚLiJìÙÂÈ{.ý”›f“"ŒQuÓÖ X-Á0ÔHgRëô¬²y$\q‚®õ¶D4‡'MÁÿÌo £§80½àòщÛüÓ”¼°(StˆéZŽi9A¦CR àˆÊ_ì7¿ôœ5ÊÏÙ=\ð°Xœ3ryý®uQèYU"¦ÏzÈνÃ%¹9¯¾Ô§l1(Žòž9vF\=L§4sÑhÆo ­7ûMü©”}î±äQB‰]s± ûL_P–-ÊÒû=¹ÝGW ”~g]Ø›åz¾ñ|œŠñêrhÄüTí[¾ù?6 {‘Áìi{ïªóUUQ>³îÊ•WüÍ"¦qK`MÆ/d7?œHÜT5XY…Ö Xl¦u±SV^ÎLþßX)9°/e•`J|€—´‰ŠéâEiR¯aCöJ0èH:ú^H;ËÅ~vX+á"ŠÈÛ§p=1ÛŒ—/ÕÔMn!­ë‚6`RüOU]eþ»é÷ÏúúÑþЃå[k)Gš>Rl,¶rEªHzq1¤ ×Ç!N\±¼y™g/v`Ü’™ëÎ".¡Ëßóêžµ¿Ö[«%”¸kØúAs¿$Xàå(xnóØ«Màw¯2ž¯øj?m½Y¸`jU"¢¼ûC‚xzš­Üù¨‡5¬Èr¾™ÊŸ¢ÔYÝyMíB¼°¨¿á`;}Š,ý_¡µ »¿¥ìD MüCyÛµYýJBÑI„Ú!qg‚ý%sù5Šïï‹ÅÞ}É`F4á°•x¯XœK=…@РY[½òípRz& ÍADз+*ÀV˜Ç&c0õ2Æ/mëy©ÝÝÒަGô1Z2é9Ú4“¿<÷ÏÔ¢é¾`8NžÝû9P ©íŽ>éK@‚Û„ðôllª¢-õEZ¨s“¥+¾å‚½ ¦¡™Q22½!Eƒ³ù=¡) Èù³a6ž{ÿØÙp¤ÖàŽLÅqé÷蚎д¡kMOC?K¤YS¸+4#Äi\‰Ó¼: Ãt\üé #éŠ$KKMæƒ1ºAžøó°r3±‰ÉûXˆù…f´éçU 䪑ªÞ¤ œôbeI;Äiðp!2cŒÕÚTo(æM ãò¢@Àã•“Ê.EÙ“tR,}Ð+‘‚ãÓÒØ å,ÜÄÞÁXX“0ИÒ`¿bÑ iM9Ê$Lmz¤K*nœ¡÷¯k†CPœ ¡ÖÏn{‹«[sŒØÔoöªŽ&-wF"‰´ý7î®Á£GE%ÅWéAÛÄ1ž§@;«G2Aª¾ððRt¢Ék”œÕáOÀ.“1úâ—ë—íM=ލ*GsÜ4§ù+ûˆ÷Q:=c5T‹È„Tøá*¾©f¯ÙøÍÈŒ“–QQ¸ªv}«,k\†É+S¥ÌÝÔ 8utUü Õã³Öh}ž$" l­Œ˜ptͱõSº"yK´ExȧkôÂ#åÜoÔ"§#Pó… Ýz/….€Ç A\Ì-NFÄT®Ii=ï \» &ÆTµØ?‹ÙÅ–F¹¢‰~Ýê¿Ã¯nhK´¸·dMsV¼‘‚ÝïÒCD)ž…‘+0a¯$ëuÿDå2HºõM›ÊÞúöš–ûcŸº¬S?€Û“umô^ cÂ..Ƶ«)ŒèiáÓ¬é~b %Q[”S)ÜÏ0èff\’OºÅ•7 —-Úô\-cKE0öð´OñZÅ8¨;M>}>!úᩪHõöUlûðºSÕôž® /ŒÀˆi¨€Ø(?·–‹†e”Ockµ#—+Œ P-„Çt(‹j×¢(ÀþJPa^ë,Ûð|³†aÌsü÷½k\Ê…ÚZNÞ³BŽÛ•³Ôƒ•ºªÊ¡XýO@Õ :2ÈAêÌ ´ƒ2Áõ‡ÈhXõjGX Œî7ó åš>ÔHß!X *wåÜŸó:,©‰L>Ë%;mØ5WÕpW ¦Õ‘Ø’z°É:~¸!ì㓌éBÃöøËrH]r íÝ©q0aV¡wX"sËw†lµ¹,K;6”ç(=ÕL¢i#•r‡U¡^÷¡KƳšLß@´‰ì@¸ž(Qcö Õ„Z„¾|B¨â¶eɳ„Ä´o«©²í,B9Ô0µFà°Ç;ó dÖB·¥#èÜÙ7…iQ Û»Š+0[ÖJ¡l;èéÊy„èAe2/ Žéü ê–ž3êÓ]Þ°ƒGNÊÆŠâzlÔÖs€øHÊe•bÊy4„DÔŠa*ºY 1ø,ûe—›ËUo]‚sþHCŒãPâ¾3 tOv5•EÉ?é†v¿ì«1[ÖªldhKÞÉ>‹²ì…Ù:•ᜩño?cÆT÷íf`´’¿©NícÎ@Ú(·ïè÷Ý|ÿµY#B˜Në™Áv4Ô=ìUGDl”«Z}^9lgµv—ì=EWÔ…°aAß|ºé›l T¹i•»õ‡”[E oçfg]Äs@p=†*_l¹ÍÁª[~̓¶¬ŒR5èɳ)Êß}œêÁ:Í0£ŒÓ­·ÏŒÁërÔ¸. ™†Ò6h?gBn ÚÕácâ@>N½L÷Ïc°¼´ºÔÑB»y©’L·Ü½€%jqô¬bé_¿dÿâ &¶ÓœSšzbгìSQ´+¼•÷ç¦4Eà'!Ü#ÀcìaJ-®ø2`tœ©„*‰iÊ”mƒûü÷ “ä)¨iCgƒS8 ^ÿ ý9LRàrJ0é;E_2…EÜ!ªeßí Pšç3¾?•u ‚…GðôIF.ßIiâ˜f ž «‰Ý·õ0›—4ãàÏ>‡Jtæ«¥t(o–É–Qc­?!¶Ñ—ÙñâU×v"œd ‘Ë6ÙEg^mî…|Ù'EïÜ1S€§8kÀ§™9Õ(ª†½à‰tÖo׳M›~pñµ#š›£Š-´Zý¢KLêê¨1ºÑ§¿$¡ä-Ä(bìC†7¼×wÙüe¬C¡ šø³êK5} îö‹°á[#F*ÜTÑ’ÌÝ<ì†38 ˜}µT,¿ÐýþÖsm’™ÏLG-DÑÑìÕ¹‡lb…;³aM%'µ³f¹ˆ×Mš¤4Ï1Ë`õN¡C ÅJËoƒ¹!&# a©§=Au1&Ô܇¶]ãJ-+|bÄìëyrOluÊyI}±ƒÒöwÄKš³’„k­AH†ß *ÝÐJ›1C’q¿ìS:¼¦M^î ³…RMý’æîv´¬gŽ]®m>"=”+¹a×}¥vyìœKa{hÞ®nˆ2µœ“³Ùy"ª¾%3!VM‹—IKT~þ`” }X®°e!oŠFùo.¶XÑõ(SØv¨å3BíÐùCÑôµQFŒÉYú™wawŠF׆/!Ò¢Õæ^r-Og ß•T yé ÔY‚nš(zã&áQ&^äÝ~[zÒE¬2˜·ÍaptfXáq8}fˆ)Qn´ô“`&sÐŒU¤j7¸¯ µ pPO-Ž}kóÎ#7ý…9 Æ£¾4á3·^¥vîÈpmÀ (™‘Îñb§jÑ%éA¦ßËÚ–ˆpœ&€„q§™xt'²7Z*­sØÆBóù¢SY=ÓFï)³ŒË§±ó\Uä¡Ãå"zºåäÇA¦î’»{TŽ«#€PUrx´‹¦ÙÆ„Åðå ÍpͬB4àèÁá:Ÿ7¶‰ª…kŽð*‹ñ’{I˜í¼c“E©|C€¬ÁJ³1un4â3â¡ê®:îS!E:ƒæ¸Û`kR¿¸b—9¾á}Å·T+Éà!h1¬?aRÆ4ˆiÑHý〠4,¹A˜ÀliÍ ‹>¨·›éòB2…Q#VLJ%'Q»ñ±éZ¦r¾sŒa$LGt ¦óó¯bpj-6-5Åe,òêI‘ jõƒ {±¦#TFBóþBÐ)ÐgX„5ûRU½…!µÙ :¨€͋¼ GxÑ|ýH­ç #8ïH CTRBVΉ¬pÌý7ºS³ßg_<’…e”¼_öH¦æC¿£˜ªÓŸ"qljùš>þKK\A¦÷Ã*šè#¬¡-K¤Ö]Il‚O^m'š'9]­Ó<’æá?KãHS ±Æžv™¶óÑBñî¢AmÓ…O@“ñYƒ¬hˆÚGLØ=­SRh>£ÿØkJšY0n%¥é‡ÖÆ¡‰X "óËž=O½§ym‚4†ógê‹D;ž@i I±.E“×3\¥f3å}R“½öÓWÏ5Kx¯Èeȇe ÇZwà‡@$s:ŸŒyvJ•ëíBJê»äX.,Ÿ®ð^®ìzŽ1&õ×°P‚£,…~KÆËà¤7Î0Óp¹cÑk§Có¶,2ƒ…­r5sªð cir6,“ÙPšDd¥W«Ð`²ÐpÁ>þXß1T‹s¶Tº©á›ÎÍÄÚšcW5l`/(çFȰ–uØâÉEi¤ª8 ø«ªo²<„)/‹»÷¡$€îÇ(Ïê( (꣡þCâ‚þûÓ?ß..©^i\´A7„1ΔA ·²hb‹ÐihYóoº ê9µ#KxHpÛÆiGM1·À!4ö¶ï”üÍôÕÃ ×æ‚™”Šé ݇!„ëjo‡q¼PjÑTÒ•z:¬†¬¡¦²® â- a‰¿,Ù—!ÕÐUC¶ÒÇ¢k8SqŽÝl—¢l¯%è-×&-ˆ`óØ%½T-·¾S½ôS¸H¬!§ þF0|ýhúצ³JÙ*š®J^ÅÍÛ e¹Ï‚ê7IoÌ9õZôXd‹_•ÝÜæÃšÁL‰z²f]ZZâNÔÂP1ÌdÔÖMÄ)™ Ê®ŠáÖ÷7'T(™ ¾ ¯l´WéÁ@ÚL€‡â‹¸ ¤+~¿g$Ðz×e­CL%-ÌóÐ 7—¡âÆÍ= WŸ¾Îèðð«ç~•»²]` ªHŸÍVrRQ÷´ñÎ N‚ {ã¿Rf׫·)EpJ£×‡ûwHx"Õ«ú^ô±†%z¾©øx ô˶_Ur°(ü .Û%xÅmV¥7ëæèÐK‚ZXYÓ„xN×Ï‘5‰ ‹=øãï4¼ŒyÍ¡æ*c<Wgß©®˜ÀWšƒÃ¦*6ËÐ >!Êl³H;¶o,cGVE^ݵ£FG–.žÚ{„ :›XóÑ­ò8léŠ2¥©Mך€øRø2Î ’ùª$U:MGÇDÑØ+SYÔ¿%ÃJ>TT5eïÖ"qLƒ£(*&W˜ æž>¢?¡LÆŠ w/®aG8e¸Bu°VÒ¿„lã–4ìÒ@RﹺlôO¾eXaÇg%3’‰¥· ¼ÍFæB_Ÿ{ó«èúŽö›ðir è\ú~èÚÙ¼Ô?·«0ÌɾîÙjF›k^nª;sNq ¸<ßñZ…Ë”:¶?ÊZ¯fSê6ÒÅ¥ª».ìkÀ¢'mž†æ­á7<k»ˆü>ˆY)0RëU–õ:ʯªÍyß~ âcYkk#üRó•Á´¾‘?öH„”¬Wµüãéí<?2×Ö 7Ô¤BiÊ ×|tá^^~’•–BºQÇ Ä’~‰‰.àvÀ¸>^NÚJŠ:Vo%Z!Jd¡ò‹Hÿ;E¼ú]'%åß*ƒøõ9³®Ù˜§*ü±¸±µ¿o›rÄøÕÁ|2øqøáâ ƒ<„Z*Íá;©MÛºZÕx×øcüŒ*•6oZ–ŽvDûœÊˆOm…_/¤WÇ ýüý8Ÿ øñ›Ê‡«O:ƒ?ôTL»UÆdy“µ® ÊG‹x$ÝX‘mu%)s{ðÓ@.³oc¦rÚ~Ù€¼mà<¶õèñ×UDÍ1ˆZŠ=ϯ‹ã®¤{€¼Ž°©˜ÅHË·¥!‚,¥<™cÒÀ©Åµm2Îó6n)½BU0Y•KBô+”’«Ý!P‡!›£1Ù<#²Ô>òÏtáP)Já´Aþ®rbeº¶º”Ǩ݂©RþIÿ[­“Ã&òIsSÚÀßÉÞ¨–‘{ÍÉÁ5щ°Bߟð𬠆àš:–㟡¤÷ ù×uz'1ê1P¦HŽ*j½Œ—M7Ê=÷Æ—XOï´Ñ9änA_†õ­GZÝ~pƒ‘oyzç×aɸ½)©ž·R®s? m¢üÝ«€ å¤Cк¥«Zà¸VüAmD#‹ªZ"Œv]1Ýí×ÀUSxÜeD©´¾bf/é¼i.Î<Š«¡Š®4“_³º[Ñ”£Æ§¢ŒQi›)‹ZS“–Õ•WašR+¼çhXIˆ‹å·Ça¦?‘‚Á®,)P „«ÔÊRïûónpJ˦½5)˜Óô(|·òáSë©0 Äð|<ÚM—Ž’ËLq̲‡#®¶æ‚½;ÔéQcéÀÖA颟­¦vXîNúàp–…õÛí÷Q*.È ú0Œþ§Hc»ÁU¨‘8gÜä Ôû\dAyp”æãàÒ¨~¶Šç·Be¿ kkñFí«‚`Ÿó­âøº³å«D v9Å%6Ô)ÀM ¨‹0£ †‘¤Ç üg`½Q Š´ã+•¬ª–Ë@ h*•8ÜcÏ&XC‚A³mQg+tH(8ëág»#H)¯’\ÇþêW``xÕ}9m\)“5w]ÖN<…Ì~Þ­1k•}ºaáÝe6:U*Uj‰6uó7A %©Îð4kжO§H½ ø¡zœ—Lj닜·zØô‡A¬Ã4úÚĈ(tùD´Ú2"Ð ék? h×t3÷ªŽ'zE)‰#‹ðÏŠ «ËÏùÀ#`¤ÛÃÐ-ŒÉ&ô[Ì¢À°Öåê<@^:RqK´;rªázçÕʱ›¨l\s u>¼ òš“ˆ *ßEEÏS¬†kì®çpಠ­YÅÞ"iÃôéÁÌéSáAý¶Ÿ{ÈÏ(–£9ƒ\pM=-៹ h<àä“„DÖÚi©$û× ‡Ý9Ú¬-œt¤U…CGç9,DE4‚¬¥E>µˆ`kHƒ’+wŠòH3ÁKçÑ\A ­w">o™ÉõŒ BkâÞº”=¼§“Ô¨ï hû½ÁŠ€8åø9œ…¶ßǘ_¸¼M³:ÆHÍáÍ­YçŸlÉÀŽ+®/AÛ²¯ŒB¸ ¸-uã\!6Ó‰C‚}Z:±v"5ŽoMËíq.Pd½ék4ªFbMdL´?ÄiMÏãí|,ó”(\…Šþ->­ °Ôw+€ 8UšÄÍzóÈähh&-LÌçYì*Tˆ“”òKµóÝšÀˆr]ËŸ‹Hõúý‰ƒt—‘Ä]¸:ëeЂȷ̕ڽÍÃ%-À40³÷÷Ú>Ê5Ïl^§•0¯  šÀ«_¨ÞcP|ó “ʤ©¿Oࡱj—þš°‡ @ÏJËDo­1âÏ:^Yl%d,´“{é-#Á©µ Å×kˆåÝ’¶K{ãÜ­U>XZú 2¶M”£xJd $5Ìåy#ܨ؇hõkf²10½©»¨˜Ð©ÜžDðëͼÅ3¥T]Ƽ'‰TåX8‚÷q…ÐèWÑÛp’éxâfû#1]{¤·Vâl?£@œÐÎhª¶Üe3.=•‰§I¬)OÎl¡#ÚlT› ƒo¹ÏX›4O+§Ñ;좃£YTÞ ø¥pÁÑzó’3«]€ÀÕØâ¦¢nÂÐiMººX&ÇPEð“0Ùw¢A_ê[J·e¥û‚¹ØûX‰âý 4@`zŽ%ü®CÄBuÕÒÙ-y”Cˆ¢ò@¨²»á‡_*î†9¦ðYVJÓ¨¤¯ÏŽeö·Ýy×qëøG8h›ÐrÉf˵o8rýWcÝlêã¼,]™B€”C[Œ,Å¤ŽŠ`ý]Š.8_OŸ?–ø¢Z›ÙóTâØwTÉÖ¡Ksî€Ô)"FÝô-A†¼þ SG;› K;V0¢éœ´î(·]Ç4¦ê)þž*È1¼9¶hëJë "¦Š£Hƒ€›•ÁÒde^b´Ö²gÂP l•Ð5ùŽ+óårÏöï•¿³æ’W§|'¡Fš0DUË+N¢9^ùVN½…ÉN -”sìzÎ}¬¨~P˲w q’>ýUq«Ž-Cueܧz¥.<¾d=£*-lx¤»¡â÷çóD¸jä§S"r%ô,^ÁŸW©G(FÁàmýªøž~º¤Å÷šLWªm¸[¿÷]JjA^‚uÐ`}€BdY°•®^gï9t[ÙmÙaY¢Y«aK1QŸgð®¹î¾þ0*sfÂ#@òÏ×Á+ óbE gKÚ×}ËCÕ~M3_ĹVÓ],{¹Éœ±Ç0›Z× î‡ó 4¼ˆt«TU±3Âe3Œ¥a<WQT{ai;Sìê‡å;òÚ„é~‘"DB^µ´eòÁž ÎxlpÏl]èÖˆVÌ‘ü¨ÇMê¦!:‘Òz¿Q†Ö ŽÞÈÀK«Ç43@¦Ï„aA­fº+…,9Ž˜•6a´ôsEbm|—e¨œrVt Cæo¿ôÿ³u&¹uA m¹ÿ•$VKÚxõý Cê¡8ÎÓ–¼¬hUb^y:¿É!¡»„ –º/Ï®ÓÌö9¡­È™Ò„N½úámÚ¸}RT<ÛÛ%¤ÖÊbõ_-ö8:Ÿ—² T¡;5‡ã™Üñv8>ëÜÑ \®f‚l/Ã-u7û 2m\“Œ>7*<†j Ÿ­êDðÖ"5íù%ÏX=ׯx;dìч-äu£ß™(¡« ¯š[ >O@<ËôiÛbtæìÙU7dêÄY ,±:Mkû½Þ³¨£ÔÉùBõfÂÊß~1O|…™¸‹B9¼6â%Eåñ±ßÇ”½rª_ÐávªÖÚyW²5׈Ì`3PùjÑè\ §mhˆR“€%Ѷh¤–íúˆ›õ«‘°*Š)üUÈþ°Ùf÷V™ÐLX õ/u†Š“w$»mI¾ã»í)mf>”õÉíoЯhÿOGGãÒÿô:pýO§JvZR¹rC>¼±üøœë$ïç¡›Do´äøË=âzâ}t«Ìg¹Ým+„RrÏPæ[»BÛíu³ûðßà¨Q5nøø>¥|ØŸG×̾º5{0pÖüúõbƒ?Ä”V!Ùç¡ý›‚¸H‘€ÃAæ6;á©Ét•wüûñcB©n—–¡möùNœÒù0ÀòÑO(5Y”Íê°ÂjN/¯8‚èÊ™êe3ðùp<»Ä²Áÿ}îuª2/;qñq&ÃHݦçÜÞ¬eÂ-.-÷ê1ç6Þý«;óµ×J UõÁI®1ô a¦4g×V¢!ÀE3xÛMëpÁÙŠÔ°mÞšÆ+(ì]e‚Óëâ(#ënrE˜Ôü°J±R$t¸”é¶—xÙËÔŽøÍ\(1†LÞa2”iß2ÕsYómƒûÿ?Ò©¯´YwÅá#žž÷+j-¢ÍspR©>ûP<ê`b§6ÜÁ I©àZÝÁk¶!‹êFÒ6&ïý«xžæélD±ª`vÎÒeu:¹„ç_iYÓŸQ]ž1`˜t9ÝÁ49°=gmgÍh7¢jÄ:{¥ó9ÕDo¶½åN3àÄVjŸºt·ãÔߦr—œ Ó¿sou«˜Ø Zþ_ùÖËÔúÎ,ñt+3¦·ÖÛu/0¬Np®M½4)˜™´½]¥°j<0Ý”0f‘9^ÐÿC€·«¿N½Á ¦úÚƒEpǦÇ\$Â*U§Ùo<$¼Ïv/] }ö ŽnÉsèl†Ïj Š€Hò"3Þ5Z‡¶¼û-Ú0’ð¬Z)H@Ž ¸îIiˆª¡j>,´“îãsGˆÿ`wJE¯ÓÛ¸cIEND®B`‚gruff-0.3.7/assets/city_scene/grass/0000755000004100000410000000000012055510742017431 5ustar www-datawww-datagruff-0.3.7/assets/city_scene/grass/default.png0000644000004100000410000001415212055510742021566 0ustar www-datawww-data‰PNG  IHDRôdpÇÂ}gAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<üIDATxÚìéÏ'ÅqÇ«àyž=X¼†Í®‹ÀY–“?:Ê%+QŽ? ~Á ;Â(v²ñb.¯ÍŽ5°K¥z®®ª®î™"E‘¾iž™ßœ==ÝUÕÕÕý°ˆþó²€B: Ð…@¡ Pè€B Ð…(t@¡Pè€B: Ð(t@¡ Pè: Ð…(t Pè€B:…(t@¡ €B: Ð…@¡ Pè€B Ð…(t@¡ €B: Ð…@¡ Pè€B Ð…(t@¡Pè€B: Ð(t@¡ Pè: Ð…(t Pè€B:…(t@¡ €B: Ð…@¡ ÿ§œ\ü³?$ÝbšÖÌóYö±®Ew²î(»êyLËžzý²½œ²lÌ¿˜çµ¬çG¸îçåÏzÚ”†åëwzÙ[Óbžio>aÒ®JÓÑìt×µ;Ø&vÞÃK^ÚÓÉf}¤ø üKNÙešÌoÒQ“ê3:ž–¿VMÓò5—¿55ó)[ ¡æ7¹7™=]>§}:Û<“:Ÿe:KQ–éã²æßhpþRmú›,5õ¤ùÔM†ó°ÜPú®IÑnO»¨‡¿¥›êö£zþݾ¢×”õ#z†.RÖ—u}YϹ¬oI·/êñKzƒ‹zîÝÞ=çLïyJu9Ñëu‘=ÿa=ÿá¥qðþ~hJªÿÄ¥0|¥_éï¯ô×ͪzÎ}=|_Þ׳¾Ôc_ê±²þBןëúóiMÓòߺü^÷ÍkáÏôK|¦²é3ýÖ¿Ó}ërO¿Ã=}–.ôé´}R®g22hÊÐùk’yµ~ ›ç䣫ÃâÊ]-~ùÇÏF®Ú ²ô¬åq‘¯k9ôh뙽w”)®œ52(Šœµž.õ›‰¬¤ØÄ@/ ÉÁô‘Ûgé˯æÜø=‡2>ÊÙµØY‘ÕÓ¶teéÞ›ŽÔÏö½Œ~¨~.…NAúô$èúجDz­ŽÃ>ŽCA"fÏ ŽBŽe_P·{Ú’XM 4fOQ0µy Œ{ÿ˜î\ó!~ÞÄX°‚ŒhOÃIR`Í{IRÛ\úØ[öž¾Qvµ4/׊ÈVc•GùÃêAS)Zá†æ›´v§}¬*YúÝqMw<®Û×ty|Z„ÓõcºÿÛÓZtÍtU×Wõ÷UMÃÙ$Žâ{&/ÌÅœ$Xe3û¤I›Ù¸[ÕIËGÈûº.ÂǺþX~¬×¤{ÿKÏÿHÏ×µn }¨ëuýY¿?D1õÅP‹#œŒ(=92¿[|õ6ï;e—ã·°Š4 /Ÿ3™iëúN=:ðþMšwß1È«QîÖ¹QÙKÞŽ¼Ïd ·ze`ïÖ_þü‰%?«…5,¤I⪂7ÂÓ$f”VÀ6ïvˆ¹ÑѼkòPÚV³Ýo­oŽå9ÜÌé£ðRö~[>ÅûXÅœKkÕèHkEG}ÂܦپOM¬,7d#¨¥§ÓB½anü õXÇ é÷Z[ôÇòk:_ȼßbÉfßÍ¥s”lÊ…—5J¢y§—| eÉ%AèºûŽ(–ôw¨lëZÏ»¡iº¡¿¯‹ðõ²Öô?+vý&F¯Z”ÓY^»¬qÏH¬Í¾LÈС“ ÎeVc *|M“ý°#ÅØÊ¬ø¾RÏûÞö=ÝzO÷•õ»zÊ»º~Ç,¿Õ¼|g>/Ñ,’ØŸêóž\³é}ÊÊwž²vw¼­ì(Ŭ:òà†²c=«Î˜!_cëžM•EBX#G¬½˜h÷Xæ­ØV§¢üï4>…} ›)o¸IÐ{ÄY¾ÇFÂŽÑFæÝÏþâÉ݆.! gÓ®‹ée羦ñ7ºï®þº«Ç]Öúûmš·ßž¡ÏRã‚|zF ºaƒ-ìì–×΃8y$‡^YÊŽFa¯Š3kÈ oÊfÖh ¿™óú.¡ÅÒ9b*+w ûZŽÛ’/ÖÞï”ËQÝ£䨏¼ð—7ÿT·ïéö=MÔ§z§ºþDן÷”žú‘&ò#).*]»k¨}b·ö{×[ÑóBdFûÈûÛx>¹×‘x£ÞÈÌ«·çY—sxÅ>·—n:à¥ÙK;…oF[ï÷9»¢vl{…–“Fù¨w…ÆÞ¨CeŽözkŠœè»ËòŒF×O—E=-³k¼1´äÝ(=GzPê·ìµ“ÎwŸ~ÙØw±ðÀó›7eé OÈz0zÏ솟ˆ/ÍIïY/ldTGö™î¹Å…ÿ¦¾ß›úóMýý†yCׯëúuÝ÷þ¨çc®/m¾Ÿ§ŒìÕ3Idd6ÔôĮ̀üó^ ç•>ÐÛs¤·õ¼uŸé˜—™h¿×à<õ¨ßÛ·ù&r9qöW7õä…¢3{>(‹fîZØßçÙ õž^ð®þ.î¨wdqCÑìšræ"KTrÁù’vi, %1±­;˜’'ÛF;T4 `ü¶-ˆL‘LÂ!¯Œ2ŠHú^enæ Ù”;ÝKB×Z*ÜL3*3üZ#° ñ6ËyS$wk瑦q0å9˜ü³Õù¬þyNO»¥¿ŸÕ·ôXÙ¾¥Ç®´BWÆ®«#•u}×a¬Ãžõ¦ÿšÏS°U4øŽX0;á­ñ &ü±o|ç†/;›ðJc¼:ß’ÎîBG_;ëC?ŸíH2×”¾×ô÷kúƯ鷺£û_Óƒ¿Ôýw¼®]ÅùØ[DI/Dlìô´S®°¥ñ{µ]޲Ûé™:ã½§HB‹™jÐm¦ï”(¿ÔìÈ<‚©Ìwbã€K¤QB<”ãiXWæZ^Ótöƒ§¤ïOLü{M™YË>лúÀ»Óš'wÓÛËú-=¡,ÅRýª¼Ä¯Üød¤Qþmnö[gd+ïù­zÒwÇ_%}á¾§œº‚Dߟë<=G4K_ãSîw8haÊ ã¦ã¯Mcö9q«õ´¥7X$H²-iOéîïéÞçuûy*kžÖϵÆO ¼Øó!Öœu4BLJë¡ÙßTúQ“ľ¡Ñy¾ŒÔ^Á¤ìQ½"¡lyÐÖÅF‘Œ‚ŠDrÍ$ÜiÅŽú%‚o_,í¸±$ebl#É0¡DvùwMê7õ¢(õÛúó¶þ¾=mýÇâÆï×5÷­¥c'ž2¶ß¯©+\œ}¹àä|ÏpïZ^Ò±D{õ+膤±°_FrºãoèõÝšÖ§‹Ú ï0v†ù¸”£x½3zÎ~ð´È6¬ŒDž…«E(uû@Lå©Öâôoé…oè_éöëºëW²X©“Âç^ŸZìàÍ:²k嶈ûþ¾¥Ü'•ܸœ7똳~‘è~È¢X†K¦ÊGîm­çlá´“RÄœa~§EitM¾ŸÏuZ‹ÏDwæÉª(Ľ­C#iQ£«›Î_j2ÏÇ $Ê‘E[Úü'ºõ}½Çëåºæïë WÖ2%âÝZm'U'A‰²‹QJ©qòÑ Ùó9IT¨m}°iÑ.CJ»2ˆ:pËM\›$Ê®Žô‚ ×‘œôqnIïuš>! 5-ÛnÃh'ñ‰0hª§ÿ~V*DŸµ,Ã)ópO™$NäÌ+0×Ë{ú_èñ_莟ëo]Ó¿éñ;”åm´½5¾-µŽ±eoÔê¤4e) œ)Xjó¥–£~#2Ц\9‹‹£É=+’G/uw*[\ëÇïcÊ»;îF1u:~zQ³iã¤daÓjôŸýõ3â­I òJ¾Ê«¶¹ï[¿fì¹x×é&¸Ý«n’á‹b•êæ/õÔÿÔ‹Ô:åÛ2[¦w½á ÊŒˆÌÝ(®|m]HmÈÁhò¤FX†>¤Ð:òc·kÝX¬`Û6›L…ò…J˜Í³¬a#â—oµÜ·)tÙð²õ¡‹ºõ-½âQ}x˼Œc–y3ë"üˆ^vYŸxY·/Ó2~Y¯½¤é/ã ËØå %DcÓÌt¦çœê=O5§z¯MÏ O㘹ŒažÇ1Ë<Ž9ø(“7gËLô@¯{P‚‘ô”ûZîîë}¿Ôc_êþ2–ù‹é\.㥥¤ã’î+㯯J'ÝD´PÖKÙÝʘЦò û²‘ÖéÌ÷÷Gef¶7Ô­€4Ï7ŽXYƒ —òU9¶ŒXg$U´”™Må6FL[þ|ý3 Áû´ )ô‘Àœµ¶£KÖ–›ý&^0KŽÎä1ž¬MA™o¹}Ûu õ:Ÿ€sú“‘aäÊF ævhd0š$Œ}oܹ¡qàZˆ‘™K’?×ý¯êÙ¯ê¯ê;½ª»_ÑíwÙõC°ÿÆiËÆÖƒqoqœ&¶<=[}!I3ëøý:߈1rÉç%7ºJ\´YG½ÍO e†¼N°3[pkßK_Ôi޽¬,s?ëZšy¨Ìû ¬rr–—úûâ$+Y‘eÍgº>ÕóUVª¼ä"/éDßáDóâa]?¬ë"Ç’eÞ‡-ONÿæ™9ÛDÚÈ×KfZŒì_Ö^Ó¡!.ªÅLŽ@­å,.öÙ[Ió)ò‰îþw^,SÝ÷óbê›ÜiÇSÛz_ [‹Æ*÷­Åúí8f¶C¡CÀ4«p·÷Þ&'pBÃä ‡|â8”Ê‹0×Ä4ˆiµ._E•—®e³,㘹lOã˜õÊo/Ûºæ«zßi³Þ鬉p_Ú¢ªCÇ k “ÎTùÉmë~mqqÈR=9¦?~SVT'´Ø«ûÚ(=cÊo6&¤˜ïêd¦¡?^ÏIQ7ØEl½ˆCo8±×kmz’´ô×òêÅ—-+ÞC$䕎û2¦â;|m̼×[ŽÞ¤éÛ4ŠÅ<ƒ½Qn¦Ž2Y,&ï¢yÛ‹>=N(ÇÙFx5|Œ9$­›zû6«qDþz ž31÷±“"U#(óàØ²ÉMjœË*Zß`ãêÁ¬Ç~£«Ÿé±—õØËzÝËúØ;Þ¤fÈ¢3`¬Z\ddò/Lxá!bõƒ3hÖ/*vl´]ü8³v_ŒÜ¨F[ÐU²,i朤§_Z^¯éþÇuÿ5Ý;ÉK½¢ÈÊÇt]ääcz¾Ÿ÷Aå%qm艉ñr7ªîuâvhnM³4õºz6cw¼‘ 2)ôïŠU8Òë.M‚UÈT ?Û·]¢"aTù^-ìPÉ7ùé­/*³GM–¨Z¤\,S~E·_)£Ò—ÎÂã íÈ+f?Nð¨7]ìÕ á#>­Ž]’k ¤í‚Jžqh»‡Ö-Õr½ëFDí|«P¢UÇ^2­¦MÁV%)ƻĶK'©Ó±±ë†ˆ° øSšM+0–üjÀ{£š²Úê~(³±æu²¸šâduVæü\dîÛ~¬×þDwýD·u‘—ôŒ76ïÁ*'M9rùãâ¹8ŸØƒ¹ HîÏpÑ6Dœ¼ÕÙ¤{Y8‘ah5/òRyÉÓ¶ÊL‘ú„Z^ô8«Ì,kzD’¬z¤z¦³%Ê£æÚJÓAZméU˜©ƒx–¶×§5ƶiŠÉ¤£{Þ›b‡‘¼ t8ö7™0ª[‰]î\§&Mc[3Z:q”Qyå•Bk9‹!¬“f¬‚'ŽÙeò-‹žú¢ÄP²×åÝìÕ[ÊÕïz6ªÐL»Y¥ Íöñb&]ÒfóD8㵓ÚTžL\ÒÍ‹sÄañNW6ëYýýŽþþ±þüÝþ‘.?¦iŠÜäk51_™ÂNæ~¼K<› Êß’“¶=r™¦yX™æ}ÐËžÔ4–¡[›¼Ô4œt˜äjH:nÞ7ûš,¥2~N£p‚^jÄéßÝ’Ý„`ÇçxaÌ(1THƒs¨XýÁlNËKºÿ¥ÒdöÞñ&hUÚÒÁ=ë8f¡gôØ6ŽyY®¾¸}né¬ <ªß æì¹ÚHe nNg„þäsV°Î@ñT‹ß°–ËÏ1+Ô7¶ü/<è›\³‹CAF³Öí߈q®WKŒÈ#Ó"¢Eb}- ›ÂPëâOµþ¿¨õÿEÝó¢žóÛA÷ùñ2=jýì?7ïQ—óÔÈÇŠôQBô•|:Œ¿FuI#C„OÿþYɧ-sñŽatií?õ®&>¢`Â×mîݘÖ&-Ý×™6(DŠêÓÞÒ§Í©Z§zÊܨ¹ì!=ÅÔ–Ú×Nã˜u³Œ[~VïQÇ1Oÿ0#Ì½Ø 8ᤤåõ´_RÜqÉúêvjëy–óO+.*¯)m¨æ‚Ë×ö› GæÁôF[P 3Ž‹SÂ!ݵŸÔö™%‘`ƒé±„|ß­¿­rlzÝlv¹¶6Òx®Ñ-¬3µc,³¦±ºø;e¨+ð%L húº]€];€Ã~¡Þ­ECA/>v§÷M“)æòçgGš2–êÈdHžb¦Ö( ÝÖ#/h^¿ »_XúãS÷¦³ÜÏŠiÞÝ;ËË2ïSiiÞÒ·4-WÖø7‚€öË÷nK0›Z¹;»b,1(´ÑG¼ S2ïØ3;ÀÖÍ´|ÍÓxNÄcEå!u¨V£7mÀPè®.û4êh®Ñ냭ÈõÓ¯i1}õ¦ßÍ7%'ˆm€Á8à3øŸuûŸŠUÊ4Y¦Š ²â0§®4AR\>ß#ZÆ0“,k~Î×uïÔoŠÈ¦oÅ÷·;×JHÙ´LV+¹ ²ñKf¥sj †¾DåHnÈ'å¨N”)‚ c¦Ç÷LþŒ³ßL´w-“¦+6hmM…‘äÿh„BT¼3žŒ[X˜º¶MO«… ¬5øÏuIý{[\‹$¯L±&¢$ñ.ðÊ=×Ç8°30BÜÙ`PßLá t·w BõZ¥o"¾ÙDû¹¡Pq„Ž„@A«Äõ©SDU=÷Ù0PèDd¢ë©ÆCÔ~Yj†”Ù1ÛÖ¸”î¢Ösmë ?; +ûmæ9¦Þ—aq?Ôc?Ôõ?굿'Ž&`-‡q<~PÂeâ“Y^–y˜Ÿ×ûÍó>Øî‰fm£¦Ü·Ž 'ãBÐrèÇ®#{ÄõuS¸š²ë°J„ãq8XJé?Zh†i5#ªØjËü¾ÿ#Àà-Dw ¡×IEND®B`‚gruff-0.3.7/init.rb0000644000004100000410000000003412055510742014150 0ustar www-datawww-data# For Rails require 'gruff' gruff-0.3.7/README.md0000644000004100000410000000163512055510742014147 0ustar www-datawww-data# Gruff Graphs A library for making beautiful graphs. ## WARNING This is beta-quality software. It works well according to our tests, but the API may change and other features will be added. We are working to make Gruff production quality software. ## Installation Add this line to your application's Gemfile: gem 'gruff' And then execute: $ bundle Or install it yourself as: $ gem install gruff ## Usage See the test suite in test/line_test.rb for examples. ## Samples http://nubyonrails.com/pages/gruff ## Documentation http://gruff.rubyforge.org ## Contributing == Source The source for this project is now kept at GitHub: http://github.com/topfunky/gruff/tree/master 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request gruff-0.3.7/Rakefile0000644000004100000410000000132512055510742014331 0ustar www-datawww-datarequire "rubygems" require "bundler/gem_tasks" require 'rake/testtask' require 'rake/clean' $:.unshift(File.dirname(__FILE__) + "/lib") CLEAN << ['pkg', 'test/output/*'] desc "Run tests" task :default => :test Rake::TestTask.new do |t| t.libs << 'test' end namespace :test do desc "Run mini tests" task :mini => :clean do Dir['test/test_mini*'].each do |file| system "ruby #{file}" end end end ## # Catch unmatched tasks and run them as a unit test. # Makes it possible to do # # rake pie # # To run the +test/test_pie+ and +test/test_mini_pie+ files. #rule '' do |t| # # Rake::Task["clean"].invoke # Dir["test/test_*#{t.name}*.rb"].each do |filename| # system "ruby #{filename}" # end #end gruff-0.3.7/History.txt0000644000004100000410000000571712055510742015077 0ustar www-datawww-data== 0.3.6 * Fixed manifest to list dot graph [theirishpenguin] * Fixed color cycling error [Gunnar Wolf] * Handle case where a line graph data set only has one value [Ron Colwill] == 0.3.5 * Added dot graph from Erik Andrejko == 0.3.4 * Reverted DEBUG=true. Will add a check in the release process so this doesn't happen again. * Future releases will end in an odd number for development (topfunky-gruff on GitHub) or even for production releases. == 0.3.3 * Legend line wrapping [Mat Schaffer] * Stacked area graph fixes [James Coglan] == 0.3.2 * Include init.rb for use as a Rails plugin. == 0.3.1 * Fixed missing bullet graph bug (experimental, will be in a future release). == 0.3.0 * Fixed bug where pie graphs weren't drawing their label correctly. == 0.2.9 * Patch to make SideBar accurate instead of stacked [Marik] * Will be extracting net, pie, stacked, and side-stacked to separate gem in next release. == 0.2.8 * New accumulator bar graph (experimental) * Better mini graphs * Bug fixes == 0.2.7 * Regenerated Manifest.txt * Added scene sample to package * Added mini side_bar (EXPERIMENTAL) * Added @zero_degree option to Gruff::Pie so first slice can start somewhere other than 3 o'clock * Increased size of numbers in Gruff::Mini::Pie * Added legend_box_size accessor == 0.2.6 * Fixed missing side_bar.rb in Manifest.txt == 0.2.5 * New mini graph types (Experimental) * Marker lines can be different color than text labels * Theme definition cleanup == 0.2.4 * Added option to hide line numbers * Fixed code that was causing warnings == 0.2.3 * Cleaned up measurements so the graph expands to fill the available space * Added x-axis and y-axis label options == 0.1.2 * minimum_value and maximum_value can be set after data() to manually scale the graph * Fixed infinite loop bug when values are all equal * Added experimental net and spider graphs * Added non-linear scene graph for a simple interface to complex layered graphs * Initial refactoring of tests * A host of other bug fixes == 0.0.8 * NEW Sidestacked Bar Graphs. [Alun Eyre] * baseline_value larger than data will now show correctly. [Mike Perham] * hide_dots and hide_lines are now options for line graphs. == 0.0.6 * Fixed hang when no data is passed. == 0.0.4 * Added bar graphs * Added area graphs * Added pie graphs * Added render_image_background for using images as background on a theme * Fixed small size legend centering issue * Added initial line marker rounding to significant digits (Christian Winkler) * Line graphs line width is scaled with number of points being drawn (Christian Winkler) == 0.0.3 * Added option to draw line graphs without the lines (points only), thanks to Eric Hodel * Removed font-minimum check so graphs look better at 300px width == 0.0.2 * Fixed to_blob (thanks to Carlos Villela) * Added bar graphs (initial functionality...will be enhanced) * Removed rendered test output from gem == 0.0.1 * Initial release. * Line graphs only. Other graph styles coming soon. gruff-0.3.7/LICENSE.txt0000644000004100000410000000205312055510742014506 0ustar www-datawww-dataCopyright (c) 2012 Uwe Kubosch MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.gruff-0.3.7/rails_generators/0000755000004100000410000000000012055510742016226 5ustar www-datawww-datagruff-0.3.7/rails_generators/gruff/0000755000004100000410000000000012055510742017337 5ustar www-datawww-datagruff-0.3.7/rails_generators/gruff/gruff_generator.rb0000644000004100000410000000467612055510742023060 0ustar www-datawww-dataclass GruffGenerator < Rails::Generator::NamedBase attr_reader :controller_name, :controller_class_path, :controller_file_path, :controller_class_nesting, :controller_class_nesting_depth, :controller_class_name, :controller_singular_name, :controller_plural_name, :parent_folder_for_require alias_method :controller_file_name, :controller_singular_name alias_method :controller_table_name, :controller_plural_name def initialize(runtime_args, runtime_options = {}) super # Take controller name from the next argument. @controller_name = runtime_args.shift base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name) @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name) if @controller_class_nesting.empty? @controller_class_name = @controller_class_name_without_nesting else @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}" end end def manifest record do |m| # Check for class naming collisions. m.class_collisions controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}ControllerTest" # Controller, helper, views, and test directories. m.directory File.join('app/controllers', controller_class_path) m.directory File.join('test/functional', controller_class_path) m.template 'controller.rb', File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb") # For some reason this doesn't take effect if done in initialize() @parent_folder_for_require = @controller_class_path.join('/').gsub(%r%app/controllers/?%, '') @parent_folder_for_require += @parent_folder_for_require.blank? ? '' : '/' m.template 'functional_test.rb', File.join('test/functional', controller_class_path, "#{controller_file_name}_controller_test.rb") end end protected # Override with your own usage banner. def banner "Usage: #{$0} gruff ControllerName" end end gruff-0.3.7/rails_generators/gruff/templates/0000755000004100000410000000000012055510742021335 5ustar www-datawww-datagruff-0.3.7/rails_generators/gruff/templates/controller.rb0000644000004100000410000000213712055510742024050 0ustar www-datawww-dataclass <%= controller_class_name %>Controller < ApplicationController # To make caching easier, add a line like this to config/routes.rb: # map.graph "graph/:action/:id/image.png", :controller => "graph" # # Then reference it with the named route: # image_tag graph_url(:action => 'show', :id => 42) def show g = Gruff::Line.new # Uncomment to use your own theme or font # See http://colourlovers.com or http://www.firewheeldesign.com/widgets/ for color ideas # g.theme = { # :colors => ['#663366', '#cccc99', '#cc6633', '#cc9966', '#99cc99'], # :marker_color => 'white', # :background_colors => ['black', '#333333'] # } # g.font = File.expand_path('artwork/fonts/VeraBd.ttf', RAILS_ROOT) g.title = "Gruff-o-Rama" g.data("Apples", [1, 2, 3, 4, 4, 3]) g.data("Oranges", [4, 8, 7, 9, 8, 9]) g.data("Watermelon", [2, 3, 1, 5, 6, 8]) g.data("Peaches", [9, 9, 10, 8, 7, 9]) g.labels = {0 => '2004', 2 => '2005', 4 => '2006'} send_data(g.to_blob, :disposition => 'inline', :type => 'image/png', :filename => "gruff.png") end end gruff-0.3.7/rails_generators/gruff/templates/functional_test.rb0000644000004100000410000000140412055510742025062 0ustar www-datawww-datarequire File.dirname(__FILE__) + '<%= '/..' * controller_class_name.split("::").length %>/test_helper' require '<%= parent_folder_for_require %><%= controller_file_name %>_controller' # Re-raise errors caught by the controller. class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase #fixtures :data def setup @controller = <%= controller_class_name %>Controller.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end # TODO Replace this with your actual tests def test_show get :show assert_response :success assert_equal 'image/png', @response.headers['Content-Type'] end end gruff-0.3.7/metadata.yml0000644000004100000410000000773512055510742015202 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: gruff version: !ruby/object:Gem::Version hash: 29 prerelease: segments: - 0 - 3 - 7 version: 0.3.7 platform: ruby authors: - Geoffrey Grosenbach - Uwe Kubosch autorequire: bindir: bin cert_chain: [] date: 2012-10-16 00:00:00 Z dependencies: [] description: Beautiful graphs for one or multiple datasets. Can be used on websites or in documents. email: boss@topfunky.com executables: [] extensions: [] extra_rdoc_files: [] files: - .gitignore - .rvmrc - .travis.yml - Gemfile - Gemfile.lock - History.txt - LICENSE.txt - MIT-LICENSE - Manifest.txt - README.md - README.txt - Rakefile - assets/bubble.png - assets/city_scene/background/0000.png - assets/city_scene/background/0600.png - assets/city_scene/background/2000.png - assets/city_scene/clouds/cloudy.png - assets/city_scene/clouds/partly_cloudy.png - assets/city_scene/clouds/stormy.png - assets/city_scene/grass/default.png - assets/city_scene/haze/true.png - assets/city_scene/number_sample/1.png - assets/city_scene/number_sample/2.png - assets/city_scene/number_sample/default.png - assets/city_scene/sky/0000.png - assets/city_scene/sky/0200.png - assets/city_scene/sky/0400.png - assets/city_scene/sky/0600.png - assets/city_scene/sky/0800.png - assets/city_scene/sky/1000.png - assets/city_scene/sky/1200.png - assets/city_scene/sky/1400.png - assets/city_scene/sky/1500.png - assets/city_scene/sky/1700.png - assets/city_scene/sky/2000.png - assets/pc306715.jpg - assets/plastik/blue.png - assets/plastik/green.png - assets/plastik/red.png - gruff.gemspec - init.rb - lib/gruff.rb - lib/gruff/accumulator_bar.rb - lib/gruff/area.rb - lib/gruff/bar.rb - lib/gruff/bar_conversion.rb - lib/gruff/base.rb - lib/gruff/bullet.rb - lib/gruff/deprecated.rb - lib/gruff/dot.rb - lib/gruff/line.rb - lib/gruff/mini/bar.rb - lib/gruff/mini/legend.rb - lib/gruff/mini/pie.rb - lib/gruff/mini/side_bar.rb - lib/gruff/net.rb - lib/gruff/photo_bar.rb - lib/gruff/pie.rb - lib/gruff/scatter.rb - lib/gruff/scene.rb - lib/gruff/side_bar.rb - lib/gruff/side_stacked_bar.rb - lib/gruff/spider.rb - lib/gruff/stacked_area.rb - lib/gruff/stacked_bar.rb - lib/gruff/stacked_mixin.rb - lib/gruff/version.rb - rails_generators/gruff/gruff_generator.rb - rails_generators/gruff/templates/controller.rb - rails_generators/gruff/templates/functional_test.rb - test/gruff_test_case.rb - test/test_accumulator_bar.rb - test/test_area.rb - test/test_bar.rb - test/test_base.rb - test/test_bullet.rb - test/test_dot.rb - test/test_legend.rb - test/test_line.rb - test/test_mini_bar.rb - test/test_mini_pie.rb - test/test_mini_side_bar.rb - test/test_net.rb - test/test_photo.rb - test/test_pie.rb - test/test_scatter.rb - test/test_scene.rb - test/test_side_bar.rb - test/test_sidestacked_bar.rb - test/test_spider.rb - test/test_stacked_area.rb - test/test_stacked_bar.rb homepage: http://nubyonrails.com/pages/gruff licenses: [] post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 3 segments: - 0 version: "0" required_rubygems_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 3 segments: - 0 version: "0" requirements: [] rubyforge_project: rubygems_version: 1.8.24 signing_key: specification_version: 3 summary: Beautiful graphs for one or multiple datasets. test_files: - test/gruff_test_case.rb - test/test_accumulator_bar.rb - test/test_area.rb - test/test_bar.rb - test/test_base.rb - test/test_bullet.rb - test/test_dot.rb - test/test_legend.rb - test/test_line.rb - test/test_mini_bar.rb - test/test_mini_pie.rb - test/test_mini_side_bar.rb - test/test_net.rb - test/test_photo.rb - test/test_pie.rb - test/test_scatter.rb - test/test_scene.rb - test/test_side_bar.rb - test/test_sidestacked_bar.rb - test/test_spider.rb - test/test_stacked_area.rb - test/test_stacked_bar.rb gruff-0.3.7/gruff.gemspec0000644000004100000410000000776212055510742015355 0ustar www-datawww-data# -*- encoding: utf-8 -*- lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'gruff/version' Gem::Specification.new do |s| s.name = %q{gruff} s.version = Gruff::VERSION # s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ['Geoffrey Grosenbach', 'Uwe Kubosch'] # s.date = Date.today.to_s s.description = %q{Beautiful graphs for one or multiple datasets. Can be used on websites or in documents.} s.email = %q{boss@topfunky.com} # s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"] # s.files = ["History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "assets/bubble.png", "assets/city_scene/background/0000.png", "assets/city_scene/background/0600.png", "assets/city_scene/background/2000.png", "assets/city_scene/clouds/cloudy.png", "assets/city_scene/clouds/partly_cloudy.png", "assets/city_scene/clouds/stormy.png", "assets/city_scene/grass/default.png", "assets/city_scene/haze/true.png", "assets/city_scene/number_sample/1.png", "assets/city_scene/number_sample/2.png", "assets/city_scene/number_sample/default.png", "assets/city_scene/sky/0000.png", "assets/city_scene/sky/0200.png", "assets/city_scene/sky/0400.png", "assets/city_scene/sky/0600.png", "assets/city_scene/sky/0800.png", "assets/city_scene/sky/1000.png", "assets/city_scene/sky/1200.png", "assets/city_scene/sky/1400.png", "assets/city_scene/sky/1500.png", "assets/city_scene/sky/1700.png", "assets/city_scene/sky/2000.png", "assets/pc306715.jpg", "assets/plastik/blue.png", "assets/plastik/green.png", "assets/plastik/red.png", "init.rb", "lib/gruff.rb", "lib/gruff/accumulator_bar.rb", "lib/gruff/area.rb", "lib/gruff/bar.rb", "lib/gruff/bar_conversion.rb", "lib/gruff/base.rb", "lib/gruff/bullet.rb", "lib/gruff/deprecated.rb", "lib/gruff/dot.rb", "lib/gruff/line.rb", "lib/gruff/mini/bar.rb", "lib/gruff/mini/legend.rb", "lib/gruff/mini/pie.rb", "lib/gruff/mini/side_bar.rb", "lib/gruff/net.rb", "lib/gruff/photo_bar.rb", "lib/gruff/pie.rb", "lib/gruff/scene.rb", "lib/gruff/side_bar.rb", "lib/gruff/side_stacked_bar.rb", "lib/gruff/spider.rb", "lib/gruff/stacked_area.rb", "lib/gruff/stacked_bar.rb", "lib/gruff/stacked_mixin.rb", "rails_generators/gruff/gruff_generator.rb", "rails_generators/gruff/templates/controller.rb", "rails_generators/gruff/templates/functional_test.rb", "test/gruff_test_case.rb", "test/test_accumulator_bar.rb", "test/test_area.rb", "test/test_bar.rb", "test/test_base.rb", "test/test_bullet.rb", "test/test_dot.rb", "test/test_legend.rb", "test/test_line.rb", "test/test_mini_bar.rb", "test/test_mini_pie.rb", "test/test_mini_side_bar.rb", "test/test_net.rb", "test/test_photo.rb", "test/test_pie.rb", "test/test_scene.rb", "test/test_side_bar.rb", "test/test_sidestacked_bar.rb", "test/test_spider.rb", "test/test_stacked_area.rb", "test/test_stacked_bar.rb"] s.files = `git ls-files`.split($/) # s.has_rdoc = true s.homepage = %q{http://nubyonrails.com/pages/gruff} # s.rdoc_options = ["--main", "README.txt"] s.require_paths = ["lib"] # s.rubyforge_project = %q{gruff} # s.rubygems_version = %q{1.3.1} s.summary = %q{Beautiful graphs for one or multiple datasets.} # s.test_files = ["test/test_accumulator_bar.rb", "test/test_area.rb", "test/test_bar.rb", "test/test_base.rb", "test/test_bullet.rb", "test/test_dot.rb", "test/test_legend.rb", "test/test_line.rb", "test/test_mini_bar.rb", "test/test_mini_pie.rb", "test/test_mini_side_bar.rb", "test/test_net.rb", "test/test_photo.rb", "test/test_pie.rb", "test/test_scene.rb", "test/test_side_bar.rb", "test/test_sidestacked_bar.rb", "test/test_spider.rb", "test/test_stacked_area.rb", "test/test_stacked_bar.rb"] s.test_files = s.files.grep(%r{^(test|spec|features)/}) s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) } # s.specification_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION # s.add_development_dependency(%q, [">= 1.8.2"]) # s.add_dependency(%q, [">= 2.12.2"]) end gruff-0.3.7/Gemfile0000644000004100000410000000033012055510742014152 0ustar www-datawww-datasource 'https://rubygems.org' # Specify your gem's dependencies in gruff.gemspec gemspec group :test do gem 'rake' platform :ruby do gem 'rmagick' end platform :jruby do gem 'rmagick4j' end end gruff-0.3.7/Manifest.txt0000644000004100000410000000377412055510742015205 0ustar www-datawww-dataHistory.txt MIT-LICENSE Manifest.txt README.txt Rakefile assets/bubble.png assets/city_scene/background/0000.png assets/city_scene/background/0600.png assets/city_scene/background/2000.png assets/city_scene/clouds/cloudy.png assets/city_scene/clouds/partly_cloudy.png assets/city_scene/clouds/stormy.png assets/city_scene/grass/default.png assets/city_scene/haze/true.png assets/city_scene/number_sample/1.png assets/city_scene/number_sample/2.png assets/city_scene/number_sample/default.png assets/city_scene/sky/0000.png assets/city_scene/sky/0200.png assets/city_scene/sky/0400.png assets/city_scene/sky/0600.png assets/city_scene/sky/0800.png assets/city_scene/sky/1000.png assets/city_scene/sky/1200.png assets/city_scene/sky/1400.png assets/city_scene/sky/1500.png assets/city_scene/sky/1700.png assets/city_scene/sky/2000.png assets/pc306715.jpg assets/plastik/blue.png assets/plastik/green.png assets/plastik/red.png init.rb lib/gruff.rb lib/gruff/accumulator_bar.rb lib/gruff/area.rb lib/gruff/bar.rb lib/gruff/bar_conversion.rb lib/gruff/base.rb lib/gruff/bullet.rb lib/gruff/deprecated.rb lib/gruff/dot.rb lib/gruff/line.rb lib/gruff/mini/bar.rb lib/gruff/mini/legend.rb lib/gruff/mini/pie.rb lib/gruff/mini/side_bar.rb lib/gruff/net.rb lib/gruff/photo_bar.rb lib/gruff/pie.rb lib/gruff/scene.rb lib/gruff/side_bar.rb lib/gruff/side_stacked_bar.rb lib/gruff/spider.rb lib/gruff/stacked_area.rb lib/gruff/stacked_bar.rb lib/gruff/stacked_mixin.rb rails_generators/gruff/gruff_generator.rb rails_generators/gruff/templates/controller.rb rails_generators/gruff/templates/functional_test.rb test/gruff_test_case.rb test/test_accumulator_bar.rb test/test_area.rb test/test_bar.rb test/test_base.rb test/test_bullet.rb test/test_dot.rb test/test_legend.rb test/test_line.rb test/test_mini_bar.rb test/test_mini_pie.rb test/test_mini_side_bar.rb test/test_net.rb test/test_photo.rb test/test_pie.rb test/test_scene.rb test/test_side_bar.rb test/test_sidestacked_bar.rb test/test_spider.rb test/test_stacked_area.rb test/test_stacked_bar.rb gruff-0.3.7/.gitignore0000644000004100000410000000006512055510742014654 0ustar www-datawww-data/.idea/ /pkg/ .DS_Store /test/output .bundle .yardoc gruff-0.3.7/README.txt0000644000004100000410000000160012055510742014356 0ustar www-datawww-data== MAIN FIX Zero Division Problem == Gruff Graphs A library for making beautiful graphs. == Samples http://nubyonrails.com/pages/gruff == Documentation http://gruff.rubyforge.org See the test suite in test/line_test.rb for examples. == Rails Plugin Gruff is easy to use with Rails. gem install gruff cd vendor/plugins && gem unpack gruff == WARNING This is beta-quality software. It works well according to my tests, but the API may change and other features will be added. == Source The source for this project is now kept at GitHub: http://github.com/topfunky/gruff/tree/master == CONTRIBUTE Patches appreciated, especially if they are in Git format (with metadata so your name shows up in the commit logs). Use these instructions: http://gweezlebur.com/2008/2/1/so-you-want-to-contribute-to-merb-core-part-1 http://gweezlebur.com/2008/2/9/contributing-to-merb-part-2 gruff-0.3.7/lib/0000755000004100000410000000000012055510742013431 5ustar www-datawww-datagruff-0.3.7/lib/gruff/0000755000004100000410000000000012055510742014542 5ustar www-datawww-datagruff-0.3.7/lib/gruff/photo_bar.rb0000644000004100000410000000540212055510742017045 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' # EXPERIMENTAL! # # Doesn't work yet. # class Gruff::PhotoBar < Gruff::Base # TODO # # define base and cap in yml # allow for image directory to be located elsewhere # more exact measurements for bar heights (go all the way to the bottom of the graph) # option to tile images instead of use a single image # drop base label a few px lower so photo bar graphs can have a base dropping over the lower marker line # # The name of a pre-packaged photo-based theme. attr_reader :theme # def initialize(target_width=800) # super # init_photo_bar_graphics() # end def draw super return unless @has_data return # TODO Remove for further development init_photo_bar_graphics() #Draw#define_clip_path() #Draw#clip_path(pathname) #Draw#composite....with bar graph image OverCompositeOp # # See also # # Draw.pattern # define an image to tile as the filling of a draw object # # Setup spacing. # # Columns sit side-by-side. spacing_factor = 0.9 @bar_width = @norm_data[0][DATA_COLOR_INDEX].columns @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| data_point = 0 if data_point.nil? # Use incremented x and scaled y left_x = @graph_left + (@bar_width * (row_index + point_index + ((@data.length - 1) * point_index))) left_y = @graph_top + (@graph_height - data_point * @graph_height) + 1 right_x = left_x + @bar_width * spacing_factor right_y = @graph_top + @graph_height - 1 bar_image_width = data_row[DATA_COLOR_INDEX].columns bar_image_height = right_y.to_f - left_y.to_f # Crop to scale for data bar_image = data_row[DATA_COLOR_INDEX].crop(0, 0, bar_image_width, bar_image_height) @d.gravity = NorthWestGravity @d = @d.composite(left_x, left_y, bar_image_width, bar_image_height, bar_image) # Calculate center based on bar_width and current row label_center = @graph_left + (@data.length * @bar_width * point_index) + (@data.length * @bar_width / 2.0) draw_label(label_center, point_index) end end @d.draw(@base_image) end # Return the chosen theme or the default def theme @theme || 'plastik' end protected # Sets up colors with a list of images that will be used. # Images should be 340px tall def init_photo_bar_graphics color_list = Array.new theme_dir = File.dirname(__FILE__) + '/../../assets/' + theme Dir.open(theme_dir).each do |file| next unless /\.png$/.match(file) color_list << Image.read("#{theme_dir}/#{file}").first end @colors = color_list end end gruff-0.3.7/lib/gruff/version.rb0000644000004100000410000000004512055510742016553 0ustar www-datawww-datamodule Gruff VERSION = '0.3.7' end gruff-0.3.7/lib/gruff/side_bar.rb0000644000004100000410000000753212055510742016646 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' ## # Graph with individual horizontal bars instead of vertical bars. class Gruff::SideBar < Gruff::Base # Spacing factor applied between bars attr_accessor :bar_spacing def draw @has_left_labels = true super return unless @has_data draw_bars end protected def draw_bars # Setup spacing. # @bar_spacing ||= 0.9 @bars_width = @graph_height / @column_count.to_f @bar_width = @bars_width / @norm_data.size @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) length = Array.new(@column_count, @graph_left) padding = (@bar_width * (1 - @bar_spacing)) / 2 @norm_data.each_with_index do |data_row, row_index| @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| # Using the original calcs from the stacked bar chart # to get the difference between # part of the bart chart we wish to stack. temp1 = @graph_left + (@graph_width - data_point * @graph_width - height[point_index]) temp2 = @graph_left + @graph_width - height[point_index] difference = temp2 - temp1 left_x = length[point_index] - 1 left_y = @graph_top + (@bars_width * point_index) + (@bar_width * row_index) + padding right_x = left_x + difference right_y = left_y + @bar_width * @bar_spacing height[point_index] += (data_point * @graph_width) @d = @d.rectangle(left_x, left_y, right_x, right_y) # Calculate center based on bar_width and current row label_center = @graph_top + (@bars_width * point_index + @bars_width / 2) draw_label(label_center, point_index) end end @d.draw(@base_image) end # Instead of base class version, draws vertical background lines and label def draw_line_markers return if @hide_line_markers @d = @d.stroke_antialias false # Draw horizontal line markers and annotate with numbers @d = @d.stroke(@marker_color) @d = @d.stroke_width 1 number_of_lines = 5 # TODO Round maximum marker value to a round number like 100, 0.1, 0.5, etc. increment = significant(@spread.to_f / number_of_lines) (0..number_of_lines).each do |index| line_diff = (@graph_right - @graph_left) / number_of_lines x = @graph_right - (line_diff * index) - 1 @d = @d.line(x, @graph_bottom, x, @graph_top) diff = index - number_of_lines marker_label = diff.abs * increment + @minimum_value unless @hide_line_numbers @d.fill = @font_color @d.font = @font if @font @d.stroke = 'transparent' @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = CenterGravity # TODO Center text over line @d = @d.annotate_scaled( @base_image, 0, 0, # Width of box to draw text in x, @graph_bottom + (LABEL_MARGIN * 2.0), # Coordinates of text marker_label.to_s, @scale) end # unless @d = @d.stroke_antialias true end end ## # Draw on the Y axis instead of the X def draw_label(y_offset, index) if !@labels[index].nil? && @labels_seen[index].nil? @d.fill = @font_color @d.font = @font if @font @d.stroke = 'transparent' @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = EastGravity @d = @d.annotate_scaled(@base_image, 1, 1, -@graph_left + LABEL_MARGIN * 2.0, y_offset, @labels[index], @scale) @labels_seen[index] = 1 end end end gruff-0.3.7/lib/gruff/base.rb0000644000004100000410000010405212055510742016003 0ustar www-datawww-datarequire 'rubygems' require 'RMagick' require 'bigdecimal' require File.dirname(__FILE__) + '/deprecated' ## # = Gruff. Graphs. # # Author:: Geoffrey Grosenbach boss@topfunky.com # # Originally Created:: October 23, 2005 # # Extra thanks to Tim Hunter for writing RMagick, and also contributions by # Jarkko Laine, Mike Perham, Andreas Schwarz, Alun Eyre, Guillaume Theoret, # David Stokar, Paul Rogers, Dave Woodward, Frank Oxener, Kevin Clark, Cies # Breijs, Richard Cowin, and a cast of thousands. # # See Gruff::Base#theme= for setting themes. module Gruff class Base include Magick include Deprecated # Draw extra lines showing where the margins and text centers are DEBUG = false # Used for navigating the array of data to plot DATA_LABEL_INDEX = 0 DATA_VALUES_INDEX = 1 DATA_COLOR_INDEX = 2 DATA_VALUES_X_INDEX = 3 # Space around text elements. Mostly used for vertical spacing LEGEND_MARGIN = TITLE_MARGIN = 20.0 LABEL_MARGIN = 10.0 DEFAULT_MARGIN = 20.0 DEFAULT_TARGET_WIDTH = 800 THOUSAND_SEPARATOR = ',' # Blank space above the graph attr_accessor :top_margin # Blank space below the graph attr_accessor :bottom_margin # Blank space to the right of the graph attr_accessor :right_margin # Blank space to the left of the graph attr_accessor :left_margin # Blank space below the title attr_accessor :title_margin # Blank space below the legend attr_accessor :legend_margin # A hash of names for the individual columns, where the key is the array # index for the column this label represents. # # Not all columns need to be named. # # Example: 0 => 2005, 3 => 2006, 5 => 2007, 7 => 2008 attr_accessor :labels # Used internally for spacing. # # By default, labels are centered over the point they represent. attr_accessor :center_labels_over_point # Used internally for horizontal graph types. attr_accessor :has_left_labels # A label for the bottom of the graph attr_accessor :x_axis_label # A label for the left side of the graph attr_accessor :y_axis_label # attr_accessor :x_axis_increment # Manually set increment of the horizontal marking lines attr_accessor :y_axis_increment # Get or set the list of colors that will be used to draw the bars or lines. attr_accessor :colors # The large title of the graph displayed at the top attr_accessor :title # Font used for titles, labels, etc. Works best if you provide the full # path to the TTF font file. RMagick must be built with the Freetype # libraries for this to work properly. # # Tries to find Bitstream Vera (Vera.ttf) in the location specified by # ENV['MAGICK_FONT_PATH']. Uses default RMagick font otherwise. # # The font= method below fulfills the role of the writer, so we only need # a reader here. attr_reader :font attr_accessor :font_color # Prevent drawing of line markers attr_accessor :hide_line_markers # Prevent drawing of the legend attr_accessor :hide_legend # Prevent drawing of the title attr_accessor :hide_title # Prevent drawing of line numbers attr_accessor :hide_line_numbers # Message shown when there is no data. Fits up to 20 characters. Defaults # to "No Data." attr_accessor :no_data_message # The font size of the large title at the top of the graph attr_accessor :title_font_size # Optionally set the size of the font. Based on an 800x600px graph. # Default is 20. # # Will be scaled down if graph is smaller than 800px wide. attr_accessor :legend_font_size # The font size of the labels around the graph attr_accessor :marker_font_size # The color of the auxiliary lines attr_accessor :marker_color # The number of horizontal lines shown for reference attr_accessor :marker_count # You can manually set a minimum value instead of having the values # guessed for you. # # Set it after you have given all your data to the graph object. attr_accessor :minimum_value # You can manually set a maximum value, such as a percentage-based graph # that always goes to 100. # # If you use this, you must set it after you have given all your data to # the graph object. attr_accessor :maximum_value # Set to false if you don't want the data to be sorted with largest avg # values at the back. attr_accessor :sort # Experimental attr_accessor :additional_line_values # Experimental attr_accessor :stacked # Optionally set the size of the colored box by each item in the legend. # Default is 20.0 # # Will be scaled down if graph is smaller than 800px wide. attr_accessor :legend_box_size # If one numerical argument is given, the graph is drawn at 4/3 ratio # according to the given width (800 results in 800x600, 400 gives 400x300, # etc.). # # Or, send a geometry string for other ratios ('800x400', '400x225'). # # Looks for Bitstream Vera as the default font. Expects an environment var # of MAGICK_FONT_PATH to be set. (Uses RMagick's default font otherwise.) def initialize(target_width=DEFAULT_TARGET_WIDTH) if not Numeric === target_width geometric_width, geometric_height = target_width.split('x') @columns = geometric_width.to_f @rows = geometric_height.to_f else @columns = target_width.to_f @rows = target_width.to_f * 0.75 end initialize_ivars reset_themes theme_keynote end # Set instance variables for this object. # # Subclasses can override this, call super, then set values separately. # # This makes it possible to set defaults in a subclass but still allow # developers to change this values in their program. def initialize_ivars # Internal for calculations @raw_columns = 800.0 @raw_rows = 800.0 * (@rows/@columns) @column_count = 0 @marker_count = nil @maximum_value = @minimum_value = nil @has_data = false @data = Array.new @labels = Hash.new @labels_seen = Hash.new @sort = true @title = nil @scale = @columns / @raw_columns vera_font_path = File.expand_path('Vera.ttf', ENV['MAGICK_FONT_PATH']) @font = File.exists?(vera_font_path) ? vera_font_path : nil @marker_font_size = 21.0 @legend_font_size = 20.0 @title_font_size = 36.0 @top_margin = @bottom_margin = @left_margin = @right_margin = DEFAULT_MARGIN @legend_margin = LEGEND_MARGIN @title_margin = TITLE_MARGIN @legend_box_size = 20.0 @no_data_message = "No Data" @hide_line_markers = @hide_legend = @hide_title = @hide_line_numbers = false @center_labels_over_point = true @has_left_labels = false @additional_line_values = [] @additional_line_colors = [] @theme_options = {} @x_axis_label = @y_axis_label = nil @y_axis_increment = nil @stacked = nil @norm_data = nil end # Sets the top, bottom, left and right margins to +margin+. def margins=(margin) @top_margin = @left_margin = @right_margin = @bottom_margin = margin end # Sets the font for graph text to the font at +font_path+. def font=(font_path) @font = font_path @d.font = @font end # Add a color to the list of available colors for lines. # # Example: # add_color('#c0e9d3') def add_color(colorname) @colors << colorname end # Replace the entire color list with a new array of colors. Also # aliased as the colors= setter method. # # If you specify fewer colors than the number of datasets you intend # to draw, 'increment_color' will cycle through the array, reusing # colors as needed. # # Note that (as with the 'theme' method), you should set up your color # list before you send your data (via the 'data' method). Calls to the # 'data' method made prior to this call will use whatever color scheme # was in place at the time data was called. # # Example: # replace_colors ['#cc99cc', '#d9e043', '#34d8a2'] def replace_colors(color_list=[]) @colors = color_list @color_index = 0 end # You can set a theme manually. Assign a hash to this method before you # send your data. # # graph.theme = { # :colors => %w(orange purple green white red), # :marker_color => 'blue', # :background_colors => %w(black grey) # } # # :background_image => 'squirrel.png' is also possible. # # (Or hopefully something better looking than that.) # def theme=(options) reset_themes() defaults = { :colors => ['black', 'white'], :additional_line_colors => [], :marker_color => 'white', :font_color => 'black', :background_colors => nil, :background_image => nil } @theme_options = defaults.merge options @colors = @theme_options[:colors] @marker_color = @theme_options[:marker_color] @font_color = @theme_options[:font_color] || @marker_color @additional_line_colors = @theme_options[:additional_line_colors] render_background end # A color scheme similar to the popular presentation software. def theme_keynote # Colors @blue = '#6886B4' @yellow = '#FDD84E' @green = '#72AE6E' @red = '#D1695E' @purple = '#8A6EAF' @orange = '#EFAA43' @white = 'white' @colors = [@yellow, @blue, @green, @red, @purple, @orange, @white] self.theme = { :colors => @colors, :marker_color => 'white', :font_color => 'white', :background_colors => ['black', '#4a465a'] } end # A color scheme plucked from the colors on the popular usability blog. def theme_37signals # Colors @green = '#339933' @purple = '#cc99cc' @blue = '#336699' @yellow = '#FFF804' @red = '#ff0000' @orange = '#cf5910' @black = 'black' @colors = [@yellow, @blue, @green, @red, @purple, @orange, @black] self.theme = { :colors => @colors, :marker_color => 'black', :font_color => 'black', :background_colors => ['#d1edf5', 'white'] } end # A color scheme from the colors used on the 2005 Rails keynote # presentation at RubyConf. def theme_rails_keynote # Colors @green = '#00ff00' @grey = '#333333' @orange = '#ff5d00' @red = '#f61100' @white = 'white' @light_grey = '#999999' @black = 'black' @colors = [@green, @grey, @orange, @red, @white, @light_grey, @black] self.theme = { :colors => @colors, :marker_color => 'white', :font_color => 'white', :background_colors => ['#0083a3', '#0083a3'] } end # A color scheme similar to that used on the popular podcast site. def theme_odeo # Colors @grey = '#202020' @white = 'white' @dark_pink = '#a21764' @green = '#8ab438' @light_grey = '#999999' @dark_blue = '#3a5b87' @black = 'black' @colors = [@grey, @white, @dark_blue, @dark_pink, @green, @light_grey, @black] self.theme = { :colors => @colors, :marker_color => 'white', :font_color => 'white', :background_colors => ['#ff47a4', '#ff1f81'] } end # A pastel theme def theme_pastel # Colors @colors = [ '#a9dada', # blue '#aedaa9', # green '#daaea9', # peach '#dadaa9', # yellow '#a9a9da', # dk purple '#daaeda', # purple '#dadada' # grey ] self.theme = { :colors => @colors, :marker_color => '#aea9a9', # Grey :font_color => 'black', :background_colors => 'white' } end # A greyscale theme def theme_greyscale # Colors @colors = [ '#282828', # '#383838', # '#686868', # '#989898', # '#c8c8c8', # '#e8e8e8', # ] self.theme = { :colors => @colors, :marker_color => '#aea9a9', # Grey :font_color => 'black', :background_colors => 'white' } end # Parameters are an array where the first element is the name of the dataset # and the value is an array of values to plot. # # Can be called multiple times with different datasets for a multi-valued # graph. # # If the color argument is nil, the next color from the default theme will # be used. # # NOTE: If you want to use a preset theme, you must set it before calling # data(). # # Example: # data("Bart S.", [95, 45, 78, 89, 88, 76], '#ffcc00') def data(name, data_points=[], color=nil) data_points = Array(data_points) # make sure it's an array @data << [name, data_points, (color || increment_color)] # Set column count if this is larger than previous counts @column_count = (data_points.length > @column_count) ? data_points.length : @column_count # Pre-normalize data_points.each_with_index do |data_point, index| next if data_point.nil? # Setup max/min so spread starts at the low end of the data points if @maximum_value.nil? && @minimum_value.nil? @maximum_value = @minimum_value = data_point end # TODO Doesn't work with stacked bar graphs # Original: @maximum_value = larger_than_max?(data_point, index) ? max(data_point, index) : @maximum_value @maximum_value = larger_than_max?(data_point) ? data_point : @maximum_value @has_data = true if @maximum_value >= 0 @minimum_value = less_than_min?(data_point) ? data_point : @minimum_value @has_data = true if @minimum_value < 0 end end # Writes the graph to a file. Defaults to 'graph.png' # # Example: # write('graphs/my_pretty_graph.png') def write(filename="graph.png") draw() @base_image.write(filename) end # Return the graph as a rendered binary blob. def to_blob(fileformat='PNG') draw() return @base_image.to_blob do self.format = fileformat end end protected # Overridden by subclasses to do the actual plotting of the graph. # # Subclasses should start by calling super() for this method. def draw make_stacked if @stacked setup_drawing debug { # Outer margin @d.rectangle( @left_margin, @top_margin, @raw_columns - @right_margin, @raw_rows - @bottom_margin) # Graph area box @d.rectangle( @graph_left, @graph_top, @graph_right, @graph_bottom) } end # Calculates size of drawable area and draws the decorations. # # * line markers # * legend # * title def setup_drawing # Maybe should be done in one of the following functions for more granularity. unless @has_data draw_no_data() return end normalize() setup_graph_measurements() sort_norm_data() if @sort # Sort norm_data with avg largest values set first (for display) draw_legend() draw_line_markers() draw_axis_labels() draw_title end # Make copy of data with values scaled between 0-100 def normalize(force=false) if @norm_data.nil? || force @norm_data = [] return unless @has_data calculate_spread @data.each do |data_row| norm_data_points = [] data_row[DATA_VALUES_INDEX].each do |data_point| if data_point.nil? norm_data_points << nil else norm_data_points << ((data_point.to_f - @minimum_value.to_f ) / @spread) end end @norm_data << [data_row[DATA_LABEL_INDEX], norm_data_points, data_row[DATA_COLOR_INDEX]] end end end def calculate_spread # :nodoc: @spread = @maximum_value.to_f - @minimum_value.to_f @spread = @spread > 0 ? @spread : 1 end ## # Calculates size of drawable area, general font dimensions, etc. def setup_graph_measurements @marker_caps_height = @hide_line_markers ? 0 : calculate_caps_height(@marker_font_size) @title_caps_height = @hide_title ? 0 : calculate_caps_height(@title_font_size) @legend_caps_height = @hide_legend ? 0 : calculate_caps_height(@legend_font_size) if @hide_line_markers (@graph_left, @graph_right_margin, @graph_bottom_margin) = [@left_margin, @right_margin, @bottom_margin] else longest_left_label_width = 0 if @has_left_labels longest_left_label_width = calculate_width(@marker_font_size, labels.values.inject('') { |value, memo| (value.to_s.length > memo.to_s.length) ? value : memo }) * 1.25 else longest_left_label_width = calculate_width(@marker_font_size, label(@maximum_value.to_f)) end # Shift graph if left line numbers are hidden line_number_width = @hide_line_numbers && !@has_left_labels ? 0.0 : (longest_left_label_width + LABEL_MARGIN * 2) @graph_left = @left_margin + line_number_width + (@y_axis_label.nil? ? 0.0 : @marker_caps_height + LABEL_MARGIN * 2) # Make space for half the width of the rightmost column label. # Might be greater than the number of columns if between-style bar markers are used. last_label = @labels.keys.sort.last.to_i extra_room_for_long_label = (last_label >= (@column_count-1) && @center_labels_over_point) ? calculate_width(@marker_font_size, @labels[last_label]) / 2.0 : 0 @graph_right_margin = @right_margin + extra_room_for_long_label @graph_bottom_margin = @bottom_margin + @marker_caps_height + LABEL_MARGIN end @graph_right = @raw_columns - @graph_right_margin @graph_width = @raw_columns - @graph_left - @graph_right_margin # When @hide title, leave a title_margin space for aesthetics. # Same with @hide_legend @graph_top = @top_margin + (@hide_title ? title_margin : @title_caps_height + title_margin ) + (@hide_legend ? legend_margin : @legend_caps_height + legend_margin) x_axis_label_height = @x_axis_label.nil? ? 0.0 : @marker_caps_height + LABEL_MARGIN @graph_bottom = @raw_rows - @graph_bottom_margin - x_axis_label_height @graph_height = @graph_bottom - @graph_top end # Draw the optional labels for the x axis and y axis. def draw_axis_labels unless @x_axis_label.nil? # X Axis # Centered vertically and horizontally by setting the # height to 1.0 and the width to the width of the graph. x_axis_label_y_coordinate = @graph_bottom + LABEL_MARGIN * 2 + @marker_caps_height # TODO Center between graph area @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = NorthGravity @d = @d.annotate_scaled( @base_image, @raw_columns, 1.0, 0.0, x_axis_label_y_coordinate, @x_axis_label, @scale) debug { @d.line 0.0, x_axis_label_y_coordinate, @raw_columns, x_axis_label_y_coordinate } end unless @y_axis_label.nil? # Y Axis, rotated vertically @d.rotation = 90.0 @d.gravity = CenterGravity @d = @d.annotate_scaled( @base_image, 1.0, @raw_rows, @left_margin + @marker_caps_height / 2.0, 0.0, @y_axis_label, @scale) @d.rotation = -90.0 end end # Draws horizontal background lines and labels def draw_line_markers return if @hide_line_markers @d = @d.stroke_antialias false if @y_axis_increment.nil? # Try to use a number of horizontal lines that will come out even. # # TODO Do the same for larger numbers...100, 75, 50, 25 if @marker_count.nil? (3..7).each do |lines| if @spread % lines == 0.0 @marker_count = lines break end end @marker_count ||= 4 end @increment = (@spread > 0) ? significant(@spread / @marker_count) : 1 else # TODO Make this work for negative values @maximum_value = [@maximum_value.ceil, @y_axis_increment].max @minimum_value = @minimum_value.floor calculate_spread normalize(true) @marker_count = (@spread / @y_axis_increment).to_i @increment = @y_axis_increment end @increment_scaled = @graph_height.to_f / (@spread / @increment) # Draw horizontal line markers and annotate with numbers (0..@marker_count).each do |index| y = @graph_top + @graph_height - index.to_f * @increment_scaled @d = @d.fill(@marker_color) @d = @d.line(@graph_left, y, @graph_right, y) marker_label = BigDecimal(index.to_s) * BigDecimal(@increment.to_s) + BigDecimal(@minimum_value.to_s) unless @hide_line_numbers @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = EastGravity # Vertically center with 1.0 for the height @d = @d.annotate_scaled( @base_image, @graph_left - LABEL_MARGIN, 1.0, 0.0, y, label(marker_label), @scale) end end # # Submitted by a contibutor...the utility escapes me # i = 0 # @additional_line_values.each do |value| # @increment_scaled = @graph_height.to_f / (@maximum_value.to_f / value) # # y = @graph_top + @graph_height - @increment_scaled # # @d = @d.stroke(@additional_line_colors[i]) # @d = @d.line(@graph_left, y, @graph_right, y) # # # @d.fill = @additional_line_colors[i] # @d.font = @font if @font # @d.stroke('transparent') # @d.pointsize = scale_fontsize(@marker_font_size) # @d.gravity = EastGravity # @d = @d.annotate_scaled( @base_image, # 100, 20, # -10, y - (@marker_font_size/2.0), # "", @scale) # i += 1 # end @d = @d.stroke_antialias true end ## # Return the sum of values in an array. # # Duplicated to not conflict with active_support in Rails. def sum(arr) arr.inject(0) { |i, m| m + i } end ## # Return a calculation of center def center(size) (@raw_columns - size) / 2 end ## # Draws a legend with the names of the datasets matched # to the colors used to draw them. def draw_legend return if @hide_legend @legend_labels = @data.collect {|item| item[DATA_LABEL_INDEX] } legend_square_width = @legend_box_size # small square with color of this item # May fix legend drawing problem at small sizes @d.font = @font if @font @d.pointsize = @legend_font_size label_widths = [[]] # Used to calculate line wrap @legend_labels.each do |label| metrics = @d.get_type_metrics(@base_image, label.to_s) label_width = metrics.width + legend_square_width * 2.7 label_widths.last.push label_width if sum(label_widths.last) > (@raw_columns * 0.9) label_widths.push [label_widths.last.pop] end end current_x_offset = center(sum(label_widths.first)) current_y_offset = @hide_title ? @top_margin + title_margin : @top_margin + title_margin + @title_caps_height @legend_labels.each_with_index do |legend_label, index| # Draw label @d.fill = @font_color @d.font = @font if @font @d.pointsize = scale_fontsize(@legend_font_size) @d.stroke('transparent') @d.font_weight = NormalWeight @d.gravity = WestGravity @d = @d.annotate_scaled( @base_image, @raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, legend_label.to_s, @scale) # Now draw box with color of this dataset @d = @d.stroke('transparent') @d = @d.fill @data[index][DATA_COLOR_INDEX] @d = @d.rectangle(current_x_offset, current_y_offset - legend_square_width / 2.0, current_x_offset + legend_square_width, current_y_offset + legend_square_width / 2.0) @d.pointsize = @legend_font_size metrics = @d.get_type_metrics(@base_image, legend_label.to_s) current_string_offset = metrics.width + (legend_square_width * 2.7) # Handle wrapping label_widths.first.shift if label_widths.first.empty? debug { @d.line 0.0, current_y_offset, @raw_columns, current_y_offset } label_widths.shift current_x_offset = center(sum(label_widths.first)) unless label_widths.empty? line_height = [@legend_caps_height, legend_square_width].max + legend_margin if label_widths.length > 0 # Wrap to next line and shrink available graph dimensions current_y_offset += line_height @graph_top += line_height @graph_height = @graph_bottom - @graph_top end else current_x_offset += current_string_offset end end @color_index = 0 end # Draws a title on the graph. def draw_title return if (@hide_title || @title.nil?) @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.pointsize = scale_fontsize(@title_font_size) @d.font_weight = BoldWeight @d.gravity = NorthGravity @d = @d.annotate_scaled( @base_image, @raw_columns, 1.0, 0, @top_margin, @title, @scale) end # Draws column labels below graph, centered over x_offset #-- # TODO Allow WestGravity as an option def draw_label(x_offset, index) return if @hide_line_markers if !@labels[index].nil? && @labels_seen[index].nil? y_offset = @graph_bottom + LABEL_MARGIN @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = NorthGravity @d = @d.annotate_scaled(@base_image, 1.0, 1.0, x_offset, y_offset, @labels[index], @scale) @labels_seen[index] = 1 debug { @d.line 0.0, y_offset, @raw_columns, y_offset } end end # Shows an error message because you have no data. def draw_no_data @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(80) @d.gravity = CenterGravity @d = @d.annotate_scaled( @base_image, @raw_columns, @raw_rows/2.0, 0, 10, @no_data_message, @scale) end # Finds the best background to render based on the provided theme options. # # Creates a @base_image to draw on. def render_background case @theme_options[:background_colors] when Array @base_image = render_gradiated_background(*@theme_options[:background_colors]) when String @base_image = render_solid_background(@theme_options[:background_colors]) else @base_image = render_image_background(*@theme_options[:background_image]) end end # Make a new image at the current size with a solid +color+. def render_solid_background(color) Image.new(@columns, @rows) { self.background_color = color } end # Use with a theme definition method to draw a gradiated background. def render_gradiated_background(top_color, bottom_color) Image.new(@columns, @rows, GradientFill.new(0, 0, 100, 0, top_color, bottom_color)) end # Use with a theme to use an image (800x600 original) background. def render_image_background(image_path) image = Image.read(image_path) if @scale != 1.0 image[0].resize!(@scale) # TODO Resize with new scale (crop if necessary for wide graph) end image[0] end # Use with a theme to make a transparent background def render_transparent_background Image.new(@columns, @rows) do self.background_color = 'transparent' end end # Resets everything to defaults (except data). def reset_themes @color_index = 0 @labels_seen = {} @theme_options = {} @d = Draw.new # Scale down from 800x600 used to calculate drawing. @d = @d.scale(@scale, @scale) end def scale(value) # :nodoc: value * @scale end # Return a comparable fontsize for the current graph. def scale_fontsize(value) new_fontsize = value * @scale # return new_fontsize < 10.0 ? 10.0 : new_fontsize return new_fontsize end def clip_value_if_greater_than(value, max_value) # :nodoc: (value > max_value) ? max_value : value end # Overridden by subclasses such as stacked bar. def larger_than_max?(data_point, index=0) # :nodoc: data_point > @maximum_value end def less_than_min?(data_point, index=0) # :nodoc: data_point < @minimum_value end # Overridden by subclasses that need it. def max(data_point, index) # :nodoc: data_point end # Overridden by subclasses that need it. def min(data_point, index) # :nodoc: data_point end def significant(i) # :nodoc: return 1.0 if i == 0 # Keep from going into infinite loop inc = BigDecimal(i.to_s) factor = BigDecimal('1.0') while (inc < 10) inc *= 10 factor /= 10 end while (inc > 100) inc /= 10 factor *= 10 end res = inc.floor * factor if (res.to_i.to_f == res) res.to_i else res end end # Sort with largest overall summed value at front of array so it shows up # correctly in the drawn graph. def sort_norm_data @norm_data.sort! { |a,b| sums(b[DATA_VALUES_INDEX]) <=> sums(a[DATA_VALUES_INDEX]) } end def sums(data_set) # :nodoc: total_sum = 0 data_set.collect {|num| total_sum += num.to_f } total_sum end # Used by StackedBar and child classes. # # May need to be moved to the StackedBar class. def get_maximum_by_stack # Get sum of each stack max_hash = {} @data.each do |data_set| data_set[DATA_VALUES_INDEX].each_with_index do |data_point, i| max_hash[i] = 0.0 unless max_hash[i] max_hash[i] += data_point.to_f end end # @maximum_value = 0 max_hash.keys.each do |key| @maximum_value = max_hash[key] if max_hash[key] > @maximum_value end @minimum_value = 0 end def make_stacked # :nodoc: stacked_values = Array.new(@column_count, 0) @data.each do |value_set| value_set[DATA_VALUES_INDEX].each_with_index do |value, index| stacked_values[index] += value end value_set[DATA_VALUES_INDEX] = stacked_values.dup end end private # Takes a block and draws it if DEBUG is true. # # Example: # debug { @d.rectangle x1, y1, x2, y2 } def debug if DEBUG @d = @d.fill 'transparent' @d = @d.stroke 'turquoise' @d = yield end end # Returns the next color in your color list. def increment_color @color_index = (@color_index + 1) % @colors.length return @colors[@color_index - 1] end # Return a formatted string representing a number value that should be # printed as a label. def label(value) label = if (@spread.to_f % (@marker_count.to_f==0 ? 1 : @marker_count.to_f) == 0) || !@y_axis_increment.nil? value.to_i.to_s elsif @spread > 10.0 sprintf("%0i", value) elsif @spread >= 3.0 sprintf("%0.2f", value) else value.to_s end parts = label.split('.') parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{THOUSAND_SEPARATOR}") parts.join('.') end # Returns the height of the capital letter 'X' for the current font and # size. # # Not scaled since it deals with dimensions that the regular scaling will # handle. def calculate_caps_height(font_size) @d.pointsize = font_size @d.font = @font if @font @d.get_type_metrics(@base_image, 'X').height end # Returns the width of a string at this pointsize. # # Not scaled since it deals with dimensions that the regular # scaling will handle. def calculate_width(font_size, text) return 0 if text.nil? @d.pointsize = font_size @d.font = @font if @font @d.get_type_metrics(@base_image, text.to_s).width end end # Gruff::Base class IncorrectNumberOfDatasetsException < StandardError; end end # Gruff module Magick class Draw # Additional method to scale annotation text since Draw.scale doesn't. def annotate_scaled(img, width, height, x, y, text, scale) scaled_width = (width * scale) >= 1 ? (width * scale) : 1 scaled_height = (height * scale) >= 1 ? (height * scale) : 1 self.annotate( img, scaled_width, scaled_height, x * scale, y * scale, text) end end end # Magick gruff-0.3.7/lib/gruff/scatter.rb0000644000004100000410000002160212055510742016535 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' # Here's how to set up an XY Scatter Chart # # g = Gruff::Scatter.new(800) # g.data(:apples, [1,2,3,4], [4,3,2,1]) # g.data('oranges', [5,7,8], [4,1,7]) # g.write('test/output/scatter.png') # # class Gruff::Scatter < Gruff::Base # Maximum X Value. The value will get overwritten by the max in the # datasets. attr_accessor :maximum_x_value # Minimum X Value. The value will get overwritten by the min in the # datasets. attr_accessor :minimum_x_value # The number of vertical lines shown for reference attr_accessor :marker_x_count #~ # Draw a dashed horizontal line at the given y value #~ attr_accessor :baseline_y_value #~ # Color of the horizontal baseline #~ attr_accessor :baseline_y_color #~ # Draw a dashed horizontal line at the given y value #~ attr_accessor :baseline_x_value #~ # Color of the horizontal baseline #~ attr_accessor :baseline_x_color # Gruff::Scatter takes the same parameters as the Gruff::Line graph # # ==== Example # # g = Gruff::Scatter.new # def initialize(*args) super(*args) @maximum_x_value = @minimum_x_value = nil @baseline_x_color = @baseline_y_color = 'red' @baseline_x_value = @baseline_y_value = nil @marker_x_count = nil end def draw calculate_spread @sort = false # TODO Need to get x-axis labels working. Current behavior will be to not allow. @labels = {} # Translate our values so that we can use the base methods for drawing # the standard chart stuff @column_count = @x_spread super return unless @has_data # Check to see if more than one datapoint was given. NaN can result otherwise. @x_increment = (@column_count > 1) ? (@graph_width / (@column_count - 1).to_f) : @graph_width #~ if (defined?(@norm_y_baseline)) then #~ level = @graph_top + (@graph_height - @norm_baseline * @graph_height) #~ @d = @d.push #~ @d.stroke_color @baseline_color #~ @d.fill_opacity 0.0 #~ @d.stroke_dasharray(10, 20) #~ @d.stroke_width 5 #~ @d.line(@graph_left, level, @graph_left + @graph_width, level) #~ @d = @d.pop #~ end #~ if (defined?(@norm_x_baseline)) then #~ end @norm_data.each do |data_row| prev_x = prev_y = nil data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| x_value = data_row[DATA_VALUES_X_INDEX][index] next if data_point.nil? || x_value.nil? new_x = getXCoord(x_value, @graph_width, @graph_left) new_y = @graph_top + (@graph_height - data_point * @graph_height) # Reset each time to avoid thin-line errors @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill data_row[DATA_COLOR_INDEX] @d = @d.stroke_opacity 1.0 @d = @d.stroke_width clip_value_if_greater_than(@columns / (@norm_data.first[1].size * 4), 5.0) circle_radius = clip_value_if_greater_than(@columns / (@norm_data.first[1].size * 2.5), 5.0) @d = @d.circle(new_x, new_y, new_x - circle_radius, new_y) prev_x = new_x prev_y = new_y end end @d.draw(@base_image) end # The first parameter is the name of the dataset. The next two are the # x and y axis data points contain in their own array in that respective # order. The final parameter is the color. # # Can be called multiple times with different datasets for a multi-valued # graph. # # If the color argument is nil, the next color from the default theme will # be used. # # NOTE: If you want to use a preset theme, you must set it before calling # data(). # # ==== Parameters # name:: String or Symbol containing the name of the dataset. # x_data_points:: An Array of of x-axis data points. # y_data_points:: An Array of of y-axis data points. # color:: The hex string for the color of the dataset. Defaults to nil. # # ==== Exceptions # Data points contain nil values:: # This error will get raised if either the x or y axis data points array # contains a nil value. The graph will not make an assumption # as how to graph nil # x_data_points is empty:: # This error is raised when the array for the x-axis points are empty # y_data_points is empty:: # This error is raised when the array for the y-axis points are empty # x_data_points.length != y_data_points.length:: # Error means that the x and y axis point arrays do not match in length # # ==== Examples # g = Gruff::Scatter.new # g.data(:apples, [1,2,3], [3,2,1]) # g.data('oranges', [1,1,1], [2,3,4]) # g.data('bitter_melon', [3,5,6], [6,7,8], '#000000') # def data(name, x_data_points=[], y_data_points=[], color=nil) raise ArgumentError, "Data Points contain nil Value!" if x_data_points.include?(nil) || y_data_points.include?(nil) raise ArgumentError, "x_data_points is empty!" if x_data_points.empty? raise ArgumentError, "y_data_points is empty!" if y_data_points.empty? raise ArgumentError, "x_data_points.length != y_data_points.length!" if x_data_points.length != y_data_points.length # Call the existing data routine for the y axis data super(name, y_data_points, color) #append the x data to the last entry that was just added in the @data member lastElem = @data.length()-1 @data[lastElem] << x_data_points if @maximum_x_value.nil? && @minimum_x_value.nil? @maximum_x_value = @minimum_x_value = x_data_points.first end @maximum_x_value = x_data_points.max > @maximum_x_value ? x_data_points.max : @maximum_x_value @minimum_x_value = x_data_points.min < @minimum_x_value ? x_data_points.min : @minimum_x_value end protected def calculate_spread #:nodoc: super @x_spread = @maximum_x_value.to_f - @minimum_x_value.to_f @x_spread = @x_spread > 0 ? @x_spread : 1 end def normalize(force=@xy_normalize) if @norm_data.nil? || force @norm_data = [] return unless @has_data @data.each do |data_row| norm_data_points = [data_row[DATA_LABEL_INDEX]] norm_data_points << data_row[DATA_VALUES_INDEX].map do |r| (r.to_f - @minimum_value.to_f) / @spread end norm_data_points << data_row[DATA_COLOR_INDEX] norm_data_points << data_row[DATA_VALUES_X_INDEX].map do |r| (r.to_f - @minimum_x_value.to_f) / @x_spread end @norm_data << norm_data_points end end #~ @norm_y_baseline = (@baseline_y_value.to_f / @maximum_value.to_f) if @baseline_y_value #~ @norm_x_baseline = (@baseline_x_value.to_f / @maximum_x_value.to_f) if @baseline_x_value end def draw_line_markers # do all of the stuff for the horizontal lines on the y-axis super return if @hide_line_markers @d = @d.stroke_antialias false if @x_axis_increment.nil? # TODO Do the same for larger numbers...100, 75, 50, 25 if @marker_x_count.nil? (3..7).each do |lines| if @x_spread % lines == 0.0 @marker_x_count = lines break end end @marker_x_count ||= 4 end @x_increment = (@x_spread > 0) ? significant(@x_spread / @marker_x_count) : 1 else # TODO Make this work for negative values @maximum_x_value = [@maximum_value.ceil, @x_axis_increment].max @minimum_x_value = @minimum_x_value.floor calculate_spread normalize(true) @marker_count = (@x_spread / @x_axis_increment).to_i @x_increment = @x_axis_increment end @increment_x_scaled = @graph_width.to_f / (@x_spread / @x_increment) # Draw vertical line markers and annotate with numbers (0..@marker_x_count).each do |index| x = @graph_left + @graph_width - index.to_f * @increment_x_scaled # TODO Fix the vertical lines. Not pretty when they don't match up with top y-axis line #~ @d = @d.stroke(@marker_color) #~ @d = @d.stroke_width 1 #~ @d = @d.line(x, @graph_top, x, @graph_bottom) unless @hide_line_numbers marker_label = index * @x_increment + @minimum_x_value.to_f y_offset = @graph_bottom + LABEL_MARGIN x_offset = getXCoord(index.to_f, @increment_x_scaled, @graph_left) @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = NorthGravity @d = @d.annotate_scaled(@base_image, 1.0, 1.0, x_offset, y_offset, label(marker_label), @scale) end end @d = @d.stroke_antialias true end private def getXCoord(x_data_point, width, offset) #:nodoc: return(x_data_point * width + offset) end end # end Gruff::Scattergruff-0.3.7/lib/gruff/stacked_bar.rb0000644000004100000410000000346412055510742017340 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' require File.dirname(__FILE__) + '/stacked_mixin' class Gruff::StackedBar < Gruff::Base include StackedMixin # Spacing factor applied between bars attr_accessor :bar_spacing # Draws a bar graph, but multiple sets are stacked on top of each other. def draw get_maximum_by_stack super return unless @has_data # Setup spacing. # # Columns sit stacked. @bar_spacing ||= 0.9 @bar_width = @graph_width / @column_count.to_f padding = (@bar_width * (1 - @bar_spacing)) / 2 @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| @d = @d.fill data_row[DATA_COLOR_INDEX] # Calculate center based on bar_width and current row label_center = @graph_left + (@bar_width * point_index) + (@bar_width * @bar_spacing / 2.0) draw_label(label_center, point_index) next if (data_point == 0) # Use incremented x and scaled y left_x = @graph_left + (@bar_width * point_index) + padding left_y = @graph_top + (@graph_height - data_point * @graph_height - height[point_index]) + 1 right_x = left_x + @bar_width * @bar_spacing right_y = @graph_top + @graph_height - height[point_index] - 1 # update the total height of the current stacked bar height[point_index] += (data_point * @graph_height ) @d = @d.rectangle(left_x, left_y, right_x, right_y) end end @d.draw(@base_image) end end gruff-0.3.7/lib/gruff/pie.rb0000644000004100000410000001024712055510742015650 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' ## # Here's how to make a Pie graph: # # g = Gruff::Pie.new # g.title = "Visual Pie Graph Test" # g.data 'Fries', 20 # g.data 'Hamburgers', 50 # g.write("test/output/pie_keynote.png") # # To control where the pie chart starts creating slices, use #zero_degree. class Gruff::Pie < Gruff::Base TEXT_OFFSET_PERCENTAGE = 0.15 # Can be used to make the pie start cutting slices at the top (-90.0) # or at another angle. Default is 0.0, which starts at 3 o'clock. attr_accessor :zero_degree # Do not show labels for slices that are less than this percent. Use 0 to always show all labels. # Defaults to 0 attr_accessor :hide_labels_less_than def initialize_ivars super @zero_degree = 0.0 @hide_labels_less_than = 0.0 end def draw @hide_line_markers = true super return unless @has_data diameter = @graph_height radius = ([@graph_width, @graph_height].min / 2.0) * 0.8 top_x = @graph_left + (@graph_width - diameter) / 2.0 center_x = @graph_left + (@graph_width / 2.0) center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit total_sum = sums_for_pie() prev_degrees = @zero_degree # Use full data since we can easily calculate percentages data = (@sort ? @data.sort{ |a, b| a[DATA_VALUES_INDEX].first <=> b[DATA_VALUES_INDEX].first } : @data) data.each do |data_row| if data_row[DATA_VALUES_INDEX].first > 0 @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill 'transparent' @d.stroke_width(radius) # stroke width should be equal to radius. we'll draw centered on (radius / 2) current_degrees = (data_row[DATA_VALUES_INDEX].first / total_sum) * 360.0 # ellipse will draw the the stroke centered on the first two parameters offset by the second two. # therefore, in order to draw a circle of the proper diameter we must center the stroke at # half the radius for both x and y @d = @d.ellipse(center_x, center_y, radius / 2.0, radius / 2.0, prev_degrees, prev_degrees + current_degrees + 0.5) # <= +0.5 'fudge factor' gets rid of the ugly gaps half_angle = prev_degrees + ((prev_degrees + current_degrees) - prev_degrees) / 2 label_val = ((data_row[DATA_VALUES_INDEX].first / total_sum) * 100.0).round unless label_val < @hide_labels_less_than # End the string with %% to escape the single %. # RMagick must use sprintf with the string and % has special significance. label_string = label_val.to_s + '%%' @d = draw_label(center_x,center_y, half_angle, radius + (radius * TEXT_OFFSET_PERCENTAGE), label_string) end prev_degrees += current_degrees end end # TODO debug a circle where the text is drawn... @d.draw(@base_image) end private ## # Labels are drawn around a slightly wider ellipse to give room for # labels on the left and right. def draw_label(center_x, center_y, angle, radius, amount) # TODO Don't use so many hard-coded numbers r_offset = 20.0 # The distance out from the center of the pie to get point x_offset = center_x # + 15.0 # The label points need to be tweaked slightly y_offset = center_y # This one doesn't though radius_offset = (radius + r_offset) ellipse_factor = radius_offset * 0.15 x = x_offset + ((radius_offset + ellipse_factor) * Math.cos(angle.deg2rad)) y = y_offset + (radius_offset * Math.sin(angle.deg2rad)) # Draw label @d.fill = @font_color @d.font = @font if @font @d.pointsize = scale_fontsize(@marker_font_size) @d.stroke = 'transparent' @d.font_weight = BoldWeight @d.gravity = CenterGravity @d.annotate_scaled( @base_image, 0, 0, x, y, amount, @scale) end def sums_for_pie total_sum = 0.0 @data.collect {|data_row| total_sum += data_row[DATA_VALUES_INDEX].first } total_sum end end class Float # Used for degree => radian conversions def deg2rad self * (Math::PI/180.0) end end gruff-0.3.7/lib/gruff/area.rb0000644000004100000410000000255512055510742016006 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' class Gruff::Area < Gruff::Base def draw super return unless @has_data @x_increment = @graph_width / (@column_count - 1).to_f @d = @d.stroke 'transparent' @norm_data.each do |data_row| poly_points = Array.new prev_x = prev_y = 0.0 @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| # Use incremented x and scaled y new_x = @graph_left + (@x_increment * index) new_y = @graph_top + (@graph_height - data_point * @graph_height) if prev_x > 0 and prev_y > 0 then poly_points << new_x poly_points << new_y #@d = @d.polyline(prev_x, prev_y, new_x, new_y) else poly_points << @graph_left poly_points << @graph_bottom - 1 poly_points << new_x poly_points << new_y #@d = @d.polyline(@graph_left, @graph_bottom, new_x, new_y) end draw_label(new_x, index) prev_x = new_x prev_y = new_y end # Add closing points, draw polygon poly_points << @graph_right poly_points << @graph_bottom - 1 poly_points << @graph_left poly_points << @graph_bottom - 1 @d = @d.polyline(*poly_points) end @d.draw(@base_image) end end gruff-0.3.7/lib/gruff/stacked_mixin.rb0000644000004100000410000000115012055510742017706 0ustar www-datawww-data module Gruff::Base::StackedMixin # Used by StackedBar and child classes. # # tsal: moved from Base 03 FEB 2007 DATA_VALUES_INDEX = Gruff::Base::DATA_VALUES_INDEX def get_maximum_by_stack # Get sum of each stack max_hash = {} @data.each do |data_set| data_set[DATA_VALUES_INDEX].each_with_index do |data_point, i| max_hash[i] = 0.0 unless max_hash[i] max_hash[i] += data_point.to_f end end # @maximum_value = 0 max_hash.keys.each do |key| @maximum_value = max_hash[key] if max_hash[key] > @maximum_value end @minimum_value = 0 end end gruff-0.3.7/lib/gruff/dot.rb0000644000004100000410000000732712055510742015666 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' ## # Graph with dots and labels along a vertical access # see: 'Creating More Effective Graphs' by Robbins class Gruff::Dot < Gruff::Base def draw @has_left_labels = true super return unless @has_data # Setup spacing. # spacing_factor = 1.0 @items_width = @graph_height / @column_count.to_f @item_width = @items_width * spacing_factor / @norm_data.size @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) length = Array.new(@column_count, @graph_left) padding = (@items_width * (1 - spacing_factor)) / 2 @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| x_pos = @graph_left + (data_point * @graph_width) - (@item_width.to_f/6.0).round y_pos = @graph_top + (@items_width * point_index) + padding + (@item_width.to_f/2.0).round if row_index == 0 @d = @d.stroke(@marker_color) @d = @d.stroke_width 1.0 @d = @d.opacity 0.1 @d = @d.line(@graph_left, y_pos, @graph_left + @graph_width, y_pos) end @d = @d.fill data_row[DATA_COLOR_INDEX] @d = @d.stroke('transparent') @d = @d.circle(x_pos, y_pos, x_pos + (@item_width.to_f/3.0).round, y_pos) # Calculate center based on item_width and current row label_center = @graph_top + (@items_width * point_index + @items_width / 2) + padding draw_label(label_center, point_index) end end @d.draw(@base_image) end protected # Instead of base class version, draws vertical background lines and label def draw_line_markers return if @hide_line_markers @d = @d.stroke_antialias false # Draw horizontal line markers and annotate with numbers @d = @d.stroke(@marker_color) @d = @d.stroke_width 1 number_of_lines = 5 # TODO Round maximum marker value to a round number like 100, 0.1, 0.5, etc. increment = significant(@maximum_value.to_f / number_of_lines) (0..number_of_lines).each do |index| line_diff = (@graph_right - @graph_left) / number_of_lines x = @graph_right - (line_diff * index) - 1 @d = @d.line(x, @graph_bottom, x, @graph_bottom + 0.5 * LABEL_MARGIN) diff = index - number_of_lines marker_label = diff.abs * increment unless @hide_line_numbers @d.fill = @font_color @d.font = @font if @font @d.stroke = 'transparent' @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = CenterGravity # TODO Center text over line @d = @d.annotate_scaled( @base_image, 0, 0, # Width of box to draw text in x, @graph_bottom + (LABEL_MARGIN * 2.0), # Coordinates of text marker_label.to_s, @scale) end # unless @d = @d.stroke_antialias true end end ## # Draw on the Y axis instead of the X def draw_label(y_offset, index) if !@labels[index].nil? && @labels_seen[index].nil? @d.fill = @font_color @d.font = @font if @font @d.stroke = 'transparent' @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = EastGravity @d = @d.annotate_scaled(@base_image, 1, 1, -@graph_left + LABEL_MARGIN * 2.0, y_offset, @labels[index], @scale) @labels_seen[index] = 1 end end end gruff-0.3.7/lib/gruff/bullet.rb0000644000004100000410000000577312055510742016372 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' class Gruff::Bullet < Gruff::Base def initialize(target_width="400x40") if not Numeric === target_width geometric_width, geometric_height = target_width.split('x') @columns = geometric_width.to_f @rows = geometric_height.to_f else @columns = target_width.to_f @rows = target_width.to_f / 5.0 end initialize_ivars reset_themes theme_greyscale @title_font_size = 20 end def data(value, maximum_value, options={}) @value = value.to_f @maximum_value = maximum_value.to_f @options = options @options.map { |k, v| @options[k] = v.to_f if v === Numeric } end # def setup_drawing # # Maybe should be done in one of the following functions for more granularity. # unless @has_data # draw_no_data() # return # end # # normalize() # setup_graph_measurements() # sort_norm_data() if @sort # Sort norm_data with avg largest values set first (for display) # # draw_legend() # draw_line_markers() # draw_axis_labels() # draw_title # end def draw # TODO Left label # TODO Bottom labels and markers # @graph_bottom # Calculations are off 800x??? @colors.reverse! draw_title @margin = 30.0 @thickness = @raw_rows / 6.0 @right_margin = @margin @graph_left = @title_width * 1.3 rescue @margin # HACK Need to calculate real width @graph_width = @raw_columns - @graph_left - @right_margin @graph_height = @thickness * 3.0 # Background @d = @d.fill @colors[0] @d = @d.rectangle(@graph_left, 0, @graph_left + @graph_width, @graph_height) [:high, :low].each_with_index do |indicator, index| next unless @options.has_key?(indicator) @d = @d.fill @colors[index + 1] indicator_width_x = @graph_left + @graph_width * (@options[indicator] / @maximum_value) @d = @d.rectangle(@graph_left, 0, indicator_width_x, @graph_height) end if @options.has_key?(:target) @d = @d.fill @font_color target_x = @graph_left + @graph_width * (@options[:target] / @maximum_value) half_thickness = @thickness / 2.0 @d = @d.rectangle(target_x, half_thickness, target_x + half_thickness, @thickness * 2 + half_thickness) end # Value @d = @d.fill @font_color @d = @d.rectangle(@graph_left, @thickness, @graph_left + @graph_width * (@value / @maximum_value), @thickness * 2) @d.draw(@base_image) end def draw_title return unless @title @font_height = calculate_caps_height(scale_fontsize(@title_font_size)) @title_width = calculate_width(@title_font_size, @title) @d.fill = @font_color @d.font = @font if @font @d.stroke('transparent') @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(@title_font_size) @d.gravity = NorthWestGravity @d = @d.annotate_scaled(*[ @base_image, 1.0, 1.0, @font_height/2, @font_height/2, @title, @scale ]) end end gruff-0.3.7/lib/gruff/stacked_area.rb0000644000004100000410000000337512055510742017505 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' require File.dirname(__FILE__) + '/stacked_mixin' class Gruff::StackedArea < Gruff::Base include StackedMixin attr_accessor :last_series_goes_on_bottom def draw get_maximum_by_stack super return unless @has_data @x_increment = @graph_width / (@column_count - 1).to_f @d = @d.stroke 'transparent' height = Array.new(@column_count, 0) data_points = nil iterator = last_series_goes_on_bottom ? :reverse_each : :each @norm_data.send(iterator) do |data_row| prev_data_points = data_points data_points = Array.new @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| # Use incremented x and scaled y new_x = @graph_left + (@x_increment * index) new_y = @graph_top + (@graph_height - data_point * @graph_height - height[index]) height[index] += (data_point * @graph_height) data_points << new_x data_points << new_y draw_label(new_x, index) end if prev_data_points poly_points = data_points.dup (prev_data_points.length/2 - 1).downto(0) do |i| poly_points << prev_data_points[2*i] poly_points << prev_data_points[2*i+1] end poly_points << data_points[0] poly_points << data_points[1] else poly_points = data_points.dup poly_points << @graph_right poly_points << @graph_bottom - 1 poly_points << @graph_left poly_points << @graph_bottom - 1 poly_points << data_points[0] poly_points << data_points[1] end @d = @d.polyline(*poly_points) end @d.draw(@base_image) end end gruff-0.3.7/lib/gruff/bar.rb0000644000004100000410000000522312055510742015635 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' require File.dirname(__FILE__) + '/bar_conversion' class Gruff::Bar < Gruff::Base # Spacing factor applied between bars attr_accessor :bar_spacing def draw # Labels will be centered over the left of the bar if # there are more labels than columns. This is basically the same # as where it would be for a line graph. @center_labels_over_point = (@labels.keys.length > @column_count ? true : false) super return unless @has_data draw_bars end protected def draw_bars # Setup spacing. # # Columns sit side-by-side. @bar_spacing ||= 0.9 # space between the bars @bar_width = @graph_width / (@column_count * @data.length).to_f padding = (@bar_width * (1 - @bar_spacing)) / 2 @d = @d.stroke_opacity 0.0 # Setup the BarConversion Object conversion = Gruff::BarConversion.new() conversion.graph_height = @graph_height conversion.graph_top = @graph_top # Set up the right mode [1,2,3] see BarConversion for further explanation if @minimum_value >= 0 then # all bars go from zero to positiv conversion.mode = 1 else # all bars go from 0 to negativ if @maximum_value <= 0 then conversion.mode = 2 else # bars either go from zero to negativ or to positiv conversion.mode = 3 conversion.spread = @spread conversion.minimum_value = @minimum_value conversion.zero = -@minimum_value/@spread end end # iterate over all normalised data @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| # Use incremented x and scaled y # x left_x = @graph_left + (@bar_width * (row_index + point_index + ((@data.length - 1) * point_index))) + padding right_x = left_x + @bar_width * @bar_spacing # y conv = [] conversion.getLeftYRightYscaled( data_point, conv ) # create new bar @d = @d.fill data_row[DATA_COLOR_INDEX] @d = @d.rectangle(left_x, conv[0], right_x, conv[1]) # Calculate center based on bar_width and current row label_center = @graph_left + (@data.length * @bar_width * point_index) + (@data.length * @bar_width / 2.0) # Subtract half a bar width to center left if requested draw_label(label_center - (@center_labels_over_point ? @bar_width / 2.0 : 0.0), point_index) end end # Draw the last label if requested draw_label(@graph_right, @column_count) if @center_labels_over_point @d.draw(@base_image) end end gruff-0.3.7/lib/gruff/spider.rb0000644000004100000410000000672512055510742016367 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' # Experimental!!! See also the Net graph. # # Submitted by Kevin Clark http://glu.ttono.us/ class Gruff::Spider < Gruff::Base # Hide all text attr_reader :hide_text attr_accessor :hide_axes attr_reader :transparent_background def transparent_background=(value) @transparent_background = value @base_image = render_transparent_background if value end def hide_text=(value) @hide_title = @hide_text = value end def initialize(max_value, target_width = 800) super(target_width) @max_value = max_value @hide_legend = true; end def draw @hide_line_markers = true super return unless @has_data # Setup basic positioning diameter = @graph_height radius = @graph_height / 2.0 top_x = @graph_left + (@graph_width - diameter) / 2.0 center_x = @graph_left + (@graph_width / 2.0) center_y = @graph_top + (@graph_height / 2.0) - 25 # Move graph up a bit @unit_length = radius / @max_value total_sum = sums_for_spider prev_degrees = 0.0 additive_angle = (2 * Math::PI)/ @data.size current_angle = 0.0 # Draw axes draw_axes(center_x, center_y, radius, additive_angle) unless hide_axes # Draw polygon draw_polygon(center_x, center_y, additive_angle) @d.draw(@base_image) end private def normalize_points(value) value * @unit_length end def draw_label(center_x, center_y, angle, radius, amount) r_offset = 50 # The distance out from the center of the pie to get point x_offset = center_x # The label points need to be tweaked slightly y_offset = center_y + 0 # This one doesn't though x = x_offset + ((radius + r_offset) * Math.cos(angle)) y = y_offset + ((radius + r_offset) * Math.sin(angle)) # Draw label @d.fill = @marker_color @d.font = @font if @font @d.pointsize = scale_fontsize(legend_font_size) @d.stroke = 'transparent' @d.font_weight = BoldWeight @d.gravity = CenterGravity @d.annotate_scaled( @base_image, 0, 0, x, y, amount, @scale) end def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil) return if hide_axes current_angle = 0.0 @data.each do |data_row| @d.stroke(line_color || data_row[DATA_COLOR_INDEX]) @d.stroke_width 5.0 x_offset = radius * Math.cos(current_angle) y_offset = radius * Math.sin(current_angle) @d.line(center_x, center_y, center_x + x_offset, center_y + y_offset) draw_label(center_x, center_y, current_angle, radius, data_row[DATA_LABEL_INDEX].to_s) unless hide_text current_angle += additive_angle end end def draw_polygon(center_x, center_y, additive_angle, color = nil) points = [] current_angle = 0.0 @data.each do |data_row| points << center_x + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.cos(current_angle) points << center_y + normalize_points(data_row[DATA_VALUES_INDEX].first) * Math.sin(current_angle) current_angle += additive_angle end @d.stroke_width 1.0 @d.stroke(color || @marker_color) @d.fill(color || @marker_color) @d.fill_opacity 0.4 @d.polygon(*points) end def sums_for_spider @data.inject(0.0) {|sum, data_row| sum += data_row[DATA_VALUES_INDEX].first} end end gruff-0.3.7/lib/gruff/mini/0000755000004100000410000000000012055510742015476 5ustar www-datawww-datagruff-0.3.7/lib/gruff/mini/legend.rb0000644000004100000410000000724112055510742017265 0ustar www-datawww-datamodule Gruff module Mini module Legend attr_accessor :hide_mini_legend, :legend_position ## # The canvas needs to be bigger so we can put the legend beneath it. def expand_canvas_for_vertical_legend return if @hide_mini_legend @legend_labels = @data.collect {|item| item[Gruff::Base::DATA_LABEL_INDEX] } legend_height = scale_fontsize( @data.length * calculate_line_height + @top_margin + @bottom_margin) @original_rows = @raw_rows @original_columns = @raw_columns case @legend_position when :right then @rows = [@rows, legend_height].max @columns += calculate_legend_width + @left_margin else @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7 end render_background end def calculate_line_height calculate_caps_height(@legend_font_size) * 1.7 end def calculate_legend_width width = @legend_labels.map { |label| calculate_width(@legend_font_size, label) }.max scale_fontsize(width + 40*1.7) end ## # Draw the legend beneath the existing graph. def draw_vertical_legend return if @hide_mini_legend legend_square_width = 40.0 # small square with color of this item legend_square_margin = 10.0 @legend_left_margin = 100.0 legend_top_margin = 40.0 # May fix legend drawing problem at small sizes @d.font = @font if @font @d.pointsize = @legend_font_size case @legend_position when :right then current_x_offset = @original_columns + @left_margin current_y_offset = @top_margin + legend_top_margin else current_x_offset = @legend_left_margin current_y_offset = @original_rows + legend_top_margin end debug { @d.line 0.0, current_y_offset, @raw_columns, current_y_offset } @legend_labels.each_with_index do |legend_label, index| # Draw label @d.fill = @font_color @d.font = @font if @font @d.pointsize = scale_fontsize(@legend_font_size) @d.stroke = 'transparent' @d.font_weight = Magick::NormalWeight @d.gravity = Magick::WestGravity @d = @d.annotate_scaled( @base_image, @raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, truncate_legend_label(legend_label), @scale) # Now draw box with color of this dataset @d = @d.stroke 'transparent' @d = @d.fill @data[index][Gruff::Base::DATA_COLOR_INDEX] @d = @d.rectangle(current_x_offset, current_y_offset - legend_square_width / 2.0, current_x_offset + legend_square_width, current_y_offset + legend_square_width / 2.0) current_y_offset += calculate_line_height end @color_index = 0 end ## # Shorten long labels so they will fit on the canvas. # # Department of Hu... def truncate_legend_label(label) truncated_label = label.to_s while calculate_width(scale_fontsize(@legend_font_size), truncated_label) > (@columns - @legend_left_margin - @right_margin) && (truncated_label.length > 1) truncated_label = truncated_label[0..truncated_label.length-2] end truncated_label + (truncated_label.length < label.to_s.length ? "..." : '') end end end end gruff-0.3.7/lib/gruff/mini/side_bar.rb0000644000004100000410000000112112055510742017566 0ustar www-datawww-data## # # Makes a small pie graph suitable for display at 200px or even smaller. # module Gruff module Mini class SideBar < Gruff::SideBar include Gruff::Mini::Legend def initialize_ivars super @hide_legend = true @hide_title = true @hide_line_numbers = true @marker_font_size = 50.0 @legend_font_size = 50.0 end def draw expand_canvas_for_vertical_legend super draw_vertical_legend @d.draw(@base_image) end end end end gruff-0.3.7/lib/gruff/mini/pie.rb0000644000004100000410000000113112055510742016574 0ustar www-datawww-data## # # Makes a small pie graph suitable for display at 200px or even smaller. # module Gruff module Mini class Pie < Gruff::Pie include Gruff::Mini::Legend def initialize_ivars super @hide_legend = true @hide_title = true @hide_line_numbers = true @marker_font_size = 60.0 @legend_font_size = 60.0 end def draw expand_canvas_for_vertical_legend super draw_vertical_legend @d.draw(@base_image) end # def draw end # class Pie end end gruff-0.3.7/lib/gruff/mini/bar.rb0000644000004100000410000000114712055510742016572 0ustar www-datawww-data## # # Makes a small bar graph suitable for display at 200px or even smaller. # module Gruff module Mini class Bar < Gruff::Bar include Gruff::Mini::Legend def initialize_ivars super @hide_legend = true @hide_title = true @hide_line_numbers = true @marker_font_size = 50.0 @minimum_value = 0.0 @maximum_value = 0.0 @legend_font_size = 60.0 end def draw expand_canvas_for_vertical_legend super draw_vertical_legend @d.draw(@base_image) end end end end gruff-0.3.7/lib/gruff/deprecated.rb0000644000004100000410000000117712055510742017175 0ustar www-datawww-data ## # A mixin for methods that need to be deleted or have been # replaced by cleaner code. module Gruff module Deprecated def scale_measurements setup_graph_measurements end def total_height @rows + 10 end def graph_top @graph_top * @scale end def graph_height @graph_height * @scale end def graph_left @graph_left * @scale end def graph_width @graph_width * @scale end # TODO Should be calculate_graph_height # def setup_graph_height # @graph_height = @graph_bottom - @graph_top # end end end gruff-0.3.7/lib/gruff/line.rb0000644000004100000410000001700712055510742016023 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' ## # Here's how to make a Line graph: # # g = Gruff::Line.new # g.title = "A Line Graph" # g.data 'Fries', [20, 23, 19, 8] # g.data 'Hamburgers', [50, 19, 99, 29] # g.write("test/output/line.png") # # There are also other options described below, such as #baseline_value, #baseline_color, #hide_dots, and #hide_lines. class Gruff::Line < Gruff::Base # Draw a dashed line at the given value attr_accessor :baseline_value # Color of the baseline attr_accessor :baseline_color # Dimensions of lines and dots; calculated based on dataset size if left unspecified attr_accessor :line_width attr_accessor :dot_radius # Hide parts of the graph to fit more datapoints, or for a different appearance. attr_accessor :hide_dots, :hide_lines #accessors for support of xy data attr_accessor :minimum_x_value attr_accessor :maximum_x_value # Call with target pixel width of graph (800, 400, 300), and/or 'false' to omit lines (points only). # # g = Gruff::Line.new(400) # 400px wide with lines # # g = Gruff::Line.new(400, false) # 400px wide, no lines (for backwards compatibility) # # g = Gruff::Line.new(false) # Defaults to 800px wide, no lines (for backwards compatibility) # # The preferred way is to call hide_dots or hide_lines instead. def initialize(*args) raise ArgumentError, "Wrong number of arguments" if args.length > 2 if args.empty? or ((not Numeric === args.first) && (not String === args.first)) then super() else super args.shift end @hide_dots = @hide_lines = false @baseline_color = 'red' @baseline_value = nil @maximum_x_value = nil @minimum_x_value = nil end # This method allows one to plot a dataset with both X and Y data. # # Parameters are as follows: # name: string, the title of the dataset # x_data_points: an array containing the x data points for the graph # y_data_points: an array containing the y data points for the graph # color: hex number indicating the line color as an RGB triplet # # Notes: # -if (x_data_points.length != y_data_points.length) an error is # returned. # -if the color argument is nil, the next color from the default theme will # be used. # -if you want to use a preset theme, you must set it before calling # dataxy(). # # Example: # g = Gruff::Line.new # g.title = "X/Y Dataset" # g.dataxy("Apples", [1,3,4,5,6,10], [1, 2, 3, 4, 4, 3]) # g.dataxy("Bapples", [1,3,4,5,7,9], [1, 1, 2, 2, 3, 3]) # #you can still use the old data method too if you want: # g.data("Capples", [1, 1, 2, 2, 3, 3]) # #labels will be drawn at the x locations of the 1st dataset that you # #passed in. In this example the lables are drawn at x locations 1,4,6 # g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} #labels def dataxy(name, x_data_points=[], y_data_points=[], color=nil) raise ArgumentError, "x_data_points is nil!" if x_data_points.length == 0 if x_data_points.all?{|p| p.size == 2} x_data_points, y_data_points = x_data_points.map{|p| p[0]}, x_data_points.map{|p| p[1]} end raise ArgumentError, "x_data_points.length != y_data_points.length!" if x_data_points.length != y_data_points.length #call the existing data routine for the y data. self.data(name, y_data_points, color) x_data_points = Array(x_data_points) # make sure it's an array #append the x data to the last entry that was just added in the @data member lastElem = @data.length()-1 @data[lastElem][DATA_VALUES_X_INDEX] = x_data_points # Update the global min/max values for the x data x_data_points.each_with_index do |x_data_point, index| next if x_data_point.nil? # Setup max/min so spread starts at the low end of the data points if @maximum_x_value.nil? && @minimum_x_value.nil? @maximum_x_value = @minimum_x_value = x_data_point end @maximum_x_value = (x_data_point > @maximum_x_value) ? x_data_point : @maximum_x_value @minimum_x_value = (x_data_point < @minimum_x_value) ? x_data_point : @minimum_x_value end end def draw super return unless @has_data # Check to see if more than one datapoint was given. NaN can result otherwise. @x_increment = (@column_count > 1) ? (@graph_width / (@column_count - 1).to_f) : @graph_width #normalize the x data if it is specified @data.each_with_index do |data_row, index| norm_x_data_points = [] if (data_row[DATA_VALUES_X_INDEX] != nil) data_row[DATA_VALUES_X_INDEX].each do |x_data_point| norm_x_data_points << ( (x_data_point.to_f - @minimum_x_value.to_f ) / (@maximum_x_value.to_f - @minimum_x_value.to_f) ) end @norm_data[index] << norm_x_data_points end end if (defined?(@norm_baseline)) then level = @graph_top + (@graph_height - @norm_baseline * @graph_height) @d = @d.push @d.stroke_color @baseline_color @d.fill_opacity 0.0 @d.stroke_dasharray(10, 20) @d.stroke_width 5 @d.line(@graph_left, level, @graph_left + @graph_width, level) @d = @d.pop end @norm_data.each_with_index do |data_row, dr_index| prev_x = prev_y = nil @one_point = contains_one_point_only?(data_row) data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| next if data_point.nil? x_data = data_row[DATA_VALUES_X_INDEX] if (x_data == nil) #use the old method: equally spaced points along the x-axis new_x = @graph_left + (@x_increment * index) else new_x = getXCoord(x_data[index], @graph_width, @graph_left) end draw_label(new_x, index) new_y = @graph_top + (@graph_height - data_point * @graph_height) # Reset each time to avoid thin-line errors @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill data_row[DATA_COLOR_INDEX] @d = @d.stroke_opacity 1.0 @d = @d.stroke_width line_width || clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 4), 5.0) circle_radius = dot_radius || clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 2.5), 5.0) if !@hide_lines and !prev_x.nil? and !prev_y.nil? then @d = @d.line(prev_x, prev_y, new_x, new_y) elsif @one_point # Show a circle if there's just one_point @d = @d.circle(new_x, new_y, new_x - circle_radius, new_y) end @d = @d.circle(new_x, new_y, new_x - circle_radius, new_y) unless @hide_dots prev_x = new_x prev_y = new_y end end @d.draw(@base_image) end def normalize @maximum_value = [@maximum_value.to_f, @baseline_value.to_f].max super @norm_baseline = (@baseline_value.to_f / @maximum_value.to_f) if @baseline_value end def sort_norm_data super unless @data.any?{|d| d[DATA_VALUES_X_INDEX]} end def getXCoord(x_data_point, width, offset) return(x_data_point * width + offset) end def contains_one_point_only?(data_row) # Spin through data to determine if there is just one_value present. one_point = false data_row[DATA_VALUES_INDEX].each do |data_point| if !data_point.nil? if one_point # more than one point, bail return false end # there is at least one data point one_point = true end end return one_point end end gruff-0.3.7/lib/gruff/bar_conversion.rb0000644000004100000410000000250412055510742020101 0ustar www-datawww-data## # Original Author: David Stokar # # This class perfoms the y coordinats conversion for the bar class. # # There are three cases: # # 1. Bars all go from zero in positive direction # 2. Bars all go from zero to negative direction # 3. Bars either go from zero to positive or from zero to negative # class Gruff::BarConversion attr_writer :mode attr_writer :zero attr_writer :graph_top attr_writer :graph_height attr_writer :minimum_value attr_writer :spread def getLeftYRightYscaled( data_point, result ) case @mode when 1 then # Case one # minimum value >= 0 ( only positiv values ) result[0] = @graph_top + @graph_height*(1 - data_point) + 1 result[1] = @graph_top + @graph_height - 1 when 2 then # Case two # only negativ values result[0] = @graph_top + 1 result[1] = @graph_top + @graph_height*(1 - data_point) - 1 when 3 then # Case three # positiv and negativ values val = data_point-@minimum_value/@spread if ( data_point >= @zero ) then result[0] = @graph_top + @graph_height*(1 - (val-@zero)) + 1 result[1] = @graph_top + @graph_height*(1 - @zero) - 1 else result[0] = @graph_top + @graph_height*(1 - (val-@zero)) + 1 result[1] = @graph_top + @graph_height*(1 - @zero) - 1 end else result[0] = 0.0 result[1] = 0.0 end end end gruff-0.3.7/lib/gruff/side_stacked_bar.rb0000644000004100000410000000441312055510742020337 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' require File.dirname(__FILE__) + '/side_bar' require File.dirname(__FILE__) + '/stacked_mixin' ## # New gruff graph type added to enable sideways stacking bar charts # (basically looks like a x/y flip of a standard stacking bar chart) # # alun.eyre@googlemail.com class Gruff::SideStackedBar < Gruff::SideBar include StackedMixin # Spacing factor applied between bars attr_accessor :bar_spacing def draw @has_left_labels = true get_maximum_by_stack super end protected def draw_bars # Setup spacing. # # Columns sit stacked. @bar_spacing ||= 0.9 @bar_width = @graph_height / @column_count.to_f @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) length = Array.new(@column_count, @graph_left) padding = (@bar_width * (1 - @bar_spacing)) / 2 @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| ## using the original calcs from the stacked bar chart to get the difference between ## part of the bart chart we wish to stack. temp1 = @graph_left + (@graph_width - data_point * @graph_width - height[point_index]) + 1 temp2 = @graph_left + @graph_width - height[point_index] - 1 difference = temp2 - temp1 @d = @d.fill data_row[DATA_COLOR_INDEX] left_x = length[point_index] #+ 1 left_y = @graph_top + (@bar_width * point_index) + padding right_x = left_x + difference right_y = left_y + @bar_width * @bar_spacing length[point_index] += difference height[point_index] += (data_point * @graph_width - 2) @d = @d.rectangle(left_x, left_y, right_x, right_y) # Calculate center based on bar_width and current row label_center = @graph_top + (@bar_width * point_index) + (@bar_width * @bar_spacing / 2.0) draw_label(label_center, point_index) end end @d.draw(@base_image) end def larger_than_max?(data_point, index=0) max(data_point, index) > @maximum_value end def max(data_point, index) @data.inject(0) {|sum, item| sum + item[DATA_VALUES_INDEX][index]} end end gruff-0.3.7/lib/gruff/scene.rb0000644000004100000410000001301312055510742016162 0ustar www-datawww-data require "observer" require File.dirname(__FILE__) + '/base' ## # A scene is a non-linear graph that assembles layers together to tell a story. # Layers are folders with appropriately named files (see below). You can group # layers and control them together or just set their values individually. # # Examples: # # * A city scene that changes with the time of day and the weather conditions. # * A traffic map that shows red lines on streets that are crowded and green on free-flowing ones. # # Usage: # # g = Gruff::Scene.new("500x100", "path/to/city_scene_directory") # # # Define order of layers, back to front # g.layers = %w(background haze sky clouds) # # # Define groups that will be controlled by the same input # g.weather_group = %w(clouds) # g.time_group = %w(background sky) # # # Set values for the layers or groups # g.weather = "cloudy" # g.time = Time.now # g.haze = true # # # Write the final graph to disk # g.write "hazy_daytime_city_scene.png" # # # There are several rules that will magically select a layer when possible. # # * Numbered files will be selected according to the closest value that is less than the input value. # * 'true.png' and 'false.png' will be used as booleans. # * Other named files will be used if the input matches the filename (without the filetype extension). # * If there is a file named 'default.png', it will be used unless other input values are set for the corresponding layer. class Gruff::Scene < Gruff::Base # An array listing the foldernames that will be rendered, from back to front. # # g.layers = %w(sky clouds buildings street people) # attr_reader :layers def initialize(target_width, base_dir) @base_dir = base_dir @groups = {} @layers = [] super target_width end def draw # Join all the custom paths and filter out the empty ones image_paths = @layers.map { |layer| layer.path }.select { |path| !path.empty? } images = Magick::ImageList.new(*image_paths) @base_image = images.flatten_images end def layers=(ordered_list) ordered_list.each do |layer_name| @layers << Gruff::Layer.new(@base_dir, layer_name) end end # Group layers to input values # # g.weather_group = ["sky", "sea", "clouds"] # # Set input values # # g.weather = "cloudy" # def method_missing(method_name, *args) case method_name.to_s when /^(\w+)_group=$/ add_group $1, *args return when /^(\w+)=$/ set_input $1, args.first return end super end private def add_group(input_name, layer_names) @groups[input_name] = Gruff::Group.new(input_name, @layers.select { |layer| layer_names.include?(layer.name) }) end def set_input(input_name, input_value) if not @groups[input_name].nil? @groups[input_name].send_updates(input_value) else if chosen_layer = @layers.detect { |layer| layer.name == input_name } chosen_layer.update input_value end end end end class Gruff::Group include Observable attr_reader :name def initialize(folder_name, layers) @name = folder_name layers.each do |layer| layer.observe self end end def send_updates(value) changed notify_observers value end end class Gruff::Layer attr_reader :name def initialize(base_dir, folder_name) @base_dir = base_dir.to_s @name = folder_name.to_s @filenames = Dir.open(File.join(base_dir, folder_name)).entries.select { |file| file =~ /^[^.]+\.png$/ }.sort @selected_filename = select_default end # Register this layer so it receives updates from the group def observe(obj) obj.add_observer self end # Choose the appropriate filename for this layer, based on the input def update(value) @selected_filename = case value.to_s when /^(true|false)$/ select_boolean value when /^(\w|\s)+$/ select_string value when /^-?(\d+\.)?\d+$/ select_numeric value when /(\d\d):(\d\d):\d\d/ select_time "#{$1}#{$2}" else select_default end # Finally, try to use 'default' if we're still blank @selected_filename ||= select_default end # Returns the full path to the selected image, or a blank string def path unless @selected_filename.nil? || @selected_filename.empty? return File.join(@base_dir, @name, @selected_filename) end '' end private # Match "true.png" or "false.png" def select_boolean(value) file_exists_or_blank value.to_s end # Match -5 to _5.png def select_numeric(value) file_exists_or_blank value.to_s.gsub('-', '_') end def select_time(value) times = @filenames.map { |filename| filename.gsub('.png', '') } times.each_with_index do |time, index| if (time > value) && (index > 0) return "#{times[index - 1]}.png" end end return "#{times.last}.png" end # Match "partly cloudy" to "partly_cloudy.png" def select_string(value) file_exists_or_blank value.to_s.gsub(' ', '_') end def select_default @filenames.include?("default.png") ? "default.png" : '' end # Returns the string "#{filename}.png", if it exists. # # Failing that, it returns default.png, or '' if that doesn't exist. def file_exists_or_blank(filename) @filenames.include?("#{filename}.png") ? "#{filename}.png" : select_default end end gruff-0.3.7/lib/gruff/net.rb0000644000004100000410000001021612055510742015655 0ustar www-datawww-data require File.dirname(__FILE__) + '/base' # Experimental!!! See also the Spider graph. class Gruff::Net < Gruff::Base # Hide parts of the graph to fit more datapoints, or for a different appearance. attr_accessor :hide_dots # Dimensions of lines and dots; calculated based on dataset size if left unspecified attr_accessor :line_width attr_accessor :dot_radius def initialize(*args) super @hide_dots = false @hide_line_numbers = true end def draw super return unless @has_data @radius = @graph_height / 2.0 @center_x = @graph_left + (@graph_width / 2.0) @center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit @x_increment = @graph_width / (@column_count - 1).to_f circle_radius = dot_radius || clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 2.5), 5.0) @d = @d.stroke_opacity 1.0 @d = @d.stroke_width line_width || clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 4), 5.0) if (defined?(@norm_baseline)) then level = @graph_top + (@graph_height - @norm_baseline * @graph_height) @d = @d.push @d.stroke_color @baseline_color @d.fill_opacity 0.0 @d.stroke_dasharray(10, 20) @d.stroke_width 5 @d.line(@graph_left, level, @graph_left + @graph_width, level) @d = @d.pop end @norm_data.each do |data_row| prev_x = prev_y = nil @d = @d.stroke data_row[DATA_COLOR_INDEX] @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index| next if data_point.nil? rad_pos = index * Math::PI * 2 / @column_count point_distance = data_point * @radius start_x = @center_x + Math::sin(rad_pos) * point_distance start_y = @center_y - Math::cos(rad_pos) * point_distance next_index = index + 1 < data_row[DATA_VALUES_INDEX].length ? index + 1 : 0 next_rad_pos = next_index * Math::PI * 2 / @column_count next_point_distance = data_row[DATA_VALUES_INDEX][next_index] * @radius end_x = @center_x + Math::sin(next_rad_pos) * next_point_distance end_y = @center_y - Math::cos(next_rad_pos) * next_point_distance @d = @d.line(start_x, start_y, end_x, end_y) @d = @d.circle(start_x, start_y, start_x - circle_radius, start_y) unless @hide_dots end end @d.draw(@base_image) end # the lines connecting in the center, with the first line vertical def draw_line_markers return if @hide_line_markers # have to do this here (AGAIN)... see draw() in this class # because this funtion is called before the @radius, @center_x and @center_y are set @radius = @graph_height / 2.0 @center_x = @graph_left + (@graph_width / 2.0) @center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit # Draw horizontal line markers and annotate with numbers @d = @d.stroke(@marker_color) @d = @d.stroke_width 1 (0..@column_count-1).each do |index| rad_pos = index * Math::PI * 2 / @column_count @d = @d.line(@center_x, @center_y, @center_x + Math::sin(rad_pos) * @radius, @center_y - Math::cos(rad_pos) * @radius) marker_label = labels[index] ? labels[index].to_s : '000' draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius, marker_label) end end private def draw_label(center_x, center_y, angle, radius, amount) r_offset = 1.1 x_offset = center_x # + 15 # The label points need to be tweaked slightly y_offset = center_y # + 0 # This one doesn't though x = x_offset + (radius * r_offset * Math.sin(angle.deg2rad)) y = y_offset - (radius * r_offset * Math.cos(angle.deg2rad)) # Draw label @d.fill = @marker_color @d.font = @font if @font @d.pointsize = scale_fontsize(20) @d.stroke = 'transparent' @d.font_weight = BoldWeight @d.gravity = CenterGravity @d.annotate_scaled(@base_image, 0, 0, x, y, amount, @scale) end end # # This method is already in Float # class Float # # Used for degree => radian conversions # def deg2rad # self * (Math::PI/180.0) # end # end gruff-0.3.7/lib/gruff/accumulator_bar.rb0000644000004100000410000000130512055510742020231 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/base' ## # A special bar graph that shows a single dataset as a set of # stacked bars. The bottom bar shows the running total and # the top bar shows the new value being added to the array. class Gruff::AccumulatorBar < Gruff::StackedBar def draw raise(Gruff::IncorrectNumberOfDatasetsException) unless @data.length == 1 accumulator_array = [] index = 0 increment_array = @data.first[DATA_VALUES_INDEX].inject([]) {|memo, value| memo << ((index > 0) ? (value + memo.max) : value) accumulator_array << memo[index] - value index += 1 memo } data "Accumulator", accumulator_array super end end gruff-0.3.7/lib/gruff.rb0000644000004100000410000000061612055510742015072 0ustar www-datawww-datarequire "gruff/version" # Extra full path added to fix loading errors on some installations. %w( base area bar line dot pie spider net scatter stacked_area stacked_bar side_stacked_bar side_bar accumulator_bar scene mini/legend mini/bar mini/pie mini/side_bar ).each do |filename| require File.dirname(__FILE__) + "/gruff/#{filename}" end # TODO bullet gruff-0.3.7/Gemfile.lock0000644000004100000410000000032012055510742015100 0ustar www-datawww-dataPATH remote: . specs: gruff (0.3.7) GEM remote: https://rubygems.org/ specs: rake (0.9.2.2) rmagick4j (0.3.7) PLATFORMS java ruby DEPENDENCIES gruff! rake rmagick rmagick4j gruff-0.3.7/.rvmrc0000644000004100000410000000031512055510742014014 0ustar www-datawww-dataif [[ -n "$rvm_environments_path" && -s "$rvm_environments_path/ree-1.8.7-2010.02@gruff" ]] ; then . "$rvm_environments_path/ree-1.8.7-2010.02@gruff" else rvm --create use "ree-1.8.7-2010.02@gruff" fi