activesupport-3.2.16/0000755000175000017500000000000012247654667014062 5ustar ondrejondrejactivesupport-3.2.16/CHANGELOG.md0000644000175000017500000001716512247654667015705 0ustar ondrejondrej## Rails 3.2.15 (Oct 16, 2013) ## * Fix ActiveSupport::Cache::FileStore#cleanup to no longer rely on missing each_key method. *Murray Steele* * Add respond_to_missing? for TaggedLogging which is best practice when overriding method_missing. This permits wrapping TaggedLogging by another log abstraction such as em-logger. *Wolfram Arnold* ## Rails 3.2.14 (Jul 22, 2013) ## * Make `Time.at_with_coercion` retain the second fraction and return local time. Fixes #11350 *Neer Friedman*, *Andrew White* * Fix `ActiveSupport::TaggedLogging` incorrectly providing program name the same as log message even when block is not provided. *Carson Reinke* * Override `Time.at` to support the passing of Time-like values when called with a single argument. *Andrew White* * Revert the changes on unicode character encoding from `ActiveSupport::JSON.encode`. This was causing a regression where the resulting string is always returning UTF-8. Also it changes the behavior of this method on a stable release. Fixes #9498. *Rafael Mendonça França* * Fix `ActiveSupport::TimeZone.parse` when time is at a local DST jump. Fixes #9678. *Andrew White* ## Rails 3.2.13 (Mar 18, 2013) ## * Fix DateTime comparison with DateTime::Infinity object. *Dan Kubb* * Remove surrogate unicode character encoding from ActiveSupport::JSON.encode The encoding scheme was broken for unicode characters outside the basic multilingual plane; since json is assumed to be UTF-8, and we already force the encoding to UTF-8 simply pass through the un-encoded characters. *Brett Carter* * Fix mocha v0.13.0 compatibility. *James Mead* * `#as_json` isolates options when encoding a hash. [Backport #8185] Fix #8182 *Yves Senn* * Handle the possible Permission Denied errors atomic.rb might trigger due to its chown and chmod calls. [Backport #8027] *Daniele Sluijters* ## Rails 3.2.12 (Feb 11, 2013) ## * No changes. ## Rails 3.2.11 (Jan 8, 2012) ## * Hash.from_xml raises when it encounters type="symbol" or type="yaml". Use Hash.from_trusted_xml to parse this XML. CVE-2013-0156 *Jeremy Kemper* ## Rails 3.2.10 (Jan 2, 2013) ## * No changes. ## Rails 3.2.9 (Nov 12, 2012) ## * Add logger.push_tags and .pop_tags to complement logger.tagged: class Job def before Rails.logger.push_tags :jobs, self.class.name end def after Rails.logger.pop_tags 2 end end *Jeremy Kemper* * Add %:z and %::z format string support to ActiveSupport::TimeWithZone#strftime. [fixes #6962] *kennyj* ## Rails 3.2.8 (Aug 9, 2012) ## * Fix ActiveSupport integration with Mocha > 0.12.1. *Mike Gunderloy* * Reverted the deprecation of ActiveSupport::JSON::Variable. *Rafael Mendonça França* * ERB::Util.html_escape now escapes single quotes. *Santiago Pastorino* ## Rails 3.2.7 (Jul 26, 2012) ## * Hash#fetch(fetch) is not the same as doing hash[key] * adds a missing require [fixes #6896] * make sure the inflection rules are loaded when cherry-picking active_support/core_ext/string/inflections.rb [fixes #6884] * Merge pull request #6857 from rsutphin/as_core_ext_time_missing_require * bump AS deprecation_horizon to 4.0 ## Rails 3.2.6 (Jun 12, 2012) ## * No changes. ## Rails 3.2.5 (Jun 1, 2012) ## * ActiveSupport::JSON::Variable is deprecated. Define your own #as_json and #encode_json methods for custom JSON string literals. *Erich Menge* ## Rails 3.2.4 (May 31, 2012) ## * Added #beginning_of_hour and #end_of_hour to Time and DateTime core extensions. *Mark J. Titorenko* ## Rails 3.2.3 (March 30, 2012) ## * No changes. ## Rails 3.2.2 (March 1, 2012) ## * No changes. ## Rails 3.2.1 (January 26, 2012) ## * Documentation fixes and improvements. * Update time zone offset information. *Ravil Bayramgalin* * The deprecated `ActiveSupport::Base64.decode64` calls `::Base64.decode64` now. *Jonathan Viney* * Fixes uninitialized constant `ActiveSupport::TaggedLogging::ERROR`. *kennyj* ## Rails 3.2.0 (January 20, 2012) ## * ActiveSupport::Base64 is deprecated in favor of ::Base64. *Sergey Nartimov* * Module#synchronize is deprecated with no replacement. Please use `monitor` from ruby's standard library. * (Date|DateTime|Time)#beginning_of_week accept an optional argument to be able to set the day at which weeks are assumed to start. * Deprecated ActiveSupport::MessageEncryptor#encrypt and decrypt. *José Valim* * ActiveSupport::Notifications.subscribed provides subscriptions to events while a block runs. *fxn* * Module#qualified_const_(defined?|get|set) are analogous to the corresponding methods in the standard API, but accept qualified constant names. *fxn* * Added inflection #deconstantize which complements #demodulize. This inflection removes the righmost segment in a qualified constant name. *fxn* * Added ActiveSupport:TaggedLogging that can wrap any standard Logger class to provide tagging capabilities *DHH* Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff" Logger.tagged("BCX", "Jason") { Logger.info "Stuff" } # Logs "[BCX] [Jason] Stuff" Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } } # Logs "[BCX] [Jason] Stuff" * Added safe_constantize that constantizes a string but returns nil instead of an exception if the constant (or part of it) does not exist *Ryan Oblak* * ActiveSupport::OrderedHash is now marked as extractable when using Array#extract_options! *Prem Sichanugrist* * Added Array#prepend as an alias for Array#unshift and Array#append as an alias for Array#<< *DHH* * The definition of blank string for Ruby 1.9 has been extended to Unicode whitespace. Also, in 1.8 the ideographic space U+3000 is considered to be whitespace. *Akira Matsuda, Damien Mathieu* * The inflector understands acronyms. *dlee* * Deprecated ActiveSupport::Memoizable in favor of Ruby memoization pattern *José Valim* * Added Time#all_day/week/quarter/year as a way of generating ranges (example: Event.where(created_at: Time.now.all_week)) *DHH* * Added instance_accessor: false as an option to Class#cattr_accessor and friends *DHH* * Removed ActiveSupport::SecureRandom in favor of SecureRandom from the standard library *Jon Leighton* * ActiveSupport::OrderedHash now has different behavior for #each and \#each_pair when given a block accepting its parameters with a splat. *Andrew Radev* * ActiveSupport::BufferedLogger#silence is deprecated. If you want to squelch logs for a certain block, change the log level for that block. * ActiveSupport::BufferedLogger#open_log is deprecated. This method should not have been public in the first place. * ActiveSupport::BufferedLogger's behavior of automatically creating the directory for your log file is deprecated. Please make sure to create the directory for your log file before instantiating. * ActiveSupport::BufferedLogger#auto_flushing is deprecated. Either set the sync level on the underlying file handle like this: f = File.open('foo.log', 'w') f.sync = true ActiveSupport::BufferedLogger.new f Or tune your filesystem. The FS cache is now what controls flushing. * ActiveSupport::BufferedLogger#flush is deprecated. Set sync on your filehandle, or tune your filesystem. Please check [3-1-stable](https://github.com/rails/rails/blob/3-1-stable/activesupport/CHANGELOG.md) for previous changes. activesupport-3.2.16/README.rdoc0000644000175000017500000000151712247654667015674 0ustar ondrejondrej= Active Support -- Utility classes and Ruby extensions from Rails Active Support is a collection of utility classes and standard library extensions that were found useful for the Rails framework. These additions reside in this package so they can be loaded as needed in Ruby projects outside of Rails. == Download and installation The latest version of Active Support can be installed with RubyGems: % [sudo] gem install activesupport Source code can be downloaded as part of the Rails project on GitHub * https://github.com/rails/rails/tree/3-2-stable/activesupport == License Active Support is released under the MIT license. == Support API documentation is at * http://api.rubyonrails.org Bug reports and feature requests can be filed with the rest for the Ruby on Rails project here: * https://github.com/rails/rails/issues activesupport-3.2.16/checksums.yaml.gz0000444000175000017500000000041412247654667017347 0ustar ondrejondrej#Re+@ Db60;$ _3< +~<ϟiք;Ax 8pP9yv e payload[:exception] = [e.class.name, e.message] raise e ensure @notifier.publish(name, started, Time.now, @id, payload) end end private def unique_id SecureRandom.hex(10) end end class Event attr_reader :name, :time, :end, :transaction_id, :payload, :duration def initialize(name, start, ending, transaction_id, payload) @name = name @payload = payload.dup @time = start @transaction_id = transaction_id @end = ending @duration = 1000.0 * (@end - @time) end def parent_of?(event) start = (time - event.time) * 1000 start <= 0 && (start + duration >= event.duration) end end end end activesupport-3.2.16/lib/active_support/rescuable.rb0000644000175000017500000001023112247654667022166 0ustar ondrejondrejrequire 'active_support/concern' require 'active_support/core_ext/class/attribute' require 'active_support/core_ext/proc' require 'active_support/core_ext/string/inflections' require 'active_support/core_ext/array/extract_options' module ActiveSupport # Rescuable module adds support for easier exception handling. module Rescuable extend Concern included do class_attribute :rescue_handlers self.rescue_handlers = [] end module ClassMethods # Rescue exceptions raised in controller actions. # # rescue_from receives a series of exception classes or class # names, and a trailing :with option with the name of a method # or a Proc object to be called to handle them. Alternatively a block can # be given. # # Handlers that take one argument will be called with the exception, so # that the exception can be inspected when dealing with it. # # Handlers are inherited. They are searched from right to left, from # bottom to top, and up the hierarchy. The handler of the first class for # which exception.is_a?(klass) holds true is the one invoked, if # any. # # class ApplicationController < ActionController::Base # rescue_from User::NotAuthorized, :with => :deny_access # self defined exception # rescue_from ActiveRecord::RecordInvalid, :with => :show_errors # # rescue_from 'MyAppError::Base' do |exception| # render :xml => exception, :status => 500 # end # # protected # def deny_access # ... # end # # def show_errors(exception) # exception.record.new_record? ? ... # end # end # def rescue_from(*klasses, &block) options = klasses.extract_options! unless options.has_key?(:with) if block_given? options[:with] = block else raise ArgumentError, "Need a handler. Supply an options hash that has a :with key as the last argument." end end klasses.each do |klass| key = if klass.is_a?(Class) && klass <= Exception klass.name elsif klass.is_a?(String) klass else raise ArgumentError, "#{klass} is neither an Exception nor a String" end # put the new handler at the end because the list is read in reverse self.rescue_handlers += [[key, options[:with]]] end end end # Tries to rescue the exception by looking up and calling a registered handler. def rescue_with_handler(exception) if handler = handler_for_rescue(exception) handler.arity != 0 ? handler.call(exception) : handler.call true # don't rely on the return value of the handler end end def handler_for_rescue(exception) # We go from right to left because pairs are pushed onto rescue_handlers # as rescue_from declarations are found. _, rescuer = self.class.rescue_handlers.reverse.detect do |klass_name, handler| # The purpose of allowing strings in rescue_from is to support the # declaration of handler associations for exception classes whose # definition is yet unknown. # # Since this loop needs the constants it would be inconsistent to # assume they should exist at this point. An early raised exception # could trigger some other handler and the array could include # precisely a string whose corresponding constant has not yet been # seen. This is why we are tolerant to unknown constants. # # Note that this tolerance only matters if the exception was given as # a string, otherwise a NameError will be raised by the interpreter # itself when rescue_from CONSTANT is executed. klass = self.class.const_get(klass_name) rescue nil klass ||= klass_name.constantize rescue nil exception.is_a?(klass) if klass end case rescuer when Symbol method(rescuer) when Proc rescuer.bind(self) end end end end activesupport-3.2.16/lib/active_support/basic_object.rb0000644000175000017500000000110012247654667022623 0ustar ondrejondrejmodule ActiveSupport if defined? ::BasicObject # A class with no predefined methods that behaves similarly to Builder's # BlankSlate. Used for proxy classes. class BasicObject < ::BasicObject undef_method :== undef_method :equal? # Let ActiveSupport::BasicObject at least raise exceptions. def raise(*args) ::Object.send(:raise, *args) end end else class BasicObject #:nodoc: instance_methods.each do |m| undef_method(m) if m.to_s !~ /(?:^__|^nil\?$|^send$|^object_id$)/ end end end end activesupport-3.2.16/lib/active_support/log_subscriber.rb0000644000175000017500000000744512247654667023242 0ustar ondrejondrejrequire 'active_support/core_ext/module/attribute_accessors' require 'active_support/core_ext/class/attribute' module ActiveSupport # ActiveSupport::LogSubscriber is an object set to consume ActiveSupport::Notifications # with the sole purpose of logging them. The log subscriber dispatches notifications to # a registered object based on its given namespace. # # An example would be Active Record log subscriber responsible for logging queries: # # module ActiveRecord # class LogSubscriber < ActiveSupport::LogSubscriber # def sql(event) # "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}" # end # end # end # # And it's finally registered as: # # ActiveRecord::LogSubscriber.attach_to :active_record # # Since we need to know all instance methods before attaching the log subscriber, # the line above should be called after your ActiveRecord::LogSubscriber definition. # # After configured, whenever a "sql.active_record" notification is published, # it will properly dispatch the event (ActiveSupport::Notifications::Event) to # the sql method. # # Log subscriber also has some helpers to deal with logging and automatically flushes # all logs when the request finishes (via action_dispatch.callback notification) in # a Rails environment. class LogSubscriber # Embed in a String to clear all previous ANSI sequences. CLEAR = "\e[0m" BOLD = "\e[1m" # Colors BLACK = "\e[30m" RED = "\e[31m" GREEN = "\e[32m" YELLOW = "\e[33m" BLUE = "\e[34m" MAGENTA = "\e[35m" CYAN = "\e[36m" WHITE = "\e[37m" mattr_accessor :colorize_logging self.colorize_logging = true class_attribute :logger class << self remove_method :logger def logger @logger ||= Rails.logger if defined?(Rails) end def attach_to(namespace, log_subscriber=new, notifier=ActiveSupport::Notifications) log_subscribers << log_subscriber @@flushable_loggers = nil log_subscriber.public_methods(false).each do |event| next if 'call' == event.to_s notifier.subscribe("#{event}.#{namespace}", log_subscriber) end end def log_subscribers @@log_subscribers ||= [] end def flushable_loggers @@flushable_loggers ||= begin loggers = log_subscribers.map(&:logger) loggers.uniq! loggers.select { |l| l.respond_to?(:flush) } end end # Flush all log_subscribers' logger. def flush_all! flushable_loggers.each { |log| log.flush } end end def call(message, *args) return unless logger method = message.split('.').first begin send(method, ActiveSupport::Notifications::Event.new(message, *args)) rescue Exception => e logger.error "Could not log #{message.inspect} event. #{e.class}: #{e.message}" end end protected %w(info debug warn error fatal unknown).each do |level| class_eval <<-METHOD, __FILE__, __LINE__ + 1 def #{level}(*args, &block) return unless logger logger.#{level}(*args, &block) end METHOD end # Set color by using a string or one of the defined constants. If a third # option is set to true, it also adds bold to the string. This is based # on the Highline implementation and will automatically append CLEAR to the # end of the returned String. # def color(text, color, bold=false) return text unless colorize_logging color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol) bold = bold ? BOLD : "" "#{bold}#{color}#{text}#{CLEAR}" end def format_duration(duration) "%.1fms" % duration end end end activesupport-3.2.16/lib/active_support/core_ext/0000755000175000017500000000000012247654667021507 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/time/0000755000175000017500000000000012247654667022445 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/time/publicize_conversion_methods.rb0000644000175000017500000000042312247654667030747 0ustar ondrejondrejrequire 'date' class Time # Ruby 1.8-cvs and early 1.9 series define private Time#to_date %w(to_date to_datetime).each do |method| if private_instance_methods.include?(method) || private_instance_methods.include?(method.to_sym) public method end end end activesupport-3.2.16/lib/active_support/core_ext/time/conversions.rb0000644000175000017500000000720612247654667025347 0ustar ondrejondrejrequire 'active_support/inflector/methods' require 'active_support/core_ext/time/publicize_conversion_methods' require 'active_support/values/time_zone' class Time DATE_FORMATS = { :db => "%Y-%m-%d %H:%M:%S", :number => "%Y%m%d%H%M%S", :time => "%H:%M", :short => "%d %b %H:%M", :long => "%B %d, %Y %H:%M", :long_ordinal => lambda { |time| time.strftime("%B #{ActiveSupport::Inflector.ordinalize(time.day)}, %Y %H:%M") }, :rfc822 => lambda { |time| time.strftime("%a, %d %b %Y %H:%M:%S #{time.formatted_offset(false)}") } } DATE_FORMATS[:nsec] = '%Y%m%d%H%M%S%9N' if RUBY_VERSION >= '1.9' # Converts to a formatted string. See DATE_FORMATS for builtin formats. # # This method is aliased to to_s. # # time = Time.now # => Thu Jan 18 06:10:17 CST 2007 # # time.to_formatted_s(:time) # => "06:10" # time.to_s(:time) # => "06:10" # # time.to_formatted_s(:db) # => "2007-01-18 06:10:17" # time.to_formatted_s(:number) # => "20070118061017" # time.to_formatted_s(:short) # => "18 Jan 06:10" # time.to_formatted_s(:long) # => "January 18, 2007 06:10" # time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10" # time.to_formatted_s(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600" # # == Adding your own time formats to +to_formatted_s+ # You can add your own formats to the Time::DATE_FORMATS hash. # Use the format name as the hash key and either a strftime string # or Proc instance that takes a time argument as the value. # # # config/initializers/time_formats.rb # Time::DATE_FORMATS[:month_and_year] = "%B %Y" # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") } def to_formatted_s(format = :default) if formatter = DATE_FORMATS[format] formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter) else to_default_s end end alias_method :to_default_s, :to_s alias_method :to_s, :to_formatted_s # Returns the UTC offset as an +HH:MM formatted string. # # Time.local(2000).formatted_offset # => "-06:00" # Time.local(2000).formatted_offset(false) # => "-0600" def formatted_offset(colon = true, alternate_utc_string = nil) utc? && alternate_utc_string || ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Converts a Time object to a Date, dropping hour, minute, and second precision. # # my_time = Time.now # => Mon Nov 12 22:59:51 -0500 2007 # my_time.to_date # => Mon, 12 Nov 2007 # # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009 # your_time.to_date # => Tue, 13 Jan 2009 def to_date ::Date.new(year, month, day) end unless method_defined?(:to_date) # A method to keep Time, Date and DateTime instances interchangeable on conversions. # In this case, it simply returns +self+. def to_time self end unless method_defined?(:to_time) # Converts a Time instance to a Ruby DateTime instance, preserving UTC offset. # # my_time = Time.now # => Mon Nov 12 23:04:21 -0500 2007 # my_time.to_datetime # => Mon, 12 Nov 2007 23:04:21 -0500 # # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009 # your_time.to_datetime # => Tue, 13 Jan 2009 13:13:03 -0500 def to_datetime ::DateTime.civil(year, month, day, hour, min, sec, Rational(utc_offset, 86400)) end unless method_defined?(:to_datetime) end activesupport-3.2.16/lib/active_support/core_ext/time/marshal.rb0000644000175000017500000000350612247654667024425 0ustar ondrejondrej# Pre-1.9 versions of Ruby have a bug with marshaling Time instances, where utc instances are # unmarshalled in the local zone, instead of utc. We're layering behavior on the _dump and _load # methods so that utc instances can be flagged on dump, and coerced back to utc on load. if !Marshal.load(Marshal.dump(Time.now.utc)).utc? class Time class << self alias_method :_load_without_utc_flag, :_load def _load(marshaled_time) time = _load_without_utc_flag(marshaled_time) time.instance_eval do if defined?(@marshal_with_utc_coercion) val = remove_instance_variable("@marshal_with_utc_coercion") end val ? utc : self end end end alias_method :_dump_without_utc_flag, :_dump def _dump(*args) obj = dup obj.instance_variable_set('@marshal_with_utc_coercion', utc?) obj.send :_dump_without_utc_flag, *args end end end # Ruby 1.9.2 adds utc_offset and zone to Time, but marshaling only # preserves utc_offset. Preserve zone also, even though it may not # work in some edge cases. if Time.local(2010).zone != Marshal.load(Marshal.dump(Time.local(2010))).zone class Time class << self alias_method :_load_without_zone, :_load def _load(marshaled_time) time = _load_without_zone(marshaled_time) time.instance_eval do if zone = defined?(@_zone) && remove_instance_variable('@_zone') ary = to_a ary[0] += subsec if ary[0] == sec ary[-1] = zone utc? ? Time.utc(*ary) : Time.local(*ary) else self end end end end alias_method :_dump_without_zone, :_dump def _dump(*args) obj = dup obj.instance_variable_set('@_zone', zone) obj.send :_dump_without_zone, *args end end end activesupport-3.2.16/lib/active_support/core_ext/time/calculations.rb0000644000175000017500000003256112247654667025462 0ustar ondrejondrejrequire 'active_support/duration' require 'active_support/core_ext/time/conversions' require 'active_support/time_with_zone' require 'active_support/core_ext/time/zones' class Time COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] DAYS_INTO_WEEK = { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 } class << self # Overriding case equality method so that it returns true for ActiveSupport::TimeWithZone instances def ===(other) super || (self == Time && other.is_a?(ActiveSupport::TimeWithZone)) end # Return the number of days in the given month. # If no year is specified, it will use the current year. def days_in_month(month, year = now.year) return 29 if month == 2 && ::Date.gregorian_leap?(year) COMMON_YEAR_DAYS_IN_MONTH[month] end # Returns a new Time if requested year can be accommodated by Ruby's Time class # (i.e., if year is within either 1970..2038 or 1902..2038, depending on system architecture); # otherwise returns a DateTime. def time_with_datetime_fallback(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0, usec=0) time = ::Time.send(utc_or_local, year, month, day, hour, min, sec, usec) # This check is needed because Time.utc(y) returns a time object in the 2000s for 0 <= y <= 138. time.year == year ? time : ::DateTime.civil_from_format(utc_or_local, year, month, day, hour, min, sec) rescue ::DateTime.civil_from_format(utc_or_local, year, month, day, hour, min, sec) end # Wraps class method +time_with_datetime_fallback+ with +utc_or_local+ set to :utc. def utc_time(*args) time_with_datetime_fallback(:utc, *args) end # Wraps class method +time_with_datetime_fallback+ with +utc_or_local+ set to :local. def local_time(*args) time_with_datetime_fallback(:local, *args) end # Returns Time.zone.now when Time.zone or config.time_zone are set, otherwise just returns Time.now. def current ::Time.zone ? ::Time.zone.now : ::Time.now end # Layers additional behavior on Time.at so that ActiveSupport::TimeWithZone and DateTime # instances can be used when called with a single argument def at_with_coercion(*args) return at_without_coercion(*args) if args.size != 1 # Time.at can be called with a time or numerical value time_or_number = args.first if time_or_number.is_a?(ActiveSupport::TimeWithZone) || time_or_number.is_a?(DateTime) at_without_coercion(time_or_number.to_f).getlocal else at_without_coercion(time_or_number) end end alias_method :at_without_coercion, :at alias_method :at, :at_with_coercion end # Tells whether the Time object's time lies in the past def past? self < ::Time.current end # Tells whether the Time object's time is today def today? to_date == ::Date.current end # Tells whether the Time object's time lies in the future def future? self > ::Time.current end # Seconds since midnight: Time.now.seconds_since_midnight def seconds_since_midnight to_i - change(:hour => 0).to_i + (usec / 1.0e+6) end # Returns a new Time where one or more of the elements have been changed according to the +options+ parameter. The time options # (hour, min, sec, usec) reset cascadingly, so if only the hour is passed, then minute, sec, and usec is set to 0. If the hour and # minute is passed, then sec and usec is set to 0. def change(options) ::Time.send( utc? ? :utc_time : :local_time, options[:year] || year, options[:month] || month, options[:day] || day, options[:hour] || hour, options[:min] || (options[:hour] ? 0 : min), options[:sec] || ((options[:hour] || options[:min]) ? 0 : sec), options[:usec] || ((options[:hour] || options[:min] || options[:sec]) ? 0 : usec) ) end # Uses Date to provide precise Time calculations for years, months, and days. # The +options+ parameter takes a hash with any of these keys: :years, # :months, :weeks, :days, :hours, # :minutes, :seconds. def advance(options) unless options[:weeks].nil? options[:weeks], partial_weeks = options[:weeks].divmod(1) options[:days] = (options[:days] || 0) + 7 * partial_weeks end unless options[:days].nil? options[:days], partial_days = options[:days].divmod(1) options[:hours] = (options[:hours] || 0) + 24 * partial_days end d = to_date.advance(options) time_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 seconds_to_advance == 0 ? time_advanced_by_date : time_advanced_by_date.since(seconds_to_advance) end # Returns a new Time representing the time a number of seconds ago, this is basically a wrapper around the Numeric extension def ago(seconds) since(-seconds) end # Returns a new Time representing the time a number of seconds since the instance time def since(seconds) self + seconds rescue to_datetime.since(seconds) end alias :in :since # Returns a new Time representing the time a number of specified weeks ago. def weeks_ago(weeks) advance(:weeks => -weeks) end # Returns a new Time representing the time a number of specified months ago def months_ago(months) advance(:months => -months) end # Returns a new Time representing the time a number of specified months in the future def months_since(months) advance(:months => months) end # Returns a new Time representing the time a number of specified years ago def years_ago(years) advance(:years => -years) end # Returns a new Time representing the time a number of specified years in the future def years_since(years) advance(:years => years) end # Short-hand for years_ago(1) def prev_year years_ago(1) end # Short-hand for years_since(1) def next_year years_since(1) end # Short-hand for months_ago(1) def prev_month months_ago(1) end # Short-hand for months_since(1) def next_month months_since(1) end # Returns number of days to start of this week, week starts on start_day (default is :monday). def days_to_week_start(start_day = :monday) start_day_number = DAYS_INTO_WEEK[start_day] current_day_number = wday != 0 ? wday - 1 : 6 days_span = current_day_number - start_day_number days_span >= 0 ? days_span : 7 + days_span end # Returns a new Time representing the "start" of this week, week starts on start_day (default is :monday, i.e. Monday, 0:00). def beginning_of_week(start_day = :monday) days_to_start = days_to_week_start(start_day) (self - days_to_start.days).midnight end alias :at_beginning_of_week :beginning_of_week # Returns a new +Date+/+DateTime+ representing the start of this week. Week is # assumed to start on a Monday. +DateTime+ objects have their time set to 0:00. def monday beginning_of_week end # Returns a new Time representing the end of this week, week starts on start_day (default is :monday, i.e. end of Sunday). def end_of_week(start_day = :monday) days_to_end = 6 - days_to_week_start(start_day) (self + days_to_end.days).end_of_day end alias :at_end_of_week :end_of_week # Returns a new +Date+/+DateTime+ representing the end of this week. Week is # assumed to start on a Monday. +DateTime+ objects have their time set to 23:59:59. def sunday end_of_week end # Returns a new Time representing the start of the given day in the previous week (default is :monday). def prev_week(day = :monday) ago(1.week).beginning_of_week.since(DAYS_INTO_WEEK[day].day).change(:hour => 0) end # Returns a new Time representing the start of the given day in next week (default is :monday). def next_week(day = :monday) since(1.week).beginning_of_week.since(DAYS_INTO_WEEK[day].day).change(:hour => 0) end # Returns a new Time representing the start of the day (0:00) def beginning_of_day #(self - seconds_since_midnight).change(:usec => 0) change(:hour => 0) end alias :midnight :beginning_of_day alias :at_midnight :beginning_of_day alias :at_beginning_of_day :beginning_of_day # Returns a new Time representing the end of the day, 23:59:59.999999 (.999999999 in ruby1.9) def end_of_day change(:hour => 23, :min => 59, :sec => 59, :usec => Rational(999999999, 1000)) end # Returns a new Time representing the start of the hour (x:00) def beginning_of_hour change(:min => 0) end alias :at_beginning_of_hour :beginning_of_hour # Returns a new Time representing the end of the hour, x:59:59.999999 (.999999999 in ruby1.9) def end_of_hour change(:min => 59, :sec => 59, :usec => Rational(999999999, 1000)) end # Returns a new Time representing the start of the month (1st of the month, 0:00) def beginning_of_month #self - ((self.mday-1).days + self.seconds_since_midnight) change(:day => 1, :hour => 0) end alias :at_beginning_of_month :beginning_of_month # Returns a new Time representing the end of the month (end of the last day of the month) def end_of_month #self - ((self.mday-1).days + self.seconds_since_midnight) last_day = ::Time.days_in_month(month, year) change(:day => last_day, :hour => 23, :min => 59, :sec => 59, :usec => Rational(999999999, 1000)) end alias :at_end_of_month :end_of_month # Returns a new Time representing the start of the quarter (1st of january, april, july, october, 0:00) def beginning_of_quarter beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= month }) end alias :at_beginning_of_quarter :beginning_of_quarter # Returns a new Time representing the end of the quarter (end of the last day of march, june, september, december) def end_of_quarter beginning_of_month.change(:month => [3, 6, 9, 12].detect { |m| m >= month }).end_of_month end alias :at_end_of_quarter :end_of_quarter # Returns a new Time representing the start of the year (1st of january, 0:00) def beginning_of_year change(:month => 1, :day => 1, :hour => 0) end alias :at_beginning_of_year :beginning_of_year # Returns a new Time representing the end of the year (end of the 31st of december) def end_of_year change(:month => 12, :day => 31, :hour => 23, :min => 59, :sec => 59, :usec => Rational(999999999, 1000)) end alias :at_end_of_year :end_of_year # Convenience method which returns a new Time representing the time 1 day ago def yesterday advance(:days => -1) end # Convenience method which returns a new Time representing the time 1 day since the instance time def tomorrow advance(:days => 1) end # Returns a Range representing the whole day of the current time. def all_day beginning_of_day..end_of_day end # Returns a Range representing the whole week of the current time. Week starts on start_day (default is :monday, i.e. end of Sunday). def all_week(start_day = :monday) beginning_of_week(start_day)..end_of_week(start_day) end # Returns a Range representing the whole month of the current time. def all_month beginning_of_month..end_of_month end # Returns a Range representing the whole quarter of the current time. def all_quarter beginning_of_quarter..end_of_quarter end # Returns a Range representing the whole year of the current time. def all_year beginning_of_year..end_of_year end def plus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other other.since(self) else plus_without_duration(other) end end alias_method :plus_without_duration, :+ alias_method :+, :plus_with_duration def minus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other other.until(self) else minus_without_duration(other) end end alias_method :minus_without_duration, :- alias_method :-, :minus_with_duration # Time#- can also be used to determine the number of seconds between two Time instances. # We're layering on additional behavior so that ActiveSupport::TimeWithZone instances # are coerced into values that Time#- will recognize def minus_with_coercion(other) other = other.comparable_time if other.respond_to?(:comparable_time) other.is_a?(DateTime) ? to_f - other.to_f : minus_without_coercion(other) end alias_method :minus_without_coercion, :- alias_method :-, :minus_with_coercion # Layers additional behavior on Time#<=> so that DateTime and ActiveSupport::TimeWithZone instances # can be chronologically compared with a Time def compare_with_coercion(other) # we're avoiding Time#to_datetime cause it's expensive other.is_a?(Time) ? compare_without_coercion(other.to_time) : to_datetime <=> other end alias_method :compare_without_coercion, :<=> alias_method :<=>, :compare_with_coercion # Layers additional behavior on Time#eql? so that ActiveSupport::TimeWithZone instances # can be eql? to an equivalent Time def eql_with_coercion(other) # if other is an ActiveSupport::TimeWithZone, coerce a Time instance from it so we can do eql? comparison other = other.comparable_time if other.respond_to?(:comparable_time) eql_without_coercion(other) end alias_method :eql_without_coercion, :eql? alias_method :eql?, :eql_with_coercion end activesupport-3.2.16/lib/active_support/core_ext/time/acts_like.rb0000644000175000017500000000024412247654667024730 0ustar ondrejondrejrequire 'active_support/core_ext/object/acts_like' class Time # Duck-types as a Time-like class. See Object#acts_like?. def acts_like_time? true end end activesupport-3.2.16/lib/active_support/core_ext/time/zones.rb0000644000175000017500000000657012247654667024140 0ustar ondrejondrejrequire 'active_support/time_with_zone' class Time class << self attr_accessor :zone_default # Returns the TimeZone for the current request, if this has been set (via Time.zone=). # If Time.zone has not been set for the current request, returns the TimeZone specified in config.time_zone. def zone Thread.current[:time_zone] || zone_default end # Sets Time.zone to a TimeZone object for the current request/thread. # # This method accepts any of the following: # # * A Rails TimeZone object. # * An identifier for a Rails TimeZone object (e.g., "Eastern Time (US & Canada)", -5.hours). # * A TZInfo::Timezone object. # * An identifier for a TZInfo::Timezone object (e.g., "America/New_York"). # # Here's an example of how you might set Time.zone on a per request basis and reset it when the request is done. # current_user.time_zone just needs to return a string identifying the user's preferred time zone: # # class ApplicationController < ActionController::Base # around_filter :set_time_zone # # def set_time_zone # old_time_zone = Time.zone # Time.zone = current_user.time_zone if logged_in? # yield # ensure # Time.zone = old_time_zone # end # end def zone=(time_zone) Thread.current[:time_zone] = find_zone!(time_zone) end # Allows override of Time.zone locally inside supplied block; resets Time.zone to existing value when done. def use_zone(time_zone) new_zone = find_zone!(time_zone) begin old_zone, ::Time.zone = ::Time.zone, new_zone yield ensure ::Time.zone = old_zone end end # Returns a TimeZone instance or nil, or raises an ArgumentError for invalid timezones. def find_zone!(time_zone) return time_zone if time_zone.nil? || time_zone.is_a?(ActiveSupport::TimeZone) # lookup timezone based on identifier (unless we've been passed a TZInfo::Timezone) unless time_zone.respond_to?(:period_for_local) time_zone = ActiveSupport::TimeZone[time_zone] || TZInfo::Timezone.get(time_zone) end # Return if a TimeZone instance, or wrap in a TimeZone instance if a TZInfo::Timezone time_zone.is_a?(ActiveSupport::TimeZone) ? time_zone : ActiveSupport::TimeZone.create(time_zone.name, nil, time_zone) rescue TZInfo::InvalidTimezoneIdentifier raise ArgumentError, "Invalid Timezone: #{time_zone}" end def find_zone(time_zone) find_zone!(time_zone) rescue nil end end # Returns the simultaneous time in Time.zone. # # Time.zone = 'Hawaii' # => 'Hawaii' # Time.utc(2000).in_time_zone # => Fri, 31 Dec 1999 14:00:00 HST -10:00 # # This method is similar to Time#localtime, except that it uses Time.zone as the local zone # instead of the operating system's time zone. # # You can also pass in a TimeZone instance or string that identifies a TimeZone as an argument, # and the conversion will be based on that zone instead of Time.zone. # # Time.utc(2000).in_time_zone('Alaska') # => Fri, 31 Dec 1999 15:00:00 AKST -09:00 def in_time_zone(zone = ::Time.zone) return self unless zone ActiveSupport::TimeWithZone.new(utc? ? self : getutc, ::Time.find_zone!(zone)) end end activesupport-3.2.16/lib/active_support/core_ext/kernel.rb0000644000175000017500000000032112247654667023310 0ustar ondrejondrejrequire 'active_support/core_ext/kernel/reporting' require 'active_support/core_ext/kernel/agnostics' require 'active_support/core_ext/kernel/debugger' require 'active_support/core_ext/kernel/singleton_class' activesupport-3.2.16/lib/active_support/core_ext/proc.rb0000644000175000017500000000056412247654667023004 0ustar ondrejondrejrequire "active_support/core_ext/kernel/singleton_class" class Proc #:nodoc: def bind(object) block, time = self, Time.now object.class_eval do method_name = "__bind_#{time.to_i}_#{time.usec}" define_method(method_name, &block) method = instance_method(method_name) remove_method(method_name) method end.bind(object) end end activesupport-3.2.16/lib/active_support/core_ext/module/0000755000175000017500000000000012247654667022774 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/module/introspection.rb0000644000175000017500000000436312247654667026227 0ustar ondrejondrejrequire 'active_support/inflector' class Module # Returns the name of the module containing this one. # # M::N.parent_name # => "M" def parent_name unless defined? @parent_name @parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil end @parent_name end # Returns the module which contains this one according to its name. # # module M # module N # end # end # X = M::N # # M::N.parent # => M # X.parent # => M # # The parent of top-level and anonymous modules is Object. # # M.parent # => Object # Module.new.parent # => Object # def parent parent_name ? ActiveSupport::Inflector.constantize(parent_name) : Object end # Returns all the parents of this module according to its name, ordered from # nested outwards. The receiver is not contained within the result. # # module M # module N # end # end # X = M::N # # M.parents # => [Object] # M::N.parents # => [M, Object] # X.parents # => [M, Object] # def parents parents = [] if parent_name parts = parent_name.split('::') until parts.empty? parents << ActiveSupport::Inflector.constantize(parts * '::') parts.pop end end parents << Object unless parents.include? Object parents end if RUBY_VERSION < '1.9' # Returns the constants that have been defined locally by this object and # not in an ancestor. This method is exact if running under Ruby 1.9. In # previous versions it may miss some constants if their definition in some # ancestor is identical to their definition in the receiver. def local_constants inherited = {} ancestors.each do |anc| next if anc == self anc.constants.each { |const| inherited[const] = anc.const_get(const) } end constants.select do |const| !inherited.key?(const) || inherited[const].object_id != const_get(const).object_id end end else def local_constants #:nodoc: constants(false) end end # Returns the names of the constants defined locally rather than the # constants themselves. See local_constants. def local_constant_names local_constants.map { |c| c.to_s } end end activesupport-3.2.16/lib/active_support/core_ext/module/reachable.rb0000644000175000017500000000032012247654667025222 0ustar ondrejondrejrequire 'active_support/core_ext/module/anonymous' require 'active_support/core_ext/string/inflections' class Module def reachable? #:nodoc: !anonymous? && name.safe_constantize.equal?(self) end end activesupport-3.2.16/lib/active_support/core_ext/module/method_names.rb0000644000175000017500000000050512247654667025764 0ustar ondrejondrejclass Module if instance_methods[0].is_a?(Symbol) def instance_method_names(*args) instance_methods(*args).map(&:to_s) end def method_names(*args) methods(*args).map(&:to_s) end else alias_method :instance_method_names, :instance_methods alias_method :method_names, :methods end endactivesupport-3.2.16/lib/active_support/core_ext/module/synchronization.rb0000644000175000017500000000376612247654667026576 0ustar ondrejondrejrequire 'thread' require 'active_support/core_ext/module/aliasing' require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/module/deprecation' class Module # Synchronize access around a method, delegating synchronization to a # particular mutex. A mutex (either a Mutex, or any object that responds to # #synchronize and yields to a block) must be provided as a final :with option. # The :with option should be a symbol or string, and can represent a method, # constant, or instance or class variable. # Example: # class SharedCache # @@lock = Mutex.new # def expire # ... # end # synchronize :expire, :with => :@@lock # end def synchronize(*methods) options = methods.extract_options! unless options.is_a?(Hash) && with = options[:with] raise ArgumentError, "Synchronization needs a mutex. Supply an options hash with a :with key as the last argument (e.g. synchronize :hello, :with => :@mutex)." end methods.each do |method| aliased_method, punctuation = method.to_s.sub(/([?!=])$/, ''), $1 if method_defined?("#{aliased_method}_without_synchronization#{punctuation}") raise ArgumentError, "#{method} is already synchronized. Double synchronization is not currently supported." end module_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{aliased_method}_with_synchronization#{punctuation}(*args, &block) # def expire_with_synchronization(*args, &block) #{with}.synchronize do # @@lock.synchronize do #{aliased_method}_without_synchronization#{punctuation}(*args, &block) # expire_without_synchronization(*args, &block) end # end end # end EOS alias_method_chain method, :synchronization end end deprecate :synchronize end activesupport-3.2.16/lib/active_support/core_ext/module/attribute_accessors.rb0000644000175000017500000000333712247654667027377 0ustar ondrejondrejrequire 'active_support/core_ext/array/extract_options' class Module def mattr_reader(*syms) options = syms.extract_options! syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) @@#{sym} = nil unless defined? @@#{sym} def self.#{sym} @@#{sym} end EOS unless options[:instance_reader] == false || options[:instance_accessor] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym} @@#{sym} end EOS end end end def mattr_writer(*syms) options = syms.extract_options! syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) def self.#{sym}=(obj) @@#{sym} = obj end EOS unless options[:instance_writer] == false || options[:instance_accessor] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym}=(obj) @@#{sym} = obj end EOS end end end # Extends the module object with module and instance accessors for class attributes, # just like the native attr* accessors for instance attributes. # # module AppConfiguration # mattr_accessor :google_api_key # self.google_api_key = "123456789" # # mattr_accessor :paypal_url # self.paypal_url = "www.sandbox.paypal.com" # end # # AppConfiguration.google_api_key = "overriding the api key!" # # To opt out of the instance writer method, pass :instance_writer => false. # To opt out of the instance reader method, pass :instance_reader => false. # To opt out of both instance methods, pass :instance_accessor => false. def mattr_accessor(*syms) mattr_reader(*syms) mattr_writer(*syms) end end activesupport-3.2.16/lib/active_support/core_ext/module/remove_method.rb0000644000175000017500000000072012247654667026155 0ustar ondrejondrejclass Module def remove_possible_method(method) if method_defined?(method) || private_method_defined?(method) remove_method(method) end rescue NameError # If the requested method is defined on a superclass or included module, # method_defined? returns true but remove_method throws a NameError. # Ignore this. end def redefine_method(method, &block) remove_possible_method(method) define_method(method, &block) end end activesupport-3.2.16/lib/active_support/core_ext/module/delegation.rb0000644000175000017500000001234012247654667025434 0ustar ondrejondrejclass Module # Provides a delegate class method to easily expose contained objects' methods # as your own. Pass one or more methods (specified as symbols or strings) # and the name of the target object via the :to option (also a symbol # or string). At least one method and the :to option are required. # # Delegation is particularly useful with Active Record associations: # # class Greeter < ActiveRecord::Base # def hello # "hello" # end # # def goodbye # "goodbye" # end # end # # class Foo < ActiveRecord::Base # belongs_to :greeter # delegate :hello, :to => :greeter # end # # Foo.new.hello # => "hello" # Foo.new.goodbye # => NoMethodError: undefined method `goodbye' for # # # Multiple delegates to the same target are allowed: # # class Foo < ActiveRecord::Base # belongs_to :greeter # delegate :hello, :goodbye, :to => :greeter # end # # Foo.new.goodbye # => "goodbye" # # Methods can be delegated to instance variables, class variables, or constants # by providing them as a symbols: # # class Foo # CONSTANT_ARRAY = [0,1,2,3] # @@class_array = [4,5,6,7] # # def initialize # @instance_array = [8,9,10,11] # end # delegate :sum, :to => :CONSTANT_ARRAY # delegate :min, :to => :@@class_array # delegate :max, :to => :@instance_array # end # # Foo.new.sum # => 6 # Foo.new.min # => 4 # Foo.new.max # => 11 # # Delegates can optionally be prefixed using the :prefix option. If the value # is true, the delegate methods are prefixed with the name of the object being # delegated to. # # Person = Struct.new(:name, :address) # # class Invoice < Struct.new(:client) # delegate :name, :address, :to => :client, :prefix => true # end # # john_doe = Person.new("John Doe", "Vimmersvej 13") # invoice = Invoice.new(john_doe) # invoice.client_name # => "John Doe" # invoice.client_address # => "Vimmersvej 13" # # It is also possible to supply a custom prefix. # # class Invoice < Struct.new(:client) # delegate :name, :address, :to => :client, :prefix => :customer # end # # invoice = Invoice.new(john_doe) # invoice.customer_name # => "John Doe" # invoice.customer_address # => "Vimmersvej 13" # # If the delegate object is +nil+ an exception is raised, and that happens # no matter whether +nil+ responds to the delegated method. You can get a # +nil+ instead with the +:allow_nil+ option. # # class Foo # attr_accessor :bar # def initialize(bar = nil) # @bar = bar # end # delegate :zoo, :to => :bar # end # # Foo.new.zoo # raises NoMethodError exception (you called nil.zoo) # # class Foo # attr_accessor :bar # def initialize(bar = nil) # @bar = bar # end # delegate :zoo, :to => :bar, :allow_nil => true # end # # Foo.new.zoo # returns nil # def delegate(*methods) options = methods.pop unless options.is_a?(Hash) && to = options[:to] raise ArgumentError, "Delegation needs a target. Supply an options hash with a :to key as the last argument (e.g. delegate :hello, :to => :greeter)." end prefix, to, allow_nil = options[:prefix], options[:to], options[:allow_nil] if prefix == true && to.to_s =~ /^[^a-z_]/ raise ArgumentError, "Can only automatically set the delegation prefix when delegating to a method." end method_prefix = if prefix "#{prefix == true ? to : prefix}_" else '' end file, line = caller.first.split(':', 2) line = line.to_i methods.each do |method| method = method.to_s if allow_nil module_eval(<<-EOS, file, line - 2) def #{method_prefix}#{method}(*args, &block) # def customer_name(*args, &block) if #{to} || #{to}.respond_to?(:#{method}) # if client || client.respond_to?(:name) #{to}.__send__(:#{method}, *args, &block) # client.__send__(:name, *args, &block) end # end end # end EOS else exception = %(raise "#{self}##{method_prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil: \#{self.inspect}") module_eval(<<-EOS, file, line - 1) def #{method_prefix}#{method}(*args, &block) # def customer_name(*args, &block) #{to}.__send__(:#{method}, *args, &block) # client.__send__(:name, *args, &block) rescue NoMethodError # rescue NoMethodError if #{to}.nil? # if client.nil? #{exception} # # add helpful message to the exception else # else raise # raise end # end end # end EOS end end end end activesupport-3.2.16/lib/active_support/core_ext/module/qualified_const.rb0000644000175000017500000000341012247654667026470 0ustar ondrejondrejrequire 'active_support/core_ext/string/inflections' #-- # Allows code reuse in the methods below without polluting Module. #++ module QualifiedConstUtils def self.raise_if_absolute(path) raise NameError, "wrong constant name #$&" if path =~ /\A::[^:]+/ end def self.names(path) path.split('::') end end ## # Extends the API for constants to be able to deal with qualified names. Arguments # are assumed to be relative to the receiver. # #-- # Qualified names are required to be relative because we are extending existing # methods that expect constant names, ie, relative paths of length 1. For example, # Object.const_get("::String") raises NameError and so does qualified_const_get. #++ class Module if method(:const_defined?).arity == 1 def qualified_const_defined?(path) QualifiedConstUtils.raise_if_absolute(path) QualifiedConstUtils.names(path).inject(self) do |mod, name| return unless mod.const_defined?(name) mod.const_get(name) end return true end else def qualified_const_defined?(path, search_parents=true) QualifiedConstUtils.raise_if_absolute(path) QualifiedConstUtils.names(path).inject(self) do |mod, name| return unless mod.const_defined?(name, search_parents) mod.const_get(name) end return true end end def qualified_const_get(path) QualifiedConstUtils.raise_if_absolute(path) QualifiedConstUtils.names(path).inject(self) do |mod, name| mod.const_get(name) end end def qualified_const_set(path, value) QualifiedConstUtils.raise_if_absolute(path) const_name = path.demodulize mod_name = path.deconstantize mod = mod_name.empty? ? self : qualified_const_get(mod_name) mod.const_set(const_name, value) end end activesupport-3.2.16/lib/active_support/core_ext/module/deprecation.rb0000644000175000017500000000044212247654667025616 0ustar ondrejondrejclass Module # Declare that a method has been deprecated. # deprecate :foo # deprecate :bar => 'message' # deprecate :foo, :bar, :baz => 'warning!', :qux => 'gone!' def deprecate(*method_names) ActiveSupport::Deprecation.deprecate_methods(self, *method_names) end end activesupport-3.2.16/lib/active_support/core_ext/module/aliasing.rb0000644000175000017500000000421712247654667025114 0ustar ondrejondrejclass Module # Encapsulates the common pattern of: # # alias_method :foo_without_feature, :foo # alias_method :foo, :foo_with_feature # # With this, you simply do: # # alias_method_chain :foo, :feature # # And both aliases are set up for you. # # Query and bang methods (foo?, foo!) keep the same punctuation: # # alias_method_chain :foo?, :feature # # is equivalent to # # alias_method :foo_without_feature?, :foo? # alias_method :foo?, :foo_with_feature? # # so you can safely chain foo, foo?, and foo! with the same feature. def alias_method_chain(target, feature) # Strip out punctuation on predicates or bang methods since # e.g. target?_without_feature is not a valid method name. aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1 yield(aliased_target, punctuation) if block_given? with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}" alias_method without_method, target alias_method target, with_method case when public_method_defined?(without_method) public target when protected_method_defined?(without_method) protected target when private_method_defined?(without_method) private target end end # Allows you to make aliases for attributes, which includes # getter, setter, and query methods. # # Example: # # class Content < ActiveRecord::Base # # has a title attribute # end # # class Email < Content # alias_attribute :subject, :title # end # # e = Email.find(1) # e.title # => "Superstars" # e.subject # => "Superstars" # e.subject? # => true # e.subject = "Megastars" # e.title # => "Megastars" def alias_attribute(new_name, old_name) module_eval <<-STR, __FILE__, __LINE__ + 1 def #{new_name}; self.#{old_name}; end # def subject; self.title; end def #{new_name}?; self.#{old_name}?; end # def subject?; self.title?; end def #{new_name}=(v); self.#{old_name} = v; end # def subject=(v); self.title = v; end STR end end activesupport-3.2.16/lib/active_support/core_ext/module/anonymous.rb0000644000175000017500000000120112247654667025343 0ustar ondrejondrejrequire 'active_support/core_ext/object/blank' class Module # A module may or may not have a name. # # module M; end # M.name # => "M" # # m = Module.new # m.name # => "" # # A module gets a name when it is first assigned to a constant. Either # via the +module+ or +class+ keyword or by an explicit assignment: # # m = Module.new # creates an anonymous module # M = m # => m gets a name here as a side-effect # m.name # => "M" # def anonymous? # Uses blank? because the name of an anonymous class is an empty # string in 1.8, and nil in 1.9. name.blank? end end activesupport-3.2.16/lib/active_support/core_ext/module/attr_internal.rb0000644000175000017500000000257112247654667026174 0ustar ondrejondrejclass Module # Declares an attribute reader backed by an internally-named instance variable. def attr_internal_reader(*attrs) attrs.each {|attr_name| attr_internal_define(attr_name, :reader)} end # Declares an attribute writer backed by an internally-named instance variable. def attr_internal_writer(*attrs) attrs.each {|attr_name| attr_internal_define(attr_name, :writer)} end # Declares an attribute reader and writer backed by an internally-named instance # variable. def attr_internal_accessor(*attrs) attr_internal_reader(*attrs) attr_internal_writer(*attrs) end alias_method :attr_internal, :attr_internal_accessor class << self; attr_accessor :attr_internal_naming_format end self.attr_internal_naming_format = '@_%s' private def attr_internal_ivar_name(attr) Module.attr_internal_naming_format % attr end def attr_internal_define(attr_name, type) internal_name = attr_internal_ivar_name(attr_name).sub(/\A@/, '') class_eval do # class_eval is necessary on 1.9 or else the methods a made private # use native attr_* methods as they are faster on some Ruby implementations send("attr_#{type}", internal_name) end attr_name, internal_name = "#{attr_name}=", "#{internal_name}=" if type == :writer alias_method attr_name, internal_name remove_method internal_name end end activesupport-3.2.16/lib/active_support/core_ext/enumerable.rb0000644000175000017500000000766312247654667024167 0ustar ondrejondrejrequire 'active_support/ordered_hash' module Enumerable # Ruby 1.8.7 introduces group_by, but the result isn't ordered. Override it. remove_method(:group_by) if [].respond_to?(:group_by) && RUBY_VERSION < '1.9' # Collect an enumerable into sets, grouped by the result of a block. Useful, # for example, for grouping records by date. # # Example: # # latest_transcripts.group_by(&:day).each do |day, transcripts| # p "#{day} -> #{transcripts.map(&:class).join(', ')}" # end # "2006-03-01 -> Transcript" # "2006-02-28 -> Transcript" # "2006-02-27 -> Transcript, Transcript" # "2006-02-26 -> Transcript, Transcript" # "2006-02-25 -> Transcript" # "2006-02-24 -> Transcript, Transcript" # "2006-02-23 -> Transcript" def group_by return to_enum :group_by unless block_given? assoc = ActiveSupport::OrderedHash.new each do |element| key = yield(element) if assoc.has_key?(key) assoc[key] << element else assoc[key] = [element] end end assoc end unless [].respond_to?(:group_by) # Calculates a sum from the elements. Examples: # # payments.sum { |p| p.price * p.tax_rate } # payments.sum(&:price) # # The latter is a shortcut for: # # payments.inject(0) { |sum, p| sum + p.price } # # It can also calculate the sum without the use of a block. # # [5, 15, 10].sum # => 30 # ["foo", "bar"].sum # => "foobar" # [[1, 2], [3, 1, 5]].sum => [1, 2, 3, 1, 5] # # The default sum of an empty list is zero. You can override this default: # # [].sum(Payment.new(0)) { |i| i.amount } # => Payment.new(0) # def sum(identity = 0, &block) if block_given? map(&block).sum(identity) else inject(:+) || identity end end # Iterates over a collection, passing the current element *and* the # +memo+ to the block. Handy for building up hashes or # reducing collections down to one object. Examples: # # %w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase } # # => {'foo' => 'FOO', 'bar' => 'BAR'} # # *Note* that you can't use immutable objects like numbers, true or false as # the memo. You would think the following returns 120, but since the memo is # never changed, it does not. # # (1..5).each_with_object(1) { |value, memo| memo *= value } # => 1 # def each_with_object(memo) return to_enum :each_with_object, memo unless block_given? each do |element| yield element, memo end memo end unless [].respond_to?(:each_with_object) # Convert an enumerable to a hash. Examples: # # people.index_by(&:login) # => { "nextangle" => , "chade-" => , ...} # people.index_by { |person| "#{person.first_name} #{person.last_name}" } # => { "Chade- Fowlersburg-e" => , "David Heinemeier Hansson" => , ...} # def index_by return to_enum :index_by unless block_given? Hash[map { |elem| [yield(elem), elem] }] end # Returns true if the enumerable has more than 1 element. Functionally equivalent to enum.to_a.size > 1. # Can be called with a block too, much like any?, so people.many? { |p| p.age > 26 } returns true if more than one person is over 26. def many? cnt = 0 if block_given? any? do |element| cnt += 1 if yield element cnt > 1 end else any?{ (cnt += 1) > 1 } end end # The negative of the Enumerable#include?. Returns true if the collection does not include the object. def exclude?(object) !include?(object) end end class Range #:nodoc: # Optimize range sum to use arithmetic progression if a block is not given and # we have a range of numeric values. def sum(identity = 0) return super if block_given? || !(first.instance_of?(Integer) && last.instance_of?(Integer)) actual_last = exclude_end? ? (last - 1) : last (actual_last - first + 1) * (actual_last + first) / 2 end end activesupport-3.2.16/lib/active_support/core_ext/rexml.rb0000644000175000017500000000311712247654667023165 0ustar ondrejondrejrequire 'active_support/core_ext/kernel/reporting' # Fixes the rexml vulnerability disclosed at: # http://www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/ # This fix is identical to rexml-expansion-fix version 1.0.1. # # We still need to distribute this fix because albeit the REXML # in recent 1.8.7s is patched, it wasn't in early patchlevels. require 'rexml/rexml' # Earlier versions of rexml defined REXML::Version, newer ones REXML::VERSION unless (defined?(REXML::VERSION) ? REXML::VERSION : REXML::Version) > "3.1.7.2" silence_warnings { require 'rexml/document' } # REXML in 1.8.7 has the patch but early patchlevels didn't update Version from 3.1.7.2. unless REXML::Document.respond_to?(:entity_expansion_limit=) silence_warnings { require 'rexml/entity' } module REXML #:nodoc: class Entity < Child #:nodoc: undef_method :unnormalized def unnormalized document.record_entity_expansion! if document v = value() return nil if v.nil? @unnormalized = Text::unnormalize(v, parent) @unnormalized end end class Document < Element #:nodoc: @@entity_expansion_limit = 10_000 def self.entity_expansion_limit= val @@entity_expansion_limit = val end def record_entity_expansion! @number_of_expansions ||= 0 @number_of_expansions += 1 if @number_of_expansions > @@entity_expansion_limit raise "Number of entity expansions exceeded, processing aborted." end end end end end end activesupport-3.2.16/lib/active_support/core_ext/uri.rb0000644000175000017500000000142612247654667022636 0ustar ondrejondrej# encoding: utf-8 if RUBY_VERSION >= '1.9' require 'uri' str = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E" # Ni-ho-nn-go in UTF-8, means Japanese. parser = URI::Parser.new unless str == parser.unescape(parser.escape(str)) URI::Parser.class_eval do remove_method :unescape def unescape(str, escaped = /%[a-fA-F\d]{2}/) # TODO: Are we actually sure that ASCII == UTF-8? # YK: My initial experiments say yes, but let's be sure please enc = str.encoding enc = Encoding::UTF_8 if enc == Encoding::US_ASCII str.gsub(escaped) { [$&[1, 2].hex].pack('C') }.force_encoding(enc) end end end end module URI class << self def parser @parser ||= URI.const_defined?(:Parser) ? URI::Parser.new : URI end end end activesupport-3.2.16/lib/active_support/core_ext/process/0000755000175000017500000000000012247654667023165 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/process/daemon.rb0000644000175000017500000000132112247654667024752 0ustar ondrejondrejmodule Process def self.daemon(nochdir = nil, noclose = nil) exit if fork # Parent exits, child continues. Process.setsid # Become session leader. exit if fork # Zap session leader. See [1]. unless nochdir Dir.chdir "/" # Release old working directory. end File.umask 0000 # Ensure sensible umask. Adjust as needed. unless noclose STDIN.reopen "/dev/null" # Free file descriptors and STDOUT.reopen "/dev/null", "a" # point them somewhere sensible. STDERR.reopen '/dev/null', 'a' end trap("TERM") { exit } return 0 end unless respond_to?(:daemon) end activesupport-3.2.16/lib/active_support/core_ext/class/0000755000175000017500000000000012247654667022614 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/class/delegating_attributes.rb0000644000175000017500000000357612247654667027525 0ustar ondrejondrejrequire 'active_support/core_ext/object/blank' require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/module/remove_method' class Class def superclass_delegating_accessor(name, options = {}) # Create private _name and _name= methods that can still be used if the public # methods are overridden. This allows _superclass_delegating_accessor("_#{name}") # Generate the public methods name, name=, and name? # These methods dispatch to the private _name, and _name= methods, making them # overridable singleton_class.send(:define_method, name) { send("_#{name}") } singleton_class.send(:define_method, "#{name}?") { !!send("_#{name}") } singleton_class.send(:define_method, "#{name}=") { |value| send("_#{name}=", value) } # If an instance_reader is needed, generate methods for name and name= on the # class itself, so instances will be able to see them define_method(name) { send("_#{name}") } if options[:instance_reader] != false define_method("#{name}?") { !!send("#{name}") } if options[:instance_reader] != false end private # Take the object being set and store it in a method. This gives us automatic # inheritance behavior, without having to store the object in an instance # variable and look up the superclass chain manually. def _stash_object_in_method(object, method, instance_reader = true) singleton_class.remove_possible_method(method) singleton_class.send(:define_method, method) { object } remove_possible_method(method) define_method(method) { object } if instance_reader end def _superclass_delegating_accessor(name, options = {}) singleton_class.send(:define_method, "#{name}=") do |value| _stash_object_in_method(value, name, options[:instance_reader] != false) end send("#{name}=", nil) end end activesupport-3.2.16/lib/active_support/core_ext/class/attribute_accessors.rb0000644000175000017500000001201712247654667027212 0ustar ondrejondrejrequire 'active_support/core_ext/array/extract_options' # Extends the class object with class and instance accessors for class attributes, # just like the native attr* accessors for instance attributes. class Class # Defines a class attribute if it's not defined and creates a reader method that # returns the attribute value. # # class Person # cattr_reader :hair_colors # end # # Person.class_variable_set("@@hair_colors", [:brown, :black]) # Person.hair_colors # => [:brown, :black] # Person.new.hair_colors # => [:brown, :black] # # The attribute name must be a valid method name in Ruby. # # class Person # cattr_reader :"1_Badname " # end # # => NameError: invalid attribute name # # If you want to opt out the instance reader method, you can pass :instance_reader => false # or :instance_accessor => false. # # class Person # cattr_reader :hair_colors, :instance_reader => false # end # # Person.new.hair_colors # => NoMethodError def cattr_reader(*syms) options = syms.extract_options! syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} @@#{sym} = nil end def self.#{sym} @@#{sym} end EOS unless options[:instance_reader] == false || options[:instance_accessor] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym} @@#{sym} end EOS end end end # Defines a class attribute if it's not defined and creates a writer method to allow # assignment to the attribute. # # class Person # cattr_writer :hair_colors # end # # Person.hair_colors = [:brown, :black] # Person.class_variable_get("@@hair_colors") # => [:brown, :black] # Person.new.hair_colors = [:blonde, :red] # Person.class_variable_get("@@hair_colors") # => [:blonde, :red] # # The attribute name must be a valid method name in Ruby. # # class Person # cattr_writer :"1_Badname " # end # # => NameError: invalid attribute name # # If you want to opt out the instance writer method, pass :instance_writer => false # or :instance_accessor => false. # # class Person # cattr_writer :hair_colors, :instance_writer => false # end # # Person.new.hair_colors = [:blonde, :red] # => NoMethodError # # Also, you can pass a block to set up the attribute with a default value. # # class Person # cattr_writer :hair_colors do # [:brown, :black, :blonde, :red] # end # end # # Person.class_variable_get("@@hair_colors") # => [:brown, :black, :blonde, :red] def cattr_writer(*syms) options = syms.extract_options! syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} @@#{sym} = nil end def self.#{sym}=(obj) @@#{sym} = obj end EOS unless options[:instance_writer] == false || options[:instance_accessor] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym}=(obj) @@#{sym} = obj end EOS end self.send("#{sym}=", yield) if block_given? end end # Defines both class and instance accessors for class attributes. # # class Person # cattr_accessor :hair_colors # end # # Person.hair_colors = [:brown, :black, :blonde, :red] # Person.hair_colors # => [:brown, :black, :blonde, :red] # Person.new.hair_colors # => [:brown, :black, :blonde, :red] # # If a subclass changes the value then that would also change the value for # parent class. Similarly if parent class changes the value then that would # change the value of subclasses too. # # class Male < Person # end # # Male.hair_colors << :blue # Person.hair_colors # => [:brown, :black, :blonde, :red, :blue] # # To opt out of the instance writer method, pass :instance_writer => false. # To opt out of the instance reader method, pass :instance_reader => false. # # class Person # cattr_accessor :hair_colors, :instance_writer => false, :instance_reader => false # end # # Person.new.hair_colors = [:brown] # => NoMethodError # Person.new.hair_colors # => NoMethodError # # Or pass :instance_accessor => false, to opt out both instance methods. # # class Person # cattr_accessor :hair_colors, :instance_accessor => false # end # # Person.new.hair_colors = [:brown] # => NoMethodError # Person.new.hair_colors # => NoMethodError # # Also you can pass a block to set up the attribute with a default value. # # class Person # cattr_accessor :hair_colors do # [:brown, :black, :blonde, :red] # end # end # # Person.class_variable_get("@@hair_colors") #=> [:brown, :black, :blonde, :red] def cattr_accessor(*syms, &blk) cattr_reader(*syms) cattr_writer(*syms, &blk) end end activesupport-3.2.16/lib/active_support/core_ext/class/subclasses.rb0000644000175000017500000000154112247654667025311 0ustar ondrejondrejrequire 'active_support/core_ext/module/anonymous' require 'active_support/core_ext/module/reachable' class Class #:nodoc: begin ObjectSpace.each_object(Class.new) {} def descendants descendants = [] ObjectSpace.each_object(class << self; self; end) do |k| descendants.unshift k unless k == self end descendants end rescue StandardError # JRuby def descendants descendants = [] ObjectSpace.each_object(Class) do |k| descendants.unshift k if k < self end descendants.uniq! descendants end end # Returns an array with the direct children of +self+. # # Integer.subclasses # => [Bignum, Fixnum] def subclasses subclasses, chain = [], descendants chain.each do |k| subclasses << k unless chain.any? { |c| c > k } end subclasses end end activesupport-3.2.16/lib/active_support/core_ext/class/attribute.rb0000644000175000017500000000711312247654667025146 0ustar ondrejondrejrequire 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/module/remove_method' require 'active_support/core_ext/array/extract_options' class Class # Declare a class-level attribute whose value is inheritable by subclasses. # Subclasses can change their own value and it will not impact parent class. # # class Base # class_attribute :setting # end # # class Subclass < Base # end # # Base.setting = true # Subclass.setting # => true # Subclass.setting = false # Subclass.setting # => false # Base.setting # => true # # In the above case as long as Subclass does not assign a value to setting # by performing Subclass.setting = _something_ , Subclass.setting # would read value assigned to parent class. Once Subclass assigns a value then # the value assigned by Subclass would be returned. # # This matches normal Ruby method inheritance: think of writing an attribute # on a subclass as overriding the reader method. However, you need to be aware # when using +class_attribute+ with mutable structures as +Array+ or +Hash+. # In such cases, you don't want to do changes in places but use setters: # # Base.setting = [] # Base.setting # => [] # Subclass.setting # => [] # # # Appending in child changes both parent and child because it is the same object: # Subclass.setting << :foo # Base.setting # => [:foo] # Subclass.setting # => [:foo] # # # Use setters to not propagate changes: # Base.setting = [] # Subclass.setting += [:foo] # Base.setting # => [] # Subclass.setting # => [:foo] # # For convenience, a query method is defined as well: # # Subclass.setting? # => false # # Instances may overwrite the class value in the same way: # # Base.setting = true # object = Base.new # object.setting # => true # object.setting = false # object.setting # => false # Base.setting # => true # # To opt out of the instance reader method, pass :instance_reader => false. # # object.setting # => NoMethodError # object.setting? # => NoMethodError # # To opt out of the instance writer method, pass :instance_writer => false. # # object.setting = false # => NoMethodError def class_attribute(*attrs) options = attrs.extract_options! instance_reader = instance_reader = options.fetch(:instance_reader, true) instance_writer = options.fetch(:instance_writer, true) attrs.each do |name| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.#{name}() nil end def self.#{name}?() !!#{name} end def self.#{name}=(val) singleton_class.class_eval do remove_possible_method(:#{name}) define_method(:#{name}) { val } end if singleton_class? class_eval do remove_possible_method(:#{name}) def #{name} defined?(@#{name}) ? @#{name} : singleton_class.#{name} end end end val end if instance_reader remove_possible_method :#{name} def #{name} defined?(@#{name}) ? @#{name} : self.class.#{name} end def #{name}? !!#{name} end end RUBY attr_writer name if instance_writer end end private def singleton_class? ancestors.first != self end end activesupport-3.2.16/lib/active_support/core_ext/name_error.rb0000644000175000017500000000076012247654667024170 0ustar ondrejondrejclass NameError # Extract the name of the missing constant from the exception message. def missing_name if /undefined local variable or method/ !~ message $1 if /((::)?([A-Z]\w*)(::[A-Z]\w*)*)$/ =~ message end end # Was this exception raised because the given name was missing? def missing_name?(name) if name.is_a? Symbol last_name = (missing_name || '').split('::').last last_name == name.to_s else missing_name == name.to_s end end end activesupport-3.2.16/lib/active_support/core_ext/array.rb0000644000175000017500000000063212247654667023153 0ustar ondrejondrejrequire 'active_support/core_ext/array/wrap' require 'active_support/core_ext/array/access' require 'active_support/core_ext/array/uniq_by' require 'active_support/core_ext/array/conversions' require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/array/grouping' require 'active_support/core_ext/array/random_access' require 'active_support/core_ext/array/prepend_and_append' activesupport-3.2.16/lib/active_support/core_ext/array/0000755000175000017500000000000012247654667022625 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/array/random_access.rb0000644000175000017500000000237312247654667025760 0ustar ondrejondrejclass Array # Backport of Array#sample based on Marc-Andre Lafortune's https://github.com/marcandre/backports/ # Returns a random element or +n+ random elements from the array. # If the array is empty and +n+ is nil, returns nil. # If +n+ is passed and its value is less than 0, it raises an +ArgumentError+ exception. # If the value of +n+ is equal or greater than 0 it returns []. # # [1,2,3,4,5,6].sample # => 4 # [1,2,3,4,5,6].sample(3) # => [2, 4, 5] # [1,2,3,4,5,6].sample(-3) # => ArgumentError: negative array size # [].sample # => nil # [].sample(3) # => [] def sample(n=nil) return self[Kernel.rand(size)] if n.nil? n = n.to_int rescue Exception => e raise TypeError, "Coercion error: #{n.inspect}.to_int => Integer failed:\n(#{e.message})" else raise TypeError, "Coercion error: obj.to_int did NOT return an Integer (was #{n.class})" unless n.kind_of? Integer raise ArgumentError, "negative array size" if n < 0 n = size if n > size result = Array.new(self) n.times do |i| r = i + Kernel.rand(size - i) result[i], result[r] = result[r], result[i] end result[n..size] = [] result end unless method_defined? :sample end activesupport-3.2.16/lib/active_support/core_ext/array/prepend_and_append.rb0000644000175000017500000000040012247654667026752 0ustar ondrejondrejclass Array # The human way of thinking about adding stuff to the end of a list is with append alias_method :append, :<< # The human way of thinking about adding stuff to the beginning of a list is with prepend alias_method :prepend, :unshift endactivesupport-3.2.16/lib/active_support/core_ext/array/conversions.rb0000644000175000017500000001341712247654667025530 0ustar ondrejondrejrequire 'active_support/xml_mini' require 'active_support/core_ext/hash/keys' require 'active_support/core_ext/hash/reverse_merge' require 'active_support/core_ext/string/inflections' class Array # Converts the array to a comma-separated sentence where the last element is joined by the connector word. Options: # * :words_connector - The sign or word used to join the elements in arrays with two or more elements (default: ", ") # * :two_words_connector - The sign or word used to join the elements in arrays with two elements (default: " and ") # * :last_word_connector - The sign or word used to join the last element in arrays with three or more elements (default: ", and ") def to_sentence(options = {}) if defined?(I18n) default_words_connector = I18n.translate(:'support.array.words_connector', :locale => options[:locale]) default_two_words_connector = I18n.translate(:'support.array.two_words_connector', :locale => options[:locale]) default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale]) else default_words_connector = ", " default_two_words_connector = " and " default_last_word_connector = ", and " end options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale) options.reverse_merge! :words_connector => default_words_connector, :two_words_connector => default_two_words_connector, :last_word_connector => default_last_word_connector case length when 0 "" when 1 self[0].to_s.dup when 2 "#{self[0]}#{options[:two_words_connector]}#{self[1]}" else "#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}" end end # Converts a collection of elements into a formatted string by calling # to_s on all elements and joining them: # # Blog.all.to_formatted_s # => "First PostSecond PostThird Post" # # Adding in the :db argument as the format yields a comma separated # id list: # # Blog.all.to_formatted_s(:db) # => "1,2,3" def to_formatted_s(format = :default) case format when :db if respond_to?(:empty?) && self.empty? "null" else collect { |element| element.id }.join(",") end else to_default_s end end alias_method :to_default_s, :to_s alias_method :to_s, :to_formatted_s # Returns a string that represents the array in XML by invoking +to_xml+ # on each element. Active Record collections delegate their representation # in XML to this method. # # All elements are expected to respond to +to_xml+, if any of them does # not then an exception is raised. # # The root node reflects the class name of the first element in plural # if all elements belong to the same type and that's not Hash: # # customer.projects.to_xml # # # # # 20000.0 # 1567 # 2008-04-09 # ... # # # 57230.0 # 1567 # 2008-04-15 # ... # # # # Otherwise the root element is "records": # # [{:foo => 1, :bar => 2}, {:baz => 3}].to_xml # # # # # 2 # 1 # # # 3 # # # # If the collection is empty the root element is "nil-classes" by default: # # [].to_xml # # # # # To ensure a meaningful root element use the :root option: # # customer_with_no_projects.projects.to_xml(:root => "projects") # # # # # By default name of the node for the children of root is root.singularize. # You can change it with the :children option. # # The +options+ hash is passed downwards: # # Message.all.to_xml(:skip_types => true) # # # # # 2008-03-07T09:58:18+01:00 # 1 # 1 # 2008-03-07T09:58:18+01:00 # 1 # # # def to_xml(options = {}) require 'active_support/builder' unless defined?(Builder) options = options.dup options[:indent] ||= 2 options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent]) options[:root] ||= if first.class.to_s != "Hash" && all? { |e| e.is_a?(first.class) } underscored = ActiveSupport::Inflector.underscore(first.class.name) ActiveSupport::Inflector.pluralize(underscored).tr('/', '_') else "objects" end builder = options[:builder] builder.instruct! unless options.delete(:skip_instruct) root = ActiveSupport::XmlMini.rename_key(options[:root].to_s, options) children = options.delete(:children) || root.singularize attributes = options[:skip_types] ? {} : {:type => "array"} return builder.tag!(root, attributes) if empty? builder.__send__(:method_missing, root, attributes) do each { |value| ActiveSupport::XmlMini.to_tag(children, value, options) } yield builder if block_given? end end end activesupport-3.2.16/lib/active_support/core_ext/array/uniq_by.rb0000644000175000017500000000053612247654667024624 0ustar ondrejondrejclass Array # Returns an unique array based on the criteria given as a +Proc+. # # [1, 2, 3, 4].uniq_by { |i| i.odd? } # => [1, 2] # def uniq_by hash, array = {}, [] each { |i| hash[yield(i)] ||= (array << i) } array end # Same as uniq_by, but modifies self. def uniq_by! replace(uniq_by{ |i| yield(i) }) end end activesupport-3.2.16/lib/active_support/core_ext/array/extract_options.rb0000644000175000017500000000144112247654667026377 0ustar ondrejondrejclass Hash # By default, only instances of Hash itself are extractable. # Subclasses of Hash may implement this method and return # true to declare themselves as extractable. If a Hash # is extractable, Array#extract_options! pops it from # the Array when it is the last element of the Array. def extractable_options? instance_of?(Hash) end end class Array # Extracts options from a set of arguments. Removes and returns the last # element in the array if it's a hash, otherwise returns a blank hash. # # def options(*args) # args.extract_options! # end # # options(1, 2) # => {} # options(1, 2, :a => :b) # => {:a=>:b} def extract_options! if last.is_a?(Hash) && last.extractable_options? pop else {} end end end activesupport-3.2.16/lib/active_support/core_ext/array/wrap.rb0000644000175000017500000000353412247654667024130 0ustar ondrejondrejclass Array # Wraps its argument in an array unless it is already an array (or array-like). # # Specifically: # # * If the argument is +nil+ an empty list is returned. # * Otherwise, if the argument responds to +to_ary+ it is invoked, and its result returned. # * Otherwise, returns an array with the argument as its single element. # # Array.wrap(nil) # => [] # Array.wrap([1, 2, 3]) # => [1, 2, 3] # Array.wrap(0) # => [0] # # This method is similar in purpose to Kernel#Array, but there are some differences: # # * If the argument responds to +to_ary+ the method is invoked. Kernel#Array # moves on to try +to_a+ if the returned value is +nil+, but Array.wrap returns # such a +nil+ right away. # * If the returned value from +to_ary+ is neither +nil+ nor an +Array+ object, Kernel#Array # raises an exception, while Array.wrap does not, it just returns the value. # * It does not call +to_a+ on the argument, though special-cases +nil+ to return an empty array. # # The last point is particularly worth comparing for some enumerables: # # Array(:foo => :bar) # => [[:foo, :bar]] # Array.wrap(:foo => :bar) # => [{:foo => :bar}] # # Array("foo\nbar") # => ["foo\n", "bar"], in Ruby 1.8 # Array.wrap("foo\nbar") # => ["foo\nbar"] # # There's also a related idiom that uses the splat operator: # # [*object] # # which returns [nil] for +nil+, and calls to Array(object) otherwise. # # Thus, in this case the behavior is different for +nil+, and the differences with # Kernel#Array explained above apply to the rest of +object+s. def self.wrap(object) if object.nil? [] elsif object.respond_to?(:to_ary) object.to_ary || [object] else [object] end end end activesupport-3.2.16/lib/active_support/core_ext/array/grouping.rb0000644000175000017500000000547312247654667025015 0ustar ondrejondrejrequire 'enumerator' class Array # Splits or iterates over the array in groups of size +number+, # padding any remaining slots with +fill_with+ unless it is +false+. # # %w(1 2 3 4 5 6 7).in_groups_of(3) {|group| p group} # ["1", "2", "3"] # ["4", "5", "6"] # ["7", nil, nil] # # %w(1 2 3).in_groups_of(2, ' ') {|group| p group} # ["1", "2"] # ["3", " "] # # %w(1 2 3).in_groups_of(2, false) {|group| p group} # ["1", "2"] # ["3"] def in_groups_of(number, fill_with = nil) if fill_with == false collection = self else # size % number gives how many extra we have; # subtracting from number gives how many to add; # modulo number ensures we don't add group of just fill. padding = (number - size % number) % number collection = dup.concat([fill_with] * padding) end if block_given? collection.each_slice(number) { |slice| yield(slice) } else groups = [] collection.each_slice(number) { |group| groups << group } groups end end # Splits or iterates over the array in +number+ of groups, padding any # remaining slots with +fill_with+ unless it is +false+. # # %w(1 2 3 4 5 6 7 8 9 10).in_groups(3) {|group| p group} # ["1", "2", "3", "4"] # ["5", "6", "7", nil] # ["8", "9", "10", nil] # # %w(1 2 3 4 5 6 7).in_groups(3, ' ') {|group| p group} # ["1", "2", "3"] # ["4", "5", " "] # ["6", "7", " "] # # %w(1 2 3 4 5 6 7).in_groups(3, false) {|group| p group} # ["1", "2", "3"] # ["4", "5"] # ["6", "7"] def in_groups(number, fill_with = nil) # size / number gives minor group size; # size % number gives how many objects need extra accommodation; # each group hold either division or division + 1 items. division = size / number modulo = size % number # create a new array avoiding dup groups = [] start = 0 number.times do |index| length = division + (modulo > 0 && modulo > index ? 1 : 0) padding = fill_with != false && modulo > 0 && length == division ? 1 : 0 groups << slice(start, length).concat([fill_with] * padding) start += length end if block_given? groups.each { |g| yield(g) } else groups end end # Divides the array into one or more subarrays based on a delimiting +value+ # or the result of an optional block. # # [1, 2, 3, 4, 5].split(3) # => [[1, 2], [4, 5]] # (1..10).to_a.split { |i| i % 3 == 0 } # => [[1, 2], [4, 5], [7, 8], [10]] def split(value = nil) using_block = block_given? inject([[]]) do |results, element| if (using_block && yield(element)) || (value == element) results << [] else results.last << element end results end end end activesupport-3.2.16/lib/active_support/core_ext/array/access.rb0000644000175000017500000000165312247654667024420 0ustar ondrejondrejclass Array # Returns the tail of the array from +position+. # # %w( a b c d ).from(0) # => %w( a b c d ) # %w( a b c d ).from(2) # => %w( c d ) # %w( a b c d ).from(10) # => %w() # %w().from(0) # => %w() def from(position) self[position, length] || [] end # Returns the beginning of the array up to +position+. # # %w( a b c d ).to(0) # => %w( a ) # %w( a b c d ).to(2) # => %w( a b c ) # %w( a b c d ).to(10) # => %w( a b c d ) # %w().to(0) # => %w() def to(position) self.first position + 1 end # Equal to self[1]. def second self[1] end # Equal to self[2]. def third self[2] end # Equal to self[3]. def fourth self[3] end # Equal to self[4]. def fifth self[4] end # Equal to self[41]. Also known as accessing "the reddit". def forty_two self[41] end end activesupport-3.2.16/lib/active_support/core_ext/hash.rb0000644000175000017500000000066712247654667022770 0ustar ondrejondrejrequire 'active_support/core_ext/hash/conversions' require 'active_support/core_ext/hash/deep_merge' require 'active_support/core_ext/hash/deep_dup' require 'active_support/core_ext/hash/diff' require 'active_support/core_ext/hash/except' require 'active_support/core_ext/hash/indifferent_access' require 'active_support/core_ext/hash/keys' require 'active_support/core_ext/hash/reverse_merge' require 'active_support/core_ext/hash/slice' activesupport-3.2.16/lib/active_support/core_ext/io.rb0000644000175000017500000000041312247654667022441 0ustar ondrejondrejif RUBY_VERSION < '1.9.2' # :stopdoc: class IO def self.binread(name, length = nil, offset = nil) return File.read name unless length || offset File.open(name, 'rb') { |f| f.seek offset if offset f.read length } end end # :startdoc: end activesupport-3.2.16/lib/active_support/core_ext/big_decimal.rb0000644000175000017500000000007212247654667024252 0ustar ondrejondrejrequire 'active_support/core_ext/big_decimal/conversions' activesupport-3.2.16/lib/active_support/core_ext/file/0000755000175000017500000000000012247654667022426 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/file/atomic.rb0000644000175000017500000000304012247654667024224 0ustar ondrejondrejclass File # Write to a file atomically. Useful for situations where you don't # want other processes or threads to see half-written files. # # File.atomic_write("important.file") do |file| # file.write("hello") # end # # If your temp directory is not on the same filesystem as the file you're # trying to write, you can provide a different temporary directory. # # File.atomic_write("/data/something.important", "/data/tmp") do |file| # file.write("hello") # end def self.atomic_write(file_name, temp_dir = Dir.tmpdir) require 'tempfile' unless defined?(Tempfile) require 'fileutils' unless defined?(FileUtils) temp_file = Tempfile.new(basename(file_name), temp_dir) temp_file.binmode yield temp_file temp_file.close begin # Get original file permissions old_stat = stat(file_name) rescue Errno::ENOENT # No old permissions, write a temp file to determine the defaults check_name = join(dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}") open(check_name, "w") { } old_stat = stat(check_name) unlink(check_name) end # Overwrite original file with temp file FileUtils.mv(temp_file.path, file_name) # Set correct permissions on new file begin chown(old_stat.uid, old_stat.gid, file_name) # This operation will affect filesystem ACL's chmod(old_stat.mode, file_name) rescue Errno::EPERM # Changing file ownership failed, moving on. end end end activesupport-3.2.16/lib/active_support/core_ext/file/path.rb0000644000175000017500000000013012247654667023701 0ustar ondrejondrejclass File unless File.allocate.respond_to?(:to_path) alias to_path path end endactivesupport-3.2.16/lib/active_support/core_ext/range/0000755000175000017500000000000012247654667022603 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/range/overlaps.rb0000644000175000017500000000034712247654667024767 0ustar ondrejondrejclass Range # Compare two ranges and see if they overlap each other # (1..5).overlaps?(4..6) # => true # (1..5).overlaps?(7..9) # => false def overlaps?(other) include?(other.first) || other.include?(first) end end activesupport-3.2.16/lib/active_support/core_ext/range/conversions.rb0000644000175000017500000000074312247654667025504 0ustar ondrejondrejclass Range RANGE_FORMATS = { :db => Proc.new { |start, stop| "BETWEEN '#{start.to_s(:db)}' AND '#{stop.to_s(:db)}'" } } # Gives a human readable format of the range. # # ==== Example # # (1..100).to_formatted_s # => "1..100" def to_formatted_s(format = :default) if formatter = RANGE_FORMATS[format] formatter.call(first, last) else to_default_s end end alias_method :to_default_s, :to_s alias_method :to_s, :to_formatted_s end activesupport-3.2.16/lib/active_support/core_ext/range/cover.rb0000644000175000017500000000013512247654667024245 0ustar ondrejondrejclass Range alias_method(:cover?, :include?) unless instance_methods.include?(:cover?) end activesupport-3.2.16/lib/active_support/core_ext/range/include_range.rb0000644000175000017500000000126312247654667025731 0ustar ondrejondrejclass Range # Extends the default Range#include? to support range comparisons. # (1..5).include?(1..5) # => true # (1..5).include?(2..3) # => true # (1..5).include?(2..6) # => false # # The native Range#include? behavior is untouched. # ("a".."f").include?("c") # => true # (5..9).include?(11) # => false def include_with_range?(value) if value.is_a?(::Range) # 1...10 includes 1..9 but it does not include 1..10. operator = exclude_end? && !value.exclude_end? ? :< : :<= include_without_range?(value.first) && value.last.send(operator, last) else include_without_range?(value) end end alias_method_chain :include?, :range end activesupport-3.2.16/lib/active_support/core_ext/range/blockless_step.rb0000644000175000017500000000127312247654667026147 0ustar ondrejondrejrequire 'active_support/core_ext/module/aliasing' class Range begin (1..2).step # Range#step doesn't return an Enumerator rescue LocalJumpError # Return an array when step is called without a block. def step_with_blockless(*args, &block) if block_given? step_without_blockless(*args, &block) else array = [] step_without_blockless(*args) { |step| array << step } array end end else def step_with_blockless(*args, &block) #:nodoc: if block_given? step_without_blockless(*args, &block) else step_without_blockless(*args).to_a end end end alias_method_chain :step, :blockless end activesupport-3.2.16/lib/active_support/core_ext/integer.rb0000644000175000017500000000023012247654667023464 0ustar ondrejondrejrequire 'active_support/core_ext/integer/multiple' require 'active_support/core_ext/integer/inflections' require 'active_support/core_ext/integer/time' activesupport-3.2.16/lib/active_support/core_ext/regexp.rb0000644000175000017500000000012612247654667023325 0ustar ondrejondrejclass Regexp #:nodoc: def multiline? options & MULTILINE == MULTILINE end end activesupport-3.2.16/lib/active_support/core_ext/date/0000755000175000017500000000000012247654667022424 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/date/conversions.rb0000644000175000017500000000704412247654667025326 0ustar ondrejondrejrequire 'date' require 'active_support/inflector/methods' require 'active_support/core_ext/date/zones' require 'active_support/core_ext/module/remove_method' class Date DATE_FORMATS = { :short => "%e %b", :long => "%B %e, %Y", :db => "%Y-%m-%d", :number => "%Y%m%d", :long_ordinal => lambda { |date| date.strftime("%B #{ActiveSupport::Inflector.ordinalize(date.day)}, %Y") }, # => "April 25th, 2007" :rfc822 => "%e %b %Y" } # Ruby 1.9 has Date#to_time which converts to localtime only. remove_possible_method :to_time # Ruby 1.9 has Date#xmlschema which converts to a string without the time component. remove_possible_method :xmlschema # Convert to a formatted string. See DATE_FORMATS for predefined formats. # # This method is aliased to to_s. # # ==== Examples # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007 # # date.to_formatted_s(:db) # => "2007-11-10" # date.to_s(:db) # => "2007-11-10" # # date.to_formatted_s(:short) # => "10 Nov" # date.to_formatted_s(:long) # => "November 10, 2007" # date.to_formatted_s(:long_ordinal) # => "November 10th, 2007" # date.to_formatted_s(:rfc822) # => "10 Nov 2007" # # == Adding your own time formats to to_formatted_s # You can add your own formats to the Date::DATE_FORMATS hash. # Use the format name as the hash key and either a strftime string # or Proc instance that takes a date argument as the value. # # # config/initializers/time_formats.rb # Date::DATE_FORMATS[:month_and_year] = "%B %Y" # Date::DATE_FORMATS[:short_ordinal] = lambda { |date| date.strftime("%B #{date.day.ordinalize}") } def to_formatted_s(format = :default) if formatter = DATE_FORMATS[format] if formatter.respond_to?(:call) formatter.call(self).to_s else strftime(formatter) end else to_default_s end end alias_method :to_default_s, :to_s alias_method :to_s, :to_formatted_s # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005" def readable_inspect strftime("%a, %d %b %Y") end alias_method :default_inspect, :inspect alias_method :inspect, :readable_inspect # A method to keep Time, Date and DateTime instances interchangeable on conversions. # In this case, it simply returns +self+. def to_date self end if RUBY_VERSION < '1.9' # Converts a Date instance to a Time, where the time is set to the beginning of the day. # The timezone can be either :local or :utc (default :local). # # ==== Examples # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007 # # date.to_time # => Sat Nov 10 00:00:00 0800 2007 # date.to_time(:local) # => Sat Nov 10 00:00:00 0800 2007 # # date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007 def to_time(form = :local) ::Time.send("#{form}_time", year, month, day) end # Converts a Date instance to a DateTime, where the time is set to the beginning of the day # and UTC offset is set to 0. # # ==== Examples # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007 # # date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000 def to_datetime ::DateTime.civil(year, month, day, 0, 0, 0, 0) end if RUBY_VERSION < '1.9' def iso8601 strftime('%F') end if RUBY_VERSION < '1.9' alias_method :rfc3339, :iso8601 if RUBY_VERSION < '1.9' def xmlschema to_time_in_current_zone.xmlschema end end activesupport-3.2.16/lib/active_support/core_ext/date/freeze.rb0000644000175000017500000000175612247654667024242 0ustar ondrejondrej# Date memoizes some instance methods using metaprogramming to wrap # the methods with one that caches the result in an instance variable. # # If a Date is frozen but the memoized method hasn't been called, the # first call will result in a frozen object error since the memo # instance variable is uninitialized. # # Work around by eagerly memoizing before the first freeze. # # Ruby 1.9 uses a preinitialized instance variable so it's unaffected. # This hack is as close as we can get to feature detection: if RUBY_VERSION < '1.9' require 'date' begin ::Date.today.freeze.jd rescue => frozen_object_error if frozen_object_error.message =~ /frozen/ class Date #:nodoc: def freeze unless frozen? self.class.private_instance_methods(false).each do |m| if m.to_s =~ /\A__\d+__\Z/ instance_variable_set(:"@#{m}", [send(m)]) end end end super end end end end end activesupport-3.2.16/lib/active_support/core_ext/date/calculations.rb0000644000175000017500000002327212247654667025440 0ustar ondrejondrejrequire 'date' require 'active_support/duration' require 'active_support/core_ext/object/acts_like' require 'active_support/core_ext/date/zones' require 'active_support/core_ext/time/zones' class Date DAYS_INTO_WEEK = { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 } if RUBY_VERSION < '1.9' undef :>> # Backported from 1.9. The one in 1.8 leads to incorrect next_month and # friends for dates where the calendar reform is involved. It additionally # prevents an infinite loop fixed in r27013. def >>(n) y, m = (year * 12 + (mon - 1) + n).divmod(12) m, = (m + 1) .divmod(1) d = mday until jd2 = self.class.valid_civil?(y, m, d, start) d -= 1 raise ArgumentError, 'invalid date' unless d > 0 end self + (jd2 - jd) end end class << self # Returns a new Date representing the date 1 day ago (i.e. yesterday's date). def yesterday ::Date.current.yesterday end # Returns a new Date representing the date 1 day after today (i.e. tomorrow's date). def tomorrow ::Date.current.tomorrow end # Returns Time.zone.today when Time.zone or config.time_zone are set, otherwise just returns Date.today. def current ::Time.zone ? ::Time.zone.today : ::Date.today end end # Returns true if the Date object's date lies in the past. Otherwise returns false. def past? self < ::Date.current end # Returns true if the Date object's date is today. def today? self.to_date == ::Date.current # we need the to_date because of DateTime end # Returns true if the Date object's date lies in the future. def future? self > ::Date.current end # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) # and then subtracts the specified number of seconds. def ago(seconds) to_time_in_current_zone.since(-seconds) end # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) # and then adds the specified number of seconds def since(seconds) to_time_in_current_zone.since(seconds) end alias :in :since # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) def beginning_of_day to_time_in_current_zone end alias :midnight :beginning_of_day alias :at_midnight :beginning_of_day alias :at_beginning_of_day :beginning_of_day # Converts Date to a Time (or DateTime if necessary) with the time portion set to the end of the day (23:59:59) def end_of_day to_time_in_current_zone.end_of_day end def plus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other other.since(self) else plus_without_duration(other) end end alias_method :plus_without_duration, :+ alias_method :+, :plus_with_duration def minus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other plus_with_duration(-other) else minus_without_duration(other) end end alias_method :minus_without_duration, :- alias_method :-, :minus_with_duration # Provides precise Date calculations for years, months, and days. The +options+ parameter takes a hash with # any of these keys: :years, :months, :weeks, :days. def advance(options) options = options.dup d = self d = d >> options.delete(:years) * 12 if options[:years] d = d >> options.delete(:months) if options[:months] d = d + options.delete(:weeks) * 7 if options[:weeks] d = d + options.delete(:days) if options[:days] d end # Returns a new Date where one or more of the elements have been changed according to the +options+ parameter. # # Examples: # # Date.new(2007, 5, 12).change(:day => 1) # => Date.new(2007, 5, 1) # Date.new(2007, 5, 12).change(:year => 2005, :month => 1) # => Date.new(2005, 1, 12) def change(options) ::Date.new( options[:year] || self.year, options[:month] || self.month, options[:day] || self.day ) end # Returns a new Date/DateTime representing the time a number of specified weeks ago. def weeks_ago(weeks) advance(:weeks => -weeks) end # Returns a new Date/DateTime representing the time a number of specified months ago. def months_ago(months) advance(:months => -months) end # Returns a new Date/DateTime representing the time a number of specified months in the future. def months_since(months) advance(:months => months) end # Returns a new Date/DateTime representing the time a number of specified years ago. def years_ago(years) advance(:years => -years) end # Returns a new Date/DateTime representing the time a number of specified years in the future. def years_since(years) advance(:years => years) end # Shorthand for years_ago(1) def prev_year years_ago(1) end unless method_defined?(:prev_year) # Shorthand for years_since(1) def next_year years_since(1) end unless method_defined?(:next_year) # Shorthand for months_ago(1) def prev_month months_ago(1) end unless method_defined?(:prev_month) # Shorthand for months_since(1) def next_month months_since(1) end unless method_defined?(:next_month) # Returns number of days to start of this week. Week is assumed to start on # +start_day+, default is +:monday+. def days_to_week_start(start_day = :monday) start_day_number = DAYS_INTO_WEEK[start_day] current_day_number = wday != 0 ? wday - 1 : 6 (current_day_number - start_day_number) % 7 end # Returns a new +Date+/+DateTime+ representing the start of this week. Week is # assumed to start on +start_day+, default is +:monday+. +DateTime+ objects # have their time set to 0:00. def beginning_of_week(start_day = :monday) days_to_start = days_to_week_start(start_day) result = self - days_to_start acts_like?(:time) ? result.midnight : result end alias :at_beginning_of_week :beginning_of_week # Returns a new +Date+/+DateTime+ representing the start of this week. Week is # assumed to start on a Monday. +DateTime+ objects have their time set to 0:00. def monday beginning_of_week end # Returns a new +Date+/+DateTime+ representing the end of this week. Week is # assumed to start on +start_day+, default is +:monday+. +DateTime+ objects # have their time set to 23:59:59. def end_of_week(start_day = :monday) days_to_end = 6 - days_to_week_start(start_day) result = self + days_to_end.days self.acts_like?(:time) ? result.end_of_day : result end alias :at_end_of_week :end_of_week # Returns a new +Date+/+DateTime+ representing the end of this week. Week is # assumed to start on a Monday. +DateTime+ objects have their time set to 23:59:59. def sunday end_of_week end # Returns a new +Date+/+DateTime+ representing the given +day+ in the previous # week. Default is +:monday+. +DateTime+ objects have their time set to 0:00. def prev_week(day = :monday) result = (self - 7).beginning_of_week + DAYS_INTO_WEEK[day] self.acts_like?(:time) ? result.change(:hour => 0) : result end # Returns a new Date/DateTime representing the start of the given day in next week (default is :monday). def next_week(day = :monday) result = (self + 7).beginning_of_week + DAYS_INTO_WEEK[day] self.acts_like?(:time) ? result.change(:hour => 0) : result end # Returns a new ; DateTime objects will have time set to 0:00DateTime representing the start of the month (1st of the month; DateTime objects will have time set to 0:00) def beginning_of_month self.acts_like?(:time) ? change(:day => 1, :hour => 0) : change(:day => 1) end alias :at_beginning_of_month :beginning_of_month # Returns a new Date/DateTime representing the end of the month (last day of the month; DateTime objects will have time set to 0:00) def end_of_month last_day = ::Time.days_in_month( self.month, self.year ) self.acts_like?(:time) ? change(:day => last_day, :hour => 23, :min => 59, :sec => 59) : change(:day => last_day) end alias :at_end_of_month :end_of_month # Returns a new Date/DateTime representing the start of the quarter (1st of january, april, july, october; DateTime objects will have time set to 0:00) def beginning_of_quarter beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= self.month }) end alias :at_beginning_of_quarter :beginning_of_quarter # Returns a new Date/DateTime representing the end of the quarter (last day of march, june, september, december; DateTime objects will have time set to 23:59:59) def end_of_quarter beginning_of_month.change(:month => [3, 6, 9, 12].detect { |m| m >= self.month }).end_of_month end alias :at_end_of_quarter :end_of_quarter # Returns a new Date/DateTime representing the start of the year (1st of january; DateTime objects will have time set to 0:00) def beginning_of_year self.acts_like?(:time) ? change(:month => 1, :day => 1, :hour => 0) : change(:month => 1, :day => 1) end alias :at_beginning_of_year :beginning_of_year # Returns a new Time representing the end of the year (31st of december; DateTime objects will have time set to 23:59:59) def end_of_year self.acts_like?(:time) ? change(:month => 12, :day => 31, :hour => 23, :min => 59, :sec => 59) : change(:month => 12, :day => 31) end alias :at_end_of_year :end_of_year # Convenience method which returns a new Date/DateTime representing the time 1 day ago def yesterday self - 1 end # Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time def tomorrow self + 1 end end activesupport-3.2.16/lib/active_support/core_ext/date/acts_like.rb0000644000175000017500000000024412247654667024707 0ustar ondrejondrejrequire 'active_support/core_ext/object/acts_like' class Date # Duck-types as a Date-like class. See Object#acts_like?. def acts_like_date? true end end activesupport-3.2.16/lib/active_support/core_ext/date/zones.rb0000644000175000017500000000054512247654667024113 0ustar ondrejondrejrequire 'date' require 'active_support/core_ext/time/zones' class Date # Converts Date to a TimeWithZone in the current zone if Time.zone or Time.zone_default # is set, otherwise converts Date to a Time via Date#to_time def to_time_in_current_zone if ::Time.zone ::Time.zone.local(year, month, day) else to_time end end end activesupport-3.2.16/lib/active_support/core_ext/numeric/0000755000175000017500000000000012247654667023151 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/numeric/bytes.rb0000644000175000017500000000135312247654667024626 0ustar ondrejondrejclass Numeric KILOBYTE = 1024 MEGABYTE = KILOBYTE * 1024 GIGABYTE = MEGABYTE * 1024 TERABYTE = GIGABYTE * 1024 PETABYTE = TERABYTE * 1024 EXABYTE = PETABYTE * 1024 # Enables the use of byte calculations and declarations, like 45.bytes + 2.6.megabytes def bytes self end alias :byte :bytes def kilobytes self * KILOBYTE end alias :kilobyte :kilobytes def megabytes self * MEGABYTE end alias :megabyte :megabytes def gigabytes self * GIGABYTE end alias :gigabyte :gigabytes def terabytes self * TERABYTE end alias :terabyte :terabytes def petabytes self * PETABYTE end alias :petabyte :petabytes def exabytes self * EXABYTE end alias :exabyte :exabytes end activesupport-3.2.16/lib/active_support/core_ext/numeric/time.rb0000644000175000017500000000444612247654667024444 0ustar ondrejondrejrequire 'active_support/duration' require 'active_support/core_ext/time/calculations' require 'active_support/core_ext/time/acts_like' class Numeric # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years. # # These methods use Time#advance for precise date calculations when using from_now, ago, etc. # as well as adding or subtracting their results from a Time object. For example: # # # equivalent to Time.now.advance(:months => 1) # 1.month.from_now # # # equivalent to Time.now.advance(:years => 2) # 2.years.from_now # # # equivalent to Time.now.advance(:months => 4, :years => 5) # (4.months + 5.years).from_now # # While these methods provide precise calculation when used as in the examples above, care # should be taken to note that this is not true if the result of `months', `years', etc is # converted before use: # # # equivalent to 30.days.to_i.from_now # 1.month.to_i.from_now # # # equivalent to 365.25.days.to_f.from_now # 1.year.to_f.from_now # # In such cases, Ruby's core # Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and # Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision # date and time arithmetic def seconds ActiveSupport::Duration.new(self, [[:seconds, self]]) end alias :second :seconds def minutes ActiveSupport::Duration.new(self * 60, [[:seconds, self * 60]]) end alias :minute :minutes def hours ActiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]]) end alias :hour :hours def days ActiveSupport::Duration.new(self * 24.hours, [[:days, self]]) end alias :day :days def weeks ActiveSupport::Duration.new(self * 7.days, [[:days, self * 7]]) end alias :week :weeks def fortnights ActiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]]) end alias :fortnight :fortnights # Reads best without arguments: 10.minutes.ago def ago(time = ::Time.current) time - self end # Reads best with argument: 10.minutes.until(time) alias :until :ago # Reads best with argument: 10.minutes.since(time) def since(time = ::Time.current) time + self end # Reads best without arguments: 10.minutes.from_now alias :from_now :since end activesupport-3.2.16/lib/active_support/core_ext/integer/0000755000175000017500000000000012247654667023144 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/integer/inflections.rb0000644000175000017500000000073512247654667026013 0ustar ondrejondrejrequire 'active_support/inflector' class Integer # Ordinalize turns a number into an ordinal string used to denote the # position in an ordered sequence such as 1st, 2nd, 3rd, 4th. # # 1.ordinalize # => "1st" # 2.ordinalize # => "2nd" # 1002.ordinalize # => "1002nd" # 1003.ordinalize # => "1003rd" # -11.ordinalize # => "-11th" # -1001.ordinalize # => "-1001st" # def ordinalize ActiveSupport::Inflector.ordinalize(self) end end activesupport-3.2.16/lib/active_support/core_ext/integer/time.rb0000644000175000017500000000255212247654667024433 0ustar ondrejondrejclass Integer # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years. # # These methods use Time#advance for precise date calculations when using from_now, ago, etc. # as well as adding or subtracting their results from a Time object. For example: # # # equivalent to Time.now.advance(:months => 1) # 1.month.from_now # # # equivalent to Time.now.advance(:years => 2) # 2.years.from_now # # # equivalent to Time.now.advance(:months => 4, :years => 5) # (4.months + 5.years).from_now # # While these methods provide precise calculation when used as in the examples above, care # should be taken to note that this is not true if the result of `months', `years', etc is # converted before use: # # # equivalent to 30.days.to_i.from_now # 1.month.to_i.from_now # # # equivalent to 365.25.days.to_f.from_now # 1.year.to_f.from_now # # In such cases, Ruby's core # Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and # Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision # date and time arithmetic def months ActiveSupport::Duration.new(self * 30.days, [[:months, self]]) end alias :month :months def years ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]]) end alias :year :years end activesupport-3.2.16/lib/active_support/core_ext/integer/multiple.rb0000644000175000017500000000041612247654667025325 0ustar ondrejondrejclass Integer # Check whether the integer is evenly divisible by the argument. # # 0.multiple_of?(0) #=> true # 6.multiple_of?(5) #=> false # 10.multiple_of?(2) #=> true def multiple_of?(number) number != 0 ? self % number == 0 : zero? end end activesupport-3.2.16/lib/active_support/core_ext/string.rb0000644000175000017500000000131212247654667023337 0ustar ondrejondrejrequire 'active_support/core_ext/string/conversions' require 'active_support/core_ext/string/filters' require 'active_support/core_ext/string/multibyte' require 'active_support/core_ext/string/starts_ends_with' require 'active_support/core_ext/string/inflections' require 'active_support/core_ext/string/access' require 'active_support/core_ext/string/xchar' require 'active_support/core_ext/string/behavior' require 'active_support/core_ext/string/interpolation' require 'active_support/core_ext/string/output_safety' require 'active_support/core_ext/string/exclude' require 'active_support/core_ext/string/encoding' require 'active_support/core_ext/string/strip' require 'active_support/core_ext/string/inquiry' activesupport-3.2.16/lib/active_support/core_ext/module.rb0000644000175000017500000000121212247654667023315 0ustar ondrejondrejrequire 'active_support/core_ext/module/aliasing' require 'active_support/core_ext/module/introspection' require 'active_support/core_ext/module/anonymous' require 'active_support/core_ext/module/reachable' require 'active_support/core_ext/module/attribute_accessors' require 'active_support/core_ext/module/attr_internal' require 'active_support/core_ext/module/delegation' require 'active_support/core_ext/module/synchronization' require 'active_support/core_ext/module/deprecation' require 'active_support/core_ext/module/remove_method' require 'active_support/core_ext/module/method_names' require 'active_support/core_ext/module/qualified_const'activesupport-3.2.16/lib/active_support/core_ext/process.rb0000644000175000017500000000006112247654667023507 0ustar ondrejondrejrequire 'active_support/core_ext/process/daemon' activesupport-3.2.16/lib/active_support/core_ext/big_decimal/0000755000175000017500000000000012247654667023726 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/big_decimal/conversions.rb0000644000175000017500000000211112247654667026616 0ustar ondrejondrejrequire 'bigdecimal' begin require 'psych' rescue LoadError end require 'yaml' class BigDecimal YAML_TAG = 'tag:yaml.org,2002:float' YAML_MAPPING = { 'Infinity' => '.Inf', '-Infinity' => '-.Inf', 'NaN' => '.NaN' } # This emits the number without any scientific notation. # This is better than self.to_f.to_s since it doesn't lose precision. # # Note that reconstituting YAML floats to native floats may lose precision. def to_yaml(opts = {}) return super if defined?(YAML::ENGINE) && !YAML::ENGINE.syck? YAML.quick_emit(nil, opts) do |out| string = to_s out.scalar(YAML_TAG, YAML_MAPPING[string] || string, :plain) end end def encode_with(coder) string = to_s coder.represent_scalar(nil, YAML_MAPPING[string] || string) end # Backport this method if it doesn't exist unless method_defined?(:to_d) def to_d self end end DEFAULT_STRING_FORMAT = 'F' def to_formatted_s(format = DEFAULT_STRING_FORMAT) _original_to_s(format) end alias_method :_original_to_s, :to_s alias_method :to_s, :to_formatted_s end activesupport-3.2.16/lib/active_support/core_ext/class.rb0000644000175000017500000000033712247654667023144 0ustar ondrejondrejrequire 'active_support/core_ext/class/attribute' require 'active_support/core_ext/class/attribute_accessors' require 'active_support/core_ext/class/delegating_attributes' require 'active_support/core_ext/class/subclasses' activesupport-3.2.16/lib/active_support/core_ext/string/0000755000175000017500000000000012247654667023015 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/string/encoding.rb0000644000175000017500000000024712247654667025133 0ustar ondrejondrejclass String if defined?(Encoding) && "".respond_to?(:encode) def encoding_aware? true end else def encoding_aware? false end end endactivesupport-3.2.16/lib/active_support/core_ext/string/conversions.rb0000644000175000017500000000461512247654667025720 0ustar ondrejondrej# encoding: utf-8 require 'date' require 'active_support/core_ext/time/publicize_conversion_methods' require 'active_support/core_ext/time/calculations' class String # Returns the codepoint of the first character of the string, assuming a # single-byte character encoding: # # "a".ord # => 97 # "à".ord # => 224, in ISO-8859-1 # # This method is defined in Ruby 1.8 for Ruby 1.9 forward compatibility on # these character encodings. # # ActiveSupport::Multibyte::Chars#ord is forward compatible with # Ruby 1.9 on UTF8 strings: # # "a".mb_chars.ord # => 97 # "à".mb_chars.ord # => 224, in UTF8 # # Note that the 224 is different in both examples. In ISO-8859-1 "à" is # represented as a single byte, 224. In UTF8 it is represented with two # bytes, namely 195 and 160, but its Unicode codepoint is 224. If we # call +ord+ on the UTF8 string "à" the return value will be 195. That is # not an error, because UTF8 is unsupported, the call itself would be # bogus. def ord self[0] end unless method_defined?(:ord) # +getbyte+ backport from Ruby 1.9 alias_method :getbyte, :[] unless method_defined?(:getbyte) # Form can be either :utc (default) or :local. def to_time(form = :utc) return nil if self.blank? d = ::Date._parse(self, false).values_at(:year, :mon, :mday, :hour, :min, :sec, :sec_fraction, :offset).map { |arg| arg || 0 } d[6] *= 1000000 ::Time.send("#{form}_time", *d[0..6]) - d[7] end # Converts a string to a Date value. # # "1-1-2012".to_date #=> Sun, 01 Jan 2012 # "01/01/2012".to_date #=> Sun, 01 Jan 2012 # "2012-12-13".to_date #=> Thu, 13 Dec 2012 # "12/13/2012".to_date #=> ArgumentError: invalid date def to_date return nil if self.blank? ::Date.new(*::Date._parse(self, false).values_at(:year, :mon, :mday)) end # Converts a string to a DateTime value. # # "1-1-2012".to_datetime #=> Sun, 01 Jan 2012 00:00:00 +0000 # "01/01/2012 23:59:59".to_datetime #=> Sun, 01 Jan 2012 23:59:59 +0000 # "2012-12-13 12:50".to_datetime #=> Thu, 13 Dec 2012 12:50:00 +0000 # "12/13/2012".to_datetime #=> ArgumentError: invalid date def to_datetime return nil if self.blank? d = ::Date._parse(self, false).values_at(:year, :mon, :mday, :hour, :min, :sec, :zone, :sec_fraction).map { |arg| arg || 0 } d[5] += d.pop ::DateTime.civil(*d) end end activesupport-3.2.16/lib/active_support/core_ext/string/inquiry.rb0000644000175000017500000000056712247654667025052 0ustar ondrejondrejrequire 'active_support/string_inquirer' class String # Wraps the current string in the ActiveSupport::StringInquirer class, # which gives you a prettier way to test for equality. Example: # # env = "production".inquiry # env.production? # => true # env.development? # => false def inquiry ActiveSupport::StringInquirer.new(self) end end activesupport-3.2.16/lib/active_support/core_ext/string/multibyte.rb0000644000175000017500000000512012247654667025356 0ustar ondrejondrej# encoding: utf-8 require 'active_support/multibyte' class String if RUBY_VERSION >= "1.9" # == Multibyte proxy # # +mb_chars+ is a multibyte safe proxy for string methods. # # In Ruby 1.8 and older it creates and returns an instance of the ActiveSupport::Multibyte::Chars class which # encapsulates the original string. A Unicode safe version of all the String methods are defined on this proxy # class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsulated string. # # name = 'Claus Müller' # name.reverse # => "rell??M sualC" # name.length # => 13 # # name.mb_chars.reverse.to_s # => "rellüM sualC" # name.mb_chars.length # => 12 # # In Ruby 1.9 and newer +mb_chars+ returns +self+ because String is (mostly) encoding aware. This means that # it becomes easy to run one version of your code on multiple Ruby versions. # # == Method chaining # # All the methods on the Chars proxy which normally return a string will return a Chars object. This allows # method chaining on the result of any of these methods. # # name.mb_chars.reverse.length # => 12 # # == Interoperability and configuration # # The Chars object tries to be as interchangeable with String objects as possible: sorting and comparing between # String and Char work like expected. The bang! methods change the internal string representation in the Chars # object. Interoperability problems can be resolved easily with a +to_s+ call. # # For more information about the methods defined on the Chars proxy see ActiveSupport::Multibyte::Chars. For # information about how to change the default Multibyte behavior see ActiveSupport::Multibyte. def mb_chars if ActiveSupport::Multibyte.proxy_class.consumes?(self) ActiveSupport::Multibyte.proxy_class.new(self) else self end end def is_utf8? case encoding when Encoding::UTF_8 valid_encoding? when Encoding::ASCII_8BIT, Encoding::US_ASCII dup.force_encoding(Encoding::UTF_8).valid_encoding? else false end end else def mb_chars if ActiveSupport::Multibyte.proxy_class.wants?(self) ActiveSupport::Multibyte.proxy_class.new(self) else self end end # Returns true if the string has UTF-8 semantics (a String used for purely byte resources is unlikely to have # them), returns false otherwise. def is_utf8? ActiveSupport::Multibyte::Chars.consumes?(self) end end end activesupport-3.2.16/lib/active_support/core_ext/string/exclude.rb0000644000175000017500000000045012247654667024772 0ustar ondrejondrejclass String # The inverse of String#include?. Returns true if the string # does not include the other string. # # "hello".exclude? "lo" #=> false # "hello".exclude? "ol" #=> true # "hello".exclude? ?h #=> false def exclude?(string) !include?(string) end end activesupport-3.2.16/lib/active_support/core_ext/string/output_safety.rb0000644000175000017500000001113712247654667026260 0ustar ondrejondrejrequire 'erb' require 'active_support/core_ext/kernel/singleton_class' class ERB module Util HTML_ESCAPE = { '&' => '&', '>' => '>', '<' => '<', '"' => '"', "'" => ''' } JSON_ESCAPE = { '&' => '\u0026', '>' => '\u003E', '<' => '\u003C' } if RUBY_VERSION >= '1.9' # A utility method for escaping HTML tag characters. # This method is also aliased as h. # # In your ERB templates, use this method to escape any unsafe content. For example: # <%=h @person.name %> # # ==== Example: # puts html_escape("is a > 0 & a < 10?") # # => is a > 0 & a < 10? def html_escape(s) s = s.to_s if s.html_safe? s else s.gsub(/[&"'><]/, HTML_ESCAPE).html_safe end end else def html_escape(s) #:nodoc: s = s.to_s if s.html_safe? s else s.gsub(/[&"'><]/n) { |special| HTML_ESCAPE[special] }.html_safe end end end # Aliasing twice issues a warning "discarding old...". Remove first to avoid it. remove_method(:h) alias h html_escape module_function :h singleton_class.send(:remove_method, :html_escape) module_function :html_escape # A utility method for escaping HTML entities in JSON strings # using \uXXXX JavaScript escape sequences for string literals: # # json_escape("is a > 0 & a < 10?") # # => is a \u003E 0 \u0026 a \u003C 10? # # Note that after this operation is performed the output is not # valid JSON. In particular double quotes are removed: # # json_escape('{"name":"john","created_at":"2010-04-28T01:39:31Z","id":1}') # # => {name:john,created_at:2010-04-28T01:39:31Z,id:1} # # This method is also aliased as +j+, and available as a helper # in Rails templates: # # <%=j @person.to_json %> # def json_escape(s) result = s.to_s.gsub(/[&"><]/) { |special| JSON_ESCAPE[special] } s.html_safe? ? result.html_safe : result end alias j json_escape module_function :j module_function :json_escape end end class Object def html_safe? false end end class Numeric def html_safe? true end end module ActiveSupport #:nodoc: class SafeBuffer < String UNSAFE_STRING_METHODS = ["capitalize", "chomp", "chop", "delete", "downcase", "gsub", "lstrip", "next", "reverse", "rstrip", "slice", "squeeze", "strip", "sub", "succ", "swapcase", "tr", "tr_s", "upcase", "prepend"].freeze alias_method :original_concat, :concat private :original_concat class SafeConcatError < StandardError def initialize super "Could not concatenate to the buffer because it is not html safe." end end def [](*args) return super if args.size < 2 if html_safe? new_safe_buffer = super new_safe_buffer.instance_eval { @html_safe = true } new_safe_buffer else to_str[*args] end end def safe_concat(value) raise SafeConcatError unless html_safe? original_concat(value) end def initialize(*) @html_safe = true super end def initialize_copy(other) super @html_safe = other.html_safe? end def clone_empty self[0, 0] end def concat(value) if !html_safe? || value.html_safe? super(value) else super(ERB::Util.h(value)) end end alias << concat def +(other) dup.concat(other) end def html_safe? defined?(@html_safe) && @html_safe end def to_s self end def to_param to_str end def encode_with(coder) coder.represent_scalar nil, to_str end def to_yaml(*args) return super() if defined?(YAML::ENGINE) && !YAML::ENGINE.syck? to_str.to_yaml(*args) end UNSAFE_STRING_METHODS.each do |unsafe_method| if 'String'.respond_to?(unsafe_method) class_eval <<-EOT, __FILE__, __LINE__ + 1 def #{unsafe_method}(*args, &block) # def capitalize(*args, &block) to_str.#{unsafe_method}(*args, &block) # to_str.capitalize(*args, &block) end # end def #{unsafe_method}!(*args) # def capitalize!(*args) @html_safe = false # @html_safe = false super # super end # end EOT end end end end class String def html_safe ActiveSupport::SafeBuffer.new(self) end end activesupport-3.2.16/lib/active_support/core_ext/string/starts_ends_with.rb0000644000175000017500000000014312247654667026724 0ustar ondrejondrejclass String alias_method :starts_with?, :start_with? alias_method :ends_with?, :end_with? end activesupport-3.2.16/lib/active_support/core_ext/string/strip.rb0000644000175000017500000000123212247654667024501 0ustar ondrejondrejrequire 'active_support/core_ext/object/try' class String # Strips indentation in heredocs. # # For example in # # if options[:usage] # puts <<-USAGE.strip_heredoc # This command does such and such. # # Supported options are: # -h This message # ... # USAGE # end # # the user would see the usage message aligned against the left margin. # # Technically, it looks for the least indented line in the whole string, and removes # that amount of leading whitespace. def strip_heredoc indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0 gsub(/^[ \t]{#{indent}}/, '') end end activesupport-3.2.16/lib/active_support/core_ext/string/inflections.rb0000644000175000017500000001621512247654667025664 0ustar ondrejondrejrequire 'active_support/inflector/methods' require 'active_support/inflector/transliterate' # String inflections define new methods on the String class to transform names for different purposes. # For instance, you can figure out the name of a table from the name of a class. # # "ScaleScore".tableize # => "scale_scores" # class String # Returns the plural form of the word in the string. # # If the optional parameter +count+ is specified, # the singular form will be returned if count == 1. # For any other value of +count+ the plural will be returned. # # ==== Examples # "post".pluralize # => "posts" # "octopus".pluralize # => "octopi" # "sheep".pluralize # => "sheep" # "words".pluralize # => "words" # "the blue mailman".pluralize # => "the blue mailmen" # "CamelOctopus".pluralize # => "CamelOctopi" # "apple".pluralize(1) # => "apple" # "apple".pluralize(2) # => "apples" def pluralize(count = nil) if count == 1 self else ActiveSupport::Inflector.pluralize(self) end end # The reverse of +pluralize+, returns the singular form of a word in a string. # # "posts".singularize # => "post" # "octopi".singularize # => "octopus" # "sheep".singularize # => "sheep" # "word".singularize # => "word" # "the blue mailmen".singularize # => "the blue mailman" # "CamelOctopi".singularize # => "CamelOctopus" def singularize ActiveSupport::Inflector.singularize(self) end # +constantize+ tries to find a declared constant with the name specified # in the string. It raises a NameError when the name is not in CamelCase # or is not initialized. See ActiveSupport::Inflector.constantize # # Examples # "Module".constantize # => Module # "Class".constantize # => Class # "blargle".constantize # => NameError: wrong constant name blargle def constantize ActiveSupport::Inflector.constantize(self) end # +safe_constantize+ tries to find a declared constant with the name specified # in the string. It returns nil when the name is not in CamelCase # or is not initialized. See ActiveSupport::Inflector.safe_constantize # # Examples # "Module".safe_constantize # => Module # "Class".safe_constantize # => Class # "blargle".safe_constantize # => nil def safe_constantize ActiveSupport::Inflector.safe_constantize(self) end # By default, +camelize+ converts strings to UpperCamelCase. If the argument to camelize # is set to :lower then camelize produces lowerCamelCase. # # +camelize+ will also convert '/' to '::' which is useful for converting paths to namespaces. # # "active_record".camelize # => "ActiveRecord" # "active_record".camelize(:lower) # => "activeRecord" # "active_record/errors".camelize # => "ActiveRecord::Errors" # "active_record/errors".camelize(:lower) # => "activeRecord::Errors" def camelize(first_letter = :upper) case first_letter when :upper then ActiveSupport::Inflector.camelize(self, true) when :lower then ActiveSupport::Inflector.camelize(self, false) end end alias_method :camelcase, :camelize # Capitalizes all the words and replaces some characters in the string to create # a nicer looking title. +titleize+ is meant for creating pretty output. It is not # used in the Rails internals. # # +titleize+ is also aliased as +titlecase+. # # "man from the boondocks".titleize # => "Man From The Boondocks" # "x-men: the last stand".titleize # => "X Men: The Last Stand" def titleize ActiveSupport::Inflector.titleize(self) end alias_method :titlecase, :titleize # The reverse of +camelize+. Makes an underscored, lowercase form from the expression in the string. # # +underscore+ will also change '::' to '/' to convert namespaces to paths. # # "ActiveModel".underscore # => "active_model" # "ActiveModel::Errors".underscore # => "active_model/errors" def underscore ActiveSupport::Inflector.underscore(self) end # Replaces underscores with dashes in the string. # # "puni_puni" # => "puni-puni" def dasherize ActiveSupport::Inflector.dasherize(self) end # Removes the module part from the constant expression in the string. # # "ActiveRecord::CoreExtensions::String::Inflections".demodulize # => "Inflections" # "Inflections".demodulize # => "Inflections" # # See also +deconstantize+. def demodulize ActiveSupport::Inflector.demodulize(self) end # Removes the rightmost segment from the constant expression in the string. # # "Net::HTTP".deconstantize # => "Net" # "::Net::HTTP".deconstantize # => "::Net" # "String".deconstantize # => "" # "::String".deconstantize # => "" # "".deconstantize # => "" # # See also +demodulize+. def deconstantize ActiveSupport::Inflector.deconstantize(self) end # Replaces special characters in a string so that it may be used as part of a 'pretty' URL. # # ==== Examples # # class Person # def to_param # "#{id}-#{name.parameterize}" # end # end # # @person = Person.find(1) # # => # # # <%= link_to(@person.name, person_path) %> # # => Donald E. Knuth def parameterize(sep = '-') ActiveSupport::Inflector.parameterize(self, sep) end # Creates the name of a table like Rails does for models to table names. This method # uses the +pluralize+ method on the last word in the string. # # "RawScaledScorer".tableize # => "raw_scaled_scorers" # "egg_and_ham".tableize # => "egg_and_hams" # "fancyCategory".tableize # => "fancy_categories" def tableize ActiveSupport::Inflector.tableize(self) end # Create a class name from a plural table name like Rails does for table names to models. # Note that this returns a string and not a class. (To convert to an actual class # follow +classify+ with +constantize+.) # # "egg_and_hams".classify # => "EggAndHam" # "posts".classify # => "Post" # # Singular names are not handled correctly. # # "business".classify # => "Busines" def classify ActiveSupport::Inflector.classify(self) end # Capitalizes the first word, turns underscores into spaces, and strips '_id'. # Like +titleize+, this is meant for creating pretty output. # # "employee_salary" # => "Employee salary" # "author_id" # => "Author" def humanize ActiveSupport::Inflector.humanize(self) end # Creates a foreign key name from a class name. # +separate_class_name_and_id_with_underscore+ sets whether # the method should put '_' between the name and 'id'. # # Examples # "Message".foreign_key # => "message_id" # "Message".foreign_key(false) # => "messageid" # "Admin::Post".foreign_key # => "post_id" def foreign_key(separate_class_name_and_id_with_underscore = true) ActiveSupport::Inflector.foreign_key(self, separate_class_name_and_id_with_underscore) end end activesupport-3.2.16/lib/active_support/core_ext/string/interpolation.rb0000644000175000017500000000011112247654667026222 0ustar ondrejondrejrequire 'active_support/i18n' require 'i18n/core_ext/string/interpolate' activesupport-3.2.16/lib/active_support/core_ext/string/filters.rb0000644000175000017500000000330412247654667025012 0ustar ondrejondrejrequire 'active_support/core_ext/string/multibyte' class String # Returns the string, first removing all whitespace on both ends of # the string, and then changing remaining consecutive whitespace # groups into one space each. # # Examples: # %{ Multi-line # string }.squish # => "Multi-line string" # " foo bar \n \t boo".squish # => "foo bar boo" def squish dup.squish! end # Performs a destructive squish. See String#squish. def squish! strip! gsub!(/\s+/, ' ') self end # Truncates a given +text+ after a given length if +text+ is longer than length: # # "Once upon a time in a world far far away".truncate(27) # # => "Once upon a time in a wo..." # # Pass a :separator to truncate +text+ at a natural break: # # "Once upon a time in a world far far away".truncate(27, :separator => ' ') # # => "Once upon a time in a..." # # The last characters will be replaced with the :omission string (defaults to "...") # for a total length not exceeding :length: # # "And they found that many people were sleeping better.".truncate(25, :omission => "... (continued)") # # => "And they f... (continued)" def truncate(length, options = {}) text = self.dup options[:omission] ||= "..." length_with_room_for_omission = length - options[:omission].mb_chars.length chars = text.mb_chars stop = options[:separator] ? (chars.rindex(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission (chars.length > length ? chars[0...stop] + options[:omission] : text).to_s end end activesupport-3.2.16/lib/active_support/core_ext/string/xchar.rb0000644000175000017500000000063012247654667024446 0ustar ondrejondrejbegin # See http://fast-xs.rubyforge.org/ by Eric Wong. # Also included with hpricot. require 'fast_xs' rescue LoadError # fast_xs extension unavailable else begin require 'builder' rescue LoadError # builder demands the first shot at defining String#to_xs end class String alias_method :original_xs, :to_xs if method_defined?(:to_xs) alias_method :to_xs, :fast_xs end end activesupport-3.2.16/lib/active_support/core_ext/string/access.rb0000644000175000017500000000434512247654667024611 0ustar ondrejondrejrequire "active_support/multibyte" class String unless '1.9'.respond_to?(:force_encoding) # Returns the character at the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".at(0) # => "h" # "hello".at(4) # => "o" # "hello".at(10) # => ERROR if < 1.9, nil in 1.9 def at(position) mb_chars[position, 1].to_s end # Returns the remaining of the string from the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".from(0) # => "hello" # "hello".from(2) # => "llo" # "hello".from(10) # => "" if < 1.9, nil in 1.9 def from(position) mb_chars[position..-1].to_s end # Returns the beginning of the string up to the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".to(0) # => "h" # "hello".to(2) # => "hel" # "hello".to(10) # => "hello" def to(position) mb_chars[0..position].to_s end # Returns the first character of the string or the first +limit+ characters. # # Examples: # "hello".first # => "h" # "hello".first(2) # => "he" # "hello".first(10) # => "hello" def first(limit = 1) if limit == 0 '' elsif limit >= size self else mb_chars[0...limit].to_s end end # Returns the last character of the string or the last +limit+ characters. # # Examples: # "hello".last # => "o" # "hello".last(2) # => "lo" # "hello".last(10) # => "hello" def last(limit = 1) if limit == 0 '' elsif limit >= size self else mb_chars[(-limit)..-1].to_s end end else def at(position) self[position] end def from(position) self[position..-1] end def to(position) self[0..position] end def first(limit = 1) if limit == 0 '' elsif limit >= size self else to(limit - 1) end end def last(limit = 1) if limit == 0 '' elsif limit >= size self else from(-limit) end end end end activesupport-3.2.16/lib/active_support/core_ext/string/behavior.rb0000644000175000017500000000023012247654667025134 0ustar ondrejondrejclass String # Enable more predictable duck-typing on String-like classes. See Object#acts_like?. def acts_like_string? true end end activesupport-3.2.16/lib/active_support/core_ext/exception.rb0000644000175000017500000000013712247654667024033 0ustar ondrejondrejmodule ActiveSupport FrozenObjectError = RUBY_VERSION < '1.9' ? TypeError : RuntimeError end activesupport-3.2.16/lib/active_support/core_ext/file.rb0000644000175000017500000000013212247654667022747 0ustar ondrejondrejrequire 'active_support/core_ext/file/atomic' require 'active_support/core_ext/file/path' activesupport-3.2.16/lib/active_support/core_ext/object/0000755000175000017500000000000012247654667022755 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/object/to_json.rb0000644000175000017500000000156512247654667024764 0ustar ondrejondrej# Hack to load json gem first so we can overwrite its to_json. begin require 'json' rescue LoadError end # The JSON gem adds a few modules to Ruby core classes containing :to_json definition, overwriting # their default behavior. That said, we need to define the basic to_json method in all of them, # otherwise they will always use to_json gem implementation, which is backwards incompatible in # several cases (for instance, the JSON implementation for Hash does not work) with inheritance # and consequently classes as ActiveSupport::OrderedHash cannot be serialized to json. [Object, Array, FalseClass, Float, Hash, Integer, NilClass, String, TrueClass].each do |klass| klass.class_eval do # Dumps object in JSON (JavaScript Object Notation). See www.json.org for more info. def to_json(options = nil) ActiveSupport::JSON.encode(self, options) end end end activesupport-3.2.16/lib/active_support/core_ext/object/try.rb0000644000175000017500000000335112247654667024122 0ustar ondrejondrejclass Object # Invokes the method identified by the symbol +method+, passing it any arguments # and/or the block specified, just like the regular Ruby Object#send does. # # *Unlike* that method however, a +NoMethodError+ exception will *not* be raised # and +nil+ will be returned instead, if the receiving object is a +nil+ object or NilClass. # # If try is called without a method to call, it will yield any given block with the object. # # Please also note that +try+ is defined on +Object+, therefore it won't work with # subclasses of +BasicObject+. For example, using try with +SimpleDelegator+ will # delegate +try+ to target instead of calling it on delegator itself. # # ==== Examples # # Without +try+ # @person && @person.name # or # @person ? @person.name : nil # # With +try+ # @person.try(:name) # # +try+ also accepts arguments and/or a block, for the method it is trying # Person.try(:find, 1) # @people.try(:collect) {|p| p.name} # # Without a method argument try will yield to the block unless the receiver is nil. # @person.try { |p| "#{p.first_name} #{p.last_name}" } #-- # +try+ behaves like +Object#send+, unless called on +NilClass+. def try(*a, &b) if a.empty? && block_given? yield self else __send__(*a, &b) end end end class NilClass # Calling +try+ on +nil+ always returns +nil+. # It becomes specially helpful when navigating through associations that may return +nil+. # # === Examples # # nil.try(:name) # => nil # # Without +try+ # @person && !@person.children.blank? && @person.children.first.name # # With +try+ # @person.try(:children).try(:first).try(:name) def try(*args) nil end end activesupport-3.2.16/lib/active_support/core_ext/object/conversions.rb0000644000175000017500000000031312247654667025647 0ustar ondrejondrejrequire 'active_support/core_ext/object/to_param' require 'active_support/core_ext/object/to_query' require 'active_support/core_ext/array/conversions' require 'active_support/core_ext/hash/conversions' activesupport-3.2.16/lib/active_support/core_ext/object/with_options.rb0000644000175000017500000000304212247654667026027 0ustar ondrejondrejrequire 'active_support/option_merger' class Object # An elegant way to factor duplication out of options passed to a series of # method calls. Each method called in the block, with the block variable as # the receiver, will have its options merged with the default +options+ hash # provided. Each method called on the block variable must take an options # hash as its final argument. # # Without with_options>, this code contains duplication: # # class Account < ActiveRecord::Base # has_many :customers, :dependent => :destroy # has_many :products, :dependent => :destroy # has_many :invoices, :dependent => :destroy # has_many :expenses, :dependent => :destroy # end # # Using with_options, we can remove the duplication: # # class Account < ActiveRecord::Base # with_options :dependent => :destroy do |assoc| # assoc.has_many :customers # assoc.has_many :products # assoc.has_many :invoices # assoc.has_many :expenses # end # end # # It can also be used with an explicit receiver: # # I18n.with_options :locale => user.locale, :scope => "newsletter" do |i18n| # subject i18n.t :subject # body i18n.t :body, :user_name => user.name # end # # with_options can also be nested since the call is forwarded to its receiver. # Each nesting level will merge inherited defaults in addition to their own. # def with_options(options) yield ActiveSupport::OptionMerger.new(self, options) end end activesupport-3.2.16/lib/active_support/core_ext/object/blank.rb0000644000175000017500000000462012247654667024373 0ustar ondrejondrej# encoding: utf-8 require 'active_support/core_ext/string/encoding' class Object # An object is blank if it's false, empty, or a whitespace string. # For example, "", " ", +nil+, [], and {} are all blank. # # This simplifies: # # if address.nil? || address.empty? # # ...to: # # if address.blank? def blank? respond_to?(:empty?) ? empty? : !self end # An object is present if it's not blank?. def present? !blank? end # Returns object if it's present? otherwise returns +nil+. # object.presence is equivalent to object.present? ? object : nil. # # This is handy for any representation of objects where blank is the same # as not present at all. For example, this simplifies a common check for # HTTP POST/query parameters: # # state = params[:state] if params[:state].present? # country = params[:country] if params[:country].present? # region = state || country || 'US' # # ...becomes: # # region = params[:state].presence || params[:country].presence || 'US' def presence self if present? end end class NilClass # +nil+ is blank: # # nil.blank? # => true # def blank? true end end class FalseClass # +false+ is blank: # # false.blank? # => true # def blank? true end end class TrueClass # +true+ is not blank: # # true.blank? # => false # def blank? false end end class Array # An array is blank if it's empty: # # [].blank? # => true # [1,2,3].blank? # => false # alias_method :blank?, :empty? end class Hash # A hash is blank if it's empty: # # {}.blank? # => true # {:key => 'value'}.blank? # => false # alias_method :blank?, :empty? end class String # 0x3000: fullwidth whitespace NON_WHITESPACE_REGEXP = %r![^\s#{[0x3000].pack("U")}]! # A string is blank if it's empty or contains whitespaces only: # # "".blank? # => true # " ".blank? # => true # " ".blank? # => true # " something here ".blank? # => false # def blank? # 1.8 does not takes [:space:] properly if encoding_aware? self !~ /[^[:space:]]/ else self !~ NON_WHITESPACE_REGEXP end end end class Numeric #:nodoc: # No number is blank: # # 1.blank? # => false # 0.blank? # => false # def blank? false end end activesupport-3.2.16/lib/active_support/core_ext/object/acts_like.rb0000644000175000017500000000070612247654667025243 0ustar ondrejondrejclass Object # A duck-type assistant method. For example, Active Support extends Date # to define an acts_like_date? method, and extends Time to define # acts_like_time?. As a result, we can do "x.acts_like?(:time)" and # "x.acts_like?(:date)" to do duck-type-safe comparisons, since classes that # we want to act like Time simply need to define an acts_like_time? method. def acts_like?(duck) respond_to? :"acts_like_#{duck}?" end end activesupport-3.2.16/lib/active_support/core_ext/object/to_query.rb0000644000175000017500000000152412247654667025153 0ustar ondrejondrejrequire 'active_support/core_ext/object/to_param' class Object # Converts an object into a string suitable for use as a URL query string, using the given key as the # param name. # # Note: This method is defined as a default implementation for all Objects for Hash#to_query to work. def to_query(key) require 'cgi' unless defined?(CGI) && defined?(CGI::escape) "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}" end end class Array # Converts an array into a string suitable for use as a URL query string, # using the given +key+ as the param name. # # ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding" def to_query(key) prefix = "#{key}[]" collect { |value| value.to_query(prefix) }.join '&' end end class Hash alias_method :to_query, :to_param end activesupport-3.2.16/lib/active_support/core_ext/object/duplicable.rb0000644000175000017500000000465212247654667025415 0ustar ondrejondrej#-- # Most objects are cloneable, but not all. For example you can't dup +nil+: # # nil.dup # => TypeError: can't dup NilClass # # Classes may signal their instances are not duplicable removing +dup+/+clone+ # or raising exceptions from them. So, to dup an arbitrary object you normally # use an optimistic approach and are ready to catch an exception, say: # # arbitrary_object.dup rescue object # # Rails dups objects in a few critical spots where they are not that arbitrary. # That rescue is very expensive (like 40 times slower than a predicate), and it # is often triggered. # # That's why we hardcode the following cases and check duplicable? instead of # using that rescue idiom. #++ class Object # Can you safely dup this object? # # False for +nil+, +false+, +true+, symbols, numbers, class and module objects; # true otherwise. def duplicable? true end end class NilClass # +nil+ is not duplicable: # # nil.duplicable? # => false # nil.dup # => TypeError: can't dup NilClass # def duplicable? false end end class FalseClass # +false+ is not duplicable: # # false.duplicable? # => false # false.dup # => TypeError: can't dup FalseClass # def duplicable? false end end class TrueClass # +true+ is not duplicable: # # true.duplicable? # => false # true.dup # => TypeError: can't dup TrueClass # def duplicable? false end end class Symbol # Symbols are not duplicable: # # :my_symbol.duplicable? # => false # :my_symbol.dup # => TypeError: can't dup Symbol # def duplicable? false end end class Numeric # Numbers are not duplicable: # # 3.duplicable? # => false # 3.dup # => TypeError: can't dup Fixnum # def duplicable? false end end class Class # Classes are not duplicable: # # c = Class.new # => # # c.dup # => # # # Note +dup+ returned the same class object. def duplicable? false end end class Module # Modules are not duplicable: # # m = Module.new # => # # m.dup # => # # # Note +dup+ returned the same module object. def duplicable? false end end require 'bigdecimal' class BigDecimal begin BigDecimal.new('4.56').dup def duplicable? true end rescue TypeError # can't dup, so use superclass implementation end end activesupport-3.2.16/lib/active_support/core_ext/object/instance_variables.rb0000644000175000017500000000161112247654667027135 0ustar ondrejondrejclass Object # Returns a hash that maps instance variable names without "@" to their # corresponding values. Keys are strings both in Ruby 1.8 and 1.9. # # class C # def initialize(x, y) # @x, @y = x, y # end # end # # C.new(0, 1).instance_values # => {"x" => 0, "y" => 1} def instance_values #:nodoc: Hash[instance_variables.map { |name| [name.to_s[1..-1], instance_variable_get(name)] }] end # Returns an array of instance variable names including "@". They are strings # both in Ruby 1.8 and 1.9. # # class C # def initialize(x, y) # @x, @y = x, y # end # end # # C.new(0, 1).instance_variable_names # => ["@y", "@x"] if RUBY_VERSION >= '1.9' def instance_variable_names instance_variables.map { |var| var.to_s } end else alias_method :instance_variable_names, :instance_variables end end activesupport-3.2.16/lib/active_support/core_ext/object/to_param.rb0000644000175000017500000000223312247654667025104 0ustar ondrejondrejclass Object # Alias of to_s. def to_param to_s end end class NilClass def to_param self end end class TrueClass def to_param self end end class FalseClass def to_param self end end class Array # Calls to_param on all its elements and joins the result with # slashes. This is used by url_for in Action Pack. def to_param collect { |e| e.to_param }.join '/' end end class Hash # Returns a string representation of the receiver suitable for use as a URL # query string: # # {:name => 'David', :nationality => 'Danish'}.to_param # # => "name=David&nationality=Danish" # # An optional namespace can be passed to enclose the param names: # # {:name => 'David', :nationality => 'Danish'}.to_param('user') # # => "user[name]=David&user[nationality]=Danish" # # The string pairs "key=value" that conform the query string # are sorted lexicographically in ascending order. # # This method is also aliased as +to_query+. def to_param(namespace = nil) collect do |key, value| value.to_query(namespace ? "#{namespace}[#{key}]" : key) end.sort * '&' end end activesupport-3.2.16/lib/active_support/core_ext/object/inclusion.rb0000644000175000017500000000150212247654667025303 0ustar ondrejondrejclass Object # Returns true if this object is included in the argument(s). Argument must be # any object which responds to +#include?+ or optionally, multiple arguments can be passed in. Usage: # # characters = ["Konata", "Kagami", "Tsukasa"] # "Konata".in?(characters) # => true # # character = "Konata" # character.in?("Konata", "Kagami", "Tsukasa") # => true # # This will throw an ArgumentError if a single argument is passed in and it doesn't respond # to +#include?+. def in?(*args) if args.length > 1 args.include? self else another_object = args.first if another_object.respond_to? :include? another_object.include? self else raise ArgumentError.new("The single parameter passed to #in? must respond to #include?") end end end end activesupport-3.2.16/lib/active_support/core_ext/load_error.rb0000644000175000017500000000070112247654667024162 0ustar ondrejondrejclass LoadError REGEXPS = [ /^no such file to load -- (.+)$/i, /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i, /^Missing API definition file in (.+)$/i, /^cannot load such file -- (.+)$/i, ] def path @path ||= begin REGEXPS.find do |regex| message =~ regex end $1 end end def is_missing?(location) location.sub(/\.rb$/, '') == path.sub(/\.rb$/, '') end end MissingSourceFile = LoadErroractivesupport-3.2.16/lib/active_support/core_ext/hash/0000755000175000017500000000000012247654667022432 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/hash/keys.rb0000644000175000017500000000340712247654667023736 0ustar ondrejondrejclass Hash # Return a new hash with all keys converted to strings. # # { :name => 'Rob', :years => '28' }.stringify_keys # #=> { "name" => "Rob", "years" => "28" } def stringify_keys dup.stringify_keys! end # Destructively convert all keys to strings. Same as # +stringify_keys+, but modifies +self+. def stringify_keys! keys.each do |key| self[key.to_s] = delete(key) end self end # Return a new hash with all keys converted to symbols, as long as # they respond to +to_sym+. # # { 'name' => 'Rob', 'years' => '28' }.symbolize_keys # #=> { :name => "Rob", :years => "28" } def symbolize_keys dup.symbolize_keys! end # Destructively convert all keys to symbols, as long as they respond # to +to_sym+. Same as +symbolize_keys+, but modifies +self+. def symbolize_keys! keys.each do |key| self[(key.to_sym rescue key) || key] = delete(key) end self end alias_method :to_options, :symbolize_keys alias_method :to_options!, :symbolize_keys! # Validate all keys in a hash match *valid keys, raising ArgumentError on a mismatch. # Note that keys are NOT treated indifferently, meaning if you use strings for keys but assert symbols # as keys, this will fail. # # ==== Examples # { :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key: years" # { :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key: name" # { :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing def assert_valid_keys(*valid_keys) valid_keys.flatten! each_key do |k| raise(ArgumentError, "Unknown key: #{k}") unless valid_keys.include?(k) end end end activesupport-3.2.16/lib/active_support/core_ext/hash/conversions.rb0000644000175000017500000001512112247654667025327 0ustar ondrejondrejrequire 'active_support/xml_mini' require 'active_support/time' require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/hash/reverse_merge' require 'active_support/core_ext/object/blank' require 'active_support/core_ext/string/inflections' class Hash # Returns a string containing an XML representation of its receiver: # # {"foo" => 1, "bar" => 2}.to_xml # # => # # # # # # 1 # # 2 # # # # To do so, the method loops over the pairs and builds nodes that depend on # the _values_. Given a pair +key+, +value+: # # * If +value+ is a hash there's a recursive call with +key+ as :root. # # * If +value+ is an array there's a recursive call with +key+ as :root, # and +key+ singularized as :children. # # * If +value+ is a callable object it must expect one or two arguments. Depending # on the arity, the callable is invoked with the +options+ hash as first argument # with +key+ as :root, and +key+ singularized as second argument. The # callable can add nodes by using options[:builder]. # # "foo".to_xml(lambda { |options, key| options[:builder].b(key) }) # # => "foo" # # * If +value+ responds to +to_xml+ the method is invoked with +key+ as :root. # # class Foo # def to_xml(options) # options[:builder].bar "fooing!" # end # end # # {:foo => Foo.new}.to_xml(:skip_instruct => true) # # => "fooing!" # # * Otherwise, a node with +key+ as tag is created with a string representation of # +value+ as text node. If +value+ is +nil+ an attribute "nil" set to "true" is added. # Unless the option :skip_types exists and is true, an attribute "type" is # added as well according to the following mapping: # # XML_TYPE_NAMES = { # "Symbol" => "symbol", # "Fixnum" => "integer", # "Bignum" => "integer", # "BigDecimal" => "decimal", # "Float" => "float", # "TrueClass" => "boolean", # "FalseClass" => "boolean", # "Date" => "date", # "DateTime" => "datetime", # "Time" => "datetime" # } # # By default the root node is "hash", but that's configurable via the :root option. # # The default XML builder is a fresh instance of Builder::XmlMarkup. You can # configure your own builder with the :builder option. The method also accepts # options like :dasherize and friends, they are forwarded to the builder. def to_xml(options = {}) require 'active_support/builder' unless defined?(Builder) options = options.dup options[:indent] ||= 2 options[:root] ||= "hash" options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent]) builder = options[:builder] builder.instruct! unless options.delete(:skip_instruct) root = ActiveSupport::XmlMini.rename_key(options[:root].to_s, options) builder.__send__(:method_missing, root) do each { |key, value| ActiveSupport::XmlMini.to_tag(key, value, options) } yield builder if block_given? end end class DisallowedType < StandardError #:nodoc: def initialize(type) super "Disallowed type attribute: #{type.inspect}" end end DISALLOWED_XML_TYPES = %w(symbol yaml) class << self def from_xml(xml, disallowed_types = nil) typecast_xml_value(unrename_keys(ActiveSupport::XmlMini.parse(xml)), disallowed_types) end def from_trusted_xml(xml) from_xml xml, [] end private def typecast_xml_value(value, disallowed_types = nil) disallowed_types ||= DISALLOWED_XML_TYPES case value.class.to_s when 'Hash' if value.include?('type') && !value['type'].is_a?(Hash) && disallowed_types.include?(value['type']) raise DisallowedType, value['type'] end if value['type'] == 'array' _, entries = Array.wrap(value.detect { |k,v| not v.is_a?(String) }) if entries.nil? || (c = value['__content__'] && c.blank?) [] else case entries.class.to_s # something weird with classes not matching here. maybe singleton methods breaking is_a? when "Array" entries.collect { |v| typecast_xml_value(v, disallowed_types) } when "Hash" [typecast_xml_value(entries, disallowed_types)] else raise "can't typecast #{entries.inspect}" end end elsif value['type'] == 'file' || (value["__content__"] && (value.keys.size == 1 || value["__content__"].present?)) content = value["__content__"] if parser = ActiveSupport::XmlMini::PARSING[value["type"]] parser.arity == 1 ? parser.call(content) : parser.call(content, value) else content end elsif value['type'] == 'string' && value['nil'] != 'true' "" # blank or nil parsed values are represented by nil elsif value.blank? || value['nil'] == 'true' nil # If the type is the only element which makes it then # this still makes the value nil, except if type is # a XML node(where type['value'] is a Hash) elsif value['type'] && value.size == 1 && !value['type'].is_a?(::Hash) nil else xml_value = Hash[value.map { |k,v| [k, typecast_xml_value(v, disallowed_types)] }] # Turn { :files => { :file => # } into { :files => # } so it is compatible with # how multipart uploaded files from HTML appear xml_value["file"].is_a?(StringIO) ? xml_value["file"] : xml_value end when 'Array' value.map! { |i| typecast_xml_value(i, disallowed_types) } value.length > 1 ? value : value.first when 'String' value else raise "can't typecast #{value.class.name} - #{value.inspect}" end end def unrename_keys(params) case params.class.to_s when "Hash" Hash[params.map { |k,v| [k.to_s.tr("-", "_"), unrename_keys(v)] } ] when "Array" params.map { |v| unrename_keys(v) } else params end end end end activesupport-3.2.16/lib/active_support/core_ext/hash/reverse_merge.rb0000644000175000017500000000112712247654667025612 0ustar ondrejondrejclass Hash # Merges the caller into +other_hash+. For example, # # options = options.reverse_merge(:size => 25, :velocity => 10) # # is equivalent to # # options = {:size => 25, :velocity => 10}.merge(options) # # This is particularly useful for initializing an options hash # with default values. def reverse_merge(other_hash) other_hash.merge(self) end # Destructive +reverse_merge+. def reverse_merge!(other_hash) # right wins if there is no left merge!( other_hash ){|key,left,right| left } end alias_method :reverse_update, :reverse_merge! end activesupport-3.2.16/lib/active_support/core_ext/hash/deep_merge.rb0000644000175000017500000000116312247654667025054 0ustar ondrejondrejclass Hash # Returns a new hash with +self+ and +other_hash+ merged recursively. # # h1 = {:x => {:y => [4,5,6]}, :z => [7,8,9]} # h2 = {:x => {:y => [7,8,9]}, :z => "xyz"} # # h1.deep_merge(h2) #=> { :x => {:y => [7, 8, 9]}, :z => "xyz" } # h2.deep_merge(h1) #=> { :x => {:y => [4, 5, 6]}, :z => [7, 8, 9] } def deep_merge(other_hash) dup.deep_merge!(other_hash) end # Same as +deep_merge+, but modifies +self+. def deep_merge!(other_hash) other_hash.each_pair do |k,v| tv = self[k] self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v end self end end activesupport-3.2.16/lib/active_support/core_ext/hash/slice.rb0000644000175000017500000000245012247654667024057 0ustar ondrejondrejclass Hash # Slice a hash to include only the given keys. This is useful for # limiting an options hash to valid keys before passing to a method: # # def search(criteria = {}) # assert_valid_keys(:mass, :velocity, :time) # end # # search(options.slice(:mass, :velocity, :time)) # # If you have an array of keys you want to limit to, you should splat them: # # valid_keys = [:mass, :velocity, :time] # search(options.slice(*valid_keys)) def slice(*keys) keys = keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true) hash = self.class.new keys.each { |k| hash[k] = self[k] if has_key?(k) } hash end # Replaces the hash with only the given keys. # Returns a hash contained the removed key/value pairs # {:a => 1, :b => 2, :c => 3, :d => 4}.slice!(:a, :b) # => {:c => 3, :d => 4} def slice!(*keys) keys = keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true) omit = slice(*self.keys - keys) hash = slice(*keys) replace(hash) omit end # Removes and returns the key/value pairs matching the given keys. # {:a => 1, :b => 2, :c => 3, :d => 4}.extract!(:a, :b) # => {:a => 1, :b => 2} def extract!(*keys) result = {} keys.each {|key| result[key] = delete(key) } result end end activesupport-3.2.16/lib/active_support/core_ext/hash/deep_dup.rb0000644000175000017500000000061212247654667024543 0ustar ondrejondrejclass Hash # Returns a deep copy of hash. # # hash = { :a => { :b => 'b' } } # dup = hash.deep_dup # dup[:a][:c] = 'c' # # hash[:a][:c] #=> nil # dup[:a][:c] #=> "c" def deep_dup duplicate = self.dup duplicate.each_pair do |k,v| tv = duplicate[k] duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v end duplicate end end activesupport-3.2.16/lib/active_support/core_ext/hash/diff.rb0000644000175000017500000000063212247654667023670 0ustar ondrejondrejclass Hash # Returns a hash that represents the difference between two hashes. # # Examples: # # {1 => 2}.diff(1 => 2) # => {} # {1 => 2}.diff(1 => 3) # => {1 => 2} # {}.diff(1 => 2) # => {1 => 2} # {1 => 2, 3 => 4}.diff(1 => 2) # => {3 => 4} def diff(h2) dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| has_key?(k) }) end end activesupport-3.2.16/lib/active_support/core_ext/hash/except.rb0000644000175000017500000000132312247654667024246 0ustar ondrejondrejclass Hash # Return a hash that includes everything but the given keys. This is useful for # limiting a set of parameters to everything but a few known toggles: # # @person.update_attributes(params[:person].except(:admin)) # # If the receiver responds to +convert_key+, the method is called on each of the # arguments. This allows +except+ to play nice with hashes with indifferent access # for instance: # # {:a => 1}.with_indifferent_access.except(:a) # => {} # {:a => 1}.with_indifferent_access.except("a") # => {} # def except(*keys) dup.except!(*keys) end # Replaces the hash without the given keys. def except!(*keys) keys.each { |key| delete(key) } self end end activesupport-3.2.16/lib/active_support/core_ext/hash/indifferent_access.rb0000644000175000017500000000161212247654667026575 0ustar ondrejondrejrequire 'active_support/hash_with_indifferent_access' class Hash # Returns an ActiveSupport::HashWithIndifferentAccess out of its receiver: # # {:a => 1}.with_indifferent_access["a"] # => 1 # def with_indifferent_access ActiveSupport::HashWithIndifferentAccess.new_from_hash_copying_default(self) end # Called when object is nested under an object that receives # #with_indifferent_access. This method will be called on the current object # by the enclosing object and is aliased to #with_indifferent_access by # default. Subclasses of Hash may overwrite this method to return +self+ if # converting to an ActiveSupport::HashWithIndifferentAccess would not be # desirable. # # b = {:b => 1} # {:a => b}.with_indifferent_access["a"] # calls b.nested_under_indifferent_access # alias nested_under_indifferent_access with_indifferent_access end activesupport-3.2.16/lib/active_support/core_ext/benchmark.rb0000644000175000017500000000013112247654667023761 0ustar ondrejondrejrequire 'benchmark' class << Benchmark def ms 1000 * realtime { yield } end end activesupport-3.2.16/lib/active_support/core_ext/float.rb0000644000175000017500000000006112247654667023136 0ustar ondrejondrejrequire 'active_support/core_ext/float/rounding' activesupport-3.2.16/lib/active_support/core_ext/float/0000755000175000017500000000000012247654667022614 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/float/rounding.rb0000644000175000017500000000065412247654667024773 0ustar ondrejondrejclass Float alias precisionless_round round private :precisionless_round # Rounds the float with the specified precision. # # x = 1.337 # x.round # => 1 # x.round(1) # => 1.3 # x.round(2) # => 1.34 def round(precision = nil) if precision magnitude = 10.0 ** precision (self * magnitude).round / magnitude else precisionless_round end end end if RUBY_VERSION < '1.9' activesupport-3.2.16/lib/active_support/core_ext/object.rb0000644000175000017500000000106412247654667023303 0ustar ondrejondrejrequire 'active_support/core_ext/object/acts_like' require 'active_support/core_ext/object/blank' require 'active_support/core_ext/object/duplicable' require 'active_support/core_ext/object/try' require 'active_support/core_ext/object/inclusion' require 'active_support/core_ext/object/conversions' require 'active_support/core_ext/object/instance_variables' require 'active_support/core_ext/object/to_json' require 'active_support/core_ext/object/to_param' require 'active_support/core_ext/object/to_query' require 'active_support/core_ext/object/with_options' activesupport-3.2.16/lib/active_support/core_ext/date_time/0000755000175000017500000000000012247654667023442 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/date_time/conversions.rb0000644000175000017500000001022712247654667026341 0ustar ondrejondrejrequire 'active_support/inflector/methods' require 'active_support/core_ext/time/conversions' require 'active_support/core_ext/date_time/calculations' require 'active_support/values/time_zone' class DateTime # Ruby 1.9 has DateTime#to_time which internally relies on Time. We define our own #to_time which allows # DateTimes outside the range of what can be created with Time. remove_method :to_time if instance_methods.include?(:to_time) # Convert to a formatted string. See Time::DATE_FORMATS for predefined formats. # # This method is aliased to to_s. # # === Examples # datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000 # # datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00" # datetime.to_s(:db) # => "2007-12-04 00:00:00" # datetime.to_s(:number) # => "20071204000000" # datetime.to_formatted_s(:short) # => "04 Dec 00:00" # datetime.to_formatted_s(:long) # => "December 04, 2007 00:00" # datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00" # datetime.to_formatted_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000" # # == Adding your own datetime formats to to_formatted_s # DateTime formats are shared with Time. You can add your own to the # Time::DATE_FORMATS hash. Use the format name as the hash key and # either a strftime string or Proc instance that takes a time or # datetime argument as the value. # # # config/initializers/time_formats.rb # Time::DATE_FORMATS[:month_and_year] = "%B %Y" # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") } def to_formatted_s(format = :default) if formatter = ::Time::DATE_FORMATS[format] formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter) else to_default_s end end alias_method :to_default_s, :to_s unless (instance_methods(false) & [:to_s, 'to_s']).empty? alias_method :to_s, :to_formatted_s # Returns the +utc_offset+ as an +HH:MM formatted string. Examples: # # datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24)) # datetime.formatted_offset # => "-06:00" # datetime.formatted_offset(false) # => "-0600" def formatted_offset(colon = true, alternate_utc_string = nil) utc? && alternate_utc_string || ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000". def readable_inspect to_s(:rfc822) end alias_method :default_inspect, :inspect alias_method :inspect, :readable_inspect # Converts self to a Ruby Date object; time portion is discarded. def to_date ::Date.new(year, month, day) end unless instance_methods(false).include?(:to_date) # Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class. # If self has an offset other than 0, self will just be returned unaltered, since there's no clean way to map it to a Time. def to_time self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec, sec_fraction * (RUBY_VERSION < '1.9' ? 86400000000 : 1000000)) : self end # To be able to keep Times, Dates and DateTimes interchangeable on conversions. def to_datetime self end unless instance_methods(false).include?(:to_datetime) def self.civil_from_format(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0) offset = utc_or_local.to_sym == :local ? local_offset : 0 civil(year, month, day, hour, min, sec, offset) end # Converts datetime to an appropriate format for use in XML. def xmlschema strftime("%Y-%m-%dT%H:%M:%S%Z") end unless instance_methods(false).include?(:xmlschema) # Converts self to a floating-point number of seconds since the Unix epoch. def to_f seconds_since_unix_epoch.to_f end # Converts self to an integer number of seconds since the Unix epoch. def to_i seconds_since_unix_epoch.to_i end private def seconds_since_unix_epoch seconds_per_day = 86_400 (self - ::DateTime.civil(1970)) * seconds_per_day end end activesupport-3.2.16/lib/active_support/core_ext/date_time/calculations.rb0000644000175000017500000001133512247654667026453 0ustar ondrejondrejrequire 'rational' unless RUBY_VERSION >= '1.9.2' class DateTime class << self # DateTimes aren't aware of DST rules, so use a consistent non-DST offset when creating a DateTime with an offset in the local zone def local_offset ::Time.local(2012).utc_offset.to_r / 86400 end # Returns Time.zone.now.to_datetime when Time.zone or config.time_zone are set, otherwise returns Time.now.to_datetime. def current ::Time.zone ? ::Time.zone.now.to_datetime : ::Time.now.to_datetime end end # Tells whether the DateTime object's datetime lies in the past def past? self < ::DateTime.current end # Tells whether the DateTime object's datetime lies in the future def future? self > ::DateTime.current end # Seconds since midnight: DateTime.now.seconds_since_midnight def seconds_since_midnight sec + (min * 60) + (hour * 3600) end # Returns a new DateTime where one or more of the elements have been changed according to the +options+ parameter. The time options # (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and # minute is passed, then sec is set to 0. def change(options) ::DateTime.civil( options[:year] || year, options[:month] || month, options[:day] || day, options[:hour] || hour, options[:min] || (options[:hour] ? 0 : min), options[:sec] || ((options[:hour] || options[:min]) ? 0 : sec), options[:offset] || offset, options[:start] || start ) end # Uses Date to provide precise Time calculations for years, months, and days. # The +options+ parameter takes a hash with any of these keys: :years, # :months, :weeks, :days, :hours, # :minutes, :seconds. def advance(options) d = to_date.advance(options) datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) end # Returns a new DateTime representing the time a number of seconds ago # Do not use this method in combination with x.months, use months_ago instead! def ago(seconds) since(-seconds) end # Returns a new DateTime representing the time a number of seconds since the instance time # Do not use this method in combination with x.months, use months_since instead! def since(seconds) self + Rational(seconds.round, 86400) end alias :in :since # Returns a new DateTime representing the start of the day (0:00) def beginning_of_day change(:hour => 0) end alias :midnight :beginning_of_day alias :at_midnight :beginning_of_day alias :at_beginning_of_day :beginning_of_day # Returns a new DateTime representing the end of the day (23:59:59) def end_of_day change(:hour => 23, :min => 59, :sec => 59) end # Returns a new DateTime representing the start of the hour (hh:00:00) def beginning_of_hour change(:min => 0) end alias :at_beginning_of_hour :beginning_of_hour # Returns a new DateTime representing the end of the hour (hh:59:59) def end_of_hour change(:min => 59, :sec => 59) end # 1.9.3 defines + and - on DateTime, < 1.9.3 do not. if DateTime.public_instance_methods(false).include?(:+) def plus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other other.since(self) else plus_without_duration(other) end end alias_method :plus_without_duration, :+ alias_method :+, :plus_with_duration def minus_with_duration(other) #:nodoc: if ActiveSupport::Duration === other plus_with_duration(-other) else minus_without_duration(other) end end alias_method :minus_without_duration, :- alias_method :-, :minus_with_duration end # Adjusts DateTime to UTC by adding its offset value; offset is set to 0 # # Example: # # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)) # => Mon, 21 Feb 2005 10:11:12 -0600 # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc # => Mon, 21 Feb 2005 16:11:12 +0000 def utc new_offset(0) end alias_method :getutc, :utc # Returns true if offset == 0 def utc? offset == 0 end # Returns the offset value in seconds def utc_offset (offset * 86400).to_i end # Layers additional behavior on DateTime#<=> so that Time and ActiveSupport::TimeWithZone instances can be compared with a DateTime def <=>(other) super other.kind_of?(Infinity) ? other : other.to_datetime end end activesupport-3.2.16/lib/active_support/core_ext/date_time/acts_like.rb0000644000175000017500000000043112247654667025723 0ustar ondrejondrejrequire 'date' require 'active_support/core_ext/object/acts_like' class DateTime # Duck-types as a Date-like class. See Object#acts_like?. def acts_like_date? true end # Duck-types as a Time-like class. See Object#acts_like?. def acts_like_time? true end end activesupport-3.2.16/lib/active_support/core_ext/date_time/zones.rb0000644000175000017500000000152412247654667025127 0ustar ondrejondrejrequire 'active_support/core_ext/time/zones' class DateTime # Returns the simultaneous time in Time.zone. # # Time.zone = 'Hawaii' # => 'Hawaii' # DateTime.new(2000).in_time_zone # => Fri, 31 Dec 1999 14:00:00 HST -10:00 # # This method is similar to Time#localtime, except that it uses Time.zone as the local zone # instead of the operating system's time zone. # # You can also pass in a TimeZone instance or string that identifies a TimeZone as an argument, # and the conversion will be based on that zone instead of Time.zone. # # DateTime.new(2000).in_time_zone('Alaska') # => Fri, 31 Dec 1999 15:00:00 AKST -09:00 def in_time_zone(zone = ::Time.zone) return self unless zone ActiveSupport::TimeWithZone.new(utc? ? self : getutc, ::Time.find_zone!(zone)) end end activesupport-3.2.16/lib/active_support/core_ext/range.rb0000644000175000017500000000040012247654667023122 0ustar ondrejondrejrequire 'active_support/core_ext/range/blockless_step' require 'active_support/core_ext/range/conversions' require 'active_support/core_ext/range/include_range' require 'active_support/core_ext/range/overlaps' require 'active_support/core_ext/range/cover' activesupport-3.2.16/lib/active_support/core_ext/kernel/0000755000175000017500000000000012247654667022767 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/core_ext/kernel/debugger.rb0000644000175000017500000000076512247654667025110 0ustar ondrejondrejmodule Kernel unless respond_to?(:debugger) # Starts a debugging session if ruby-debug has been loaded (call rails server --debugger to do load it). def debugger message = "\n***** Debugger requested, but was not available (ensure ruby-debug is listed in Gemfile/installed as gem): Start server with --debugger to enable *****\n" defined?(Rails) ? Rails.logger.info(message) : $stderr.puts(message) end alias breakpoint debugger unless respond_to?(:breakpoint) end end activesupport-3.2.16/lib/active_support/core_ext/kernel/reporting.rb0000644000175000017500000000432212247654667025326 0ustar ondrejondrejrequire 'rbconfig' require 'stringio' module Kernel # Sets $VERBOSE to nil for the duration of the block and back to its original value afterwards. # # silence_warnings do # value = noisy_call # no warning voiced # end # # noisy_call # warning voiced def silence_warnings with_warnings(nil) { yield } end # Sets $VERBOSE to true for the duration of the block and back to its original value afterwards. def enable_warnings with_warnings(true) { yield } end # Sets $VERBOSE for the duration of the block and back to its original value afterwards. def with_warnings(flag) old_verbose, $VERBOSE = $VERBOSE, flag yield ensure $VERBOSE = old_verbose end # For compatibility def silence_stderr #:nodoc: silence_stream(STDERR) { yield } end # Silences any stream for the duration of the block. # # silence_stream(STDOUT) do # puts 'This will never be seen' # end # # puts 'But this will' def silence_stream(stream) old_stream = stream.dup stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null') stream.sync = true yield ensure stream.reopen(old_stream) end # Blocks and ignores any exception passed as argument if raised within the block. # # suppress(ZeroDivisionError) do # 1/0 # puts "This code is NOT reached" # end # # puts "This code gets executed and nothing related to ZeroDivisionError was seen" def suppress(*exception_classes) begin yield rescue Exception => e raise unless exception_classes.any? { |cls| e.kind_of?(cls) } end end # Captures the given stream and returns it: # # stream = capture(:stdout) { puts "Cool" } # stream # => "Cool\n" # def capture(stream) begin stream = stream.to_s eval "$#{stream} = StringIO.new" yield result = eval("$#{stream}").string ensure eval("$#{stream} = #{stream.upcase}") end result end alias :silence :capture # Silences both STDOUT and STDERR, even for subprocesses. # # quietly { system 'bundle install' } # def quietly silence_stream(STDOUT) do silence_stream(STDERR) do yield end end end end activesupport-3.2.16/lib/active_support/core_ext/kernel/agnostics.rb0000644000175000017500000000056012247654667025307 0ustar ondrejondrejclass Object # Makes backticks behave (somewhat more) similarly on all platforms. # On win32 `nonexistent_command` raises Errno::ENOENT; on Unix, the # spawned shell prints a message to stderr and sets $?. We emulate # Unix on the former but not the latter. def `(command) #:nodoc: super rescue Errno::ENOENT => e STDERR.puts "#$0: #{e}" end end activesupport-3.2.16/lib/active_support/core_ext/kernel/singleton_class.rb0000644000175000017500000000051312247654667026502 0ustar ondrejondrejmodule Kernel # Returns the object's singleton class. def singleton_class class << self self end end unless respond_to?(:singleton_class) # exists in 1.9.2 # class_eval on an object acts like singleton_class.class_eval. def class_eval(*args, &block) singleton_class.class_eval(*args, &block) end end activesupport-3.2.16/lib/active_support/core_ext/logger.rb0000644000175000017500000000534412247654667023321 0ustar ondrejondrejrequire 'active_support/core_ext/class/attribute_accessors' require 'active_support/deprecation' # Adds the 'around_level' method to Logger. class Logger #:nodoc: def self.define_around_helper(level) module_eval <<-end_eval, __FILE__, __LINE__ + 1 def around_#{level}(before_message, after_message) # def around_debug(before_message, after_message, &block) self.#{level}(before_message) # self.debug(before_message) return_value = yield(self) # return_value = yield(self) self.#{level}(after_message) # self.debug(after_message) return_value # return_value end # end end_eval end [:debug, :info, :error, :fatal].each {|level| define_around_helper(level) } end require 'logger' # Extensions to the built-in Ruby logger. # # If you want to use the default log formatter as defined in the Ruby core, then you # will need to set the formatter for the logger as in: # # logger.formatter = Formatter.new # # You can then specify the datetime format, for example: # # logger.datetime_format = "%Y-%m-%d" # # Note: This logger is deprecated in favor of ActiveSupport::BufferedLogger class Logger ## # :singleton-method: # Set to false to disable the silencer cattr_accessor :silencer self.silencer = true # Silences the logger for the duration of the block. def silence(temporary_level = Logger::ERROR) if silencer begin old_logger_level, self.level = level, temporary_level yield self ensure self.level = old_logger_level end else yield self end end deprecate :silence alias :old_datetime_format= :datetime_format= # Logging date-time format (string passed to +strftime+). Ignored if the formatter # does not respond to datetime_format=. def datetime_format=(datetime_format) formatter.datetime_format = datetime_format if formatter.respond_to?(:datetime_format=) end alias :old_datetime_format :datetime_format # Get the logging datetime format. Returns nil if the formatter does not support # datetime formatting. def datetime_format formatter.datetime_format if formatter.respond_to?(:datetime_format) end alias :old_initialize :initialize # Overwrite initialize to set a default formatter. def initialize(*args) old_initialize(*args) self.formatter = SimpleFormatter.new end # Simple formatter which only displays the message. class SimpleFormatter < Logger::Formatter # This method is invoked when a log event occurs def call(severity, timestamp, progname, msg) "#{String === msg ? msg : msg.inspect}\n" end end end activesupport-3.2.16/lib/active_support/core_ext/numeric.rb0000644000175000017500000000013712247654667023477 0ustar ondrejondrejrequire 'active_support/core_ext/numeric/bytes' require 'active_support/core_ext/numeric/time' activesupport-3.2.16/lib/active_support/hash_with_indifferent_access.rb0000644000175000017500000001132112247654667026076 0ustar ondrejondrejrequire 'active_support/core_ext/hash/keys' # This class has dubious semantics and we only have it so that # people can write params[:key] instead of params['key'] # and they get the same value for both keys. module ActiveSupport class HashWithIndifferentAccess < Hash # Always returns true, so that Array#extract_options! finds members of this class. def extractable_options? true end def with_indifferent_access dup end def nested_under_indifferent_access self end def initialize(constructor = {}) if constructor.is_a?(Hash) super() update(constructor) else super(constructor) end end def default(key = nil) if key.is_a?(Symbol) && include?(key = key.to_s) self[key] else super end end def self.new_from_hash_copying_default(hash) new(hash).tap do |new_hash| new_hash.default = hash.default end end alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) alias_method :regular_update, :update unless method_defined?(:regular_update) # Assigns a new value to the hash: # # hash = HashWithIndifferentAccess.new # hash[:key] = "value" # def []=(key, value) regular_writer(convert_key(key), convert_value(value)) end alias_method :store, :[]= # Updates the instantized hash with values from the second: # # hash_1 = HashWithIndifferentAccess.new # hash_1[:key] = "value" # # hash_2 = HashWithIndifferentAccess.new # hash_2[:key] = "New Value!" # # hash_1.update(hash_2) # => {"key"=>"New Value!"} # def update(other_hash) if other_hash.is_a? HashWithIndifferentAccess super(other_hash) else other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } self end end alias_method :merge!, :update # Checks the hash for a key matching the argument passed in: # # hash = HashWithIndifferentAccess.new # hash["key"] = "value" # hash.key? :key # => true # hash.key? "key" # => true # def key?(key) super(convert_key(key)) end alias_method :include?, :key? alias_method :has_key?, :key? alias_method :member?, :key? # Same as Hash#fetch where the key passed as argument can be # either a string or a symbol: # # counters = HashWithIndifferentAccess.new # counters[:foo] = 1 # # counters.fetch("foo") # => 1 # counters.fetch(:bar, 0) # => 0 # counters.fetch(:bar) {|key| 0} # => 0 # counters.fetch(:zoo) # => KeyError: key not found: "zoo" # def fetch(key, *extras) super(convert_key(key), *extras) end # Returns an array of the values at the specified indices: # # hash = HashWithIndifferentAccess.new # hash[:a] = "x" # hash[:b] = "y" # hash.values_at("a", "b") # => ["x", "y"] # def values_at(*indices) indices.collect {|key| self[convert_key(key)]} end # Returns an exact copy of the hash. def dup self.class.new(self).tap do |new_hash| new_hash.default = default end end # Merges the instantized and the specified hashes together, giving precedence to the values from the second hash. # Does not overwrite the existing hash. def merge(hash) self.dup.update(hash) end # Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second. # This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess. def reverse_merge(other_hash) super self.class.new_from_hash_copying_default(other_hash) end def reverse_merge!(other_hash) replace(reverse_merge( other_hash )) end # Removes a specified key from the hash. def delete(key) super(convert_key(key)) end def stringify_keys!; self end def stringify_keys; dup end undef :symbolize_keys! def symbolize_keys; to_hash.symbolize_keys end def to_options!; self end # Convert to a Hash with String keys. def to_hash Hash.new(default).merge!(self) end protected def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end def convert_value(value) if value.is_a? Hash value.nested_under_indifferent_access elsif value.is_a?(Array) value.dup.replace(value.map { |e| convert_value(e) }) else value end end end end HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess activesupport-3.2.16/lib/active_support/base64.rb0000644000175000017500000000304712247654667021314 0ustar ondrejondrejrequire 'active_support/deprecation' begin require 'base64' rescue LoadError # The Base64 module isn't available in earlier versions of Ruby 1.9. module Base64 # Encodes a string to its base 64 representation. Each 60 characters of # output is separated by a newline character. # # ActiveSupport::Base64.encode64("Original unencoded string") # # => "T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw==\n" def self.encode64(data) [data].pack("m") end # Decodes a base 64 encoded string to its original representation. # # ActiveSupport::Base64.decode64("T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw==") # # => "Original unencoded string" def self.decode64(data) data.unpack("m").first end end end unless Base64.respond_to?(:strict_encode64) # Included in Ruby 1.9 def Base64.strict_encode64(value) encode64(value).gsub(/\n/, '') end end module ActiveSupport module Base64 def self.encode64(value) ActiveSupport::Deprecation.warn "ActiveSupport::Base64.encode64 " \ "is deprecated. Use Base64.encode64 instead", caller ::Base64.encode64(value) end def self.decode64(value) ActiveSupport::Deprecation.warn "ActiveSupport::Base64.decode64 " \ "is deprecated. Use Base64.decode64 instead", caller ::Base64.decode64(value) end def self.encode64s(value) ActiveSupport::Deprecation.warn "ActiveSupport::Base64.encode64s " \ "is deprecated. Use Base64.strict_encode64 instead", caller ::Base64.strict_encode64(value) end end end activesupport-3.2.16/lib/active_support/builder.rb0000644000175000017500000000027212247654667021653 0ustar ondrejondrejbegin require 'builder' rescue LoadError => e $stderr.puts "You don't have builder installed in your application. Please add it to your Gemfile and run bundle install" raise e end activesupport-3.2.16/lib/active_support/benchmarkable.rb0000644000175000017500000000407012247654667023003 0ustar ondrejondrejrequire 'active_support/core_ext/benchmark' require 'active_support/core_ext/hash/keys' module ActiveSupport module Benchmarkable # Allows you to measure the execution time of a block in a template and records the result to # the log. Wrap this block around expensive operations or possible bottlenecks to get a time # reading for the operation. For example, let's say you thought your file processing method # was taking too long; you could wrap it in a benchmark block. # # <% benchmark "Process data files" do %> # <%= expensive_files_operation %> # <% end %> # # That would add something like "Process data files (345.2ms)" to the log, which you can then # use to compare timings when optimizing your code. # # You may give an optional logger level (:debug, :info, :warn, :error) as the :level option. # The default logger level value is :info. # # <% benchmark "Low-level files", :level => :debug do %> # <%= lowlevel_files_operation %> # <% end %> # # Finally, you can pass true as the third argument to silence all log activity (other than the # timing information) from inside the block. This is great for boiling down a noisy block to # just a single statement that produces one log line: # # <% benchmark "Process data files", :level => :info, :silence => true do %> # <%= expensive_and_chatty_files_operation %> # <% end %> def benchmark(message = "Benchmarking", options = {}) if logger options.assert_valid_keys(:level, :silence) options[:level] ||= :info result = nil ms = Benchmark.ms { result = options[:silence] ? silence { yield } : yield } logger.send(options[:level], '%s (%.1fms)' % [ message, ms ]) result else yield end end # Silence the logger during the execution of the block. # def silence old_logger_level, logger.level = logger.level, ::Logger::ERROR if logger yield ensure logger.level = old_logger_level if logger end end end activesupport-3.2.16/lib/active_support/cache.rb0000644000175000017500000005703712247654667021303 0ustar ondrejondrejrequire 'benchmark' require 'zlib' require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/benchmark' require 'active_support/core_ext/exception' require 'active_support/core_ext/class/attribute_accessors' require 'active_support/core_ext/numeric/bytes' require 'active_support/core_ext/numeric/time' require 'active_support/core_ext/object/to_param' require 'active_support/core_ext/string/inflections' module ActiveSupport # See ActiveSupport::Cache::Store for documentation. module Cache autoload :FileStore, 'active_support/cache/file_store' autoload :MemoryStore, 'active_support/cache/memory_store' autoload :MemCacheStore, 'active_support/cache/mem_cache_store' autoload :NullStore, 'active_support/cache/null_store' # These options mean something to all cache implementations. Individual cache # implementations may support additional options. UNIVERSAL_OPTIONS = [:namespace, :compress, :compress_threshold, :expires_in, :race_condition_ttl] module Strategy autoload :LocalCache, 'active_support/cache/strategy/local_cache' end class << self # Creates a new CacheStore object according to the given options. # # If no arguments are passed to this method, then a new # ActiveSupport::Cache::MemoryStore object will be returned. # # If you pass a Symbol as the first argument, then a corresponding cache # store class under the ActiveSupport::Cache namespace will be created. # For example: # # ActiveSupport::Cache.lookup_store(:memory_store) # # => returns a new ActiveSupport::Cache::MemoryStore object # # ActiveSupport::Cache.lookup_store(:mem_cache_store) # # => returns a new ActiveSupport::Cache::MemCacheStore object # # Any additional arguments will be passed to the corresponding cache store # class's constructor: # # ActiveSupport::Cache.lookup_store(:file_store, "/tmp/cache") # # => same as: ActiveSupport::Cache::FileStore.new("/tmp/cache") # # If the first argument is not a Symbol, then it will simply be returned: # # ActiveSupport::Cache.lookup_store(MyOwnCacheStore.new) # # => returns MyOwnCacheStore.new def lookup_store(*store_option) store, *parameters = *Array.wrap(store_option).flatten case store when Symbol store_class_name = store.to_s.camelize store_class = begin require "active_support/cache/#{store}" rescue LoadError => e raise "Could not find cache store adapter for #{store} (#{e})" else ActiveSupport::Cache.const_get(store_class_name) end store_class.new(*parameters) when nil ActiveSupport::Cache::MemoryStore.new else store end end def expand_cache_key(key, namespace = nil) expanded_cache_key = namespace ? "#{namespace}/" : "" if prefix = ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"] expanded_cache_key << "#{prefix}/" end expanded_cache_key << retrieve_cache_key(key) expanded_cache_key end private def retrieve_cache_key(key) case when key.respond_to?(:cache_key) then key.cache_key when key.is_a?(Array) then key.map { |element| retrieve_cache_key(element) }.to_param else key.to_param end.to_s end end # An abstract cache store class. There are multiple cache store # implementations, each having its own additional features. See the classes # under the ActiveSupport::Cache module, e.g. # ActiveSupport::Cache::MemCacheStore. MemCacheStore is currently the most # popular cache store for large production websites. # # Some implementations may not support all methods beyond the basic cache # methods of +fetch+, +write+, +read+, +exist?+, and +delete+. # # ActiveSupport::Cache::Store can store any serializable Ruby object. # # cache = ActiveSupport::Cache::MemoryStore.new # # cache.read("city") # => nil # cache.write("city", "Duckburgh") # cache.read("city") # => "Duckburgh" # # Keys are always translated into Strings and are case sensitive. When an # object is specified as a key and has a +cache_key+ method defined, this # method will be called to define the key. Otherwise, the +to_param+ # method will be called. Hashes and Arrays can also be used as keys. The # elements will be delimited by slashes, and the elements within a Hash # will be sorted by key so they are consistent. # # cache.read("city") == cache.read(:city) # => true # # Nil values can be cached. # # If your cache is on a shared infrastructure, you can define a namespace # for your cache entries. If a namespace is defined, it will be prefixed on # to every key. The namespace can be either a static value or a Proc. If it # is a Proc, it will be invoked when each key is evaluated so that you can # use application logic to invalidate keys. # # cache.namespace = lambda { @last_mod_time } # Set the namespace to a variable # @last_mod_time = Time.now # Invalidate the entire cache by changing namespace # # # Caches can also store values in a compressed format to save space and # reduce time spent sending data. Since there is overhead, values must be # large enough to warrant compression. To turn on compression either pass # :compress => true in the initializer or as an option to +fetch+ # or +write+. To specify the threshold at which to compress values, set the # :compress_threshold option. The default threshold is 16K. class Store cattr_accessor :logger, :instance_writer => true attr_reader :silence, :options alias :silence? :silence # Create a new cache. The options will be passed to any write method calls except # for :namespace which can be used to set the global namespace for the cache. def initialize(options = nil) @options = options ? options.dup : {} end # Silence the logger. def silence! @silence = true self end # Silence the logger within a block. def mute previous_silence, @silence = defined?(@silence) && @silence, true yield ensure @silence = previous_silence end # Set to true if cache stores should be instrumented. Default is false. def self.instrument=(boolean) Thread.current[:instrument_cache_store] = boolean end def self.instrument Thread.current[:instrument_cache_store] || false end # Fetches data from the cache, using the given key. If there is data in # the cache with the given key, then that data is returned. # # If there is no such data in the cache (a cache miss), then nil will be # returned. However, if a block has been passed, that block will be run # in the event of a cache miss. The return value of the block will be # written to the cache under the given cache key, and that return value # will be returned. # # cache.write("today", "Monday") # cache.fetch("today") # => "Monday" # # cache.fetch("city") # => nil # cache.fetch("city") do # "Duckburgh" # end # cache.fetch("city") # => "Duckburgh" # # You may also specify additional options via the +options+ argument. # Setting :force => true will force a cache miss: # # cache.write("today", "Monday") # cache.fetch("today", :force => true) # => nil # # Setting :compress will store a large cache entry set by the call # in a compressed format. # # # Setting :expires_in will set an expiration time on the cache. # All caches support auto-expiring content after a specified number of # seconds. This value can be specified as an option to the constructor # (in which case all entries will be affected), or it can be supplied to # the +fetch+ or +write+ method to effect just one entry. # # cache = ActiveSupport::Cache::MemoryStore.new(:expires_in => 5.minutes) # cache.write(key, value, :expires_in => 1.minute) # Set a lower value for one entry # # Setting :race_condition_ttl is very useful in situations where a cache entry # is used very frequently and is under heavy load. If a cache expires and due to heavy load # seven different processes will try to read data natively and then they all will try to # write to cache. To avoid that case the first process to find an expired cache entry will # bump the cache expiration time by the value set in :race_condition_ttl. Yes # this process is extending the time for a stale value by another few seconds. Because # of extended life of the previous cache, other processes will continue to use slightly # stale data for a just a big longer. In the meantime that first process will go ahead # and will write into cache the new value. After that all the processes will start # getting new value. The key is to keep :race_condition_ttl small. # # If the process regenerating the entry errors out, the entry will be regenerated # after the specified number of seconds. Also note that the life of stale cache is # extended only if it expired recently. Otherwise a new value is generated and # :race_condition_ttl does not play any role. # # # Set all values to expire after one minute. # cache = ActiveSupport::Cache::MemoryStore.new(:expires_in => 1.minute) # # cache.write("foo", "original value") # val_1 = nil # val_2 = nil # sleep 60 # # Thread.new do # val_1 = cache.fetch("foo", :race_condition_ttl => 10) do # sleep 1 # "new value 1" # end # end # # Thread.new do # val_2 = cache.fetch("foo", :race_condition_ttl => 10) do # "new value 2" # end # end # # # val_1 => "new value 1" # # val_2 => "original value" # # sleep 10 # First thread extend the life of cache by another 10 seconds # # cache.fetch("foo") => "new value 1" # # Other options will be handled by the specific cache store implementation. # Internally, #fetch calls #read_entry, and calls #write_entry on a cache miss. # +options+ will be passed to the #read and #write calls. # # For example, MemCacheStore's #write method supports the +:raw+ # option, which tells the memcached server to store all values as strings. # We can use this option with #fetch too: # # cache = ActiveSupport::Cache::MemCacheStore.new # cache.fetch("foo", :force => true, :raw => true) do # :bar # end # cache.fetch("foo") # => "bar" def fetch(name, options = nil) if block_given? options = merged_options(options) key = namespaced_key(name, options) unless options[:force] entry = instrument(:read, name, options) do |payload| payload[:super_operation] = :fetch if payload read_entry(key, options) end end if entry && entry.expired? race_ttl = options[:race_condition_ttl].to_f if race_ttl and Time.now.to_f - entry.expires_at <= race_ttl entry.expires_at = Time.now + race_ttl write_entry(key, entry, :expires_in => race_ttl * 2) else delete_entry(key, options) end entry = nil end if entry instrument(:fetch_hit, name, options) { |payload| } entry.value else result = instrument(:generate, name, options) do |payload| yield end write(name, result, options) result end else read(name, options) end end # Fetches data from the cache, using the given key. If there is data in # the cache with the given key, then that data is returned. Otherwise, # nil is returned. # # Options are passed to the underlying cache implementation. def read(name, options = nil) options = merged_options(options) key = namespaced_key(name, options) instrument(:read, name, options) do |payload| entry = read_entry(key, options) if entry if entry.expired? delete_entry(key, options) payload[:hit] = false if payload nil else payload[:hit] = true if payload entry.value end else payload[:hit] = false if payload nil end end end # Read multiple values at once from the cache. Options can be passed # in the last argument. # # Some cache implementation may optimize this method. # # Returns a hash mapping the names provided to the values found. def read_multi(*names) options = names.extract_options! options = merged_options(options) results = {} names.each do |name| key = namespaced_key(name, options) entry = read_entry(key, options) if entry if entry.expired? delete_entry(key, options) else results[name] = entry.value end end end results end # Writes the value to the cache, with the key. # # Options are passed to the underlying cache implementation. def write(name, value, options = nil) options = merged_options(options) instrument(:write, name, options) do |payload| entry = Entry.new(value, options) write_entry(namespaced_key(name, options), entry, options) end end # Deletes an entry in the cache. Returns +true+ if an entry is deleted. # # Options are passed to the underlying cache implementation. def delete(name, options = nil) options = merged_options(options) instrument(:delete, name) do |payload| delete_entry(namespaced_key(name, options), options) end end # Return true if the cache contains an entry for the given key. # # Options are passed to the underlying cache implementation. def exist?(name, options = nil) options = merged_options(options) instrument(:exist?, name) do |payload| entry = read_entry(namespaced_key(name, options), options) if entry && !entry.expired? true else false end end end # Delete all entries with keys matching the pattern. # # Options are passed to the underlying cache implementation. # # All implementations may not support this method. def delete_matched(matcher, options = nil) raise NotImplementedError.new("#{self.class.name} does not support delete_matched") end # Increment an integer value in the cache. # # Options are passed to the underlying cache implementation. # # All implementations may not support this method. def increment(name, amount = 1, options = nil) raise NotImplementedError.new("#{self.class.name} does not support increment") end # Increment an integer value in the cache. # # Options are passed to the underlying cache implementation. # # All implementations may not support this method. def decrement(name, amount = 1, options = nil) raise NotImplementedError.new("#{self.class.name} does not support decrement") end # Cleanup the cache by removing expired entries. # # Options are passed to the underlying cache implementation. # # All implementations may not support this method. def cleanup(options = nil) raise NotImplementedError.new("#{self.class.name} does not support cleanup") end # Clear the entire cache. Be careful with this method since it could # affect other processes if shared cache is being used. # # Options are passed to the underlying cache implementation. # # All implementations may not support this method. def clear(options = nil) raise NotImplementedError.new("#{self.class.name} does not support clear") end protected # Add the namespace defined in the options to a pattern designed to match keys. # Implementations that support delete_matched should call this method to translate # a pattern that matches names into one that matches namespaced keys. def key_matcher(pattern, options) prefix = options[:namespace].is_a?(Proc) ? options[:namespace].call : options[:namespace] if prefix source = pattern.source if source.start_with?('^') source = source[1, source.length] else source = ".*#{source[0, source.length]}" end Regexp.new("^#{Regexp.escape(prefix)}:#{source}", pattern.options) else pattern end end # Read an entry from the cache implementation. Subclasses must implement this method. def read_entry(key, options) # :nodoc: raise NotImplementedError.new end # Write an entry to the cache implementation. Subclasses must implement this method. def write_entry(key, entry, options) # :nodoc: raise NotImplementedError.new end # Delete an entry from the cache implementation. Subclasses must implement this method. def delete_entry(key, options) # :nodoc: raise NotImplementedError.new end private # Merge the default options with ones specific to a method call. def merged_options(call_options) # :nodoc: if call_options options.merge(call_options) else options.dup end end # Expand key to be a consistent string value. Invoke +cache_key+ if # object responds to +cache_key+. Otherwise, to_param method will be # called. If the key is a Hash, then keys will be sorted alphabetically. def expanded_key(key) # :nodoc: return key.cache_key.to_s if key.respond_to?(:cache_key) case key when Array if key.size > 1 key = key.collect{|element| expanded_key(element)} else key = key.first end when Hash key = key.sort_by { |k,_| k.to_s }.collect{|k,v| "#{k}=#{v}"} end key.to_param end # Prefix a key with the namespace. Namespace and key will be delimited with a colon. def namespaced_key(key, options) key = expanded_key(key) namespace = options[:namespace] if options prefix = namespace.is_a?(Proc) ? namespace.call : namespace key = "#{prefix}:#{key}" if prefix key end def instrument(operation, key, options = nil) log(operation, key, options) if self.class.instrument payload = { :key => key } payload.merge!(options) if options.is_a?(Hash) ActiveSupport::Notifications.instrument("cache_#{operation}.active_support", payload){ yield(payload) } else yield(nil) end end def log(operation, key, options = nil) return unless logger && logger.debug? && !silence? logger.debug("Cache #{operation}: #{key}#{options.blank? ? "" : " (#{options.inspect})"}") end end # Entry that is put into caches. It supports expiration time on entries and can compress values # to save space in the cache. class Entry attr_reader :created_at, :expires_in DEFAULT_COMPRESS_LIMIT = 16.kilobytes class << self # Create an entry with internal attributes set. This method is intended to be # used by implementations that store cache entries in a native format instead # of as serialized Ruby objects. def create(raw_value, created_at, options = {}) entry = new(nil) entry.instance_variable_set(:@value, raw_value) entry.instance_variable_set(:@created_at, created_at.to_f) entry.instance_variable_set(:@compressed, options[:compressed]) entry.instance_variable_set(:@expires_in, options[:expires_in]) entry end end # Create a new cache entry for the specified value. Options supported are # +:compress+, +:compress_threshold+, and +:expires_in+. def initialize(value, options = {}) @compressed = false @expires_in = options[:expires_in] @expires_in = @expires_in.to_f if @expires_in @created_at = Time.now.to_f if value.nil? @value = nil else @value = Marshal.dump(value) if should_compress?(@value, options) @value = Zlib::Deflate.deflate(@value) @compressed = true end end end # Get the raw value. This value may be serialized and compressed. def raw_value @value end # Get the value stored in the cache. def value # If the original value was exactly false @value is still true because # it is marshalled and eventually compressed. Both operations yield # strings. if @value # In rails 3.1 and earlier values in entries did not marshaled without # options[:compress] and if it's Numeric. # But after commit a263f377978fc07515b42808ebc1f7894fafaa3a # all values in entries are marshalled. And after that code below expects # that all values in entries will be marshaled (and will be strings). # So here we need a check for old ones. begin Marshal.load(compressed? ? Zlib::Inflate.inflate(@value) : @value) rescue TypeError compressed? ? Zlib::Inflate.inflate(@value) : @value end end end def compressed? @compressed end # Check if the entry is expired. The +expires_in+ parameter can override the # value set when the entry was created. def expired? @expires_in && @created_at + @expires_in <= Time.now.to_f end # Set a new time when the entry will expire. def expires_at=(time) if time @expires_in = time.to_f - @created_at else @expires_in = nil end end # Seconds since the epoch when the entry will expire. def expires_at @expires_in ? @created_at + @expires_in : nil end # Returns the size of the cached value. This could be less than value.size # if the data is compressed. def size if @value.nil? 0 else @value.bytesize end end private def should_compress?(serialized_value, options) if options[:compress] compress_threshold = options[:compress_threshold] || DEFAULT_COMPRESS_LIMIT return true if serialized_value.size >= compress_threshold end false end end end end activesupport-3.2.16/lib/active_support/inflector.rb0000644000175000017500000000047012247654667022212 0ustar ondrejondrej# in case active_support/inflector is required without the rest of active_support require 'active_support/inflector/inflections' require 'active_support/inflector/transliterate' require 'active_support/inflector/methods' require 'active_support/inflections' require 'active_support/core_ext/string/inflections' activesupport-3.2.16/lib/active_support/memoizable.rb0000644000175000017500000001476712247654667022367 0ustar ondrejondrejrequire 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/module/aliasing' require 'active_support/deprecation' module ActiveSupport module Memoizable def self.extended(base) ActiveSupport::Deprecation.warn "ActiveSupport::Memoizable is deprecated and will be removed in future releases," \ "simply use Ruby memoization pattern instead.", caller super end def self.memoized_ivar_for(symbol) "@_memoized_#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym end module InstanceMethods def self.included(base) base.class_eval do unless base.method_defined?(:freeze_without_memoizable) alias_method_chain :freeze, :memoizable end end end def freeze_with_memoizable memoize_all unless frozen? freeze_without_memoizable end def memoize_all prime_cache ".*" end def unmemoize_all flush_cache ".*" end def prime_cache(*syms) syms.each do |sym| methods.each do |m| if m.to_s =~ /^_unmemoized_(#{sym})/ if method(m).arity == 0 __send__($1) else ivar = ActiveSupport::Memoizable.memoized_ivar_for($1) instance_variable_set(ivar, {}) end end end end end def flush_cache(*syms) syms.each do |sym| (methods + private_methods + protected_methods).each do |m| if m.to_s =~ /^_unmemoized_(#{sym.to_s.gsub(/\?\Z/, '\?')})/ ivar = ActiveSupport::Memoizable.memoized_ivar_for($1) instance_variable_get(ivar).clear if instance_variable_defined?(ivar) end end end end end def memoize(*symbols) symbols.each do |symbol| original_method = :"_unmemoized_#{symbol}" memoized_ivar = ActiveSupport::Memoizable.memoized_ivar_for(symbol) class_eval <<-EOS, __FILE__, __LINE__ + 1 include InstanceMethods # include InstanceMethods # if method_defined?(:#{original_method}) # if method_defined?(:_unmemoized_mime_type) raise "Already memoized #{symbol}" # raise "Already memoized mime_type" end # end alias #{original_method} #{symbol} # alias _unmemoized_mime_type mime_type # if instance_method(:#{symbol}).arity == 0 # if instance_method(:mime_type).arity == 0 def #{symbol}(reload = false) # def mime_type(reload = false) if reload || !defined?(#{memoized_ivar}) || #{memoized_ivar}.empty? # if reload || !defined?(@_memoized_mime_type) || @_memoized_mime_type.empty? #{memoized_ivar} = [#{original_method}] # @_memoized_mime_type = [_unmemoized_mime_type] end # end #{memoized_ivar}[0] # @_memoized_mime_type[0] end # end else # else def #{symbol}(*args) # def mime_type(*args) #{memoized_ivar} ||= {} unless frozen? # @_memoized_mime_type ||= {} unless frozen? args_length = method(:#{original_method}).arity # args_length = method(:_unmemoized_mime_type).arity if args.length == args_length + 1 && # if args.length == args_length + 1 && (args.last == true || args.last == :reload) # (args.last == true || args.last == :reload) reload = args.pop # reload = args.pop end # end # if defined?(#{memoized_ivar}) && #{memoized_ivar} # if defined?(@_memoized_mime_type) && @_memoized_mime_type if !reload && #{memoized_ivar}.has_key?(args) # if !reload && @_memoized_mime_type.has_key?(args) #{memoized_ivar}[args] # @_memoized_mime_type[args] elsif #{memoized_ivar} # elsif @_memoized_mime_type #{memoized_ivar}[args] = #{original_method}(*args) # @_memoized_mime_type[args] = _unmemoized_mime_type(*args) end # end else # else #{original_method}(*args) # _unmemoized_mime_type(*args) end # end end # end end # end # if private_method_defined?(#{original_method.inspect}) # if private_method_defined?(:_unmemoized_mime_type) private #{symbol.inspect} # private :mime_type elsif protected_method_defined?(#{original_method.inspect}) # elsif protected_method_defined?(:_unmemoized_mime_type) protected #{symbol.inspect} # protected :mime_type end # end EOS end end end end activesupport-3.2.16/lib/active_support/railtie.rb0000644000175000017500000000421412247654667021656 0ustar ondrejondrejrequire "active_support" require "active_support/i18n_railtie" module ActiveSupport class Railtie < Rails::Railtie config.active_support = ActiveSupport::OrderedOptions.new # Loads support for "whiny nil" (noisy warnings when methods are invoked # on +nil+ values) if Configuration#whiny_nils is true. initializer "active_support.initialize_whiny_nils" do |app| require 'active_support/whiny_nil' if app.config.whiny_nils end initializer "active_support.deprecation_behavior" do |app| if deprecation = app.config.active_support.deprecation ActiveSupport::Deprecation.behavior = deprecation else defaults = {"development" => :log, "production" => :notify, "test" => :stderr} env = Rails.env if defaults.key?(env) msg = "You did not specify how you would like Rails to report " \ "deprecation notices for your #{env} environment, please " \ "set config.active_support.deprecation to :#{defaults[env]} " \ "at config/environments/#{env}.rb" warn msg ActiveSupport::Deprecation.behavior = defaults[env] else msg = "You did not specify how you would like Rails to report " \ "deprecation notices for your #{env} environment, please " \ "set config.active_support.deprecation to :log, :notify or " \ ":stderr at config/environments/#{env}.rb" warn msg ActiveSupport::Deprecation.behavior = :stderr end end end # Sets the default value for Time.zone # If assigned value cannot be matched to a TimeZone, an exception will be raised. initializer "active_support.initialize_time_zone" do |app| require 'active_support/core_ext/time/zones' zone_default = Time.find_zone!(app.config.time_zone) unless zone_default raise \ 'Value assigned to config.time_zone not recognized.' + 'Run "rake -D time" for a list of tasks for finding appropriate time zone names.' end Time.zone_default = zone_default end end end activesupport-3.2.16/lib/active_support/multibyte/0000755000175000017500000000000012247654667021715 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/multibyte/unicode.rb0000644000175000017500000003536512247654667023704 0ustar ondrejondrej# encoding: utf-8 module ActiveSupport module Multibyte module Unicode extend self # A list of all available normalization forms. See http://www.unicode.org/reports/tr15/tr15-29.html for more # information about normalization. NORMALIZATION_FORMS = [:c, :kc, :d, :kd] # The Unicode version that is supported by the implementation UNICODE_VERSION = '5.2.0' # The default normalization used for operations that require normalization. It can be set to any of the # normalizations in NORMALIZATION_FORMS. # # Example: # ActiveSupport::Multibyte::Unicode.default_normalization_form = :c attr_accessor :default_normalization_form @default_normalization_form = :kc # Hangul character boundaries and properties HANGUL_SBASE = 0xAC00 HANGUL_LBASE = 0x1100 HANGUL_VBASE = 0x1161 HANGUL_TBASE = 0x11A7 HANGUL_LCOUNT = 19 HANGUL_VCOUNT = 21 HANGUL_TCOUNT = 28 HANGUL_NCOUNT = HANGUL_VCOUNT * HANGUL_TCOUNT HANGUL_SCOUNT = 11172 HANGUL_SLAST = HANGUL_SBASE + HANGUL_SCOUNT HANGUL_JAMO_FIRST = 0x1100 HANGUL_JAMO_LAST = 0x11FF # All the unicode whitespace WHITESPACE = [ (0x0009..0x000D).to_a, # White_Space # Cc [5] .. 0x0020, # White_Space # Zs SPACE 0x0085, # White_Space # Cc 0x00A0, # White_Space # Zs NO-BREAK SPACE 0x1680, # White_Space # Zs OGHAM SPACE MARK 0x180E, # White_Space # Zs MONGOLIAN VOWEL SEPARATOR (0x2000..0x200A).to_a, # White_Space # Zs [11] EN QUAD..HAIR SPACE 0x2028, # White_Space # Zl LINE SEPARATOR 0x2029, # White_Space # Zp PARAGRAPH SEPARATOR 0x202F, # White_Space # Zs NARROW NO-BREAK SPACE 0x205F, # White_Space # Zs MEDIUM MATHEMATICAL SPACE 0x3000, # White_Space # Zs IDEOGRAPHIC SPACE ].flatten.freeze # BOM (byte order mark) can also be seen as whitespace, it's a non-rendering character used to distinguish # between little and big endian. This is not an issue in utf-8, so it must be ignored. LEADERS_AND_TRAILERS = WHITESPACE + [65279] # ZERO-WIDTH NO-BREAK SPACE aka BOM # Returns a regular expression pattern that matches the passed Unicode codepoints def self.codepoints_to_pattern(array_of_codepoints) #:nodoc: array_of_codepoints.collect{ |e| [e].pack 'U*' }.join('|') end TRAILERS_PAT = /(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+\Z/u LEADERS_PAT = /\A(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+/u # Unpack the string at codepoints boundaries. Raises an EncodingError when the encoding of the string isn't # valid UTF-8. # # Example: # Unicode.u_unpack('Café') # => [67, 97, 102, 233] def u_unpack(string) begin string.unpack 'U*' rescue ArgumentError raise EncodingError, 'malformed UTF-8 character' end end # Detect whether the codepoint is in a certain character class. Returns +true+ when it's in the specified # character class and +false+ otherwise. Valid character classes are: :cr, :lf, :l, # :v, :lv, :lvt and :t. # # Primarily used by the grapheme cluster support. def in_char_class?(codepoint, classes) classes.detect { |c| database.boundary[c] === codepoint } ? true : false end # Unpack the string at grapheme boundaries. Returns a list of character lists. # # Example: # Unicode.g_unpack('क्षि') # => [[2325, 2381], [2359], [2367]] # Unicode.g_unpack('Café') # => [[67], [97], [102], [233]] def g_unpack(string) codepoints = u_unpack(string) unpacked = [] pos = 0 marker = 0 eoc = codepoints.length while(pos < eoc) pos += 1 previous = codepoints[pos-1] current = codepoints[pos] if ( # CR X LF ( previous == database.boundary[:cr] and current == database.boundary[:lf] ) or # L X (L|V|LV|LVT) ( database.boundary[:l] === previous and in_char_class?(current, [:l,:v,:lv,:lvt]) ) or # (LV|V) X (V|T) ( in_char_class?(previous, [:lv,:v]) and in_char_class?(current, [:v,:t]) ) or # (LVT|T) X (T) ( in_char_class?(previous, [:lvt,:t]) and database.boundary[:t] === current ) or # X Extend (database.boundary[:extend] === current) ) else unpacked << codepoints[marker..pos-1] marker = pos end end unpacked end # Reverse operation of g_unpack. # # Example: # Unicode.g_pack(Unicode.g_unpack('क्षि')) # => 'क्षि' def g_pack(unpacked) (unpacked.flatten).pack('U*') end # Re-order codepoints so the string becomes canonical. def reorder_characters(codepoints) length = codepoints.length- 1 pos = 0 while pos < length do cp1, cp2 = database.codepoints[codepoints[pos]], database.codepoints[codepoints[pos+1]] if (cp1.combining_class > cp2.combining_class) && (cp2.combining_class > 0) codepoints[pos..pos+1] = cp2.code, cp1.code pos += (pos > 0 ? -1 : 1) else pos += 1 end end codepoints end # Decompose composed characters to the decomposed form. def decompose_codepoints(type, codepoints) codepoints.inject([]) do |decomposed, cp| # if it's a hangul syllable starter character if HANGUL_SBASE <= cp and cp < HANGUL_SLAST sindex = cp - HANGUL_SBASE ncp = [] # new codepoints ncp << HANGUL_LBASE + sindex / HANGUL_NCOUNT ncp << HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT tindex = sindex % HANGUL_TCOUNT ncp << (HANGUL_TBASE + tindex) unless tindex == 0 decomposed.concat ncp # if the codepoint is decomposable in with the current decomposition type elsif (ncp = database.codepoints[cp].decomp_mapping) and (!database.codepoints[cp].decomp_type || type == :compatability) decomposed.concat decompose_codepoints(type, ncp.dup) else decomposed << cp end end end # Compose decomposed characters to the composed form. def compose_codepoints(codepoints) pos = 0 eoa = codepoints.length - 1 starter_pos = 0 starter_char = codepoints[0] previous_combining_class = -1 while pos < eoa pos += 1 lindex = starter_char - HANGUL_LBASE # -- Hangul if 0 <= lindex and lindex < HANGUL_LCOUNT vindex = codepoints[starter_pos+1] - HANGUL_VBASE rescue vindex = -1 if 0 <= vindex and vindex < HANGUL_VCOUNT tindex = codepoints[starter_pos+2] - HANGUL_TBASE rescue tindex = -1 if 0 <= tindex and tindex < HANGUL_TCOUNT j = starter_pos + 2 eoa -= 2 else tindex = 0 j = starter_pos + 1 eoa -= 1 end codepoints[starter_pos..j] = (lindex * HANGUL_VCOUNT + vindex) * HANGUL_TCOUNT + tindex + HANGUL_SBASE end starter_pos += 1 starter_char = codepoints[starter_pos] # -- Other characters else current_char = codepoints[pos] current = database.codepoints[current_char] if current.combining_class > previous_combining_class if ref = database.composition_map[starter_char] composition = ref[current_char] else composition = nil end unless composition.nil? codepoints[starter_pos] = composition starter_char = composition codepoints.delete_at pos eoa -= 1 pos -= 1 previous_combining_class = -1 else previous_combining_class = current.combining_class end else previous_combining_class = current.combining_class end if current.combining_class == 0 starter_pos = pos starter_char = codepoints[pos] end end end codepoints end # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string. # # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1. def tidy_bytes(string, force = false) if force return string.unpack("C*").map do |b| tidy_byte(b) end.flatten.compact.pack("C*").unpack("U*").pack("U*") end bytes = string.unpack("C*") conts_expected = 0 last_lead = 0 bytes.each_index do |i| byte = bytes[i] is_cont = byte > 127 && byte < 192 is_lead = byte > 191 && byte < 245 is_unused = byte > 240 is_restricted = byte > 244 # Impossible or highly unlikely byte? Clean it. if is_unused || is_restricted bytes[i] = tidy_byte(byte) elsif is_cont # Not expecting continuation byte? Clean up. Otherwise, now expect one less. conts_expected == 0 ? bytes[i] = tidy_byte(byte) : conts_expected -= 1 else if conts_expected > 0 # Expected continuation, but got ASCII or leading? Clean backwards up to # the leading byte. (1..(i - last_lead)).each {|j| bytes[i - j] = tidy_byte(bytes[i - j])} conts_expected = 0 end if is_lead # Final byte is leading? Clean it. if i == bytes.length - 1 bytes[i] = tidy_byte(bytes.last) else # Valid leading byte? Expect continuations determined by position of # first zero bit, with max of 3. conts_expected = byte < 224 ? 1 : byte < 240 ? 2 : 3 last_lead = i end end end end bytes.empty? ? "" : bytes.flatten.compact.pack("C*").unpack("U*").pack("U*") end # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for # passing strings to databases and validations. # # * string - The string to perform normalization on. # * form - The form you want to normalize in. Should be one of the following: # :c, :kc, :d, or :kd. Default is # ActiveSupport::Multibyte.default_normalization_form def normalize(string, form=nil) form ||= @default_normalization_form # See http://www.unicode.org/reports/tr15, Table 1 codepoints = u_unpack(string) case form when :d reorder_characters(decompose_codepoints(:canonical, codepoints)) when :c compose_codepoints(reorder_characters(decompose_codepoints(:canonical, codepoints))) when :kd reorder_characters(decompose_codepoints(:compatability, codepoints)) when :kc compose_codepoints(reorder_characters(decompose_codepoints(:compatability, codepoints))) else raise ArgumentError, "#{form} is not a valid normalization variant", caller end.pack('U*') end def apply_mapping(string, mapping) #:nodoc: u_unpack(string).map do |codepoint| cp = database.codepoints[codepoint] if cp and (ncp = cp.send(mapping)) and ncp > 0 ncp else codepoint end end.pack('U*') end # Holds data about a codepoint in the Unicode database class Codepoint attr_accessor :code, :combining_class, :decomp_type, :decomp_mapping, :uppercase_mapping, :lowercase_mapping end # Holds static data from the Unicode database class UnicodeDatabase ATTRIBUTES = :codepoints, :composition_exclusion, :composition_map, :boundary, :cp1252 attr_writer(*ATTRIBUTES) def initialize @codepoints = Hash.new(Codepoint.new) @composition_exclusion = [] @composition_map = {} @boundary = {} @cp1252 = {} end # Lazy load the Unicode database so it's only loaded when it's actually used ATTRIBUTES.each do |attr_name| class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{attr_name} # def codepoints load # load @#{attr_name} # @codepoints end # end EOS end # Loads the Unicode database and returns all the internal objects of UnicodeDatabase. def load begin @codepoints, @composition_exclusion, @composition_map, @boundary, @cp1252 = File.open(self.class.filename, 'rb') { |f| Marshal.load f.read } rescue Exception => e raise IOError.new("Couldn't load the Unicode tables for UTF8Handler (#{e.message}), ActiveSupport::Multibyte is unusable") end # Redefine the === method so we can write shorter rules for grapheme cluster breaks @boundary.each do |k,_| @boundary[k].instance_eval do def ===(other) detect { |i| i === other } ? true : false end end if @boundary[k].kind_of?(Array) end # define attr_reader methods for the instance variables class << self attr_reader(*ATTRIBUTES) end end # Returns the directory in which the data files are stored def self.dirname File.dirname(__FILE__) + '/../values/' end # Returns the filename for the data file for this version def self.filename File.expand_path File.join(dirname, "unicode_tables.dat") end end private def tidy_byte(byte) if byte < 160 [database.cp1252[byte] || byte].pack("U").unpack("C*") elsif byte < 192 [194, byte] else [195, byte - 64] end end def database @database ||= UnicodeDatabase.new end end end end activesupport-3.2.16/lib/active_support/multibyte/chars.rb0000644000175000017500000004246412247654667023354 0ustar ondrejondrej# encoding: utf-8 require 'active_support/core_ext/string/access' require 'active_support/core_ext/string/behavior' module ActiveSupport #:nodoc: module Multibyte #:nodoc: # Chars enables you to work transparently with UTF-8 encoding in the Ruby String class without having extensive # knowledge about the encoding. A Chars object accepts a string upon initialization and proxies String methods in an # encoding safe manner. All the normal String methods are also implemented on the proxy. # # String methods are proxied through the Chars object, and can be accessed through the +mb_chars+ method. Methods # which would normally return a String object now return a Chars object so methods can be chained. # # "The Perfect String ".mb_chars.downcase.strip.normalize # => "the perfect string" # # Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made. # If certain methods do explicitly check the class, call +to_s+ before you pass chars objects to them. # # bad.explicit_checking_method "T".mb_chars.downcase.to_s # # The default Chars implementation assumes that the encoding of the string is UTF-8, if you want to handle different # encodings you can write your own multibyte string handler and configure it through # ActiveSupport::Multibyte.proxy_class. # # class CharsForUTF32 # def size # @wrapped_string.size / 4 # end # # def self.accepts?(string) # string.length % 4 == 0 # end # end # # ActiveSupport::Multibyte.proxy_class = CharsForUTF32 class Chars attr_reader :wrapped_string alias to_s wrapped_string alias to_str wrapped_string if RUBY_VERSION >= "1.9" # Creates a new Chars instance by wrapping _string_. def initialize(string) @wrapped_string = string @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen? end else def initialize(string) #:nodoc: @wrapped_string = string end end # Forward all undefined methods to the wrapped string. def method_missing(method, *args, &block) if method.to_s =~ /!$/ @wrapped_string.__send__(method, *args, &block) self else result = @wrapped_string.__send__(method, *args, &block) result.kind_of?(String) ? chars(result) : result end end # Returns +true+ if _obj_ responds to the given method. Private methods are included in the search # only if the optional second parameter evaluates to +true+. def respond_to?(method, include_private=false) super || @wrapped_string.respond_to?(method, include_private) end # Enable more predictable duck-typing on String-like classes. See Object#acts_like?. def acts_like_string? true end # Returns +true+ when the proxy class can handle the string. Returns +false+ otherwise. def self.consumes?(string) # Unpack is a little bit faster than regular expressions. string.unpack('U*') true rescue ArgumentError false end include Comparable # Returns -1, 0, or 1, depending on whether the Chars object is to be sorted before, # equal or after the object on the right side of the operation. It accepts any object # that implements +to_s+: # # 'é'.mb_chars <=> 'ü'.mb_chars # => -1 # # See String#<=> for more details. def <=>(other) @wrapped_string <=> other.to_s end if RUBY_VERSION < "1.9" # Returns +true+ if the Chars class can and should act as a proxy for the string _string_. Returns # +false+ otherwise. def self.wants?(string) $KCODE == 'UTF8' && consumes?(string) end # Returns a new Chars object containing the _other_ object concatenated to the string. # # Example: # ('Café'.mb_chars + ' périferôl').to_s # => "Café périferôl" def +(other) chars(@wrapped_string + other) end # Like String#=~ only it returns the character offset (in codepoints) instead of the byte offset. # # Example: # 'Café périferôl'.mb_chars =~ /ô/ # => 12 def =~(other) translate_offset(@wrapped_string =~ other) end # Inserts the passed string at specified codepoint offsets. # # Example: # 'Café'.mb_chars.insert(4, ' périferôl').to_s # => "Café périferôl" def insert(offset, fragment) unpacked = Unicode.u_unpack(@wrapped_string) unless offset > unpacked.length @wrapped_string.replace( Unicode.u_unpack(@wrapped_string).insert(offset, *Unicode.u_unpack(fragment)).pack('U*') ) else raise IndexError, "index #{offset} out of string" end self end # Returns +true+ if contained string contains _other_. Returns +false+ otherwise. # # Example: # 'Café'.mb_chars.include?('é') # => true def include?(other) # We have to redefine this method because Enumerable defines it. @wrapped_string.include?(other) end # Returns the position _needle_ in the string, counting in codepoints. Returns +nil+ if _needle_ isn't found. # # Example: # 'Café périferôl'.mb_chars.index('ô') # => 12 # 'Café périferôl'.mb_chars.index(/\w/u) # => 0 def index(needle, offset=0) wrapped_offset = first(offset).wrapped_string.length index = @wrapped_string.index(needle, wrapped_offset) index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil end # Returns the position _needle_ in the string, counting in # codepoints, searching backward from _offset_ or the end of the # string. Returns +nil+ if _needle_ isn't found. # # Example: # 'Café périferôl'.mb_chars.rindex('é') # => 6 # 'Café périferôl'.mb_chars.rindex(/\w/u) # => 13 def rindex(needle, offset=nil) offset ||= length wrapped_offset = first(offset).wrapped_string.length index = @wrapped_string.rindex(needle, wrapped_offset) index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil end # Returns the number of codepoints in the string def size Unicode.u_unpack(@wrapped_string).size end alias_method :length, :size # Strips entire range of Unicode whitespace from the right of the string. def rstrip chars(@wrapped_string.gsub(Unicode::TRAILERS_PAT, '')) end # Strips entire range of Unicode whitespace from the left of the string. def lstrip chars(@wrapped_string.gsub(Unicode::LEADERS_PAT, '')) end # Strips entire range of Unicode whitespace from the right and left of the string. def strip rstrip.lstrip end # Returns the codepoint of the first character in the string. # # Example: # 'こんにちは'.mb_chars.ord # => 12371 def ord Unicode.u_unpack(@wrapped_string)[0] end # Works just like String#rjust, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.rjust(8).to_s # # => " ¾ cup" # # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # # => "   ¾ cup" def rjust(integer, padstr=' ') justify(integer, :right, padstr) end # Works just like String#ljust, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.rjust(8).to_s # # => "¾ cup " # # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # # => "¾ cup   " def ljust(integer, padstr=' ') justify(integer, :left, padstr) end # Works just like String#center, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.center(8).to_s # # => " ¾ cup " # # "¾ cup".mb_chars.center(8, " ").to_s # Use non-breaking whitespace # # => " ¾ cup  " def center(integer, padstr=' ') justify(integer, :center, padstr) end else def =~(other) @wrapped_string =~ other end end # Works just like String#split, with the exception that the items in the resulting list are Chars # instances instead of String. This makes chaining methods easier. # # Example: # 'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFERÔL"] def split(*args) @wrapped_string.split(*args).map { |i| i.mb_chars } end # Like String#[]=, except instead of byte offsets you specify character offsets. # # Example: # # s = "Müller" # s.mb_chars[2] = "e" # Replace character with offset 2 # s # # => "Müeler" # # s = "Müller" # s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1 # s # # => "Möler" def []=(*args) replace_by = args.pop # Indexed replace with regular expressions already works if args.first.is_a?(Regexp) @wrapped_string[*args] = replace_by else result = Unicode.u_unpack(@wrapped_string) case args.first when Fixnum raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length min = args[0] max = args[1].nil? ? min : (min + args[1] - 1) range = Range.new(min, max) replace_by = [replace_by].pack('U') if replace_by.is_a?(Fixnum) when Range raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length range = args[0] else needle = args[0].to_s min = index(needle) max = min + Unicode.u_unpack(needle).length - 1 range = Range.new(min, max) end result[range] = Unicode.u_unpack(replace_by) @wrapped_string.replace(result.pack('U*')) end end # Reverses all characters in the string. # # Example: # 'Café'.mb_chars.reverse.to_s # => 'éfaC' def reverse chars(Unicode.g_unpack(@wrapped_string).reverse.flatten.pack('U*')) end # Implements Unicode-aware slice with codepoints. Slicing on one point returns the codepoints for that # character. # # Example: # 'こんにちは'.mb_chars.slice(2..3).to_s # => "にち" def slice(*args) if args.size > 2 raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native elsif (args.size == 2 && !(args.first.is_a?(Numeric) || args.first.is_a?(Regexp))) raise TypeError, "cannot convert #{args.first.class} into Integer" # Do as if we were native elsif (args.size == 2 && !args[1].is_a?(Numeric)) raise TypeError, "cannot convert #{args[1].class} into Integer" # Do as if we were native elsif args[0].kind_of? Range cps = Unicode.u_unpack(@wrapped_string).slice(*args) result = cps.nil? ? nil : cps.pack('U*') elsif args[0].kind_of? Regexp result = @wrapped_string.slice(*args) elsif args.size == 1 && args[0].kind_of?(Numeric) character = Unicode.u_unpack(@wrapped_string)[args[0]] result = character && [character].pack('U') else cps = Unicode.u_unpack(@wrapped_string).slice(*args) result = cps && cps.pack('U*') end result && chars(result) end alias_method :[], :slice # Limit the byte size of the string to a number of bytes without breaking characters. Usable # when the storage for a string is limited for some reason. # # Example: # 'こんにちは'.mb_chars.limit(7).to_s # => "こん" def limit(limit) slice(0...translate_offset(limit)) end # Convert characters in the string to uppercase. # # Example: # 'Laurent, où sont les tests ?'.mb_chars.upcase.to_s # => "LAURENT, OÙ SONT LES TESTS ?" def upcase chars(Unicode.apply_mapping @wrapped_string, :uppercase_mapping) end # Convert characters in the string to lowercase. # # Example: # 'VĚDA A VÝZKUM'.mb_chars.downcase.to_s # => "věda a výzkum" def downcase chars(Unicode.apply_mapping @wrapped_string, :lowercase_mapping) end # Converts the first character to uppercase and the remainder to lowercase. # # Example: # 'über'.mb_chars.capitalize.to_s # => "Über" def capitalize (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase end # Capitalizes the first letter of every word, when possible. # # Example: # "ÉL QUE SE ENTERÓ".mb_chars.titleize # => "Él Que Se Enteró" # "日本語".mb_chars.titleize # => "日本語" def titleize chars(downcase.to_s.gsub(/\b('?[\S])/u) { Unicode.apply_mapping $1, :uppercase_mapping }) end alias_method :titlecase, :titleize # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for # passing strings to databases and validations. # # * form - The form you want to normalize in. Should be one of the following: # :c, :kc, :d, or :kd. Default is # ActiveSupport::Multibyte::Unicode.default_normalization_form def normalize(form = nil) chars(Unicode.normalize(@wrapped_string, form)) end # Performs canonical decomposition on all the characters. # # Example: # 'é'.length # => 2 # 'é'.mb_chars.decompose.to_s.length # => 3 def decompose chars(Unicode.decompose_codepoints(:canonical, Unicode.u_unpack(@wrapped_string)).pack('U*')) end # Performs composition on all the characters. # # Example: # 'é'.length # => 3 # 'é'.mb_chars.compose.to_s.length # => 2 def compose chars(Unicode.compose_codepoints(Unicode.u_unpack(@wrapped_string)).pack('U*')) end # Returns the number of grapheme clusters in the string. # # Example: # 'क्षि'.mb_chars.length # => 4 # 'क्षि'.mb_chars.g_length # => 3 def g_length Unicode.g_unpack(@wrapped_string).length end # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string. # # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1. def tidy_bytes(force = false) chars(Unicode.tidy_bytes(@wrapped_string, force)) end %w(capitalize downcase lstrip reverse rstrip slice strip tidy_bytes upcase).each do |method| # Only define a corresponding bang method for methods defined in the proxy; On 1.9 the proxy will # exclude lstrip!, rstrip! and strip! because they are already work as expected on multibyte strings. if public_method_defined?(method) define_method("#{method}!") do |*args| @wrapped_string = send(args.nil? ? method : method, *args).to_s self end end end protected def translate_offset(byte_offset) #:nodoc: return nil if byte_offset.nil? return 0 if @wrapped_string == '' if @wrapped_string.respond_to?(:force_encoding) @wrapped_string = @wrapped_string.dup.force_encoding(Encoding::ASCII_8BIT) end begin @wrapped_string[0...byte_offset].unpack('U*').length rescue ArgumentError byte_offset -= 1 retry end end def justify(integer, way, padstr=' ') #:nodoc: raise ArgumentError, "zero width padding" if padstr.length == 0 padsize = integer - size padsize = padsize > 0 ? padsize : 0 case way when :right result = @wrapped_string.dup.insert(0, padding(padsize, padstr)) when :left result = @wrapped_string.dup.insert(-1, padding(padsize, padstr)) when :center lpad = padding((padsize / 2.0).floor, padstr) rpad = padding((padsize / 2.0).ceil, padstr) result = @wrapped_string.dup.insert(0, lpad).insert(-1, rpad) end chars(result) end def padding(padsize, padstr=' ') #:nodoc: if padsize != 0 chars(padstr * ((padsize / Unicode.u_unpack(padstr).size) + 1)).slice(0, padsize) else '' end end def chars(string) #:nodoc: self.class.new(string) end end end end activesupport-3.2.16/lib/active_support/multibyte/exceptions.rb0000644000175000017500000000027412247654667024426 0ustar ondrejondrej# encoding: utf-8 module ActiveSupport #:nodoc: module Multibyte #:nodoc: # Raised when a problem with the encoding was found. class EncodingError < StandardError; end end endactivesupport-3.2.16/lib/active_support/multibyte/utils.rb0000644000175000017500000000321412247654667023402 0ustar ondrejondrej# encoding: utf-8 module ActiveSupport #:nodoc: module Multibyte #:nodoc: if Kernel.const_defined?(:Encoding) # Returns a regular expression that matches valid characters in the current encoding def self.valid_character VALID_CHARACTER[Encoding.default_external.to_s] end else def self.valid_character case $KCODE when 'UTF8' VALID_CHARACTER['UTF-8'] when 'SJIS' VALID_CHARACTER['Shift_JIS'] end end end if 'string'.respond_to?(:valid_encoding?) # Verifies the encoding of a string def self.verify(string) string.valid_encoding? end else def self.verify(string) if expression = valid_character # Splits the string on character boundaries, which are determined based on $KCODE. string.split(//).all? { |c| expression =~ c } else true end end end # Verifies the encoding of the string and raises an exception when it's not valid def self.verify!(string) raise EncodingError.new("Found characters with invalid encoding") unless verify(string) end if 'string'.respond_to?(:force_encoding) # Removes all invalid characters from the string. # # Note: this method is a no-op in Ruby 1.9 def self.clean(string) string end else def self.clean(string) if expression = valid_character # Splits the string on character boundaries, which are determined based on $KCODE. string.split(//).grep(expression).join else string end end end end end activesupport-3.2.16/lib/active_support/notifications.rb0000644000175000017500000001200012247654667023066 0ustar ondrejondrejmodule ActiveSupport # = Notifications # # +ActiveSupport::Notifications+ provides an instrumentation API for Ruby. # # == Instrumenters # # To instrument an event you just need to do: # # ActiveSupport::Notifications.instrument("render", :extra => :information) do # render :text => "Foo" # end # # That executes the block first and notifies all subscribers once done. # # In the example above "render" is the name of the event, and the rest is called # the _payload_. The payload is a mechanism that allows instrumenters to pass # extra information to subscribers. Payloads consist of a hash whose contents # are arbitrary and generally depend on the event. # # == Subscribers # # You can consume those events and the information they provide by registering # a subscriber. For instance, let's store all "render" events in an array: # # events = [] # # ActiveSupport::Notifications.subscribe("render") do |*args| # events << ActiveSupport::Notifications::Event.new(*args) # end # # That code returns right away, you are just subscribing to "render" events. # The block will be called asynchronously whenever someone instruments "render": # # ActiveSupport::Notifications.instrument("render", :extra => :information) do # render :text => "Foo" # end # # event = events.first # event.name # => "render" # event.duration # => 10 (in milliseconds) # event.payload # => { :extra => :information } # # The block in the +subscribe+ call gets the name of the event, start # timestamp, end timestamp, a string with a unique identifier for that event # (something like "535801666f04d0298cd6"), and a hash with the payload, in # that order. # # If an exception happens during that particular instrumentation the payload will # have a key +:exception+ with an array of two elements as value: a string with # the name of the exception class, and the exception message. # # As the previous example depicts, the class +ActiveSupport::Notifications::Event+ # is able to take the arguments as they come and provide an object-oriented # interface to that data. # # You can also subscribe to all events whose name matches a certain regexp: # # ActiveSupport::Notifications.subscribe(/render/) do |*args| # ... # end # # and even pass no argument to +subscribe+, in which case you are subscribing # to all events. # # == Temporary Subscriptions # # Sometimes you do not want to subscribe to an event for the entire life of # the application. There are two ways to unsubscribe. # # WARNING: The instrumentation framework is designed for long-running subscribers, # use this feature sparingly because it wipes some internal caches and that has # a negative impact on performance. # # === Subscribe While a Block Runs # # You can subscribe to some event temporarily while some block runs. For # example, in # # callback = lambda {|*args| ... } # ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do # ... # end # # the callback will be called for all "sql.active_record" events instrumented # during the execution of the block. The callback is unsubscribed automatically # after that. # # === Manual Unsubscription # # The +subscribe+ method returns a subscriber object: # # subscriber = ActiveSupport::Notifications.subscribe("render") do |*args| # ... # end # # To prevent that block from being called anymore, just unsubscribe passing # that reference: # # ActiveSupport::Notifications.unsubscribe(subscriber) # # == Default Queue # # Notifications ships with a queue implementation that consumes and publish events # to log subscribers in a thread. You can use any queue implementation you want. # module Notifications autoload :Instrumenter, 'active_support/notifications/instrumenter' autoload :Event, 'active_support/notifications/instrumenter' autoload :Fanout, 'active_support/notifications/fanout' @instrumenters = Hash.new { |h,k| h[k] = notifier.listening?(k) } class << self attr_accessor :notifier def publish(name, *args) notifier.publish(name, *args) end def instrument(name, payload = {}) if @instrumenters[name] instrumenter.instrument(name, payload) { yield payload if block_given? } else yield payload if block_given? end end def subscribe(*args, &block) notifier.subscribe(*args, &block).tap do @instrumenters.clear end end def subscribed(callback, *args, &block) subscriber = subscribe(*args, &callback) yield ensure unsubscribe(subscriber) end def unsubscribe(args) notifier.unsubscribe(args) @instrumenters.clear end def instrumenter Thread.current[:"instrumentation_#{notifier.object_id}"] ||= Instrumenter.new(notifier) end end self.notifier = Fanout.new end end activesupport-3.2.16/lib/active_support/configurable.rb0000644000175000017500000000535112247654667022670 0ustar ondrejondrejrequire 'active_support/concern' require 'active_support/ordered_options' require 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/module/delegation' require 'active_support/core_ext/array/extract_options' module ActiveSupport # Configurable provides a config method to store and retrieve # configuration options as an OrderedHash. module Configurable extend ActiveSupport::Concern class Configuration < ActiveSupport::InheritableOptions def compile_methods! self.class.compile_methods!(keys) end # compiles reader methods so we don't have to go through method_missing def self.compile_methods!(keys) keys.reject { |m| method_defined?(m) }.each do |key| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{key}; _get(#{key.inspect}); end RUBY end end end module ClassMethods def config @_config ||= if respond_to?(:superclass) && superclass.respond_to?(:config) superclass.config.inheritable_copy else # create a new "anonymous" class that will host the compiled reader methods Class.new(Configuration).new end end def configure yield config end # Allows you to add shortcut so that you don't have to refer to attribute through config. # Also look at the example for config to contrast. # # class User # include ActiveSupport::Configurable # config_accessor :allowed_access # end # # user = User.new # user.allowed_access = true # user.allowed_access # => true # def config_accessor(*names) options = names.extract_options! names.each do |name| reader, line = "def #{name}; config.#{name}; end", __LINE__ writer, line = "def #{name}=(value); config.#{name} = value; end", __LINE__ singleton_class.class_eval reader, __FILE__, line singleton_class.class_eval writer, __FILE__, line class_eval reader, __FILE__, line unless options[:instance_reader] == false class_eval writer, __FILE__, line unless options[:instance_writer] == false end end end # Reads and writes attributes from a configuration OrderedHash. # # require 'active_support/configurable' # # class User # include ActiveSupport::Configurable # end # # user = User.new # # user.config.allowed_access = true # user.config.level = 1 # # user.config.allowed_access # => true # user.config.level # => 1 # def config @_config ||= self.class.config.inheritable_copy end end end activesupport-3.2.16/lib/active_support/test_case.rb0000644000175000017500000000214412247654667022177 0ustar ondrejondrejrequire 'test/unit/testcase' require 'active_support/testing/setup_and_teardown' require 'active_support/testing/assertions' require 'active_support/testing/deprecation' require 'active_support/testing/declarative' require 'active_support/testing/pending' require 'active_support/testing/isolation' require 'active_support/testing/mochaing' require 'active_support/core_ext/kernel/reporting' module ActiveSupport class TestCase < ::Test::Unit::TestCase if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions Assertion = MiniTest::Assertion alias_method :method_name, :name if method_defined? :name alias_method :method_name, :__name__ if method_defined? :__name__ else Assertion = Test::Unit::AssertionFailedError undef :default_test end $tags = {} def self.for_tag(tag) yield if $tags[tag] end include ActiveSupport::Testing::SetupAndTeardown include ActiveSupport::Testing::Assertions include ActiveSupport::Testing::Deprecation include ActiveSupport::Testing::Pending extend ActiveSupport::Testing::Declarative end end activesupport-3.2.16/lib/active_support/xml_mini.rb0000644000175000017500000001224412247654667022043 0ustar ondrejondrejrequire 'time' require 'active_support/base64' require 'active_support/core_ext/module/delegation' require 'active_support/core_ext/string/inflections' module ActiveSupport # = XmlMini # # To use the much faster libxml parser: # gem 'libxml-ruby', '=0.9.7' # XmlMini.backend = 'LibXML' module XmlMini extend self # This module decorates files deserialized using Hash.from_xml with # the original_filename and content_type methods. module FileLike #:nodoc: attr_writer :original_filename, :content_type def original_filename @original_filename || 'untitled' end def content_type @content_type || 'application/octet-stream' end end DEFAULT_ENCODINGS = { "binary" => "base64" } unless defined?(DEFAULT_ENCODINGS) TYPE_NAMES = { "Symbol" => "symbol", "Fixnum" => "integer", "Bignum" => "integer", "BigDecimal" => "decimal", "Float" => "float", "TrueClass" => "boolean", "FalseClass" => "boolean", "Date" => "date", "DateTime" => "datetime", "Time" => "datetime", "Array" => "array", "Hash" => "hash" } unless defined?(TYPE_NAMES) FORMATTING = { "symbol" => Proc.new { |symbol| symbol.to_s }, "date" => Proc.new { |date| date.to_s(:db) }, "datetime" => Proc.new { |time| time.xmlschema }, "binary" => Proc.new { |binary| ::Base64.encode64(binary) }, "yaml" => Proc.new { |yaml| yaml.to_yaml } } unless defined?(FORMATTING) # TODO use regexp instead of Date.parse unless defined?(PARSING) PARSING = { "symbol" => Proc.new { |symbol| symbol.to_sym }, "date" => Proc.new { |date| ::Date.parse(date) }, "datetime" => Proc.new { |time| Time.xmlschema(time).utc rescue ::DateTime.parse(time).utc }, "integer" => Proc.new { |integer| integer.to_i }, "float" => Proc.new { |float| float.to_f }, "decimal" => Proc.new { |number| BigDecimal(number) }, "boolean" => Proc.new { |boolean| %w(1 true).include?(boolean.strip) }, "string" => Proc.new { |string| string.to_s }, "yaml" => Proc.new { |yaml| YAML::load(yaml) rescue yaml }, "base64Binary" => Proc.new { |bin| ::Base64.decode64(bin) }, "binary" => Proc.new { |bin, entity| _parse_binary(bin, entity) }, "file" => Proc.new { |file, entity| _parse_file(file, entity) } } PARSING.update( "double" => PARSING["float"], "dateTime" => PARSING["datetime"] ) end attr_reader :backend delegate :parse, :to => :backend def backend=(name) if name.is_a?(Module) @backend = name else require "active_support/xml_mini/#{name.to_s.downcase}" @backend = ActiveSupport.const_get("XmlMini_#{name}") end end def with_backend(name) old_backend, self.backend = backend, name yield ensure self.backend = old_backend end def to_tag(key, value, options) type_name = options.delete(:type) merged_options = options.merge(:root => key, :skip_instruct => true) if value.is_a?(::Method) || value.is_a?(::Proc) if value.arity == 1 value.call(merged_options) else value.call(merged_options, key.to_s.singularize) end elsif value.respond_to?(:to_xml) value.to_xml(merged_options) else type_name ||= TYPE_NAMES[value.class.name] type_name ||= value.class.name if value && !value.respond_to?(:to_str) type_name = type_name.to_s if type_name key = rename_key(key.to_s, options) attributes = options[:skip_types] || type_name.nil? ? { } : { :type => type_name } attributes[:nil] = true if value.nil? encoding = options[:encoding] || DEFAULT_ENCODINGS[type_name] attributes[:encoding] = encoding if encoding formatted_value = FORMATTING[type_name] && !value.nil? ? FORMATTING[type_name].call(value) : value options[:builder].tag!(key, formatted_value, attributes) end end def rename_key(key, options = {}) camelize = options[:camelize] dasherize = !options.has_key?(:dasherize) || options[:dasherize] if camelize key = true == camelize ? key.camelize : key.camelize(camelize) end key = _dasherize(key) if dasherize key end protected def _dasherize(key) # $2 must be a non-greedy regex for this to work left, middle, right = /\A(_*)(.*?)(_*)\Z/.match(key.strip)[1,3] "#{left}#{middle.tr('_ ', '--')}#{right}" end # TODO: Add support for other encodings def _parse_binary(bin, entity) #:nodoc: case entity['encoding'] when 'base64' ::Base64.decode64(bin) else bin end end def _parse_file(file, entity) f = StringIO.new(::Base64.decode64(file)) f.extend(FileLike) f.original_filename = entity['name'] f.content_type = entity['content_type'] f end end XmlMini.backend = 'REXML' end activesupport-3.2.16/lib/active_support/ordered_hash.rb0000644000175000017500000001203712247654667022656 0ustar ondrejondrejbegin require 'psych' rescue LoadError end require 'yaml' YAML.add_builtin_type("omap") do |type, val| ActiveSupport::OrderedHash[val.map{ |v| v.to_a.first }] end module ActiveSupport # The order of iteration over hashes in Ruby 1.8 is undefined. For example, you do not know the # order in which +keys+ will return keys, or +each+ yield pairs. ActiveSupport::OrderedHash # implements a hash that preserves insertion order, as in Ruby 1.9: # # oh = ActiveSupport::OrderedHash.new # oh[:a] = 1 # oh[:b] = 2 # oh.keys # => [:a, :b], this order is guaranteed # # ActiveSupport::OrderedHash is namespaced to prevent conflicts with other implementations. class OrderedHash < ::Hash def to_yaml_type "!tag:yaml.org,2002:omap" end def encode_with(coder) coder.represent_seq '!omap', map { |k,v| { k => v } } end def to_yaml(opts = {}) if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? return super end YAML.quick_emit(self, opts) do |out| out.seq(taguri) do |seq| each do |k, v| seq.add(k => v) end end end end def nested_under_indifferent_access self end # Returns true to make sure that this hash is extractable via Array#extract_options! def extractable_options? true end # Hash is ordered in Ruby 1.9! if RUBY_VERSION < '1.9' # In MRI the Hash class is core and written in C. In particular, methods are # programmed with explicit C function calls and polymorphism is not honored. # # For example, []= is crucial in this implementation to maintain the @keys # array but hash.c invokes rb_hash_aset() originally. This prevents method # reuse through inheritance and forces us to reimplement stuff. # # For instance, we cannot use the inherited #merge! because albeit the algorithm # itself would work, our []= is not being called at all by the C code. def initialize(*args, &block) super @keys = [] end def self.[](*args) ordered_hash = new if (args.length == 1 && args.first.is_a?(Array)) args.first.each do |key_value_pair| next unless (key_value_pair.is_a?(Array)) ordered_hash[key_value_pair[0]] = key_value_pair[1] end return ordered_hash end unless (args.size % 2 == 0) raise ArgumentError.new("odd number of arguments for Hash") end args.each_with_index do |val, ind| next if (ind % 2 != 0) ordered_hash[val] = args[ind + 1] end ordered_hash end def initialize_copy(other) super # make a deep copy of keys @keys = other.keys end def []=(key, value) @keys << key unless has_key?(key) super end def delete(key) if has_key? key index = @keys.index(key) @keys.delete_at index end super end def delete_if super sync_keys! self end def reject! super sync_keys! self end def reject(&block) dup.reject!(&block) end def keys @keys.dup end def values @keys.collect { |key| self[key] } end def to_hash self end def to_a @keys.map { |key| [ key, self[key] ] } end def each_key return to_enum(:each_key) unless block_given? @keys.each { |key| yield key } self end def each_value return to_enum(:each_value) unless block_given? @keys.each { |key| yield self[key]} self end def each return to_enum(:each) unless block_given? @keys.each {|key| yield [key, self[key]]} self end def each_pair return to_enum(:each_pair) unless block_given? @keys.each {|key| yield key, self[key]} self end alias_method :select, :find_all def clear super @keys.clear self end def shift k = @keys.first v = delete(k) [k, v] end def merge!(other_hash) if block_given? other_hash.each { |k, v| self[k] = key?(k) ? yield(k, self[k], v) : v } else other_hash.each { |k, v| self[k] = v } end self end alias_method :update, :merge! def merge(other_hash, &block) dup.merge!(other_hash, &block) end # When replacing with another hash, the initial order of our keys must come from the other hash -ordered or not. def replace(other) super @keys = other.keys self end def invert OrderedHash[self.to_a.map!{|key_value_pair| key_value_pair.reverse}] end def inspect "#" end private def sync_keys! @keys.delete_if {|k| !has_key?(k)} end end end end activesupport-3.2.16/lib/active_support/dependencies.rb0000644000175000017500000005773012247654667022666 0ustar ondrejondrejrequire 'set' require 'thread' require 'pathname' require 'active_support/core_ext/module/aliasing' require 'active_support/core_ext/module/attribute_accessors' require 'active_support/core_ext/module/introspection' require 'active_support/core_ext/module/anonymous' require 'active_support/core_ext/module/qualified_const' require 'active_support/core_ext/object/blank' require 'active_support/core_ext/load_error' require 'active_support/core_ext/name_error' require 'active_support/core_ext/string/starts_ends_with' require 'active_support/inflector' module ActiveSupport #:nodoc: module Dependencies #:nodoc: extend self # Should we turn on Ruby warnings on the first load of dependent files? mattr_accessor :warnings_on_first_load self.warnings_on_first_load = false # All files ever loaded. mattr_accessor :history self.history = Set.new # All files currently loaded. mattr_accessor :loaded self.loaded = Set.new # Should we load files or require them? mattr_accessor :mechanism self.mechanism = ENV['NO_RELOAD'] ? :require : :load # The set of directories from which we may automatically load files. Files # under these directories will be reloaded on each request in development mode, # unless the directory also appears in autoload_once_paths. mattr_accessor :autoload_paths self.autoload_paths = [] # The set of directories from which automatically loaded constants are loaded # only once. All directories in this set must also be present in +autoload_paths+. mattr_accessor :autoload_once_paths self.autoload_once_paths = [] # An array of qualified constant names that have been loaded. Adding a name to # this array will cause it to be unloaded the next time Dependencies are cleared. mattr_accessor :autoloaded_constants self.autoloaded_constants = [] # An array of constant names that need to be unloaded on every request. Used # to allow arbitrary constants to be marked for unloading. mattr_accessor :explicitly_unloadable_constants self.explicitly_unloadable_constants = [] # The logger is used for generating information on the action run-time (including benchmarking) if available. # Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers. mattr_accessor :logger # Set to true to enable logging of const_missing and file loads mattr_accessor :log_activity self.log_activity = false # The WatchStack keeps a stack of the modules being watched as files are loaded. # If a file in the process of being loaded (parent.rb) triggers the load of # another file (child.rb) the stack will ensure that child.rb handles the new # constants. # # If child.rb is being autoloaded, its constants will be added to # autoloaded_constants. If it was being `require`d, they will be discarded. # # This is handled by walking back up the watch stack and adding the constants # found by child.rb to the list of original constants in parent.rb class WatchStack include Enumerable # @watching is a stack of lists of constants being watched. For instance, # if parent.rb is autoloaded, the stack will look like [[Object]]. If parent.rb # then requires namespace/child.rb, the stack will look like [[Object], [Namespace]]. def initialize @watching = [] @stack = Hash.new { |h,k| h[k] = [] } end def each(&block) @stack.each(&block) end def watching? !@watching.empty? end # return a list of new constants found since the last call to watch_namespaces def new_constants constants = [] # Grab the list of namespaces that we're looking for new constants under @watching.last.each do |namespace| # Retrieve the constants that were present under the namespace when watch_namespaces # was originally called original_constants = @stack[namespace].last mod = Inflector.constantize(namespace) if Dependencies.qualified_const_defined?(namespace) next unless mod.is_a?(Module) # Get a list of the constants that were added new_constants = mod.local_constant_names - original_constants # self[namespace] returns an Array of the constants that are being evaluated # for that namespace. For instance, if parent.rb requires child.rb, the first # element of self[Object] will be an Array of the constants that were present # before parent.rb was required. The second element will be an Array of the # constants that were present before child.rb was required. @stack[namespace].each do |namespace_constants| namespace_constants.concat(new_constants) end # Normalize the list of new constants, and add them to the list we will return new_constants.each do |suffix| constants << ([namespace, suffix] - ["Object"]).join("::") end end constants ensure # A call to new_constants is always called after a call to watch_namespaces pop_modules(@watching.pop) end # Add a set of modules to the watch stack, remembering the initial constants def watch_namespaces(namespaces) watching = [] namespaces.map do |namespace| module_name = Dependencies.to_constant_name(namespace) original_constants = Dependencies.qualified_const_defined?(module_name) ? Inflector.constantize(module_name).local_constant_names : [] watching << module_name @stack[module_name] << original_constants end @watching << watching end private def pop_modules(modules) modules.each { |mod| @stack[mod].pop } end end # An internal stack used to record which constants are loaded by any block. mattr_accessor :constant_watch_stack self.constant_watch_stack = WatchStack.new # Module includes this module module ModuleConstMissing #:nodoc: def self.append_features(base) base.class_eval do # Emulate #exclude via an ivar return if defined?(@_const_missing) && @_const_missing @_const_missing = instance_method(:const_missing) remove_method(:const_missing) end super end def self.exclude_from(base) base.class_eval do define_method :const_missing, @_const_missing @_const_missing = nil end end # Use const_missing to autoload associations so we don't have to # require_association when using single-table inheritance. def const_missing(const_name, nesting = nil) klass_name = name.presence || "Object" unless nesting # We'll assume that the nesting of Foo::Bar is ["Foo::Bar", "Foo"] # even though it might not be, such as in the case of # class Foo::Bar; Baz; end nesting = [] klass_name.to_s.scan(/::|$/) { nesting.unshift $` } end # If there are multiple levels of nesting to search under, the top # level is the one we want to report as the lookup fail. error = nil nesting.each do |namespace| begin return Dependencies.load_missing_constant Inflector.constantize(namespace), const_name rescue NoMethodError then raise rescue NameError => e error ||= e end end # Raise the first error for this set. If this const_missing came from an # earlier const_missing, this will result in the real error bubbling # all the way up raise error end def unloadable(const_desc = self) super(const_desc) end end # Object includes this module module Loadable #:nodoc: def self.exclude_from(base) base.class_eval { define_method(:load, Kernel.instance_method(:load)) } end def require_or_load(file_name) Dependencies.require_or_load(file_name) end def require_dependency(file_name, message = "No such file to load -- %s") unless file_name.is_a?(String) raise ArgumentError, "the file name must be a String -- you passed #{file_name.inspect}" end Dependencies.depend_on(file_name, false, message) end def require_association(file_name) Dependencies.associate_with(file_name) end def load_dependency(file) if Dependencies.load? && ActiveSupport::Dependencies.constant_watch_stack.watching? Dependencies.new_constants_in(Object) { yield } else yield end rescue Exception => exception # errors from loading file exception.blame_file! file raise end def load(file, wrap = false) result = false load_dependency(file) { result = super } result end def require(file) result = false load_dependency(file) { result = super } result end # Mark the given constant as unloadable. Unloadable constants are removed each # time dependencies are cleared. # # Note that marking a constant for unloading need only be done once. Setup # or init scripts may list each unloadable constant that may need unloading; # each constant will be removed for every subsequent clear, as opposed to for # the first clear. # # The provided constant descriptor may be a (non-anonymous) module or class, # or a qualified constant name as a string or symbol. # # Returns true if the constant was not previously marked for unloading, false # otherwise. def unloadable(const_desc) Dependencies.mark_for_unload const_desc end end # Exception file-blaming module Blamable #:nodoc: def blame_file!(file) (@blamed_files ||= []).unshift file end def blamed_files @blamed_files ||= [] end def describe_blame return nil if blamed_files.empty? "This error occurred while loading the following files:\n #{blamed_files.join "\n "}" end def copy_blame!(exc) @blamed_files = exc.blamed_files.clone self end end def hook! Object.class_eval { include Loadable } Module.class_eval { include ModuleConstMissing } Exception.class_eval { include Blamable } true end def unhook! ModuleConstMissing.exclude_from(Module) Loadable.exclude_from(Object) true end def load? mechanism == :load end def depend_on(file_name, swallow_load_errors = false, message = "No such file to load -- %s.rb") path = search_for_file(file_name) require_or_load(path || file_name) rescue LoadError => load_error unless swallow_load_errors if file_name = load_error.message[/ -- (.*?)(\.rb)?$/, 1] raise LoadError.new(message % file_name).copy_blame!(load_error) end raise end end def associate_with(file_name) depend_on(file_name, true) end def clear log_call loaded.clear remove_unloadable_constants! end def require_or_load(file_name, const_path = nil) log_call file_name, const_path file_name = $1 if file_name =~ /^(.*)\.rb$/ expanded = File.expand_path(file_name) return if loaded.include?(expanded) # Record that we've seen this file *before* loading it to avoid an # infinite loop with mutual dependencies. loaded << expanded begin if load? log "loading #{file_name}" # Enable warnings if this file has not been loaded before and # warnings_on_first_load is set. load_args = ["#{file_name}.rb"] load_args << const_path unless const_path.nil? if !warnings_on_first_load or history.include?(expanded) result = load_file(*load_args) else enable_warnings { result = load_file(*load_args) } end else log "requiring #{file_name}" result = require file_name end rescue Exception loaded.delete expanded raise end # Record history *after* loading so first load gets warnings. history << expanded return result end # Is the provided constant path defined? if Module.method(:const_defined?).arity == 1 def qualified_const_defined?(path) Object.qualified_const_defined?(path.sub(/^::/, '')) end else def qualified_const_defined?(path) Object.qualified_const_defined?(path.sub(/^::/, ''), false) end end if Module.method(:const_defined?).arity == 1 # Does this module define this constant? # Wrapper to accommodate changing Module#const_defined? in Ruby 1.9 def local_const_defined?(mod, const) mod.const_defined?(const) end else def local_const_defined?(mod, const) #:nodoc: mod.const_defined?(const, false) end end # Given +path+, a filesystem path to a ruby file, return an array of constant # paths which would cause Dependencies to attempt to load this file. def loadable_constants_for_path(path, bases = autoload_paths) path = $1 if path =~ /\A(.*)\.rb\Z/ expanded_path = File.expand_path(path) paths = [] bases.each do |root| expanded_root = File.expand_path(root) next unless %r{\A#{Regexp.escape(expanded_root)}(/|\\)} =~ expanded_path nesting = expanded_path[(expanded_root.size)..-1] nesting = nesting[1..-1] if nesting && nesting[0] == ?/ next if nesting.blank? paths << nesting.camelize end paths.uniq! paths end # Search for a file in autoload_paths matching the provided suffix. def search_for_file(path_suffix) path_suffix = path_suffix.sub(/(\.rb)?$/, ".rb") autoload_paths.each do |root| path = File.join(root, path_suffix) return path if File.file? path end nil # Gee, I sure wish we had first_match ;-) end # Does the provided path_suffix correspond to an autoloadable module? # Instead of returning a boolean, the autoload base for this module is returned. def autoloadable_module?(path_suffix) autoload_paths.each do |load_path| return load_path if File.directory? File.join(load_path, path_suffix) end nil end def load_once_path?(path) # to_s works around a ruby1.9 issue where #starts_with?(Pathname) will always return false autoload_once_paths.any? { |base| path.starts_with? base.to_s } end # Attempt to autoload the provided module name by searching for a directory # matching the expected path suffix. If found, the module is created and assigned # to +into+'s constants with the name +const_name+. Provided that the directory # was loaded from a reloadable base path, it is added to the set of constants # that are to be unloaded. def autoload_module!(into, const_name, qualified_name, path_suffix) return nil unless base_path = autoloadable_module?(path_suffix) mod = Module.new into.const_set const_name, mod autoloaded_constants << qualified_name unless autoload_once_paths.include?(base_path) return mod end # Load the file at the provided path. +const_paths+ is a set of qualified # constant names. When loading the file, Dependencies will watch for the # addition of these constants. Each that is defined will be marked as # autoloaded, and will be removed when Dependencies.clear is next called. # # If the second parameter is left off, then Dependencies will construct a set # of names that the file at +path+ may define. See # +loadable_constants_for_path+ for more details. def load_file(path, const_paths = loadable_constants_for_path(path)) log_call path, const_paths const_paths = [const_paths].compact unless const_paths.is_a? Array parent_paths = const_paths.collect { |const_path| /(.*)::[^:]+\Z/ =~ const_path ? $1 : :Object } result = nil newly_defined_paths = new_constants_in(*parent_paths) do result = Kernel.load path end autoloaded_constants.concat newly_defined_paths unless load_once_path?(path) autoloaded_constants.uniq! log "loading #{path} defined #{newly_defined_paths * ', '}" unless newly_defined_paths.empty? return result end # Return the constant path for the provided parent and constant name. def qualified_name_for(mod, name) mod_name = to_constant_name mod mod_name == "Object" ? name.to_s : "#{mod_name}::#{name}" end # Load the constant named +const_name+ which is missing from +from_mod+. If # it is not possible to load the constant into from_mod, try its parent module # using const_missing. def load_missing_constant(from_mod, const_name) log_call from_mod, const_name unless qualified_const_defined?(from_mod.name) && Inflector.constantize(from_mod.name).equal?(from_mod) raise ArgumentError, "A copy of #{from_mod} has been removed from the module tree but is still active!" end raise NameError, "#{from_mod} is not missing constant #{const_name}!" if local_const_defined?(from_mod, const_name) qualified_name = qualified_name_for from_mod, const_name path_suffix = qualified_name.underscore file_path = search_for_file(path_suffix) if file_path && ! loaded.include?(File.expand_path(file_path).sub(/\.rb\z/, '')) # We found a matching file to load require_or_load file_path raise LoadError, "Expected #{file_path} to define #{qualified_name}" unless local_const_defined?(from_mod, const_name) return from_mod.const_get(const_name) elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix) return mod elsif (parent = from_mod.parent) && parent != from_mod && ! from_mod.parents.any? { |p| local_const_defined?(p, const_name) } # If our parents do not have a constant named +const_name+ then we are free # to attempt to load upwards. If they do have such a constant, then this # const_missing must be due to from_mod::const_name, which should not # return constants from from_mod's parents. begin return parent.const_missing(const_name) rescue NameError => e raise unless e.missing_name? qualified_name_for(parent, const_name) end end raise NameError, "uninitialized constant #{qualified_name}", caller.reject {|l| l.starts_with? __FILE__ } end # Remove the constants that have been autoloaded, and those that have been # marked for unloading. Before each constant is removed a callback is sent # to its class/module if it implements +before_remove_const+. # # The callback implementation should be restricted to cleaning up caches, etc. # as the environment will be in an inconsistent state, e.g. other constants # may have already been unloaded and not accessible. def remove_unloadable_constants! autoloaded_constants.each { |const| remove_constant const } autoloaded_constants.clear Reference.clear! explicitly_unloadable_constants.each { |const| remove_constant const } end class ClassCache def initialize @store = Hash.new end def empty? @store.empty? end def key?(key) @store.key?(key) end def get(key) key = key.name if key.respond_to?(:name) @store[key] ||= Inflector.constantize(key) end alias :[] :get def safe_get(key) key = key.name if key.respond_to?(:name) @store[key] || begin klass = Inflector.safe_constantize(key) @store[key] = klass end end def store(klass) return self unless klass.respond_to?(:name) raise(ArgumentError, 'anonymous classes cannot be cached') if klass.name.empty? @store[klass.name] = klass self end def clear! @store.clear end end Reference = ClassCache.new # Store a reference to a class +klass+. def reference(klass) Reference.store klass end # Get the reference for class named +name+. # Raises an exception if referenced class does not exist. def constantize(name) Reference.get(name) end # Get the reference for class named +name+ if one exists. # Otherwise returns nil. def safe_constantize(name) Reference.safe_get(name) end # Determine if the given constant has been automatically loaded. def autoloaded?(desc) # No name => anonymous module. return false if desc.is_a?(Module) && desc.anonymous? name = to_constant_name desc return false unless qualified_const_defined? name return autoloaded_constants.include?(name) end # Will the provided constant descriptor be unloaded? def will_unload?(const_desc) autoloaded?(const_desc) || explicitly_unloadable_constants.include?(to_constant_name(const_desc)) end # Mark the provided constant name for unloading. This constant will be # unloaded on each request, not just the next one. def mark_for_unload(const_desc) name = to_constant_name const_desc if explicitly_unloadable_constants.include? name return false else explicitly_unloadable_constants << name return true end end # Run the provided block and detect the new constants that were loaded during # its execution. Constants may only be regarded as 'new' once -- so if the # block calls +new_constants_in+ again, then the constants defined within the # inner call will not be reported in this one. # # If the provided block does not run to completion, and instead raises an # exception, any new constants are regarded as being only partially defined # and will be removed immediately. def new_constants_in(*descs) log_call(*descs) constant_watch_stack.watch_namespaces(descs) aborting = true begin yield # Now yield to the code that is to define new constants. aborting = false ensure new_constants = constant_watch_stack.new_constants log "New constants: #{new_constants * ', '}" return new_constants unless aborting log "Error during loading, removing partially loaded constants " new_constants.each {|c| remove_constant(c) }.clear end return [] end # Convert the provided const desc to a qualified constant name (as a string). # A module, class, symbol, or string may be provided. def to_constant_name(desc) #:nodoc: case desc when String then desc.sub(/^::/, '') when Symbol then desc.to_s when Module desc.name.presence || raise(ArgumentError, "Anonymous modules have no name to be referenced by") else raise TypeError, "Not a valid constant descriptor: #{desc.inspect}" end end def remove_constant(const) #:nodoc: return false unless qualified_const_defined? const # Normalize ::Foo, Foo, Object::Foo, and ::Object::Foo to Object::Foo names = const.to_s.sub(/^::(Object)?/, 'Object::').split("::") to_remove = names.pop parent = Inflector.constantize(names * '::') log "removing constant #{const}" constantized = constantize(const) constantized.before_remove_const if constantized.respond_to?(:before_remove_const) parent.instance_eval { remove_const to_remove } return true end protected def log_call(*args) if log_activity? arg_str = args.collect { |arg| arg.inspect } * ', ' /in `([a-z_\?\!]+)'/ =~ caller(1).first selector = $1 || '' log "called #{selector}(#{arg_str})" end end def log(msg) logger.debug "Dependencies: #{msg}" if log_activity? end def log_activity? logger && log_activity end end end ActiveSupport::Dependencies.hook! activesupport-3.2.16/lib/active_support/ruby/0000755000175000017500000000000012247654667020660 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/ruby/shim.rb0000644000175000017500000000164012247654667022146 0ustar ondrejondrej# Backported Ruby builtins so you can code with the latest & greatest # but still run on any Ruby 1.8.x. # # Date next_year, next_month # DateTime to_date, to_datetime, xmlschema # Enumerable group_by, each_with_object, none? # Process Process.daemon # REXML security fix # String ord # Time to_date, to_time, to_datetime require 'active_support' require 'active_support/core_ext/date/calculations' require 'active_support/core_ext/date_time/conversions' require 'active_support/core_ext/enumerable' require 'active_support/core_ext/process/daemon' require 'active_support/core_ext/string/conversions' require 'active_support/core_ext/string/interpolation' require 'active_support/core_ext/string/encoding' require 'active_support/core_ext/rexml' require 'active_support/core_ext/time/conversions' require 'active_support/core_ext/file/path' require 'active_support/core_ext/module/method_names'activesupport-3.2.16/lib/active_support/multibyte.rb0000644000175000017500000000352412247654667022246 0ustar ondrejondrej# encoding: utf-8 require 'active_support/core_ext/module/attribute_accessors' module ActiveSupport #:nodoc: module Multibyte autoload :EncodingError, 'active_support/multibyte/exceptions' autoload :Chars, 'active_support/multibyte/chars' autoload :Unicode, 'active_support/multibyte/unicode' # The proxy class returned when calling mb_chars. You can use this accessor to configure your own proxy # class so you can support other encodings. See the ActiveSupport::Multibyte::Chars implementation for # an example how to do this. # # Example: # ActiveSupport::Multibyte.proxy_class = CharsForUTF32 def self.proxy_class=(klass) @proxy_class = klass end # Returns the current proxy class def self.proxy_class @proxy_class ||= ActiveSupport::Multibyte::Chars end # Regular expressions that describe valid byte sequences for a character VALID_CHARACTER = { # Borrowed from the Kconv library by Shinji KONO - (also as seen on the W3C site) 'UTF-8' => /\A(?: [\x00-\x7f] | [\xc2-\xdf] [\x80-\xbf] | \xe0 [\xa0-\xbf] [\x80-\xbf] | [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] | \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] | [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] | \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf])\z /xn, # Quick check for valid Shift-JIS characters, disregards the odd-even pairing 'Shift_JIS' => /\A(?: [\x00-\x7e\xa1-\xdf] | [\x81-\x9f\xe0-\xef] [\x40-\x7e\x80-\x9e\x9f-\xfc])\z /xn } end end require 'active_support/multibyte/utils'activesupport-3.2.16/lib/active_support/gzip.rb0000644000175000017500000000134712247654667021202 0ustar ondrejondrejrequire 'zlib' require 'stringio' require 'active_support/core_ext/string/encoding' module ActiveSupport # A convenient wrapper for the zlib standard library that allows compression/decompression of strings with gzip. module Gzip class Stream < StringIO def initialize(*) super set_encoding "BINARY" if "".encoding_aware? end def close; rewind; end end # Decompresses a gzipped string. def self.decompress(source) Zlib::GzipReader.new(StringIO.new(source)).read end # Compresses a string using gzip. def self.compress(source) output = Stream.new gz = Zlib::GzipWriter.new(output) gz.write(source) gz.close output.string end end end activesupport-3.2.16/lib/active_support/log_subscriber/0000755000175000017500000000000012247654667022703 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/log_subscriber/test_helper.rb0000644000175000017500000000601312247654667025546 0ustar ondrejondrejrequire 'active_support/log_subscriber' require 'active_support/buffered_logger' require 'active_support/notifications' module ActiveSupport class LogSubscriber # Provides some helpers to deal with testing log subscribers by setting up # notifications. Take for instance Active Record subscriber tests: # # class SyncLogSubscriberTest < ActiveSupport::TestCase # include ActiveSupport::LogSubscriber::TestHelper # # def setup # ActiveRecord::LogSubscriber.attach_to(:active_record) # end # # def test_basic_query_logging # Developer.all # wait # assert_equal 1, @logger.logged(:debug).size # assert_match(/Developer Load/, @logger.logged(:debug).last) # assert_match(/SELECT \* FROM "developers"/, @logger.logged(:debug).last) # end # end # # All you need to do is to ensure that your log subscriber is added to Rails::Subscriber, # as in the second line of the code above. The test helpers are responsible for setting # up the queue, subscriptions and turning colors in logs off. # # The messages are available in the @logger instance, which is a logger with limited # powers (it actually does not send anything to your output), and you can collect them # doing @logger.logged(level), where level is the level used in logging, like info, # debug, warn and so on. # module TestHelper def setup @logger = MockLogger.new @notifier = ActiveSupport::Notifications::Fanout.new ActiveSupport::LogSubscriber.colorize_logging = false @old_notifier = ActiveSupport::Notifications.notifier set_logger(@logger) ActiveSupport::Notifications.notifier = @notifier end def teardown set_logger(nil) ActiveSupport::Notifications.notifier = @old_notifier end class MockLogger include ActiveSupport::BufferedLogger::Severity attr_reader :flush_count attr_accessor :level def initialize(level = DEBUG) @flush_count = 0 @level = level @logged = Hash.new { |h,k| h[k] = [] } end def method_missing(level, message) @logged[level] << message end def logged(level) @logged[level].compact.map { |l| l.to_s.strip } end def flush @flush_count += 1 end ActiveSupport::BufferedLogger::Severity.constants.each do |severity| class_eval <<-EOT, __FILE__, __LINE__ + 1 def #{severity.downcase}? #{severity} >= @level end EOT end end # Wait notifications to be published. def wait @notifier.wait end # Overwrite if you use another logger in your log subscriber: # # def logger # ActiveRecord::Base.logger = @logger # end # def set_logger(logger) ActiveSupport::LogSubscriber.logger = logger end end end end activesupport-3.2.16/lib/active_support/json.rb0000644000175000017500000000011612247654667021173 0ustar ondrejondrejrequire 'active_support/json/decoding' require 'active_support/json/encoding' activesupport-3.2.16/lib/active_support/duration.rb0000644000175000017500000000610012247654667022046 0ustar ondrejondrejrequire 'active_support/basic_object' require 'active_support/core_ext/array/conversions' require 'active_support/core_ext/object/acts_like' module ActiveSupport # Provides accurate date and time measurements using Date#advance and # Time#advance, respectively. It mainly supports the methods on Numeric. # Example: # # 1.month.ago # equivalent to Time.now.advance(:months => -1) class Duration < BasicObject attr_accessor :value, :parts delegate :duplicable?, :to => :value # required when using ActiveSupport's BasicObject on 1.8 def initialize(value, parts) #:nodoc: @value, @parts = value, parts end # Adds another Duration or a Numeric to this Duration. Numeric values # are treated as seconds. def +(other) if Duration === other Duration.new(value + other.value, @parts + other.parts) else Duration.new(value + other, @parts + [[:seconds, other]]) end end # Subtracts another Duration or a Numeric from this Duration. Numeric # values are treated as seconds. def -(other) self + (-other) end def -@ #:nodoc: Duration.new(-value, parts.map { |type,number| [type, -number] }) end def is_a?(klass) #:nodoc: Duration == klass || value.is_a?(klass) end alias :kind_of? :is_a? # Returns true if other is also a Duration instance with the # same value, or if other == value. def ==(other) if Duration === other other.value == value else other == value end end def self.===(other) #:nodoc: other.is_a?(Duration) rescue ::NoMethodError false end # Calculates a new Time or Date that is as far in the future # as this Duration represents. def since(time = ::Time.current) sum(1, time) end alias :from_now :since # Calculates a new Time or Date that is as far in the past # as this Duration represents. def ago(time = ::Time.current) sum(-1, time) end alias :until :ago def inspect #:nodoc: consolidated = parts.inject(::Hash.new(0)) { |h,part| h[part.first] += part.last; h } parts = [:years, :months, :days, :minutes, :seconds].map do |length| n = consolidated[length] "#{n} #{n == 1 ? length.to_s.singularize : length.to_s}" if n.nonzero? end.compact parts = ["0 seconds"] if parts.empty? parts.to_sentence(:locale => :en) end def as_json(options = nil) #:nodoc: to_i end protected def sum(sign, time = ::Time.current) #:nodoc: parts.inject(time) do |t,(type,number)| if t.acts_like?(:time) || t.acts_like?(:date) if type == :seconds t.since(sign * number) else t.advance(type => sign * number) end else raise ::ArgumentError, "expected a time or date, got #{time.inspect}" end end end private def method_missing(method, *args, &block) #:nodoc: value.send(method, *args, &block) end end end activesupport-3.2.16/lib/active_support/buffered_logger.rb0000644000175000017500000000642412247654667023353 0ustar ondrejondrejrequire 'thread' require 'logger' require 'active_support/core_ext/logger' require 'active_support/core_ext/class/attribute_accessors' require 'active_support/deprecation' require 'fileutils' module ActiveSupport # Inspired by the buffered logger idea by Ezra class BufferedLogger module Severity DEBUG = 0 INFO = 1 WARN = 2 ERROR = 3 FATAL = 4 UNKNOWN = 5 end include Severity MAX_BUFFER_SIZE = 1000 ## # :singleton-method: # Set to false to disable the silencer cattr_accessor :silencer self.silencer = true # Silences the logger for the duration of the block. def silence(temporary_level = ERROR) if silencer begin logger = self.class.new @log_dest.dup, temporary_level yield logger ensure logger.close end else yield self end end deprecate :silence attr_reader :auto_flushing deprecate :auto_flushing def initialize(log, level = DEBUG) @log_dest = log unless log.respond_to?(:write) unless File.exist?(File.dirname(log)) ActiveSupport::Deprecation.warn(<<-eowarn) Automatic directory creation for '#{log}' is deprecated. Please make sure the directory for your log file exists before creating the logger. eowarn FileUtils.mkdir_p(File.dirname(log)) end end @log = open_logfile log self.level = level end def open_log(log, mode) open(log, mode).tap do |open_log| open_log.set_encoding(Encoding::BINARY) if open_log.respond_to?(:set_encoding) open_log.sync = true end end deprecate :open_log def level @log.level end def level=(l) @log.level = l end def add(severity, message = nil, progname = nil, &block) @log.add(severity, message, progname, &block) end # Dynamically add methods such as: # def info # def warn # def debug Severity.constants.each do |severity| class_eval <<-EOT, __FILE__, __LINE__ + 1 def #{severity.downcase}(message = nil, progname = nil, &block) # def debug(message = nil, progname = nil, &block) add(#{severity}, message, progname, &block) # add(DEBUG, message, progname, &block) end # end def #{severity.downcase}? # def debug? #{severity} >= level # DEBUG >= level end # end EOT end # Set the auto-flush period. Set to true to flush after every log message, # to an integer to flush every N messages, or to false, nil, or zero to # never auto-flush. If you turn auto-flushing off, be sure to regularly # flush the log yourself -- it will eat up memory until you do. def auto_flushing=(period) end deprecate :auto_flushing= def flush end deprecate :flush def respond_to?(method, include_private = false) return false if method.to_s == "flush" super end def close @log.close end private def open_logfile(log) Logger.new log end end end activesupport-3.2.16/lib/active_support/core_ext.rb0000644000175000017500000000021112247654667022026 0ustar ondrejondrejDir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path| require "active_support/core_ext/#{File.basename(path, '.rb')}" end activesupport-3.2.16/lib/active_support/tagged_logging.rb0000644000175000017500000000512312247654667023166 0ustar ondrejondrejrequire 'active_support/core_ext/object/blank' require 'active_support/deprecation' require 'logger' module ActiveSupport # Wraps any standard Logger class to provide tagging capabilities. Examples: # # Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) # Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff" # Logger.tagged("BCX", "Jason") { Logger.info "Stuff" } # Logs "[BCX] [Jason] Stuff" # Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } } # Logs "[BCX] [Jason] Stuff" # # This is used by the default Rails.logger as configured by Railties to make it easy to stamp log lines # with subdomains, request ids, and anything else to aid debugging of multi-user production applications. class TaggedLogging def initialize(logger) @logger = logger end def tagged(*tags) new_tags = push_tags(*tags) yield self ensure pop_tags(new_tags.size) end def push_tags(*tags) tags.flatten.reject(&:blank?).tap do |new_tags| current_tags.concat new_tags end end def pop_tags(size = 1) current_tags.pop size end def clear_tags! current_tags.clear end def silence(temporary_level = Logger::ERROR, &block) @logger.silence(temporary_level, &block) end deprecate :silence def add(severity, message = nil, progname = nil, &block) if message.nil? if block_given? message = block.call else message = progname progname = nil #No instance variable for this like Logger end end @logger.add(severity, "#{tags_text}#{message}", progname) end %w( fatal error warn info debug unknown ).each do |severity| eval <<-EOM, nil, __FILE__, __LINE__ + 1 def #{severity}(progname = nil, &block) add(Logger::#{severity.upcase}, nil, progname, &block) end EOM end def flush clear_tags! @logger.flush if @logger.respond_to?(:flush) end def method_missing(method, *args) @logger.send(method, *args) end if RUBY_VERSION < '1.9' def respond_to?(*args) super || @logger.respond_to?(*args) end else def respond_to_missing?(*args) @logger.respond_to? *args end end private def tags_text tags = current_tags if tags.any? tags.collect { |tag| "[#{tag}] " }.join end end def current_tags Thread.current[:activesupport_tagged_logging_tags] ||= [] end end end activesupport-3.2.16/lib/active_support/lazy_load_hooks.rb0000644000175000017500000000307012247654667023405 0ustar ondrejondrej# lazy_load_hooks allows rails to lazily load a lot of components and thus making the app boot faster. Because of # this feature now there is no need to require ActiveRecord::Base at boot time purely to apply configuration. Instead # a hook is registered that applies configuration once ActiveRecord::Base is loaded. Here ActiveRecord::Base is used # as example but this feature can be applied elsewhere too. # # Here is an example where +on_load+ method is called to register a hook. # # initializer "active_record.initialize_timezone" do # ActiveSupport.on_load(:active_record) do # self.time_zone_aware_attributes = true # self.default_timezone = :utc # end # end # # When the entirety of +activerecord/lib/active_record/base.rb+ has been evaluated then +run_load_hooks+ is invoked. # The very last line of +activerecord/lib/active_record/base.rb+ is: # # ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base) # module ActiveSupport @load_hooks = Hash.new { |h,k| h[k] = [] } @loaded = Hash.new { |h,k| h[k] = [] } def self.on_load(name, options = {}, &block) @loaded[name].each do |base| execute_hook(base, options, block) end @load_hooks[name] << [block, options] end def self.execute_hook(base, options, block) if options[:yield] block.call(base) else base.instance_eval(&block) end end def self.run_load_hooks(name, base = Object) @loaded[name] << base @load_hooks[name].each do |hook, options| execute_hook(base, options, hook) end end end activesupport-3.2.16/lib/active_support/concern.rb0000644000175000017500000000667412247654667021670 0ustar ondrejondrejrequire 'active_support/deprecation' module ActiveSupport # A typical module looks like this: # # module M # def self.included(base) # base.extend ClassMethods # base.class_eval do # scope :disabled, where(:disabled => true) # end # end # # module ClassMethods # ... # end # end # # By using ActiveSupport::Concern the above module could instead be written as: # # require 'active_support/concern' # # module M # extend ActiveSupport::Concern # # included do # scope :disabled, where(:disabled => true) # end # # module ClassMethods # ... # end # end # # Moreover, it gracefully handles module dependencies. Given a +Foo+ module and a +Bar+ # module which depends on the former, we would typically write the following: # # module Foo # def self.included(base) # base.class_eval do # def self.method_injected_by_foo # ... # end # end # end # end # # module Bar # def self.included(base) # base.method_injected_by_foo # end # end # # class Host # include Foo # We need to include this dependency for Bar # include Bar # Bar is the module that Host really needs # end # # But why should +Host+ care about +Bar+'s dependencies, namely +Foo+? We could try to hide # these from +Host+ directly including +Foo+ in +Bar+: # # module Bar # include Foo # def self.included(base) # base.method_injected_by_foo # end # end # # class Host # include Bar # end # # Unfortunately this won't work, since when +Foo+ is included, its base is the +Bar+ module, # not the +Host+ class. With ActiveSupport::Concern, module dependencies are properly resolved: # # require 'active_support/concern' # # module Foo # extend ActiveSupport::Concern # included do # class_eval do # def self.method_injected_by_foo # ... # end # end # end # end # # module Bar # extend ActiveSupport::Concern # include Foo # # included do # self.method_injected_by_foo # end # end # # class Host # include Bar # works, Bar takes care now of its dependencies # end # module Concern def self.extended(base) base.instance_variable_set("@_dependencies", []) end def append_features(base) if base.instance_variable_defined?("@_dependencies") base.instance_variable_get("@_dependencies") << self return false else return false if base < self @_dependencies.each { |dep| base.send(:include, dep) } super base.extend const_get("ClassMethods") if const_defined?("ClassMethods") if const_defined?("InstanceMethods") base.send :include, const_get("InstanceMethods") ActiveSupport::Deprecation.warn "The InstanceMethods module inside ActiveSupport::Concern will be " \ "no longer included automatically. Please define instance methods directly in #{self} instead.", caller end base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block") end end def included(base = nil, &block) if base.nil? @_included_block = block else super end end end end activesupport-3.2.16/lib/active_support/whiny_nil.rb0000644000175000017500000000211112247654667022217 0ustar ondrejondrejrequire 'active_support/deprecation' # Extensions to +nil+ which allow for more helpful error messages for people who # are new to Rails. # # NilClass#id exists in Ruby 1.8 (though it is deprecated). Since +id+ is a fundamental # method of Active Record models NilClass#id is redefined as well to raise a RuntimeError # and warn the user. She probably wanted a model database identifier and the 4 # returned by the original method could result in obscure bugs. # # The flag config.whiny_nils determines whether this feature is enabled. # By default it is on in development and test modes, and it is off in production # mode. class NilClass def self.add_whiner(klass) ActiveSupport::Deprecation.warn "NilClass.add_whiner is deprecated and this functionality is " \ "removed from Rails versions as it affects Ruby 1.9 performance.", caller end # Raises a RuntimeError when you attempt to call +id+ on +nil+. def id raise RuntimeError, "Called id for nil, which would mistakenly be #{object_id} -- if you really wanted the id of nil, use object_id", caller end end activesupport-3.2.16/lib/active_support/i18n.rb0000644000175000017500000000041012247654667020776 0ustar ondrejondrejbegin require 'i18n' require 'active_support/lazy_load_hooks' rescue LoadError => e $stderr.puts "The i18n gem is not available. Please add it to your Gemfile and run bundle install" raise e end I18n.load_path << "#{File.dirname(__FILE__)}/locale/en.yml" activesupport-3.2.16/lib/active_support/string_inquirer.rb0000644000175000017500000000102212247654667023443 0ustar ondrejondrejmodule ActiveSupport # Wrapping a string in this class gives you a prettier way to test # for equality. The value returned by Rails.env is wrapped # in a StringInquirer object so instead of calling this: # # Rails.env == "production" # # you can call this: # # Rails.env.production? # class StringInquirer < String def method_missing(method_name, *arguments) if method_name.to_s[-1,1] == "?" self == method_name.to_s[0..-2] else super end end end end activesupport-3.2.16/lib/active_support/xml_mini/0000755000175000017500000000000012247654667021513 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/xml_mini/libxmlsax.rb0000644000175000017500000000414412247654667024046 0ustar ondrejondrejrequire 'libxml' require 'active_support/core_ext/object/blank' require 'stringio' # = XmlMini LibXML implementation using a SAX-based parser module ActiveSupport module XmlMini_LibXMLSAX extend self # Class that will build the hash while the XML document # is being parsed using SAX events. class HashBuilder include LibXML::XML::SaxParser::Callbacks CONTENT_KEY = '__content__'.freeze HASH_SIZE_KEY = '__hash_size__'.freeze attr_reader :hash def current_hash @hash_stack.last end def on_start_document @hash = { CONTENT_KEY => '' } @hash_stack = [@hash] end def on_end_document @hash = @hash_stack.pop @hash.delete(CONTENT_KEY) end def on_start_element(name, attrs = {}) new_hash = { CONTENT_KEY => '' }.merge(attrs) new_hash[HASH_SIZE_KEY] = new_hash.size + 1 case current_hash[name] when Array then current_hash[name] << new_hash when Hash then current_hash[name] = [current_hash[name], new_hash] when nil then current_hash[name] = new_hash end @hash_stack.push(new_hash) end def on_end_element(name) if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == '' current_hash.delete(CONTENT_KEY) end @hash_stack.pop end def on_characters(string) current_hash[CONTENT_KEY] << string end alias_method :on_cdata_block, :on_characters end attr_accessor :document_class self.document_class = HashBuilder def parse(data) if !data.respond_to?(:read) data = StringIO.new(data || '') end char = data.getc if char.nil? {} else data.ungetc(char) LibXML::XML::Error.set_handler(&LibXML::XML::Error::QUIET_HANDLER) parser = LibXML::XML::SaxParser.io(data) document = self.document_class.new parser.callbacks = document parser.parse document.hash end end end end activesupport-3.2.16/lib/active_support/xml_mini/rexml.rb0000644000175000017500000000712512247654667023174 0ustar ondrejondrejrequire 'active_support/core_ext/kernel/reporting' require 'active_support/core_ext/object/blank' require 'stringio' # = XmlMini ReXML implementation module ActiveSupport module XmlMini_REXML #:nodoc: extend self CONTENT_KEY = '__content__'.freeze # Parse an XML Document string or IO into a simple hash # # Same as XmlSimple::xml_in but doesn't shoot itself in the foot, # and uses the defaults from Active Support. # # data:: # XML Document string or IO to parse def parse(data) if !data.respond_to?(:read) data = StringIO.new(data || '') end char = data.getc if char.nil? {} else data.ungetc(char) silence_warnings { require 'rexml/document' } unless defined?(REXML::Document) doc = REXML::Document.new(data) if doc.root merge_element!({}, doc.root) else raise REXML::ParseException, "The document #{doc.to_s.inspect} does not have a valid root" end end end private # Convert an XML element and merge into the hash # # hash:: # Hash to merge the converted element into. # element:: # XML element to merge into hash def merge_element!(hash, element) merge!(hash, element.name, collapse(element)) end # Actually converts an XML document element into a data structure. # # element:: # The document element to be collapsed. def collapse(element) hash = get_attributes(element) if element.has_elements? element.each_element {|child| merge_element!(hash, child) } merge_texts!(hash, element) unless empty_content?(element) hash else merge_texts!(hash, element) end end # Merge all the texts of an element into the hash # # hash:: # Hash to add the converted element to. # element:: # XML element whose texts are to me merged into the hash def merge_texts!(hash, element) unless element.has_text? hash else # must use value to prevent double-escaping texts = '' element.texts.each { |t| texts << t.value } merge!(hash, CONTENT_KEY, texts) end end # Adds a new key/value pair to an existing Hash. If the key to be added # already exists and the existing value associated with key is not # an Array, it will be wrapped in an Array. Then the new value is # appended to that Array. # # hash:: # Hash to add key/value pair to. # key:: # Key to be added. # value:: # Value to be associated with key. def merge!(hash, key, value) if hash.has_key?(key) if hash[key].instance_of?(Array) hash[key] << value else hash[key] = [hash[key], value] end elsif value.instance_of?(Array) hash[key] = [value] else hash[key] = value end hash end # Converts the attributes array of an XML element into a hash. # Returns an empty Hash if node has no attributes. # # element:: # XML element to extract attributes from. def get_attributes(element) attributes = {} element.attributes.each { |n,v| attributes[n] = v } attributes end # Determines if a document element has text content # # element:: # XML element to be checked. def empty_content?(element) element.texts.join.blank? end end end activesupport-3.2.16/lib/active_support/xml_mini/libxml.rb0000644000175000017500000000356412247654667023337 0ustar ondrejondrejrequire 'libxml' require 'active_support/core_ext/object/blank' require 'stringio' # = XmlMini LibXML implementation module ActiveSupport module XmlMini_LibXML #:nodoc: extend self # Parse an XML Document string or IO into a simple hash using libxml. # data:: # XML Document string or IO to parse def parse(data) if !data.respond_to?(:read) data = StringIO.new(data || '') end char = data.getc if char.nil? {} else data.ungetc(char) LibXML::XML::Parser.io(data).parse.to_hash end end end end module LibXML #:nodoc: module Conversions #:nodoc: module Document #:nodoc: def to_hash root.to_hash end end module Node #:nodoc: CONTENT_ROOT = '__content__'.freeze # Convert XML document to hash # # hash:: # Hash to merge the converted element into. def to_hash(hash={}) node_hash = {} # Insert node hash into parent hash correctly. case hash[name] when Array then hash[name] << node_hash when Hash then hash[name] = [hash[name], node_hash] when nil then hash[name] = node_hash end # Handle child elements each_child do |c| if c.element? c.to_hash(node_hash) elsif c.text? || c.cdata? node_hash[CONTENT_ROOT] ||= '' node_hash[CONTENT_ROOT] << c.content end end # Remove content node if it is blank if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank? node_hash.delete(CONTENT_ROOT) end # Handle attributes each_attr { |a| node_hash[a.name] = a.value } hash end end end end LibXML::XML::Document.send(:include, LibXML::Conversions::Document) LibXML::XML::Node.send(:include, LibXML::Conversions::Node) activesupport-3.2.16/lib/active_support/xml_mini/nokogiri.rb0000644000175000017500000000430312247654667023661 0ustar ondrejondrejbegin require 'nokogiri' rescue LoadError => e $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install" raise e end require 'active_support/core_ext/object/blank' require 'stringio' # = XmlMini Nokogiri implementation module ActiveSupport module XmlMini_Nokogiri #:nodoc: extend self # Parse an XML Document string or IO into a simple hash using libxml / nokogiri. # data:: # XML Document string or IO to parse def parse(data) if !data.respond_to?(:read) data = StringIO.new(data || '') end char = data.getc if char.nil? {} else data.ungetc(char) doc = Nokogiri::XML(data) raise doc.errors.first if doc.errors.length > 0 doc.to_hash end end module Conversions #:nodoc: module Document #:nodoc: def to_hash root.to_hash end end module Node #:nodoc: CONTENT_ROOT = '__content__'.freeze # Convert XML document to hash # # hash:: # Hash to merge the converted element into. def to_hash(hash={}) node_hash = {} # Insert node hash into parent hash correctly. case hash[name] when Array then hash[name] << node_hash when Hash then hash[name] = [hash[name], node_hash] when nil then hash[name] = node_hash end # Handle child elements children.each do |c| if c.element? c.to_hash(node_hash) elsif c.text? || c.cdata? node_hash[CONTENT_ROOT] ||= '' node_hash[CONTENT_ROOT] << c.content end end # Remove content node if it is blank and there are child tags if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank? node_hash.delete(CONTENT_ROOT) end # Handle attributes attribute_nodes.each { |a| node_hash[a.node_name] = a.value } hash end end end Nokogiri::XML::Document.send(:include, Conversions::Document) Nokogiri::XML::Node.send(:include, Conversions::Node) end end activesupport-3.2.16/lib/active_support/xml_mini/jdom.rb0000644000175000017500000001276712247654667023006 0ustar ondrejondrejraise "JRuby is required to use the JDOM backend for XmlMini" unless RUBY_PLATFORM =~ /java/ require 'jruby' include Java require 'active_support/core_ext/object/blank' java_import javax.xml.parsers.DocumentBuilder unless defined? DocumentBuilder java_import javax.xml.parsers.DocumentBuilderFactory unless defined? DocumentBuilderFactory java_import java.io.StringReader unless defined? StringReader java_import org.xml.sax.InputSource unless defined? InputSource java_import org.xml.sax.Attributes unless defined? Attributes java_import org.w3c.dom.Node unless defined? Node # = XmlMini JRuby JDOM implementation module ActiveSupport module XmlMini_JDOM #:nodoc: extend self CONTENT_KEY = '__content__'.freeze NODE_TYPE_NAMES = %w{ATTRIBUTE_NODE CDATA_SECTION_NODE COMMENT_NODE DOCUMENT_FRAGMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE ELEMENT_NODE ENTITY_NODE ENTITY_REFERENCE_NODE NOTATION_NODE PROCESSING_INSTRUCTION_NODE TEXT_NODE} node_type_map = {} NODE_TYPE_NAMES.each { |type| node_type_map[Node.send(type)] = type } # Parse an XML Document string or IO into a simple hash using Java's jdom. # data:: # XML Document string or IO to parse def parse(data) if data.respond_to?(:read) data = data.read end if data.blank? {} else @dbf = DocumentBuilderFactory.new_instance # secure processing of java xml # http://www.ibm.com/developerworks/xml/library/x-tipcfsx/index.html @dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) @dbf.setFeature("http://xml.org/sax/features/external-general-entities", false) @dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false) @dbf.setFeature(javax.xml.XMLConstants::FEATURE_SECURE_PROCESSING, true) xml_string_reader = StringReader.new(data) xml_input_source = InputSource.new(xml_string_reader) doc = @dbf.new_document_builder.parse(xml_input_source) merge_element!({CONTENT_KEY => ''}, doc.document_element) end end private # Convert an XML element and merge into the hash # # hash:: # Hash to merge the converted element into. # element:: # XML element to merge into hash def merge_element!(hash, element) delete_empty(hash) merge!(hash, element.tag_name, collapse(element)) end def delete_empty(hash) hash.delete(CONTENT_KEY) if hash[CONTENT_KEY] == '' end # Actually converts an XML document element into a data structure. # # element:: # The document element to be collapsed. def collapse(element) hash = get_attributes(element) child_nodes = element.child_nodes if child_nodes.length > 0 for i in 0...child_nodes.length child = child_nodes.item(i) merge_element!(hash, child) unless child.node_type == Node.TEXT_NODE end merge_texts!(hash, element) unless empty_content?(element) hash else merge_texts!(hash, element) end end # Merge all the texts of an element into the hash # # hash:: # Hash to add the converted element to. # element:: # XML element whose texts are to me merged into the hash def merge_texts!(hash, element) delete_empty(hash) text_children = texts(element) if text_children.join.empty? hash else # must use value to prevent double-escaping merge!(hash, CONTENT_KEY, text_children.join) end end # Adds a new key/value pair to an existing Hash. If the key to be added # already exists and the existing value associated with key is not # an Array, it will be wrapped in an Array. Then the new value is # appended to that Array. # # hash:: # Hash to add key/value pair to. # key:: # Key to be added. # value:: # Value to be associated with key. def merge!(hash, key, value) if hash.has_key?(key) if hash[key].instance_of?(Array) hash[key] << value else hash[key] = [hash[key], value] end elsif value.instance_of?(Array) hash[key] = [value] else hash[key] = value end hash end # Converts the attributes array of an XML element into a hash. # Returns an empty Hash if node has no attributes. # # element:: # XML element to extract attributes from. def get_attributes(element) attribute_hash = {} attributes = element.attributes for i in 0...attributes.length attribute_hash[CONTENT_KEY] ||= '' attribute_hash[attributes.item(i).name] = attributes.item(i).value end attribute_hash end # Determines if a document element has text content # # element:: # XML element to be checked. def texts(element) texts = [] child_nodes = element.child_nodes for i in 0...child_nodes.length item = child_nodes.item(i) if item.node_type == Node.TEXT_NODE texts << item.get_data end end texts end # Determines if a document element has text content # # element:: # XML element to be checked. def empty_content?(element) text = '' child_nodes = element.child_nodes for i in 0...child_nodes.length item = child_nodes.item(i) if item.node_type == Node.TEXT_NODE text << item.get_data.strip end end text.strip.length == 0 end end end activesupport-3.2.16/lib/active_support/xml_mini/nokogirisax.rb0000644000175000017500000000430012247654667024372 0ustar ondrejondrejbegin require 'nokogiri' rescue LoadError => e $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install" raise e end require 'active_support/core_ext/object/blank' require 'stringio' # = XmlMini Nokogiri implementation using a SAX-based parser module ActiveSupport module XmlMini_NokogiriSAX extend self # Class that will build the hash while the XML document # is being parsed using SAX events. class HashBuilder < Nokogiri::XML::SAX::Document CONTENT_KEY = '__content__'.freeze HASH_SIZE_KEY = '__hash_size__'.freeze attr_reader :hash def current_hash @hash_stack.last end def start_document @hash = {} @hash_stack = [@hash] end def end_document raise "Parse stack not empty!" if @hash_stack.size > 1 end def error(error_message) raise error_message end def start_element(name, attrs = []) new_hash = { CONTENT_KEY => '' }.merge(Hash[attrs]) new_hash[HASH_SIZE_KEY] = new_hash.size + 1 case current_hash[name] when Array then current_hash[name] << new_hash when Hash then current_hash[name] = [current_hash[name], new_hash] when nil then current_hash[name] = new_hash end @hash_stack.push(new_hash) end def end_element(name) if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == '' current_hash.delete(CONTENT_KEY) end @hash_stack.pop end def characters(string) current_hash[CONTENT_KEY] << string end alias_method :cdata_block, :characters end attr_accessor :document_class self.document_class = HashBuilder def parse(data) if !data.respond_to?(:read) data = StringIO.new(data || '') end char = data.getc if char.nil? {} else data.ungetc(char) document = self.document_class.new parser = Nokogiri::XML::SAX::Parser.new(document) parser.parse(data) document.hash end end end end activesupport-3.2.16/lib/active_support/time_with_zone.rb0000644000175000017500000002764012247654667023261 0ustar ondrejondrejrequire "active_support/values/time_zone" require 'active_support/core_ext/object/acts_like' require 'active_support/core_ext/object/inclusion' module ActiveSupport # A Time-like class that can represent a time in any time zone. Necessary because standard Ruby Time instances are # limited to UTC and the system's ENV['TZ'] zone. # # You shouldn't ever need to create a TimeWithZone instance directly via new . Instead use methods # +local+, +parse+, +at+ and +now+ on TimeZone instances, and +in_time_zone+ on Time and DateTime instances. # Examples: # # Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)' # Time.zone.local(2007, 2, 10, 15, 30, 45) # => Sat, 10 Feb 2007 15:30:45 EST -05:00 # Time.zone.parse('2007-02-10 15:30:45') # => Sat, 10 Feb 2007 15:30:45 EST -05:00 # Time.zone.at(1170361845) # => Sat, 10 Feb 2007 15:30:45 EST -05:00 # Time.zone.now # => Sun, 18 May 2008 13:07:55 EDT -04:00 # Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone # => Sat, 10 Feb 2007 15:30:45 EST -05:00 # # See Time and TimeZone for further documentation of these methods. # # TimeWithZone instances implement the same API as Ruby Time instances, so that Time and TimeWithZone instances are interchangeable. # Examples: # # t = Time.zone.now # => Sun, 18 May 2008 13:27:25 EDT -04:00 # t.hour # => 13 # t.dst? # => true # t.utc_offset # => -14400 # t.zone # => "EDT" # t.to_s(:rfc822) # => "Sun, 18 May 2008 13:27:25 -0400" # t + 1.day # => Mon, 19 May 2008 13:27:25 EDT -04:00 # t.beginning_of_year # => Tue, 01 Jan 2008 00:00:00 EST -05:00 # t > Time.utc(1999) # => true # t.is_a?(Time) # => true # t.is_a?(ActiveSupport::TimeWithZone) # => true # class TimeWithZone def self.name 'Time' # Report class name as 'Time' to thwart type checking end include Comparable attr_reader :time_zone def initialize(utc_time, time_zone, local_time = nil, period = nil) @utc, @time_zone, @time = utc_time, time_zone, local_time @period = @utc ? period : get_period_and_ensure_valid_local_time end # Returns a Time or DateTime instance that represents the time in +time_zone+. def time @time ||= period.to_local(@utc) end # Returns a Time or DateTime instance that represents the time in UTC. def utc @utc ||= period.to_utc(@time) end alias_method :comparable_time, :utc alias_method :getgm, :utc alias_method :getutc, :utc alias_method :gmtime, :utc # Returns the underlying TZInfo::TimezonePeriod. def period @period ||= time_zone.period_for_utc(@utc) end # Returns the simultaneous time in Time.zone, or the specified zone. def in_time_zone(new_zone = ::Time.zone) return self if time_zone == new_zone utc.in_time_zone(new_zone) end # Returns a Time.local() instance of the simultaneous time in your system's ENV['TZ'] zone def localtime utc.respond_to?(:getlocal) ? utc.getlocal : utc.to_time.getlocal end alias_method :getlocal, :localtime def dst? period.dst? end alias_method :isdst, :dst? def utc? time_zone.name == 'UTC' end alias_method :gmt?, :utc? def utc_offset period.utc_total_offset end alias_method :gmt_offset, :utc_offset alias_method :gmtoff, :utc_offset def formatted_offset(colon = true, alternate_utc_string = nil) utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Time uses +zone+ to display the time zone abbreviation, so we're duck-typing it. def zone period.zone_identifier.to_s end def inspect "#{time.strftime('%a, %d %b %Y %H:%M:%S')} #{zone} #{formatted_offset}" end def xmlschema(fraction_digits = 0) fraction = if fraction_digits > 0 (".%06i" % time.usec)[0, fraction_digits + 1] end "#{time.strftime("%Y-%m-%dT%H:%M:%S")}#{fraction}#{formatted_offset(true, 'Z')}" end alias_method :iso8601, :xmlschema # Coerces time to a string for JSON encoding. The default format is ISO 8601. You can get # %Y/%m/%d %H:%M:%S +offset style by setting ActiveSupport::JSON::Encoding.use_standard_json_time_format # to false. # # ==== Examples # # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true # Time.utc(2005,2,1,15,15,10).in_time_zone.to_json # # => "2005-02-01T15:15:10Z" # # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false # Time.utc(2005,2,1,15,15,10).in_time_zone.to_json # # => "2005/02/01 15:15:10 +0000" # def as_json(options = nil) if ActiveSupport::JSON::Encoding.use_standard_json_time_format xmlschema else %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) end end def encode_with(coder) if coder.respond_to?(:represent_object) coder.represent_object(nil, utc) else coder.represent_scalar(nil, utc.strftime("%Y-%m-%d %H:%M:%S.%9NZ")) end end def to_yaml(options = {}) return super if defined?(YAML::ENGINE) && !YAML::ENGINE.syck? utc.to_yaml(options) end def httpdate utc.httpdate end def rfc2822 to_s(:rfc822) end alias_method :rfc822, :rfc2822 # :db format outputs time in UTC; all others output time in local. # Uses TimeWithZone's +strftime+, so %Z and %z work correctly. def to_s(format = :default) if format == :db utc.to_s(format) elsif formatter = ::Time::DATE_FORMATS[format] formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter) else "#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby 1.9 Time#to_s format end end alias_method :to_formatted_s, :to_s # Replaces %Z and %z directives with +zone+ and +formatted_offset+, respectively, before passing to # Time#strftime, so that zone information is correct def strftime(format) format = format.gsub('%Z', zone). gsub('%z', formatted_offset(false)). gsub('%:z', formatted_offset(true)). gsub('%::z', formatted_offset(true) + ":00") time.strftime(format) end # Use the time in UTC for comparisons. def <=>(other) utc <=> other end def between?(min, max) utc.between?(min, max) end def past? utc.past? end def today? time.today? end def future? utc.future? end def eql?(other) utc.eql?(other) end def hash utc.hash end def +(other) # If we're adding a Duration of variable length (i.e., years, months, days), move forward from #time, # otherwise move forward from #utc, for accuracy when moving across DST boundaries if duration_of_variable_length?(other) method_missing(:+, other) else result = utc.acts_like?(:date) ? utc.since(other) : utc + other rescue utc.since(other) result.in_time_zone(time_zone) end end def -(other) # If we're subtracting a Duration of variable length (i.e., years, months, days), move backwards from #time, # otherwise move backwards #utc, for accuracy when moving across DST boundaries if other.acts_like?(:time) utc.to_f - other.to_f elsif duration_of_variable_length?(other) method_missing(:-, other) else result = utc.acts_like?(:date) ? utc.ago(other) : utc - other rescue utc.ago(other) result.in_time_zone(time_zone) end end def since(other) # If we're adding a Duration of variable length (i.e., years, months, days), move forward from #time, # otherwise move forward from #utc, for accuracy when moving across DST boundaries if duration_of_variable_length?(other) method_missing(:since, other) else utc.since(other).in_time_zone(time_zone) end end def ago(other) since(-other) end def advance(options) # If we're advancing a value of variable length (i.e., years, weeks, months, days), advance from #time, # otherwise advance from #utc, for accuracy when moving across DST boundaries if options.values_at(:years, :weeks, :months, :days).any? method_missing(:advance, options) else utc.advance(options).in_time_zone(time_zone) end end %w(year mon month day mday wday yday hour min sec to_date).each do |method_name| class_eval <<-EOV, __FILE__, __LINE__ + 1 def #{method_name} # def month time.#{method_name} # time.month end # end EOV end def usec time.respond_to?(:usec) ? time.usec : 0 end def to_a [time.sec, time.min, time.hour, time.day, time.mon, time.year, time.wday, time.yday, dst?, zone] end def to_f utc.to_f end def to_i utc.to_i end alias_method :tv_sec, :to_i # A TimeWithZone acts like a Time, so just return +self+. def to_time utc end def to_datetime utc.to_datetime.new_offset(Rational(utc_offset, 86_400)) end # So that +self+ acts_like?(:time). def acts_like_time? true end # Say we're a Time to thwart type checking. def is_a?(klass) klass == ::Time || super end alias_method :kind_of?, :is_a? def freeze period; utc; time # preload instance variables before freezing super end def marshal_dump [utc, time_zone.name, time] end def marshal_load(variables) initialize(variables[0].utc, ::Time.find_zone(variables[1]), variables[2].utc) end # Ensure proxy class responds to all methods that underlying time instance responds to. def respond_to?(sym, include_priv = false) # consistently respond false to acts_like?(:date), regardless of whether #time is a Time or DateTime return false if sym.to_s == 'acts_like_date?' super || time.respond_to?(sym, include_priv) end # Send the missing method to +time+ instance, and wrap result in a new TimeWithZone with the existing +time_zone+. def method_missing(sym, *args, &block) wrap_with_time_zone time.__send__(sym, *args, &block) end private def get_period_and_ensure_valid_local_time # we don't want a Time.local instance enforcing its own DST rules as well, # so transfer time values to a utc constructor if necessary @time = transfer_time_values_to_utc_constructor(@time) unless @time.utc? begin @time_zone.period_for_local(@time) rescue ::TZInfo::PeriodNotFound # time is in the "spring forward" hour gap, so we're moving the time forward one hour and trying again @time += 1.hour retry end end def transfer_time_values_to_utc_constructor(time) usec = time.respond_to?(:nsec) ? Rational(time.nsec, 1000) : (time.respond_to?(:usec) ? time.usec : 0) ::Time.utc_time(time.year, time.month, time.day, time.hour, time.min, time.sec, usec) end def duration_of_variable_length?(obj) ActiveSupport::Duration === obj && obj.parts.any? {|p| p[0].in?([:years, :months, :days]) } end def wrap_with_time_zone(time) if time.acts_like?(:time) self.class.new(nil, time_zone, time) elsif time.is_a?(Range) wrap_with_time_zone(time.begin)..wrap_with_time_zone(time.end) else time end end end end activesupport-3.2.16/lib/active_support/json/0000755000175000017500000000000012247654667020650 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/json/encoding.rb0000644000175000017500000002136112247654667022766 0ustar ondrejondrejrequire 'active_support/core_ext/object/to_json' require 'active_support/core_ext/module/delegation' require 'active_support/json/variable' require 'active_support/ordered_hash' require 'bigdecimal' require 'active_support/core_ext/big_decimal/conversions' # for #to_s require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/hash/except' require 'active_support/core_ext/hash/slice' require 'active_support/core_ext/object/instance_variables' require 'time' require 'active_support/core_ext/time/conversions' require 'active_support/core_ext/date_time/conversions' require 'active_support/core_ext/date/conversions' require 'set' module ActiveSupport class << self delegate :use_standard_json_time_format, :use_standard_json_time_format=, :escape_html_entities_in_json, :escape_html_entities_in_json=, :to => :'ActiveSupport::JSON::Encoding' end module JSON # matches YAML-formatted dates DATE_REGEX = /^(?:\d{4}-\d{2}-\d{2}|\d{4}-\d{1,2}-\d{1,2}[T \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?))$/ # Dumps object in JSON (JavaScript Object Notation). See www.json.org for more info. def self.encode(value, options = nil) Encoding::Encoder.new(options).encode(value) end module Encoding #:nodoc: class CircularReferenceError < StandardError; end class Encoder attr_reader :options def initialize(options = nil) @options = options || {} @seen = Set.new end def encode(value, use_options = true) check_for_circular_references(value) do jsonified = use_options ? value.as_json(options_for(value)) : value.as_json jsonified.encode_json(self) end end # like encode, but only calls as_json, without encoding to string def as_json(value, use_options = true) check_for_circular_references(value) do use_options ? value.as_json(options_for(value)) : value.as_json end end def options_for(value) if value.is_a?(Array) || value.is_a?(Hash) # hashes and arrays need to get encoder in the options, so that they can detect circular references options.merge(:encoder => self) else options.dup end end def escape(string) Encoding.escape(string) end private def check_for_circular_references(value) unless @seen.add?(value.__id__) raise CircularReferenceError, 'object references itself' end yield ensure @seen.delete(value.__id__) end end ESCAPED_CHARS = { "\x00" => '\u0000', "\x01" => '\u0001', "\x02" => '\u0002', "\x03" => '\u0003', "\x04" => '\u0004', "\x05" => '\u0005', "\x06" => '\u0006', "\x07" => '\u0007', "\x0B" => '\u000B', "\x0E" => '\u000E', "\x0F" => '\u000F', "\x10" => '\u0010', "\x11" => '\u0011', "\x12" => '\u0012', "\x13" => '\u0013', "\x14" => '\u0014', "\x15" => '\u0015', "\x16" => '\u0016', "\x17" => '\u0017', "\x18" => '\u0018', "\x19" => '\u0019', "\x1A" => '\u001A', "\x1B" => '\u001B', "\x1C" => '\u001C', "\x1D" => '\u001D', "\x1E" => '\u001E', "\x1F" => '\u001F', "\010" => '\b', "\f" => '\f', "\n" => '\n', "\r" => '\r', "\t" => '\t', '"' => '\"', '\\' => '\\\\', '>' => '\u003E', '<' => '\u003C', '&' => '\u0026' } class << self # If true, use ISO 8601 format for dates and times. Otherwise, fall back to the Active Support legacy format. attr_accessor :use_standard_json_time_format attr_accessor :escape_regex attr_reader :escape_html_entities_in_json def escape_html_entities_in_json=(value) self.escape_regex = \ if @escape_html_entities_in_json = value /[\x00-\x1F"\\><&]/ else /[\x00-\x1F"\\]/ end end def escape(string) if string.respond_to?(:force_encoding) string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY) end json = string. gsub(escape_regex) { |s| ESCAPED_CHARS[s] }. gsub(/([\xC0-\xDF][\x80-\xBF]| [\xE0-\xEF][\x80-\xBF]{2}| [\xF0-\xF7][\x80-\xBF]{3})+/nx) { |s| s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/n, '\\\\u\&') } json = %("#{json}") json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding) json end end self.use_standard_json_time_format = true self.escape_html_entities_in_json = false end end end class Object def as_json(options = nil) #:nodoc: if respond_to?(:to_hash) to_hash else instance_values end end end class Struct #:nodoc: def as_json(options = nil) Hash[members.zip(values)] end end class TrueClass def as_json(options = nil) self end #:nodoc: def encode_json(encoder) to_s end #:nodoc: end class FalseClass def as_json(options = nil) self end #:nodoc: def encode_json(encoder) to_s end #:nodoc: end class NilClass def as_json(options = nil) self end #:nodoc: def encode_json(encoder) 'null' end #:nodoc: end class String def as_json(options = nil) self end #:nodoc: def encode_json(encoder) encoder.escape(self) end #:nodoc: end class Symbol def as_json(options = nil) to_s end #:nodoc: end class Numeric def as_json(options = nil) self end #:nodoc: def encode_json(encoder) to_s end #:nodoc: end class BigDecimal # A BigDecimal would be naturally represented as a JSON number. Most libraries, # however, parse non-integer JSON numbers directly as floats. Clients using # those libraries would get in general a wrong number and no way to recover # other than manually inspecting the string with the JSON code itself. # # That's why a JSON string is returned. The JSON literal is not numeric, but if # the other end knows by contract that the data is supposed to be a BigDecimal, # it still has the chance to post-process the string and get the real value. def as_json(options = nil) to_s end #:nodoc: end class Regexp def as_json(options = nil) to_s end #:nodoc: end module Enumerable def as_json(options = nil) #:nodoc: to_a.as_json(options) end end class Array def as_json(options = nil) #:nodoc: # use encoder as a proxy to call as_json on all elements, to protect from circular references encoder = options && options[:encoder] || ActiveSupport::JSON::Encoding::Encoder.new(options) map { |v| encoder.as_json(v, options) } end def encode_json(encoder) #:nodoc: # we assume here that the encoder has already run as_json on self and the elements, so we run encode_json directly "[#{map { |v| v.encode_json(encoder) } * ','}]" end end class Hash def as_json(options = nil) #:nodoc: # create a subset of the hash by applying :only or :except subset = if options if attrs = options[:only] slice(*Array.wrap(attrs)) elsif attrs = options[:except] except(*Array.wrap(attrs)) else self end else self end # use encoder as a proxy to call as_json on all values in the subset, to protect from circular references encoder = options && options[:encoder] || ActiveSupport::JSON::Encoding::Encoder.new(options) result = self.is_a?(ActiveSupport::OrderedHash) ? ActiveSupport::OrderedHash : Hash result[subset.map { |k, v| [k.to_s, encoder.as_json(v, options)] }] end def encode_json(encoder) # values are encoded with use_options = false, because we don't want hash representations from ActiveModel to be # processed once again with as_json with options, as this could cause unexpected results (i.e. missing fields); # on the other hand, we need to run as_json on the elements, because the model representation may contain fields # like Time/Date in their original (not jsonified) form, etc. "{#{map { |k,v| "#{encoder.encode(k.to_s)}:#{encoder.encode(v, false)}" } * ','}}" end end class Time def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format xmlschema else %(#{strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) end end end class Date def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format strftime("%Y-%m-%d") else strftime("%Y/%m/%d") end end end class DateTime def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format xmlschema else strftime('%Y/%m/%d %H:%M:%S %z') end end end activesupport-3.2.16/lib/active_support/json/variable.rb0000644000175000017500000000036212247654667022763 0ustar ondrejondrejmodule ActiveSupport module JSON # A string that returns itself as its JSON-encoded form. class Variable < String def as_json(options = nil) self end #:nodoc: def encode_json(encoder) self end #:nodoc: end end end activesupport-3.2.16/lib/active_support/json/decoding.rb0000644000175000017500000000345512247654667022760 0ustar ondrejondrejrequire 'active_support/core_ext/module/attribute_accessors' require 'active_support/core_ext/module/delegation' require 'multi_json' module ActiveSupport # Look for and parse json strings that look like ISO 8601 times. mattr_accessor :parse_json_times module JSON class << self def decode(json, options ={}) # Can't reliably detect whether MultiJson responds to load, since it's # a reserved word. Use adapter as a proxy for new features. data = if MultiJson.respond_to?(:adapter) MultiJson.load(json, options) else MultiJson.decode(json, options) end if ActiveSupport.parse_json_times convert_dates_from(data) else data end end def engine if MultiJson.respond_to?(:adapter) MultiJson.adapter else MultiJson.engine end end alias :backend :engine def engine=(name) if MultiJson.respond_to?(:use) MultiJson.use name else MultiJson.engine = name end end alias :backend= :engine= def with_backend(name) old_backend, self.backend = backend, name yield ensure self.backend = old_backend end def parse_error MultiJson::DecodeError end private def convert_dates_from(data) case data when nil nil when DATE_REGEX begin DateTime.parse(data) rescue ArgumentError data end when Array data.map! { |d| convert_dates_from(d) } when Hash data.each do |key, value| data[key] = convert_dates_from(value) end else data end end end end end activesupport-3.2.16/lib/active_support/option_merger.rb0000644000175000017500000000135112247654667023075 0ustar ondrejondrejrequire 'active_support/core_ext/hash/deep_merge' module ActiveSupport class OptionMerger #:nodoc: instance_methods.each do |method| undef_method(method) if method !~ /^(__|instance_eval|class|object_id)/ end def initialize(context, options) @context, @options = context, options end private def method_missing(method, *arguments, &block) if arguments.last.is_a?(Proc) proc = arguments.pop arguments << lambda { |*args| @options.deep_merge(proc.call(*args)) } else arguments << (arguments.last.respond_to?(:to_hash) ? @options.deep_merge(arguments.pop) : @options.dup) end @context.__send__(method, *arguments, &block) end end end activesupport-3.2.16/lib/active_support/callbacks.rb0000644000175000017500000005327512247654667022157 0ustar ondrejondrejrequire 'active_support/concern' require 'active_support/descendants_tracker' require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/class/attribute' require 'active_support/core_ext/kernel/reporting' require 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/object/inclusion' module ActiveSupport # \Callbacks are code hooks that are run at key points in an object's lifecycle. # The typical use case is to have a base class define a set of callbacks relevant # to the other functionality it supplies, so that subclasses can install callbacks # that enhance or modify the base functionality without needing to override # or redefine methods of the base class. # # Mixing in this module allows you to define the events in the object's lifecycle # that will support callbacks (via +ClassMethods.define_callbacks+), set the instance # methods, procs, or callback objects to be called (via +ClassMethods.set_callback+), # and run the installed callbacks at the appropriate times (via +run_callbacks+). # # Three kinds of callbacks are supported: before callbacks, run before a certain event; # after callbacks, run after the event; and around callbacks, blocks that surround the # event, triggering it when they yield. Callback code can be contained in instance # methods, procs or lambdas, or callback objects that respond to certain predetermined # methods. See +ClassMethods.set_callback+ for details. # # ==== Example # # class Record # include ActiveSupport::Callbacks # define_callbacks :save # # def save # run_callbacks :save do # puts "- save" # end # end # end # # class PersonRecord < Record # set_callback :save, :before, :saving_message # def saving_message # puts "saving..." # end # # set_callback :save, :after do |object| # puts "saved" # end # end # # person = PersonRecord.new # person.save # # Output: # saving... # - save # saved # module Callbacks extend Concern included do extend ActiveSupport::DescendantsTracker end # Runs the callbacks for the given event. # # Calls the before and around callbacks in the order they were set, yields # the block (if given one), and then runs the after callbacks in reverse order. # Optionally accepts a key, which will be used to compile an optimized callback # method for each key. See +ClassMethods.define_callbacks+ for more information. # # If the callback chain was halted, returns +false+. Otherwise returns the result # of the block, or +true+ if no block is given. # # run_callbacks :save do # save # end # def run_callbacks(kind, *args, &block) send("_run_#{kind}_callbacks", *args, &block) end private # A hook invoked everytime a before callback is halted. # This can be overriden in AS::Callback implementors in order # to provide better debugging/logging. def halted_callback_hook(filter) end class Callback #:nodoc:# @@_callback_sequence = 0 attr_accessor :chain, :filter, :kind, :options, :per_key, :klass, :raw_filter def initialize(chain, filter, kind, options, klass) @chain, @kind, @klass = chain, kind, klass normalize_options!(options) @per_key = options.delete(:per_key) @raw_filter, @options = filter, options @filter = _compile_filter(filter) @compiled_options = _compile_options(options) @callback_id = next_id _compile_per_key_options end def clone(chain, klass) obj = super() obj.chain = chain obj.klass = klass obj.per_key = @per_key.dup obj.options = @options.dup obj.per_key[:if] = @per_key[:if].dup obj.per_key[:unless] = @per_key[:unless].dup obj.options[:if] = @options[:if].dup obj.options[:unless] = @options[:unless].dup obj end def normalize_options!(options) options[:if] = Array.wrap(options[:if]) options[:unless] = Array.wrap(options[:unless]) options[:per_key] ||= {} options[:per_key][:if] = Array.wrap(options[:per_key][:if]) options[:per_key][:unless] = Array.wrap(options[:per_key][:unless]) end def name chain.name end def next_id @@_callback_sequence += 1 end def matches?(_kind, _filter) @kind == _kind && @filter == _filter end def _update_filter(filter_options, new_options) filter_options[:if].push(new_options[:unless]) if new_options.key?(:unless) filter_options[:unless].push(new_options[:if]) if new_options.key?(:if) end def recompile!(_options, _per_key) _update_filter(self.options, _options) _update_filter(self.per_key, _per_key) @callback_id = next_id @filter = _compile_filter(@raw_filter) @compiled_options = _compile_options(@options) _compile_per_key_options end def _compile_per_key_options key_options = _compile_options(@per_key) @klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def _one_time_conditions_valid_#{@callback_id}? true if #{key_options} end RUBY_EVAL end # This will supply contents for before and around filters, and no # contents for after filters (for the forward pass). def start(key=nil, object=nil) return if key && !object.send("_one_time_conditions_valid_#{@callback_id}?") # options[0] is the compiled form of supplied conditions # options[1] is the "end" for the conditional # case @kind when :before # if condition # before_save :filter_name, :if => :condition # filter_name # end <<-RUBY_EVAL if !halted && #{@compiled_options} # This double assignment is to prevent warnings in 1.9.3 as # the `result` variable is not always used except if the # terminator code refers to it. result = result = #{@filter} halted = (#{chain.config[:terminator]}) if halted halted_callback_hook(#{@raw_filter.inspect.inspect}) end end RUBY_EVAL when :around # Compile around filters with conditions into proxy methods # that contain the conditions. # # For `around_save :filter_name, :if => :condition': # # def _conditional_callback_save_17 # if condition # filter_name do # yield self # end # else # yield self # end # end # name = "_conditional_callback_#{@kind}_#{next_id}" @klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{name}(halted) if #{@compiled_options} && !halted #{@filter} do yield self end else yield self end end RUBY_EVAL "#{name}(halted) do" end end # This will supply contents for around and after filters, but not # before filters (for the backward pass). def end(key=nil, object=nil) return if key && !object.send("_one_time_conditions_valid_#{@callback_id}?") case @kind when :after # after_save :filter_name, :if => :condition <<-RUBY_EVAL if #{@compiled_options} #{@filter} end RUBY_EVAL when :around <<-RUBY_EVAL value end RUBY_EVAL end end private # Options support the same options as filters themselves (and support # symbols, string, procs, and objects), so compile a conditional # expression based on the options def _compile_options(options) conditions = ["true"] unless options[:if].empty? conditions << Array.wrap(_compile_filter(options[:if])) end unless options[:unless].empty? conditions << Array.wrap(_compile_filter(options[:unless])).map {|f| "!#{f}"} end conditions.flatten.join(" && ") end # Filters support: # # Arrays:: Used in conditions. This is used to specify # multiple conditions. Used internally to # merge conditions from skip_* filters # Symbols:: A method to call # Strings:: Some content to evaluate # Procs:: A proc to call with the object # Objects:: An object with a before_foo method on it to call # # All of these objects are compiled into methods and handled # the same after this point: # # Arrays:: Merged together into a single filter # Symbols:: Already methods # Strings:: class_eval'ed into methods # Procs:: define_method'ed into methods # Objects:: # a method is created that calls the before_foo method # on the object. # def _compile_filter(filter) method_name = "_callback_#{@kind}_#{next_id}" case filter when Array filter.map {|f| _compile_filter(f)} when Symbol filter when String "(#{filter})" when Proc @klass.send(:define_method, method_name, &filter) return method_name if filter.arity <= 0 method_name << (filter.arity == 1 ? "(self)" : " self, Proc.new ") else @klass.send(:define_method, "#{method_name}_object") { filter } _normalize_legacy_filter(kind, filter) scopes = Array.wrap(chain.config[:scope]) method_to_call = scopes.map{ |s| s.is_a?(Symbol) ? send(s) : s }.join("_") @klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{method_name}(&blk) #{method_name}_object.send(:#{method_to_call}, self, &blk) end RUBY_EVAL method_name end end def _normalize_legacy_filter(kind, filter) if !filter.respond_to?(kind) && filter.respond_to?(:filter) filter.singleton_class.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{kind}(context, &block) filter(context, &block) end RUBY_EVAL elsif filter.respond_to?(:before) && filter.respond_to?(:after) && kind == :around def filter.around(context) should_continue = before(context) yield if should_continue after(context) end end end end # An Array with a compile method class CallbackChain < Array #:nodoc:# attr_reader :name, :config def initialize(name, config) @name = name @config = { :terminator => "false", :rescuable => false, :scope => [ :kind ] }.merge(config) end def compile(key=nil, object=nil) method = [] method << "value = nil" method << "halted = false" each do |callback| method << callback.start(key, object) end if config[:rescuable] method << "rescued_error = nil" method << "begin" end method << "value = yield if block_given? && !halted" if config[:rescuable] method << "rescue Exception => e" method << "rescued_error = e" method << "end" end reverse_each do |callback| method << callback.end(key, object) end method << "raise rescued_error if rescued_error" if config[:rescuable] method << "halted ? false : (block_given? ? value : true)" method.compact.join("\n") end end module ClassMethods # Generate the internal runner method called by +run_callbacks+. def __define_runner(symbol) #:nodoc: runner_method = "_run_#{symbol}_callbacks" unless private_method_defined?(runner_method) class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{runner_method}(key = nil, &blk) self.class.__run_callback(key, :#{symbol}, self, &blk) end private :#{runner_method} RUBY_EVAL end end # This method calls the callback method for the given key. # If this called first time it creates a new callback method for the key, # calculating which callbacks can be omitted because of per_key conditions. # def __run_callback(key, kind, object, &blk) #:nodoc: name = __callback_runner_name(key, kind) unless object.respond_to?(name, true) str = object.send("_#{kind}_callbacks").compile(key, object) class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{name}() #{str} end protected :#{name} RUBY_EVAL end object.send(name, &blk) end def __reset_runner(symbol) name = __callback_runner_name(nil, symbol) undef_method(name) if method_defined?(name) end def __callback_runner_name(key, kind) "_run__#{self.name.hash.abs}__#{kind}__#{key.hash.abs}__callbacks" end # This is used internally to append, prepend and skip callbacks to the # CallbackChain. # def __update_callbacks(name, filters = [], block = nil) #:nodoc: type = filters.first.in?([:before, :after, :around]) ? filters.shift : :before options = filters.last.is_a?(Hash) ? filters.pop : {} filters.unshift(block) if block ([self] + ActiveSupport::DescendantsTracker.descendants(self)).reverse.each do |target| chain = target.send("_#{name}_callbacks") yield target, chain.dup, type, filters, options target.__reset_runner(name) end end # Install a callback for the given event. # # set_callback :save, :before, :before_meth # set_callback :save, :after, :after_meth, :if => :condition # set_callback :save, :around, lambda { |r| stuff; result = yield; stuff } # # The second arguments indicates whether the callback is to be run +:before+, # +:after+, or +:around+ the event. If omitted, +:before+ is assumed. This # means the first example above can also be written as: # # set_callback :save, :before_meth # # The callback can specified as a symbol naming an instance method; as a proc, # lambda, or block; as a string to be instance evaluated; or as an object that # responds to a certain method determined by the :scope argument to # +define_callback+. # # If a proc, lambda, or block is given, its body is evaluated in the context # of the current object. It can also optionally accept the current object as # an argument. # # Before and around callbacks are called in the order that they are set; after # callbacks are called in the reverse order. # # Around callbacks can access the return value from the event, if it # wasn't halted, from the +yield+ call. # # ===== Options # # * :if - A symbol naming an instance method or a proc; the callback # will be called only when it returns a true value. # * :unless - A symbol naming an instance method or a proc; the callback # will be called only when it returns a false value. # * :prepend - If true, the callback will be prepended to the existing # chain rather than appended. # * :per_key - A hash with :if and :unless options; # see "Per-key conditions" below. # # ===== Per-key conditions # # When creating or skipping callbacks, you can specify conditions that # are always the same for a given key. For instance, in Action Pack, # we convert :only and :except conditions into per-key conditions. # # before_filter :authenticate, :except => "index" # # becomes # # set_callback :process_action, :before, :authenticate, :per_key => {:unless => proc {|c| c.action_name == "index"}} # # Per-key conditions are evaluated only once per use of a given key. # In the case of the above example, you would do: # # run_callbacks(:process_action, action_name) { ... dispatch stuff ... } # # In that case, each action_name would get its own compiled callback # method that took into consideration the per_key conditions. This # is a speed improvement for ActionPack. # def set_callback(name, *filter_list, &block) mapped = nil __update_callbacks(name, filter_list, block) do |target, chain, type, filters, options| mapped ||= filters.map do |filter| Callback.new(chain, filter, type, options.dup, self) end filters.each do |filter| chain.delete_if {|c| c.matches?(type, filter) } end options[:prepend] ? chain.unshift(*(mapped.reverse)) : chain.push(*mapped) target.send("_#{name}_callbacks=", chain) end end # Skip a previously set callback. Like +set_callback+, :if or :unless # options may be passed in order to control when the callback is skipped. # # class Writer < Person # skip_callback :validate, :before, :check_membership, :if => lambda { self.age > 18 } # end # def skip_callback(name, *filter_list, &block) __update_callbacks(name, filter_list, block) do |target, chain, type, filters, options| filters.each do |filter| filter = chain.find {|c| c.matches?(type, filter) } if filter && options.any? new_filter = filter.clone(chain, self) chain.insert(chain.index(filter), new_filter) new_filter.recompile!(options, options[:per_key] || {}) end chain.delete(filter) end target.send("_#{name}_callbacks=", chain) end end # Remove all set callbacks for the given event. # def reset_callbacks(symbol) callbacks = send("_#{symbol}_callbacks") ActiveSupport::DescendantsTracker.descendants(self).each do |target| chain = target.send("_#{symbol}_callbacks").dup callbacks.each { |c| chain.delete(c) } target.send("_#{symbol}_callbacks=", chain) target.__reset_runner(symbol) end self.send("_#{symbol}_callbacks=", callbacks.dup.clear) __reset_runner(symbol) end # Define sets of events in the object lifecycle that support callbacks. # # define_callbacks :validate # define_callbacks :initialize, :save, :destroy # # ===== Options # # * :terminator - Determines when a before filter will halt the callback # chain, preventing following callbacks from being called and the event from being # triggered. This is a string to be eval'ed. The result of the callback is available # in the result variable. # # define_callbacks :validate, :terminator => "result == false" # # In this example, if any before validate callbacks returns +false+, # other callbacks are not executed. Defaults to "false", meaning no value # halts the chain. # # * :rescuable - By default, after filters are not executed if # the given block or a before filter raises an error. By setting this option # to true exception raised by given block is stored and after # executing all the after callbacks the stored exception is raised. # # * :scope - Indicates which methods should be executed when an object # is used as a callback. # # class Audit # def before(caller) # puts 'Audit: before is called' # end # # def before_save(caller) # puts 'Audit: before_save is called' # end # end # # class Account # include ActiveSupport::Callbacks # # define_callbacks :save # set_callback :save, :before, Audit.new # # def save # run_callbacks :save do # puts 'save in main' # end # end # end # # In the above case whenever you save an account the method Audit#before will # be called. On the other hand # # define_callbacks :save, :scope => [:kind, :name] # # would trigger Audit#before_save instead. That's constructed by calling # #{kind}_#{name} on the given instance. In this case "kind" is "before" and # "name" is "save". In this context +:kind+ and +:name+ have special meanings: +:kind+ # refers to the kind of callback (before/after/around) and +:name+ refers to the # method on which callbacks are being defined. # # A declaration like # # define_callbacks :save, :scope => [:name] # # would call Audit#save. # def define_callbacks(*callbacks) config = callbacks.last.is_a?(Hash) ? callbacks.pop : {} callbacks.each do |callback| class_attribute "_#{callback}_callbacks" send("_#{callback}_callbacks=", CallbackChain.new(callback, config)) __define_runner(callback) end end end end end activesupport-3.2.16/lib/active_support/file_update_checker.rb0000644000175000017500000000727612247654667024205 0ustar ondrejondrejrequire "active_support/core_ext/array/wrap" require "active_support/core_ext/array/extract_options" module ActiveSupport # \FileUpdateChecker specifies the API used by Rails to watch files # and control reloading. The API depends on four methods: # # * +initialize+ which expects two parameters and one block as # described below; # # * +updated?+ which returns a boolean if there were updates in # the filesystem or not; # # * +execute+ which executes the given block on initialization # and updates the counter to the latest timestamp; # # * +execute_if_updated+ which just executes the block if it was updated; # # After initialization, a call to +execute_if_updated+ must execute # the block only if there was really a change in the filesystem. # # == Examples # # This class is used by Rails to reload the I18n framework whenever # they are changed upon a new request. # # i18n_reloader = ActiveSupport::FileUpdateChecker.new(paths) do # I18n.reload! # end # # ActionDispatch::Reloader.to_prepare do # i18n_reloader.execute_if_updated # end # class FileUpdateChecker # It accepts two parameters on initialization. The first is an array # of files and the second is an optional hash of directories. The hash must # have directories as keys and the value is an array of extensions to be # watched under that directory. # # This method must also receive a block that will be called once a path changes. # # == Implementation details # # This particular implementation checks for added and updated files, # but not removed files. Directories lookup are compiled to a glob for # performance. Therefore, while someone can add new files to the +files+ # array after initialization (and parts of Rails do depend on this feature), # adding new directories after initialization is not allowed. # # Notice that other objects that implements FileUpdateChecker API may # not even allow new files to be added after initialization. If this # is the case, we recommend freezing the +files+ after initialization to # avoid changes that won't make effect. def initialize(files, dirs={}, &block) @files = files @glob = compile_glob(dirs) @block = block @updated_at = nil @last_update_at = updated_at end # Check if any of the entries were updated. If so, the updated_at # value is cached until the block is executed via +execute+ or +execute_if_updated+ def updated? current_updated_at = updated_at if @last_update_at < current_updated_at @updated_at = updated_at true else false end end # Executes the given block and updates the counter to latest timestamp. def execute @last_update_at = updated_at @block.call ensure @updated_at = nil end # Execute the block given if updated. def execute_if_updated if updated? execute true else false end end private def updated_at #:nodoc: @updated_at || begin all = [] all.concat @files.select { |f| File.exists?(f) } all.concat Dir[@glob] if @glob all.map { |path| File.mtime(path) }.max || Time.at(0) end end def compile_glob(hash) #:nodoc: hash.freeze # Freeze so changes aren't accidently pushed return if hash.empty? globs = [] hash.each do |key, value| globs << "#{key}/**/*#{compile_ext(value)}" end "{#{globs.join(",")}}" end def compile_ext(array) #:nodoc: array = Array.wrap(array) return if array.empty? ".{#{array.join(",")}}" end end end activesupport-3.2.16/lib/active_support/dependencies/0000755000175000017500000000000012247654667022325 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/dependencies/autoload.rb0000644000175000017500000000207512247654667024466 0ustar ondrejondrejrequire "active_support/inflector/methods" require "active_support/lazy_load_hooks" module ActiveSupport module Autoload @@autoloads = {} @@under_path = nil @@at_path = nil @@eager_autoload = false def autoload(const_name, path = @@at_path) full = [self.name, @@under_path, const_name.to_s, path].compact.join("::") location = path || Inflector.underscore(full) if @@eager_autoload @@autoloads[const_name] = location end super const_name, location end def autoload_under(path) @@under_path, old_path = path, @@under_path yield ensure @@under_path = old_path end def autoload_at(path) @@at_path, old_path = path, @@at_path yield ensure @@at_path = old_path end def eager_autoload old_eager, @@eager_autoload = @@eager_autoload, true yield ensure @@eager_autoload = old_eager end def self.eager_autoload! @@autoloads.values.each { |file| require file } end def autoloads @@autoloads end end end activesupport-3.2.16/lib/active_support/ordered_options.rb0000644000175000017500000000240112247654667023420 0ustar ondrejondrejrequire 'active_support/ordered_hash' # Usually key value pairs are handled something like this: # # h = {} # h[:boy] = 'John' # h[:girl] = 'Mary' # h[:boy] # => 'John' # h[:girl] # => 'Mary' # # Using OrderedOptions, the above code could be reduced to: # # h = ActiveSupport::OrderedOptions.new # h.boy = 'John' # h.girl = 'Mary' # h.boy # => 'John' # h.girl # => 'Mary' # module ActiveSupport #:nodoc: class OrderedOptions < OrderedHash alias_method :_get, :[] # preserve the original #[] method protected :_get # make it protected def []=(key, value) super(key.to_sym, value) end def [](key) super(key.to_sym) end def method_missing(name, *args) if name.to_s =~ /(.*)=$/ self[$1] = args.first else self[name] end end def respond_to?(name) true end end class InheritableOptions < OrderedOptions def initialize(parent = nil) if parent.kind_of?(OrderedOptions) # use the faster _get when dealing with OrderedOptions super() { |h,k| parent._get(k) } elsif parent super() { |h,k| parent[k] } else super() end end def inheritable_copy self.class.new(self) end end end activesupport-3.2.16/lib/active_support/backtrace_cleaner.rb0000644000175000017500000000707112247654667023641 0ustar ondrejondrejmodule ActiveSupport # Backtraces often include many lines that are not relevant for the context under review. This makes it hard to find the # signal amongst the backtrace noise, and adds debugging time. With a BacktraceCleaner, filters and silencers are used to # remove the noisy lines, so that only the most relevant lines remain. # # Filters are used to modify lines of data, while silencers are used to remove lines entirely. The typical filter use case # is to remove lengthy path information from the start of each line, and view file paths relevant to the app directory # instead of the file system root. The typical silencer use case is to exclude the output of a noisy library from the # backtrace, so that you can focus on the rest. # # ==== Example: # # bc = BacktraceCleaner.new # bc.add_filter { |line| line.gsub(Rails.root, '') } # bc.add_silencer { |line| line =~ /mongrel|rubygems/ } # bc.clean(exception.backtrace) # will strip the Rails.root prefix and skip any lines from mongrel or rubygems # # To reconfigure an existing BacktraceCleaner (like the default one in Rails) and show as much data as possible, you can # always call BacktraceCleaner#remove_silencers!, which will restore the backtrace to a pristine state. If you # need to reconfigure an existing BacktraceCleaner so that it does not filter or modify the paths of any lines of the # backtrace, you can call BacktraceCleaner#remove_filters! These two methods will give you a completely untouched backtrace. # # Inspired by the Quiet Backtrace gem by Thoughtbot. class BacktraceCleaner def initialize @filters, @silencers = [], [] end # Returns the backtrace after all filters and silencers have been run against it. Filters run first, then silencers. def clean(backtrace, kind = :silent) filtered = filter(backtrace) case kind when :silent silence(filtered) when :noise noise(filtered) else filtered end end # Adds a filter from the block provided. Each line in the backtrace will be mapped against this filter. # # Example: # # # Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb" # backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') } def add_filter(&block) @filters << block end # Adds a silencer from the block provided. If the silencer returns true for a given line, it will be excluded from # the clean backtrace. # # Example: # # # Will reject all lines that include the word "mongrel", like "/gems/mongrel/server.rb" or "/app/my_mongrel_server/rb" # backtrace_cleaner.add_silencer { |line| line =~ /mongrel/ } def add_silencer(&block) @silencers << block end # Will remove all silencers, but leave in the filters. This is useful if your context of debugging suddenly expands as # you suspect a bug in one of the libraries you use. def remove_silencers! @silencers = [] end def remove_filters! @filters = [] end private def filter(backtrace) @filters.each do |f| backtrace = backtrace.map { |line| f.call(line) } end backtrace end def silence(backtrace) @silencers.each do |s| backtrace = backtrace.reject { |line| s.call(line) } end backtrace end def noise(backtrace) @silencers.each do |s| backtrace = backtrace.select { |line| s.call(line) } end backtrace end end end activesupport-3.2.16/lib/active_support/deprecation.rb0000644000175000017500000000104012247654667022514 0ustar ondrejondrejrequire 'active_support/deprecation/behaviors' require 'active_support/deprecation/reporting' require 'active_support/deprecation/method_wrappers' require 'active_support/deprecation/proxy_wrappers' module ActiveSupport module Deprecation class << self # The version the deprecated behavior will be removed, by default. attr_accessor :deprecation_horizon end self.deprecation_horizon = '4.0' # By default, warnings are not silenced and debugging is off. self.silenced = false self.debug = false end endactivesupport-3.2.16/lib/active_support/file_watcher.rb0000644000175000017500000000135012247654667022657 0ustar ondrejondrejmodule ActiveSupport class FileWatcher class Backend def initialize(path, watcher) @watcher = watcher @path = path end def trigger(files) @watcher.trigger(files) end end def initialize @regex_matchers = {} end def watch(pattern, &block) @regex_matchers[pattern] = block end def trigger(files) trigger_files = Hash.new { |h,k| h[k] = Hash.new { |h2,k2| h2[k2] = [] } } files.each do |file, state| @regex_matchers.each do |pattern, block| trigger_files[block][state] << file if pattern === file end end trigger_files.each do |block, payload| block.call payload end end end end activesupport-3.2.16/lib/active_support/i18n_railtie.rb0000644000175000017500000000546612247654667022527 0ustar ondrejondrejrequire "active_support" require "active_support/file_update_checker" require "active_support/core_ext/array/wrap" module I18n class Railtie < Rails::Railtie config.i18n = ActiveSupport::OrderedOptions.new config.i18n.railties_load_path = [] config.i18n.load_path = [] config.i18n.fallbacks = ActiveSupport::OrderedOptions.new def self.reloader @reloader ||= ActiveSupport::FileUpdateChecker.new(reloader_paths){ I18n.reload! } end def self.reloader_paths @reloader_paths ||= [] end # Add I18n::Railtie.reloader to ActionDispatch callbacks. Since, at this # point, no path was added to the reloader, I18n.reload! is not triggered # on to_prepare callbacks. This will only happen on the config.after_initialize # callback below. initializer "i18n.callbacks" do |app| app.reloaders << I18n::Railtie.reloader ActionDispatch::Reloader.to_prepare do I18n::Railtie.reloader.execute_if_updated end end # Set the i18n configuration after initialization since a lot of # configuration is still usually done in application initializers. config.after_initialize do |app| I18n::Railtie.initialize_i18n(app) end # Trigger i18n config before any eager loading has happened # so it's ready if any classes require it when eager loaded config.before_eager_load do |app| I18n::Railtie.initialize_i18n(app) end protected @i18n_inited = false # Setup i18n configuration def self.initialize_i18n(app) return if @i18n_inited fallbacks = app.config.i18n.delete(:fallbacks) app.config.i18n.each do |setting, value| case setting when :railties_load_path app.config.i18n.load_path.unshift(*value) when :load_path I18n.load_path += value else I18n.send("#{setting}=", value) end end init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks) reloader_paths.concat I18n.load_path reloader.execute @i18n_inited = true end def self.include_fallbacks_module I18n.backend.class.send(:include, I18n::Backend::Fallbacks) end def self.init_fallbacks(fallbacks) include_fallbacks_module args = case fallbacks when ActiveSupport::OrderedOptions [*(fallbacks[:defaults] || []) << fallbacks[:map]].compact when Hash, Array Array.wrap(fallbacks) else # TrueClass [] end I18n.fallbacks = I18n::Locale::Fallbacks.new(*args) end def self.validate_fallbacks(fallbacks) case fallbacks when ActiveSupport::OrderedOptions !fallbacks.empty? when TrueClass, Array, Hash true else raise "Unexpected fallback type #{fallbacks.inspect}" end end end end activesupport-3.2.16/lib/active_support/inflections.rb0000644000175000017500000000473712247654667022554 0ustar ondrejondrejrequire 'active_support/inflector/inflections' module ActiveSupport Inflector.inflections do |inflect| inflect.plural(/$/, 's') inflect.plural(/s$/i, 's') inflect.plural(/(ax|test)is$/i, '\1es') inflect.plural(/(octop|vir)us$/i, '\1i') inflect.plural(/(octop|vir)i$/i, '\1i') inflect.plural(/(alias|status)$/i, '\1es') inflect.plural(/(bu)s$/i, '\1ses') inflect.plural(/(buffal|tomat)o$/i, '\1oes') inflect.plural(/([ti])um$/i, '\1a') inflect.plural(/([ti])a$/i, '\1a') inflect.plural(/sis$/i, 'ses') inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves') inflect.plural(/(hive)$/i, '\1s') inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies') inflect.plural(/(x|ch|ss|sh)$/i, '\1es') inflect.plural(/(matr|vert|ind)(?:ix|ex)$/i, '\1ices') inflect.plural(/(m|l)ouse$/i, '\1ice') inflect.plural(/(m|l)ice$/i, '\1ice') inflect.plural(/^(ox)$/i, '\1en') inflect.plural(/^(oxen)$/i, '\1') inflect.plural(/(quiz)$/i, '\1zes') inflect.singular(/s$/i, '') inflect.singular(/(n)ews$/i, '\1ews') inflect.singular(/([ti])a$/i, '\1um') inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis') inflect.singular(/(^analy)ses$/i, '\1sis') inflect.singular(/([^f])ves$/i, '\1fe') inflect.singular(/(hive)s$/i, '\1') inflect.singular(/(tive)s$/i, '\1') inflect.singular(/([lr])ves$/i, '\1f') inflect.singular(/([^aeiouy]|qu)ies$/i, '\1y') inflect.singular(/(s)eries$/i, '\1eries') inflect.singular(/(m)ovies$/i, '\1ovie') inflect.singular(/(x|ch|ss|sh)es$/i, '\1') inflect.singular(/(m|l)ice$/i, '\1ouse') inflect.singular(/(bus)es$/i, '\1') inflect.singular(/(o)es$/i, '\1') inflect.singular(/(shoe)s$/i, '\1') inflect.singular(/(cris|ax|test)es$/i, '\1is') inflect.singular(/(octop|vir)i$/i, '\1us') inflect.singular(/(alias|status)es$/i, '\1') inflect.singular(/^(ox)en/i, '\1') inflect.singular(/(vert|ind)ices$/i, '\1ex') inflect.singular(/(matr)ices$/i, '\1ix') inflect.singular(/(quiz)zes$/i, '\1') inflect.singular(/(database)s$/i, '\1') inflect.irregular('person', 'people') inflect.irregular('man', 'men') inflect.irregular('child', 'children') inflect.irregular('sex', 'sexes') inflect.irregular('move', 'moves') inflect.irregular('cow', 'kine') inflect.irregular('zombie', 'zombies') inflect.uncountable(%w(equipment information rice money species series fish sheep jeans)) end end activesupport-3.2.16/lib/active_support/time.rb0000644000175000017500000000223112247654667021160 0ustar ondrejondrejrequire 'active_support' module ActiveSupport autoload :Duration, 'active_support/duration' autoload :TimeWithZone, 'active_support/time_with_zone' autoload :TimeZone, 'active_support/values/time_zone' on_load_all do [Duration, TimeWithZone, TimeZone] end end require 'date' require 'time' require 'active_support/core_ext/time/publicize_conversion_methods' require 'active_support/core_ext/time/marshal' require 'active_support/core_ext/time/acts_like' require 'active_support/core_ext/time/calculations' require 'active_support/core_ext/time/conversions' require 'active_support/core_ext/time/zones' require 'active_support/core_ext/date/acts_like' require 'active_support/core_ext/date/freeze' require 'active_support/core_ext/date/calculations' require 'active_support/core_ext/date/conversions' require 'active_support/core_ext/date/zones' require 'active_support/core_ext/date_time/acts_like' require 'active_support/core_ext/date_time/calculations' require 'active_support/core_ext/date_time/conversions' require 'active_support/core_ext/date_time/zones' require 'active_support/core_ext/integer/time' require 'active_support/core_ext/numeric/time' activesupport-3.2.16/lib/active_support/cache/0000755000175000017500000000000012247654667020742 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/cache/mem_cache_store.rb0000644000175000017500000001716212247654667024413 0ustar ondrejondrejbegin require 'memcache' rescue LoadError => e $stderr.puts "You don't have memcache-client installed in your application. Please add it to your Gemfile and run bundle install" raise e end require 'digest/md5' require 'active_support/core_ext/string/encoding' module ActiveSupport module Cache # A cache store implementation which stores data in Memcached: # http://memcached.org/ # # This is currently the most popular cache store for production websites. # # Special features: # - Clustering and load balancing. One can specify multiple memcached servers, # and MemCacheStore will load balance between all available servers. If a # server goes down, then MemCacheStore will ignore it until it comes back up. # # MemCacheStore implements the Strategy::LocalCache strategy which implements # an in-memory cache inside of a block. class MemCacheStore < Store module Response # :nodoc: STORED = "STORED\r\n" NOT_STORED = "NOT_STORED\r\n" EXISTS = "EXISTS\r\n" NOT_FOUND = "NOT_FOUND\r\n" DELETED = "DELETED\r\n" end ESCAPE_KEY_CHARS = /[\x00-\x20%\x7F-\xFF]/n def self.build_mem_cache(*addresses) addresses = addresses.flatten options = addresses.extract_options! addresses = ["localhost:11211"] if addresses.empty? MemCache.new(addresses, options) end # Creates a new MemCacheStore object, with the given memcached server # addresses. Each address is either a host name, or a host-with-port string # in the form of "host_name:port". For example: # # ActiveSupport::Cache::MemCacheStore.new("localhost", "server-downstairs.localnetwork:8229") # # If no addresses are specified, then MemCacheStore will connect to # localhost port 11211 (the default memcached port). # # Instead of addresses one can pass in a MemCache-like object. For example: # # require 'memcached' # gem install memcached; uses C bindings to libmemcached # ActiveSupport::Cache::MemCacheStore.new(Memcached::Rails.new("localhost:11211")) def initialize(*addresses) addresses = addresses.flatten options = addresses.extract_options! super(options) if addresses.first.respond_to?(:get) @data = addresses.first else mem_cache_options = options.dup UNIVERSAL_OPTIONS.each{|name| mem_cache_options.delete(name)} @data = self.class.build_mem_cache(*(addresses + [mem_cache_options])) end extend Strategy::LocalCache extend LocalCacheWithRaw end # Reads multiple values from the cache using a single call to the # servers for all keys. Options can be passed in the last argument. def read_multi(*names) options = names.extract_options! options = merged_options(options) keys_to_names = Hash[names.map{|name| [escape_key(namespaced_key(name, options)), name]}] raw_values = @data.get_multi(keys_to_names.keys, :raw => true) values = {} raw_values.each do |key, value| entry = deserialize_entry(value) values[keys_to_names[key]] = entry.value unless entry.expired? end values end # Increment a cached value. This method uses the memcached incr atomic # operator and can only be used on values written with the :raw option. # Calling it on a value not stored with :raw will initialize that value # to zero. def increment(name, amount = 1, options = nil) # :nodoc: options = merged_options(options) response = instrument(:increment, name, :amount => amount) do @data.incr(escape_key(namespaced_key(name, options)), amount) end response == Response::NOT_FOUND ? nil : response.to_i rescue MemCache::MemCacheError nil end # Decrement a cached value. This method uses the memcached decr atomic # operator and can only be used on values written with the :raw option. # Calling it on a value not stored with :raw will initialize that value # to zero. def decrement(name, amount = 1, options = nil) # :nodoc: options = merged_options(options) response = instrument(:decrement, name, :amount => amount) do @data.decr(escape_key(namespaced_key(name, options)), amount) end response == Response::NOT_FOUND ? nil : response.to_i rescue MemCache::MemCacheError nil end # Clear the entire cache on all memcached servers. This method should # be used with care when shared cache is being used. def clear(options = nil) @data.flush_all end # Get the statistics from the memcached servers. def stats @data.stats end protected # Read an entry from the cache. def read_entry(key, options) # :nodoc: deserialize_entry(@data.get(escape_key(key), true)) rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.message}") if logger nil end # Write an entry to the cache. def write_entry(key, entry, options) # :nodoc: method = options && options[:unless_exist] ? :add : :set value = options[:raw] ? entry.value.to_s : entry expires_in = options[:expires_in].to_i if expires_in > 0 && !options[:raw] # Set the memcache expire a few minutes in the future to support race condition ttls on read expires_in += 5.minutes end response = @data.send(method, escape_key(key), value, expires_in, options[:raw]) response == Response::STORED rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.message}") if logger false end # Delete an entry from the cache. def delete_entry(key, options) # :nodoc: response = @data.delete(escape_key(key)) response == Response::DELETED rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.message}") if logger false end private # Memcache keys are binaries. So we need to force their encoding to binary # before applying the regular expression to ensure we are escaping all # characters properly. def escape_key(key) key = key.to_s.dup key = key.force_encoding("BINARY") if key.encoding_aware? key = key.gsub(ESCAPE_KEY_CHARS){ |match| "%#{match.getbyte(0).to_s(16).upcase}" } key = "#{key[0, 213]}:md5:#{Digest::MD5.hexdigest(key)}" if key.size > 250 key end def deserialize_entry(raw_value) if raw_value entry = Marshal.load(raw_value) rescue raw_value entry.is_a?(Entry) ? entry : Entry.new(entry) else nil end end # Provide support for raw values in the local cache strategy. module LocalCacheWithRaw # :nodoc: protected def read_entry(key, options) entry = super if options[:raw] && local_cache && entry entry = deserialize_entry(entry.value) end entry end def write_entry(key, entry, options) # :nodoc: retval = super if options[:raw] && local_cache && retval raw_entry = Entry.new(entry.value.to_s) raw_entry.expires_at = entry.expires_at local_cache.write_entry(key, raw_entry, options) end retval end end end end end activesupport-3.2.16/lib/active_support/cache/file_store.rb0000644000175000017500000001272712247654667023433 0ustar ondrejondrejrequire 'active_support/core_ext/file/atomic' require 'active_support/core_ext/string/conversions' require 'active_support/core_ext/object/inclusion' require 'rack/utils' module ActiveSupport module Cache # A cache store implementation which stores everything on the filesystem. # # FileStore implements the Strategy::LocalCache strategy which implements # an in-memory cache inside of a block. class FileStore < Store attr_reader :cache_path DIR_FORMATTER = "%03X" FILENAME_MAX_SIZE = 230 # max filename size on file system is 255, minus room for timestamp and random characters appended by Tempfile (used by atomic write) EXCLUDED_DIRS = ['.', '..'].freeze def initialize(cache_path, options = nil) super(options) @cache_path = cache_path.to_s extend Strategy::LocalCache end def clear(options = nil) root_dirs = Dir.entries(cache_path).reject{|f| f.in?(EXCLUDED_DIRS)} FileUtils.rm_r(root_dirs.collect{|f| File.join(cache_path, f)}) end def cleanup(options = nil) options = merged_options(options) search_dir(cache_path) do |fname| key = file_path_key(fname) entry = read_entry(key, options) delete_entry(key, options) if entry && entry.expired? end end def increment(name, amount = 1, options = nil) file_name = key_file_path(namespaced_key(name, options)) lock_file(file_name) do options = merged_options(options) if num = read(name, options) num = num.to_i + amount write(name, num, options) num else nil end end end def decrement(name, amount = 1, options = nil) file_name = key_file_path(namespaced_key(name, options)) lock_file(file_name) do options = merged_options(options) if num = read(name, options) num = num.to_i - amount write(name, num, options) num else nil end end end def delete_matched(matcher, options = nil) options = merged_options(options) instrument(:delete_matched, matcher.inspect) do matcher = key_matcher(matcher, options) search_dir(cache_path) do |path| key = file_path_key(path) delete_entry(key, options) if key.match(matcher) end end end protected def read_entry(key, options) file_name = key_file_path(key) if File.exist?(file_name) File.open(file_name) { |f| Marshal.load(f) } end rescue nil end def write_entry(key, entry, options) file_name = key_file_path(key) ensure_cache_path(File.dirname(file_name)) File.atomic_write(file_name, cache_path) {|f| Marshal.dump(entry, f)} true end def delete_entry(key, options) file_name = key_file_path(key) if File.exist?(file_name) begin File.delete(file_name) delete_empty_directories(File.dirname(file_name)) true rescue => e # Just in case the error was caused by another process deleting the file first. raise e if File.exist?(file_name) false end end end private # Lock a file for a block so only one process can modify it at a time. def lock_file(file_name, &block) # :nodoc: if File.exist?(file_name) File.open(file_name, 'r+') do |f| begin f.flock File::LOCK_EX yield ensure f.flock File::LOCK_UN end end else yield end end # Translate a key into a file path. def key_file_path(key) fname = Rack::Utils.escape(key) hash = Zlib.adler32(fname) hash, dir_1 = hash.divmod(0x1000) dir_2 = hash.modulo(0x1000) fname_paths = [] # Make sure file name doesn't exceed file system limits. begin fname_paths << fname[0, FILENAME_MAX_SIZE] fname = fname[FILENAME_MAX_SIZE..-1] end until fname.blank? File.join(cache_path, DIR_FORMATTER % dir_1, DIR_FORMATTER % dir_2, *fname_paths) end # Translate a file path into a key. def file_path_key(path) fname = path[cache_path.size, path.size].split(File::SEPARATOR, 4).last Rack::Utils.unescape(fname) end # Delete empty directories in the cache. def delete_empty_directories(dir) return if dir == cache_path if Dir.entries(dir).reject{|f| f.in?(EXCLUDED_DIRS)}.empty? File.delete(dir) rescue nil delete_empty_directories(File.dirname(dir)) end end # Make sure a file path's directories exist. def ensure_cache_path(path) FileUtils.makedirs(path) unless File.exist?(path) end def search_dir(dir, &callback) return if !File.exist?(dir) Dir.foreach(dir) do |d| next if d.in?(EXCLUDED_DIRS) name = File.join(dir, d) if File.directory?(name) search_dir(name, &callback) else callback.call name end end end end end end activesupport-3.2.16/lib/active_support/cache/null_store.rb0000644000175000017500000000215212247654667023455 0ustar ondrejondrejmodule ActiveSupport module Cache # A cache store implementation which doesn't actually store anything. Useful in # development and test environments where you don't want caching turned on but # need to go through the caching interface. # # This cache does implement the local cache strategy, so values will actually # be cached inside blocks that utilize this strategy. See # ActiveSupport::Cache::Strategy::LocalCache for more details. class NullStore < Store def initialize(options = nil) super(options) extend Strategy::LocalCache end def clear(options = nil) end def cleanup(options = nil) end def increment(name, amount = 1, options = nil) end def decrement(name, amount = 1, options = nil) end def delete_matched(matcher, options = nil) end protected def read_entry(key, options) # :nodoc: end def write_entry(key, entry, options) # :nodoc: true end def delete_entry(key, options) # :nodoc: false end end end end activesupport-3.2.16/lib/active_support/cache/memory_store.rb0000644000175000017500000001151512247654667024016 0ustar ondrejondrejrequire 'monitor' module ActiveSupport module Cache # A cache store implementation which stores everything into memory in the # same process. If you're running multiple Ruby on Rails server processes # (which is the case if you're using mongrel_cluster or Phusion Passenger), # then this means that Rails server process instances won't be able # to share cache data with each other and this may not be the most # appropriate cache in that scenario. # # This cache has a bounded size specified by the :size options to the # initializer (default is 32Mb). When the cache exceeds the allotted size, # a cleanup will occur which tries to prune the cache down to three quarters # of the maximum size by removing the least recently used entries. # # MemoryStore is thread-safe. class MemoryStore < Store def initialize(options = nil) options ||= {} super(options) @data = {} @key_access = {} @max_size = options[:size] || 32.megabytes @max_prune_time = options[:max_prune_time] || 2 @cache_size = 0 @monitor = Monitor.new @pruning = false end def clear(options = nil) synchronize do @data.clear @key_access.clear @cache_size = 0 end end def cleanup(options = nil) options = merged_options(options) instrument(:cleanup, :size => @data.size) do keys = synchronize{ @data.keys } keys.each do |key| entry = @data[key] delete_entry(key, options) if entry && entry.expired? end end end # To ensure entries fit within the specified memory prune the cache by removing the least # recently accessed entries. def prune(target_size, max_time = nil) return if pruning? @pruning = true begin start_time = Time.now cleanup instrument(:prune, target_size, :from => @cache_size) do keys = synchronize{ @key_access.keys.sort{|a,b| @key_access[a].to_f <=> @key_access[b].to_f} } keys.each do |key| delete_entry(key, options) return if @cache_size <= target_size || (max_time && Time.now - start_time > max_time) end end ensure @pruning = false end end # Returns true if the cache is currently being pruned. def pruning? @pruning end # Increment an integer value in the cache. def increment(name, amount = 1, options = nil) synchronize do options = merged_options(options) if num = read(name, options) num = num.to_i + amount write(name, num, options) num else nil end end end # Decrement an integer value in the cache. def decrement(name, amount = 1, options = nil) synchronize do options = merged_options(options) if num = read(name, options) num = num.to_i - amount write(name, num, options) num else nil end end end def delete_matched(matcher, options = nil) options = merged_options(options) instrument(:delete_matched, matcher.inspect) do matcher = key_matcher(matcher, options) keys = synchronize { @data.keys } keys.each do |key| delete_entry(key, options) if key.match(matcher) end end end def inspect # :nodoc: "<##{self.class.name} entries=#{@data.size}, size=#{@cache_size}, options=#{@options.inspect}>" end # Synchronize calls to the cache. This should be called wherever the underlying cache implementation # is not thread safe. def synchronize(&block) # :nodoc: @monitor.synchronize(&block) end protected def read_entry(key, options) # :nodoc: entry = @data[key] synchronize do if entry @key_access[key] = Time.now.to_f else @key_access.delete(key) end end entry end def write_entry(key, entry, options) # :nodoc: synchronize do old_entry = @data[key] @cache_size -= old_entry.size if old_entry @cache_size += entry.size @key_access[key] = Time.now.to_f @data[key] = entry prune(@max_size * 0.75, @max_prune_time) if @cache_size > @max_size true end end def delete_entry(key, options) # :nodoc: synchronize do @key_access.delete(key) entry = @data.delete(key) @cache_size -= entry.size if entry !!entry end end end end end activesupport-3.2.16/lib/active_support/cache/strategy/0000755000175000017500000000000012247654667022604 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/cache/strategy/local_cache.rb0000644000175000017500000001125712247654667025354 0ustar ondrejondrejrequire 'active_support/core_ext/object/duplicable' require 'active_support/core_ext/string/inflections' module ActiveSupport module Cache module Strategy # Caches that implement LocalCache will be backed by an in-memory cache for the # duration of a block. Repeated calls to the cache for the same key will hit the # in-memory cache for faster access. module LocalCache # Simple memory backed cache. This cache is not thread safe and is intended only # for serving as a temporary memory cache for a single thread. class LocalStore < Store def initialize super @data = {} end # Don't allow synchronizing since it isn't thread safe, def synchronize # :nodoc: yield end def clear(options = nil) @data.clear end def read_entry(key, options) @data[key] end def write_entry(key, value, options) @data[key] = value true end def delete_entry(key, options) !!@data.delete(key) end end # Use a local cache for the duration of block. def with_local_cache save_val = Thread.current[thread_local_key] begin Thread.current[thread_local_key] = LocalStore.new yield ensure Thread.current[thread_local_key] = save_val end end #-- # This class wraps up local storage for middlewares. Only the middleware method should # construct them. class Middleware # :nodoc: attr_reader :name, :thread_local_key def initialize(name, thread_local_key) @name = name @thread_local_key = thread_local_key @app = nil end def new(app) @app = app self end def call(env) Thread.current[thread_local_key] = LocalStore.new @app.call(env) ensure Thread.current[thread_local_key] = nil end end # Middleware class can be inserted as a Rack handler to be local cache for the # duration of request. def middleware @middleware ||= Middleware.new( "ActiveSupport::Cache::Strategy::LocalCache", thread_local_key) end def clear(options = nil) # :nodoc: local_cache.clear(options) if local_cache super end def cleanup(options = nil) # :nodoc: local_cache.clear(options) if local_cache super end def increment(name, amount = 1, options = nil) # :nodoc: value = bypass_local_cache{super} if local_cache local_cache.mute do if value local_cache.write(name, value, options) else local_cache.delete(name, options) end end end value end def decrement(name, amount = 1, options = nil) # :nodoc: value = bypass_local_cache{super} if local_cache local_cache.mute do if value local_cache.write(name, value, options) else local_cache.delete(name, options) end end end value end protected def read_entry(key, options) # :nodoc: if local_cache entry = local_cache.read_entry(key, options) unless entry entry = super local_cache.write_entry(key, entry, options) end entry else super end end def write_entry(key, entry, options) # :nodoc: local_cache.write_entry(key, entry, options) if local_cache super end def delete_entry(key, options) # :nodoc: local_cache.delete_entry(key, options) if local_cache super end private def thread_local_key @thread_local_key ||= "#{self.class.name.underscore}_local_cache_#{object_id}".gsub(/[\/-]/, '_').to_sym end def local_cache Thread.current[thread_local_key] end def bypass_local_cache save_cache = Thread.current[thread_local_key] begin Thread.current[thread_local_key] = nil yield ensure Thread.current[thread_local_key] = save_cache end end end end end end activesupport-3.2.16/lib/active_support/message_verifier.rb0000644000175000017500000000446112247654667023550 0ustar ondrejondrejrequire 'active_support/base64' require 'active_support/deprecation' require 'active_support/core_ext/object/blank' module ActiveSupport # +MessageVerifier+ makes it easy to generate and verify messages which are signed # to prevent tampering. # # This is useful for cases like remember-me tokens and auto-unsubscribe links where the # session store isn't suitable or available. # # Remember Me: # cookies[:remember_me] = @verifier.generate([@user.id, 2.weeks.from_now]) # # In the authentication filter: # # id, time = @verifier.verify(cookies[:remember_me]) # if time < Time.now # self.current_user = User.find(id) # end # # By default it uses Marshal to serialize the message. If you want to use another # serialization method, you can set the serializer attribute to something that responds # to dump and load, e.g.: # # @verifier.serializer = YAML class MessageVerifier class InvalidSignature < StandardError; end def initialize(secret, options = {}) unless options.is_a?(Hash) ActiveSupport::Deprecation.warn "The second parameter should be an options hash. Use :digest => 'algorithm' to specify the digest algorithm." options = { :digest => options } end @secret = secret @digest = options[:digest] || 'SHA1' @serializer = options[:serializer] || Marshal end def verify(signed_message) raise InvalidSignature if signed_message.blank? data, digest = signed_message.split("--") if data.present? && digest.present? && secure_compare(digest, generate_digest(data)) @serializer.load(::Base64.decode64(data)) else raise InvalidSignature end end def generate(value) data = ::Base64.strict_encode64(@serializer.dump(value)) "#{data}--#{generate_digest(data)}" end private # constant-time comparison algorithm to prevent timing attacks def secure_compare(a, b) return false unless a.bytesize == b.bytesize l = a.unpack "C#{a.bytesize}" res = 0 b.each_byte { |byte| res |= byte ^ l.shift } res == 0 end def generate_digest(data) require 'openssl' unless defined?(OpenSSL) OpenSSL::HMAC.hexdigest(OpenSSL::Digest.const_get(@digest).new, @secret, data) end end end activesupport-3.2.16/lib/active_support/locale/0000755000175000017500000000000012247654667021136 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/locale/en.yml0000644000175000017500000000207012247654667022262 0ustar ondrejondrejen: date: formats: # Use the strftime parameters for formats. # When no format has been given, it uses default. # You can provide other formats here if you like! default: "%Y-%m-%d" short: "%b %d" long: "%B %d, %Y" day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] # Used in date_select and datetime_select. order: - :year - :month - :day time: formats: default: "%a, %d %b %Y %H:%M:%S %z" short: "%d %b %H:%M" long: "%B %d, %Y %H:%M" am: "am" pm: "pm" # Used in array.to_sentence. support: array: words_connector: ", " two_words_connector: " and " last_word_connector: ", and " activesupport-3.2.16/lib/active_support/inflector/0000755000175000017500000000000012247654667021664 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/inflector/transliterate.rb0000644000175000017500000000622712247654667025101 0ustar ondrejondrej# encoding: utf-8 require 'active_support/core_ext/string/multibyte' require 'active_support/i18n' module ActiveSupport module Inflector # Replaces non-ASCII characters with an ASCII approximation, or if none # exists, a replacement character which defaults to "?". # # transliterate("Ærøskøbing") # # => "AEroskobing" # # Default approximations are provided for Western/Latin characters, # e.g, "ø", "ñ", "é", "ß", etc. # # This method is I18n aware, so you can set up custom approximations for a # locale. This can be useful, for example, to transliterate German's "ü" # and "ö" to "ue" and "oe", or to add support for transliterating Russian # to ASCII. # # In order to make your custom transliterations available, you must set # them as the i18n.transliterate.rule i18n key: # # # Store the transliterations in locales/de.yml # i18n: # transliterate: # rule: # ü: "ue" # ö: "oe" # # # Or set them using Ruby # I18n.backend.store_translations(:de, :i18n => { # :transliterate => { # :rule => { # "ü" => "ue", # "ö" => "oe" # } # } # }) # # The value for i18n.transliterate.rule can be a simple Hash that maps # characters to ASCII approximations as shown above, or, for more complex # requirements, a Proc: # # I18n.backend.store_translations(:de, :i18n => { # :transliterate => { # :rule => lambda {|string| MyTransliterator.transliterate(string)} # } # }) # # Now you can have different transliterations for each locale: # # I18n.locale = :en # transliterate("Jürgen") # # => "Jurgen" # # I18n.locale = :de # transliterate("Jürgen") # # => "Juergen" def transliterate(string, replacement = "?") I18n.transliterate(ActiveSupport::Multibyte::Unicode.normalize( ActiveSupport::Multibyte::Unicode.tidy_bytes(string), :c), :replacement => replacement) end # Replaces special characters in a string so that it may be used as part of a 'pretty' URL. # # ==== Examples # # class Person # def to_param # "#{id}-#{name.parameterize}" # end # end # # @person = Person.find(1) # # => # # # <%= link_to(@person.name, person_path(@person)) %> # # => Donald E. Knuth def parameterize(string, sep = '-') # replace accented chars with their ascii equivalents parameterized_string = transliterate(string) # Turn unwanted chars into the separator parameterized_string.gsub!(/[^a-z0-9\-_]+/i, sep) unless sep.nil? || sep.empty? re_sep = Regexp.escape(sep) # No more than one of the separator in a row. parameterized_string.gsub!(/#{re_sep}{2,}/, sep) # Remove leading/trailing separator. parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/i, '') end parameterized_string.downcase end end end activesupport-3.2.16/lib/active_support/inflector/methods.rb0000644000175000017500000002771312247654667023666 0ustar ondrejondrejrequire 'active_support/inflector/inflections' require 'active_support/inflections' module ActiveSupport # The Inflector transforms words from singular to plural, class names to table names, modularized class names to ones without, # and class names to foreign keys. The default inflections for pluralization, singularization, and uncountable words are kept # in inflections.rb. # # The Rails core team has stated patches for the inflections library will not be accepted # in order to avoid breaking legacy applications which may be relying on errant inflections. # If you discover an incorrect inflection and require it for your application, you'll need # to correct it yourself (explained below). module Inflector extend self # Returns the plural form of the word in the string. # # Examples: # "post".pluralize # => "posts" # "octopus".pluralize # => "octopi" # "sheep".pluralize # => "sheep" # "words".pluralize # => "words" # "CamelOctopus".pluralize # => "CamelOctopi" def pluralize(word) apply_inflections(word, inflections.plurals) end # The reverse of +pluralize+, returns the singular form of a word in a string. # # Examples: # "posts".singularize # => "post" # "octopi".singularize # => "octopus" # "sheep".singularize # => "sheep" # "word".singularize # => "word" # "CamelOctopi".singularize # => "CamelOctopus" def singularize(word) apply_inflections(word, inflections.singulars) end # By default, +camelize+ converts strings to UpperCamelCase. If the argument to +camelize+ # is set to :lower then +camelize+ produces lowerCamelCase. # # +camelize+ will also convert '/' to '::' which is useful for converting paths to namespaces. # # Examples: # "active_model".camelize # => "ActiveModel" # "active_model".camelize(:lower) # => "activeModel" # "active_model/errors".camelize # => "ActiveModel::Errors" # "active_model/errors".camelize(:lower) # => "activeModel::Errors" # # As a rule of thumb you can think of +camelize+ as the inverse of +underscore+, # though there are cases where that does not hold: # # "SSLError".underscore.camelize # => "SslError" def camelize(term, uppercase_first_letter = true) string = term.to_s if uppercase_first_letter string = string.sub(/^[a-z\d]*/) { inflections.acronyms[$&] || $&.capitalize } else string = string.sub(/^(?:#{inflections.acronym_regex}(?=\b|[A-Z_])|\w)/) { $&.downcase } end string.gsub(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{inflections.acronyms[$2] || $2.capitalize}" }.gsub('/', '::') end # Makes an underscored, lowercase form from the expression in the string. # # Changes '::' to '/' to convert namespaces to paths. # # Examples: # "ActiveModel".underscore # => "active_model" # "ActiveModel::Errors".underscore # => "active_model/errors" # # As a rule of thumb you can think of +underscore+ as the inverse of +camelize+, # though there are cases where that does not hold: # # "SSLError".underscore.camelize # => "SslError" def underscore(camel_cased_word) word = camel_cased_word.to_s.dup word.gsub!(/::/, '/') word.gsub!(/(?:([A-Za-z\d])|^)(#{inflections.acronym_regex})(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" } word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2') word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') word.tr!("-", "_") word.downcase! word end # Capitalizes the first word and turns underscores into spaces and strips a # trailing "_id", if any. Like +titleize+, this is meant for creating pretty output. # # Examples: # "employee_salary" # => "Employee salary" # "author_id" # => "Author" def humanize(lower_case_and_underscored_word) result = lower_case_and_underscored_word.to_s.dup inflections.humans.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } result.gsub!(/_id$/, "") result.gsub!(/_/, ' ') result.gsub(/([a-z\d]*)/i) { |match| "#{inflections.acronyms[match] || match.downcase}" }.gsub(/^\w/) { $&.upcase } end # Capitalizes all the words and replaces some characters in the string to create # a nicer looking title. +titleize+ is meant for creating pretty output. It is not # used in the Rails internals. # # +titleize+ is also aliased as as +titlecase+. # # Examples: # "man from the boondocks".titleize # => "Man From The Boondocks" # "x-men: the last stand".titleize # => "X Men: The Last Stand" # "TheManWithoutAPast".titleize # => "The Man Without A Past" # "raiders_of_the_lost_ark".titleize # => "Raiders Of The Lost Ark" def titleize(word) humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize } end # Create the name of a table like Rails does for models to table names. This method # uses the +pluralize+ method on the last word in the string. # # Examples # "RawScaledScorer".tableize # => "raw_scaled_scorers" # "egg_and_ham".tableize # => "egg_and_hams" # "fancyCategory".tableize # => "fancy_categories" def tableize(class_name) pluralize(underscore(class_name)) end # Create a class name from a plural table name like Rails does for table names to models. # Note that this returns a string and not a Class. (To convert to an actual class # follow +classify+ with +constantize+.) # # Examples: # "egg_and_hams".classify # => "EggAndHam" # "posts".classify # => "Post" # # Singular names are not handled correctly: # "business".classify # => "Busines" def classify(table_name) # strip out any leading schema name camelize(singularize(table_name.to_s.sub(/.*\./, ''))) end # Replaces underscores with dashes in the string. # # Example: # "puni_puni" # => "puni-puni" def dasherize(underscored_word) underscored_word.gsub(/_/, '-') end # Removes the module part from the expression in the string: # # "ActiveRecord::CoreExtensions::String::Inflections".demodulize # => "Inflections" # "Inflections".demodulize # => "Inflections" # # See also +deconstantize+. def demodulize(path) path = path.to_s if i = path.rindex('::') path[(i+2)..-1] else path end end # Removes the rightmost segment from the constant expression in the string: # # "Net::HTTP".deconstantize # => "Net" # "::Net::HTTP".deconstantize # => "::Net" # "String".deconstantize # => "" # "::String".deconstantize # => "" # "".deconstantize # => "" # # See also +demodulize+. def deconstantize(path) path.to_s[0...(path.rindex('::') || 0)] # implementation based on the one in facets' Module#spacename end # Creates a foreign key name from a class name. # +separate_class_name_and_id_with_underscore+ sets whether # the method should put '_' between the name and 'id'. # # Examples: # "Message".foreign_key # => "message_id" # "Message".foreign_key(false) # => "messageid" # "Admin::Post".foreign_key # => "post_id" def foreign_key(class_name, separate_class_name_and_id_with_underscore = true) underscore(demodulize(class_name)) + (separate_class_name_and_id_with_underscore ? "_id" : "id") end # Ruby 1.9 introduces an inherit argument for Module#const_get and # #const_defined? and changes their default behavior. if Module.method(:const_get).arity == 1 # Tries to find a constant with the name specified in the argument string: # # "Module".constantize # => Module # "Test::Unit".constantize # => Test::Unit # # The name is assumed to be the one of a top-level constant, no matter whether # it starts with "::" or not. No lexical context is taken into account: # # C = 'outside' # module M # C = 'inside' # C # => 'inside' # "C".constantize # => 'outside', same as ::C # end # # NameError is raised when the name is not in CamelCase or the constant is # unknown. def constantize(camel_cased_word) names = camel_cased_word.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name) end constant end else def constantize(camel_cased_word) #:nodoc: names = camel_cased_word.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name) end constant end end # Tries to find a constant with the name specified in the argument string: # # "Module".safe_constantize # => Module # "Test::Unit".safe_constantize # => Test::Unit # # The name is assumed to be the one of a top-level constant, no matter whether # it starts with "::" or not. No lexical context is taken into account: # # C = 'outside' # module M # C = 'inside' # C # => 'inside' # "C".safe_constantize # => 'outside', same as ::C # end # # nil is returned when the name is not in CamelCase or the constant (or part of it) is # unknown. # # "blargle".safe_constantize # => nil # "UnknownModule".safe_constantize # => nil # "UnknownModule::Foo::Bar".safe_constantize # => nil # def safe_constantize(camel_cased_word) begin constantize(camel_cased_word) rescue NameError => e raise unless e.message =~ /(uninitialized constant|wrong constant name) #{const_regexp(camel_cased_word)}$/ || e.name.to_s == camel_cased_word.to_s rescue ArgumentError => e raise unless e.message =~ /not missing constant #{const_regexp(camel_cased_word)}\!$/ end end # Turns a number into an ordinal string used to denote the position in an # ordered sequence such as 1st, 2nd, 3rd, 4th. # # Examples: # ordinalize(1) # => "1st" # ordinalize(2) # => "2nd" # ordinalize(1002) # => "1002nd" # ordinalize(1003) # => "1003rd" # ordinalize(-11) # => "-11th" # ordinalize(-1021) # => "-1021st" def ordinalize(number) if (11..13).include?(number.to_i.abs % 100) "#{number}th" else case number.to_i.abs % 10 when 1; "#{number}st" when 2; "#{number}nd" when 3; "#{number}rd" else "#{number}th" end end end private # Mount a regular expression that will match part by part of the constant. # For instance, Foo::Bar::Baz will generate Foo(::Bar(::Baz)?)? def const_regexp(camel_cased_word) #:nodoc: parts = camel_cased_word.split("::") last = parts.pop parts.reverse.inject(last) do |acc, part| part.empty? ? acc : "#{part}(::#{acc})?" end end # Applies inflection rules for +singularize+ and +pluralize+. # # Examples: # apply_inflections("post", inflections.plurals) # => "posts" # apply_inflections("posts", inflections.singulars) # => "post" def apply_inflections(word, rules) result = word.to_s.dup if word.empty? || inflections.uncountables.any? { |inflection| result =~ /\b#{inflection}\Z/i } result else rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } result end end end end activesupport-3.2.16/lib/active_support/inflector/inflections.rb0000644000175000017500000001666712247654667024546 0ustar ondrejondrejmodule ActiveSupport module Inflector extend self # A singleton instance of this class is yielded by Inflector.inflections, which can then be used to specify additional # inflection rules. Examples: # # ActiveSupport::Inflector.inflections do |inflect| # inflect.plural /^(ox)$/i, '\1\2en' # inflect.singular /^(ox)en/i, '\1' # # inflect.irregular 'octopus', 'octopi' # # inflect.uncountable "equipment" # end # # New rules are added at the top. So in the example above, the irregular rule for octopus will now be the first of the # pluralization and singularization rules that is runs. This guarantees that your rules run before any of the rules that may # already have been loaded. class Inflections def self.instance @__instance__ ||= new end attr_reader :plurals, :singulars, :uncountables, :humans, :acronyms, :acronym_regex def initialize @plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], [], [], {}, /(?=a)b/ end # Specifies a new acronym. An acronym must be specified as it will appear in a camelized string. An underscore # string that contains the acronym will retain the acronym when passed to `camelize`, `humanize`, or `titleize`. # A camelized string that contains the acronym will maintain the acronym when titleized or humanized, and will # convert the acronym into a non-delimited single lowercase word when passed to +underscore+. # # Examples: # acronym 'HTML' # titleize 'html' #=> 'HTML' # camelize 'html' #=> 'HTML' # underscore 'MyHTML' #=> 'my_html' # # The acronym, however, must occur as a delimited unit and not be part of another word for conversions to recognize it: # # acronym 'HTTP' # camelize 'my_http_delimited' #=> 'MyHTTPDelimited' # camelize 'https' #=> 'Https', not 'HTTPs' # underscore 'HTTPS' #=> 'http_s', not 'https' # # acronym 'HTTPS' # camelize 'https' #=> 'HTTPS' # underscore 'HTTPS' #=> 'https' # # Note: Acronyms that are passed to `pluralize` will no longer be recognized, since the acronym will not occur as # a delimited unit in the pluralized result. To work around this, you must specify the pluralized form as an # acronym as well: # # acronym 'API' # camelize(pluralize('api')) #=> 'Apis' # # acronym 'APIs' # camelize(pluralize('api')) #=> 'APIs' # # `acronym` may be used to specify any word that contains an acronym or otherwise needs to maintain a non-standard # capitalization. The only restriction is that the word must begin with a capital letter. # # Examples: # acronym 'RESTful' # underscore 'RESTful' #=> 'restful' # underscore 'RESTfulController' #=> 'restful_controller' # titleize 'RESTfulController' #=> 'RESTful Controller' # camelize 'restful' #=> 'RESTful' # camelize 'restful_controller' #=> 'RESTfulController' # # acronym 'McDonald' # underscore 'McDonald' #=> 'mcdonald' # camelize 'mcdonald' #=> 'McDonald' def acronym(word) @acronyms[word.downcase] = word @acronym_regex = /#{@acronyms.values.join("|")}/ end # Specifies a new pluralization rule and its replacement. The rule can either be a string or a regular expression. # The replacement should always be a string that may include references to the matched data from the rule. def plural(rule, replacement) @uncountables.delete(rule) if rule.is_a?(String) @uncountables.delete(replacement) @plurals.insert(0, [rule, replacement]) end # Specifies a new singularization rule and its replacement. The rule can either be a string or a regular expression. # The replacement should always be a string that may include references to the matched data from the rule. def singular(rule, replacement) @uncountables.delete(rule) if rule.is_a?(String) @uncountables.delete(replacement) @singulars.insert(0, [rule, replacement]) end # Specifies a new irregular that applies to both pluralization and singularization at the same time. This can only be used # for strings, not regular expressions. You simply pass the irregular in singular and plural form. # # Examples: # irregular 'octopus', 'octopi' # irregular 'person', 'people' def irregular(singular, plural) @uncountables.delete(singular) @uncountables.delete(plural) if singular[0,1].upcase == plural[0,1].upcase plural(Regexp.new("(#{singular[0,1]})#{singular[1..-1]}$", "i"), '\1' + plural[1..-1]) plural(Regexp.new("(#{plural[0,1]})#{plural[1..-1]}$", "i"), '\1' + plural[1..-1]) singular(Regexp.new("(#{plural[0,1]})#{plural[1..-1]}$", "i"), '\1' + singular[1..-1]) else plural(Regexp.new("#{singular[0,1].upcase}(?i)#{singular[1..-1]}$"), plural[0,1].upcase + plural[1..-1]) plural(Regexp.new("#{singular[0,1].downcase}(?i)#{singular[1..-1]}$"), plural[0,1].downcase + plural[1..-1]) plural(Regexp.new("#{plural[0,1].upcase}(?i)#{plural[1..-1]}$"), plural[0,1].upcase + plural[1..-1]) plural(Regexp.new("#{plural[0,1].downcase}(?i)#{plural[1..-1]}$"), plural[0,1].downcase + plural[1..-1]) singular(Regexp.new("#{plural[0,1].upcase}(?i)#{plural[1..-1]}$"), singular[0,1].upcase + singular[1..-1]) singular(Regexp.new("#{plural[0,1].downcase}(?i)#{plural[1..-1]}$"), singular[0,1].downcase + singular[1..-1]) end end # Add uncountable words that shouldn't be attempted inflected. # # Examples: # uncountable "money" # uncountable "money", "information" # uncountable %w( money information rice ) def uncountable(*words) (@uncountables << words).flatten! end # Specifies a humanized form of a string by a regular expression rule or by a string mapping. # When using a regular expression based replacement, the normal humanize formatting is called after the replacement. # When a string is used, the human form should be specified as desired (example: 'The name', not 'the_name') # # Examples: # human /_cnt$/i, '\1_count' # human "legacy_col_person_name", "Name" def human(rule, replacement) @humans.insert(0, [rule, replacement]) end # Clears the loaded inflections within a given scope (default is :all). # Give the scope as a symbol of the inflection type, the options are: :plurals, # :singulars, :uncountables, :humans. # # Examples: # clear :all # clear :plurals def clear(scope = :all) case scope when :all @plurals, @singulars, @uncountables, @humans = [], [], [], [] else instance_variable_set "@#{scope}", [] end end end # Yields a singleton instance of Inflector::Inflections so you can specify additional # inflector rules. # # Example: # ActiveSupport::Inflector.inflections do |inflect| # inflect.uncountable "rails" # end def inflections if block_given? yield Inflections.instance else Inflections.instance end end end end activesupport-3.2.16/lib/active_support/testing/0000755000175000017500000000000012247654667021354 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/testing/pending.rb0000644000175000017500000000233312247654667023326 0ustar ondrejondrej# Some code from jeremymcanally's "pending" # https://github.com/jeremymcanally/pending/tree/master module ActiveSupport module Testing module Pending unless defined?(Spec) @@pending_cases = [] @@at_exit = false def pending(description = "", &block) if defined?(::MiniTest) skip(description.blank? ? nil : description) else if description.is_a?(Symbol) is_pending = $tags[description] return block.call unless is_pending end if block_given? failed = false begin block.call rescue Exception failed = true end flunk("<#{description}> did not fail.") unless failed end caller[0] =~ (/(.*):(.*):in `(.*)'/) @@pending_cases << "#{$3} at #{$1}, line #{$2}" print "P" @@at_exit ||= begin at_exit do puts "\nPending Cases:" @@pending_cases.each do |test_case| puts test_case end end end end end end end end end activesupport-3.2.16/lib/active_support/testing/assertions.rb0000644000175000017500000000637012247654667024101 0ustar ondrejondrejrequire 'active_support/core_ext/array/wrap' require 'active_support/core_ext/object/blank' module ActiveSupport module Testing module Assertions # Test numeric difference between the return value of an expression as a result of what is evaluated # in the yielded block. # # assert_difference 'Article.count' do # post :create, :article => {...} # end # # An arbitrary expression is passed in and evaluated. # # assert_difference 'assigns(:article).comments(:reload).size' do # post :create, :comment => {...} # end # # An arbitrary positive or negative difference can be specified. The default is +1. # # assert_difference 'Article.count', -1 do # post :delete, :id => ... # end # # An array of expressions can also be passed in and evaluated. # # assert_difference [ 'Article.count', 'Post.count' ], +2 do # post :create, :article => {...} # end # # A lambda or a list of lambdas can be passed in and evaluated: # # assert_difference lambda { Article.count }, 2 do # post :create, :article => {...} # end # # assert_difference [->{ Article.count }, ->{ Post.count }], 2 do # post :create, :article => {...} # end # # A error message can be specified. # # assert_difference 'Article.count', -1, "An Article should be destroyed" do # post :delete, :id => ... # end def assert_difference(expression, difference = 1, message = nil, &block) expressions = Array.wrap expression exps = expressions.map { |e| e.respond_to?(:call) ? e : lambda { eval(e, block.binding) } } before = exps.map { |e| e.call } yield expressions.zip(exps).each_with_index do |(code, e), i| error = "#{code.inspect} didn't change by #{difference}" error = "#{message}.\n#{error}" if message assert_equal(before[i] + difference, e.call, error) end end # Assertion that the numeric result of evaluating an expression is not changed before and after # invoking the passed in block. # # assert_no_difference 'Article.count' do # post :create, :article => invalid_attributes # end # # A error message can be specified. # # assert_no_difference 'Article.count', "An Article should not be created" do # post :create, :article => invalid_attributes # end def assert_no_difference(expression, message = nil, &block) assert_difference expression, 0, message, &block end # Test if an expression is blank. Passes if object.blank? is true. # # assert_blank [] # => true def assert_blank(object, message=nil) message ||= "#{object.inspect} is not blank" assert object.blank?, message end # Test if an expression is not blank. Passes if object.present? is true. # # assert_present {:data => 'x' } # => true def assert_present(object, message=nil) message ||= "#{object.inspect} is blank" assert object.present?, message end end end end activesupport-3.2.16/lib/active_support/testing/mochaing.rb0000644000175000017500000000036012247654667023465 0ustar ondrejondrejbegin silence_warnings { require 'mocha/setup' } rescue LoadError # Fake Mocha::ExpectationError so we can rescue it in #run. Bleh. Object.const_set :Mocha, Module.new Mocha.const_set :ExpectationError, Class.new(StandardError) end activesupport-3.2.16/lib/active_support/testing/performance/0000755000175000017500000000000012247654667023655 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/testing/performance/jruby.rb0000644000175000017500000000616112247654667025341 0ustar ondrejondrejrequire 'jruby/profiler' require 'java' java_import java.lang.management.ManagementFactory module ActiveSupport module Testing module Performance DEFAULTS.merge!( if ENV["BENCHMARK_TESTS"] {:metrics => [:wall_time, :user_time, :memory, :gc_runs, :gc_time]} else { :metrics => [:wall_time], :formats => [:flat, :graph] } end).freeze protected def run_gc ManagementFactory.memory_mx_bean.gc end class Profiler < Performer def initialize(*args) super @supported = @metric.is_a?(Metrics::WallTime) end def run return unless @supported @total = time_with_block do @data = JRuby::Profiler.profile do full_profile_options[:runs].to_i.times { run_test(@metric, :profile) } end end end def record return unless @supported klasses = full_profile_options[:formats].map { |f| JRuby::Profiler.const_get("#{f.to_s.camelize}ProfilePrinter") }.compact klasses.each do |klass| fname = output_filename(klass) FileUtils.mkdir_p(File.dirname(fname)) file = File.open(fname, 'wb') do |file| klass.new(@data).printProfile(file) end end end protected def output_filename(printer_class) suffix = case printer_class.name.demodulize when 'FlatProfilePrinter'; 'flat.txt' when 'GraphProfilePrinter'; 'graph.txt' else printer_class.name.sub(/ProfilePrinter$/, '').underscore end "#{super()}_#{suffix}" end end module Metrics class Base def profile yield end protected def with_gc_stats ManagementFactory.memory_mx_bean.gc yield end end class WallTime < Time def measure super end end class CpuTime < Time def measure ManagementFactory.thread_mx_bean.get_current_thread_cpu_time / 1000 / 1000 / 1000.0 # seconds end end class UserTime < Time def measure ManagementFactory.thread_mx_bean.get_current_thread_user_time / 1000 / 1000 / 1000.0 # seconds end end class Memory < DigitalInformationUnit def measure ManagementFactory.memory_mx_bean.non_heap_memory_usage.used + ManagementFactory.memory_mx_bean.heap_memory_usage.used end end class GcRuns < Amount def measure ManagementFactory.garbage_collector_mx_beans.inject(0) { |total_runs, current_gc| total_runs += current_gc.collection_count } end end class GcTime < Time def measure ManagementFactory.garbage_collector_mx_beans.inject(0) { |total_time, current_gc| total_time += current_gc.collection_time } / 1000.0 # seconds end end end end end end activesupport-3.2.16/lib/active_support/testing/performance/rubinius.rb0000644000175000017500000000525112247654667026045 0ustar ondrejondrejrequire 'rubinius/agent' module ActiveSupport module Testing module Performance DEFAULTS.merge!( if ENV["BENCHMARK_TESTS"] {:metrics => [:wall_time, :memory, :objects, :gc_runs, :gc_time]} else { :metrics => [:wall_time], :formats => [:flat, :graph] } end).freeze protected def run_gc GC.run(true) end class Performer; end class Profiler < Performer def initialize(*args) super @supported = @metric.is_a?(Metrics::WallTime) end def run return unless @supported @profiler = Rubinius::Profiler::Instrumenter.new @total = time_with_block do @profiler.profile(false) do full_profile_options[:runs].to_i.times { run_test(@metric, :profile) } end end end def record return unless @supported if(full_profile_options[:formats].include?(:flat)) create_path_and_open_file(:flat) do |file| @profiler.show(file) end end if(full_profile_options[:formats].include?(:graph)) create_path_and_open_file(:graph) do |file| @profiler.show(file) end end end protected def create_path_and_open_file(printer_name) fname = "#{output_filename}_#{printer_name}.txt" FileUtils.mkdir_p(File.dirname(fname)) File.open(fname, 'wb') do |file| yield(file) end end end module Metrics class Base attr_reader :loopback def profile yield end protected def with_gc_stats @loopback = Rubinius::Agent.loopback GC.run(true) yield end end class WallTime < Time def measure super end end class Memory < DigitalInformationUnit def measure loopback.get("system.memory.counter.bytes").last end end class Objects < Amount def measure loopback.get("system.memory.counter.objects").last end end class GcRuns < Amount def measure loopback.get("system.gc.full.count").last + loopback.get("system.gc.young.count").last end end class GcTime < Time def measure (loopback.get("system.gc.full.wallclock").last + loopback.get("system.gc.young.wallclock").last) / 1000.0 end end end end end end activesupport-3.2.16/lib/active_support/testing/performance/ruby/0000755000175000017500000000000012247654667024636 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/testing/performance/ruby/yarv.rb0000644000175000017500000000246412247654667026152 0ustar ondrejondrejmodule ActiveSupport module Testing module Performance module Metrics class Base protected # Ruby 1.9 with GC::Profiler if defined?(GC::Profiler) def with_gc_stats GC::Profiler.enable GC.start yield ensure GC::Profiler.disable end end end class Memory < DigitalInformationUnit # Ruby 1.9 + GCdata patch if GC.respond_to?(:malloc_allocated_size) def measure GC.malloc_allocated_size end end end class Objects < Amount # Ruby 1.9 + GCdata patch if GC.respond_to?(:malloc_allocations) def measure GC.malloc_allocations end end end class GcRuns < Amount # Ruby 1.9 if GC.respond_to?(:count) def measure GC.count end end end class GcTime < Time # Ruby 1.9 with GC::Profiler if defined?(GC::Profiler) && GC::Profiler.respond_to?(:total_time) def measure GC::Profiler.total_time end end end end end end end activesupport-3.2.16/lib/active_support/testing/performance/ruby/mri.rb0000644000175000017500000000264212247654667025756 0ustar ondrejondrejmodule ActiveSupport module Testing module Performance module Metrics class Base protected # Ruby 1.8 + ruby-prof wrapper (enable/disable stats for Benchmarker) if GC.respond_to?(:enable_stats) def with_gc_stats GC.enable_stats GC.start yield ensure GC.disable_stats end end end class Memory < DigitalInformationUnit # Ruby 1.8 + ruby-prof wrapper if RubyProf.respond_to?(:measure_memory) def measure RubyProf.measure_memory end end end class Objects < Amount # Ruby 1.8 + ruby-prof wrapper if RubyProf.respond_to?(:measure_allocations) def measure RubyProf.measure_allocations end end end class GcRuns < Amount # Ruby 1.8 + ruby-prof wrapper if RubyProf.respond_to?(:measure_gc_runs) def measure RubyProf.measure_gc_runs end end end class GcTime < Time # Ruby 1.8 + ruby-prof wrapper if RubyProf.respond_to?(:measure_gc_time) def measure RubyProf.measure_gc_time / 1000.0 / 1000.0 end end end end end end end activesupport-3.2.16/lib/active_support/testing/performance/ruby.rb0000644000175000017500000001043312247654667025164 0ustar ondrejondrejbegin require 'ruby-prof' rescue LoadError $stderr.puts 'Specify ruby-prof as application\'s dependency in Gemfile to run benchmarks.' exit end module ActiveSupport module Testing module Performance DEFAULTS.merge!( if ENV["BENCHMARK_TESTS"] { :metrics => [:wall_time, :memory, :objects, :gc_runs, :gc_time] } else { :min_percent => 0.01, :metrics => [:process_time, :memory, :objects], :formats => [:flat, :graph_html, :call_tree, :call_stack] } end).freeze protected def run_gc GC.start end class Profiler < Performer def initialize(*args) super @supported = @metric.measure_mode rescue false end def run return unless @supported RubyProf.measure_mode = @metric.measure_mode RubyProf.start RubyProf.pause full_profile_options[:runs].to_i.times { run_test(@metric, :profile) } @data = RubyProf.stop @total = @data.threads.sum(0) { |thread| thread.methods.max.total_time } end def record return unless @supported klasses = full_profile_options[:formats].map { |f| RubyProf.const_get("#{f.to_s.camelize}Printer") }.compact klasses.each do |klass| fname = output_filename(klass) FileUtils.mkdir_p(File.dirname(fname)) File.open(fname, 'wb') do |file| klass.new(@data).print(file, full_profile_options.slice(:min_percent)) end end end protected def output_filename(printer_class) suffix = case printer_class.name.demodulize when 'FlatPrinter'; 'flat.txt' when 'FlatPrinterWithLineNumbers'; 'flat_line_numbers.txt' when 'GraphPrinter'; 'graph.txt' when 'GraphHtmlPrinter'; 'graph.html' when 'GraphYamlPrinter'; 'graph.yml' when 'CallTreePrinter'; 'tree.txt' when 'CallStackPrinter'; 'stack.html' when 'DotPrinter'; 'graph.dot' else printer_class.name.sub(/Printer$/, '').underscore end "#{super()}_#{suffix}" end end module Metrics class Base def measure_mode self.class::Mode end def profile RubyProf.resume yield ensure RubyProf.pause end protected # overridden by each implementation def with_gc_stats yield end end class ProcessTime < Time Mode = RubyProf::PROCESS_TIME if RubyProf.const_defined?(:PROCESS_TIME) def measure RubyProf.measure_process_time end end class WallTime < Time Mode = RubyProf::WALL_TIME if RubyProf.const_defined?(:WALL_TIME) def measure RubyProf.measure_wall_time end end class CpuTime < Time Mode = RubyProf::CPU_TIME if RubyProf.const_defined?(:CPU_TIME) def initialize(*args) # FIXME: yeah my CPU is 2.33 GHz RubyProf.cpu_frequency = 2.33e9 unless RubyProf.cpu_frequency > 0 super end def measure RubyProf.measure_cpu_time end end class Memory < DigitalInformationUnit Mode = RubyProf::MEMORY if RubyProf.const_defined?(:MEMORY) end class Objects < Amount Mode = RubyProf::ALLOCATIONS if RubyProf.const_defined?(:ALLOCATIONS) end class GcRuns < Amount Mode = RubyProf::GC_RUNS if RubyProf.const_defined?(:GC_RUNS) end class GcTime < Time Mode = RubyProf::GC_TIME if RubyProf.const_defined?(:GC_TIME) end end end end end if RUBY_VERSION.between?('1.9.2', '2.0.0') require 'active_support/testing/performance/ruby/yarv' elsif RUBY_VERSION.between?('1.8.6', '1.9') require 'active_support/testing/performance/ruby/mri' else $stderr.puts 'Update your ruby interpreter to be able to run benchmarks.' exit end activesupport-3.2.16/lib/active_support/testing/setup_and_teardown.rb0000644000175000017500000000761712247654667025601 0ustar ondrejondrejrequire 'active_support/concern' require 'active_support/callbacks' module ActiveSupport module Testing module SetupAndTeardown extend ActiveSupport::Concern included do include ActiveSupport::Callbacks define_callbacks :setup, :teardown if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions include ForMiniTest else include ForClassicTestUnit end end module ClassMethods def setup(*args, &block) set_callback(:setup, :before, *args, &block) end def teardown(*args, &block) set_callback(:teardown, :after, *args, &block) end end module ForMiniTest PASSTHROUGH_EXCEPTIONS = MiniTest::Unit::TestCase::PASSTHROUGH_EXCEPTIONS rescue [NoMemoryError, SignalException, Interrupt, SystemExit] def run(runner) result = '.' begin run_callbacks :setup do result = super end rescue *PASSTHROUGH_EXCEPTIONS => e raise e rescue Exception => e result = runner.puke(self.class, method_name, e) ensure begin run_callbacks :teardown rescue *PASSTHROUGH_EXCEPTIONS => e raise e rescue Exception => e result = runner.puke(self.class, method_name, e) end end result end end module ForClassicTestUnit # For compatibility with Ruby < 1.8.6 PASSTHROUGH_EXCEPTIONS = Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS rescue [NoMemoryError, SignalException, Interrupt, SystemExit] # This redefinition is unfortunate but test/unit shows us no alternative. # Doubly unfortunate: hax to support Mocha's hax. def run(result) return if @method_name.to_s == "default_test" mocha_counter = retrieve_mocha_counter(self, result) yield(Test::Unit::TestCase::STARTED, name) @_result = result begin begin run_callbacks :setup do setup __send__(@method_name) mocha_verify(mocha_counter) if mocha_counter end rescue Mocha::ExpectationError => e add_failure(e.message, e.backtrace) rescue Test::Unit::AssertionFailedError => e add_failure(e.message, e.backtrace) rescue Exception => e raise if PASSTHROUGH_EXCEPTIONS.include?(e.class) add_error(e) ensure begin teardown run_callbacks :teardown rescue Mocha::ExpectationError => e add_failure(e.message, e.backtrace) rescue Test::Unit::AssertionFailedError => e add_failure(e.message, e.backtrace) rescue Exception => e raise if PASSTHROUGH_EXCEPTIONS.include?(e.class) add_error(e) end end ensure mocha_teardown if mocha_counter end result.add_run yield(Test::Unit::TestCase::FINISHED, name) end protected def retrieve_mocha_counter(test_case, result) #:nodoc: if respond_to?(:mocha_verify) # using mocha if defined?(Mocha::TestCaseAdapter::AssertionCounter) Mocha::TestCaseAdapter::AssertionCounter.new(result) elsif defined?(Mocha::Integration::TestUnit::AssertionCounter) Mocha::Integration::TestUnit::AssertionCounter.new(result) elsif defined?(Mocha::MonkeyPatching::TestUnit::AssertionCounter) Mocha::MonkeyPatching::TestUnit::AssertionCounter.new(result) else Mocha::Integration::AssertionCounter.new(test_case) end end end end end end end activesupport-3.2.16/lib/active_support/testing/declarative.rb0000644000175000017500000000174312247654667024171 0ustar ondrejondrejmodule ActiveSupport module Testing module Declarative def self.extended(klass) klass.class_eval do unless method_defined?(:describe) def self.describe(text) class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def self.name "#{text}" end RUBY_EVAL end end end end unless defined?(Spec) # test "verify something" do # ... # end def test(name, &block) test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym defined = instance_method(test_name) rescue false raise "#{test_name} is already defined in #{self}" if defined if block_given? define_method(test_name, &block) else define_method(test_name) do flunk "No implementation provided for #{name}" end end end end end end end activesupport-3.2.16/lib/active_support/testing/performance.rb0000644000175000017500000002030412247654667024201 0ustar ondrejondrejrequire 'fileutils' require 'rails/version' require 'active_support/concern' require 'active_support/core_ext/class/delegating_attributes' require 'active_support/core_ext/string/inflections' require 'action_view/helpers/number_helper' module ActiveSupport module Testing module Performance extend ActiveSupport::Concern included do superclass_delegating_accessor :profile_options self.profile_options = {} if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions include ForMiniTest else include ForClassicTestUnit end end # each implementation should define metrics and freeze the defaults DEFAULTS = if ENV["BENCHMARK_TESTS"] { :runs => 4, :output => 'tmp/performance', :benchmark => true } else { :runs => 1, :output => 'tmp/performance', :benchmark => false } end def full_profile_options DEFAULTS.merge(profile_options) end def full_test_name "#{self.class.name}##{method_name}" end module ForMiniTest def run(runner) @runner = runner run_warmup if full_profile_options && metrics = full_profile_options[:metrics] metrics.each do |metric_name| if klass = Metrics[metric_name.to_sym] run_profile(klass.new) end end end return end def run_test(metric, mode) result = '.' begin run_callbacks :setup setup metric.send(mode) { __send__ method_name } rescue Exception => e result = @runner.puke(self.class, method_name, e) ensure begin teardown run_callbacks :teardown, :enumerator => :reverse_each rescue Exception => e result = @runner.puke(self.class, method_name, e) end end result end end module ForClassicTestUnit def run(result) return if method_name =~ /^default_test$/ yield(self.class::STARTED, name) @_result = result run_warmup if full_profile_options && metrics = full_profile_options[:metrics] metrics.each do |metric_name| if klass = Metrics[metric_name.to_sym] run_profile(klass.new) result.add_run else puts '%20s: unsupported' % metric_name end end end yield(self.class::FINISHED, name) end def run_test(metric, mode) run_callbacks :setup setup metric.send(mode) { __send__ @method_name } rescue ::Test::Unit::AssertionFailedError => e add_failure(e.message, e.backtrace) rescue StandardError, ScriptError => e add_error(e) ensure begin teardown run_callbacks :teardown, :enumerator => :reverse_each rescue ::Test::Unit::AssertionFailedError => e add_failure(e.message, e.backtrace) rescue StandardError, ScriptError => e add_error(e) end end end protected # overridden by each implementation def run_gc; end def run_warmup run_gc time = Metrics::Time.new run_test(time, :benchmark) puts "%s (%s warmup)" % [full_test_name, time.format(time.total)] run_gc end def run_profile(metric) klass = full_profile_options[:benchmark] ? Benchmarker : Profiler performer = klass.new(self, metric) performer.run puts performer.report performer.record end class Performer delegate :run_test, :full_profile_options, :full_test_name, :to => :@harness def initialize(harness, metric) @harness, @metric, @supported = harness, metric, false end def report if @supported rate = @total / full_profile_options[:runs] '%20s: %s' % [@metric.name, @metric.format(rate)] else '%20s: unsupported' % @metric.name end end protected def output_filename "#{full_profile_options[:output]}/#{full_test_name}_#{@metric.name}" end end # overridden by each implementation class Profiler < Performer def time_with_block before = Time.now yield Time.now - before end def run; end def record; end end class Benchmarker < Performer def initialize(*args) super @supported = @metric.respond_to?('measure') end def run return unless @supported full_profile_options[:runs].to_i.times { run_test(@metric, :benchmark) } @total = @metric.total end def record avg = @metric.total / full_profile_options[:runs].to_i now = Time.now.utc.xmlschema with_output_file do |file| file.puts "#{avg},#{now},#{environment}" end end def environment unless defined? @env app = "#{$1}.#{$2}" if File.directory?('.git') && `git branch -v` =~ /^\* (\S+)\s+(\S+)/ rails = Rails::VERSION::STRING if File.directory?('vendor/rails/.git') Dir.chdir('vendor/rails') do rails += ".#{$1}.#{$2}" if `git branch -v` =~ /^\* (\S+)\s+(\S+)/ end end ruby = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby' ruby += "-#{RUBY_VERSION}.#{RUBY_PATCHLEVEL}" @env = [app, rails, ruby, RUBY_PLATFORM] * ',' end @env end protected HEADER = 'measurement,created_at,app,rails,ruby,platform' def with_output_file fname = output_filename if new = !File.exist?(fname) FileUtils.mkdir_p(File.dirname(fname)) end File.open(fname, 'ab') do |file| file.puts(HEADER) if new yield file end end def output_filename "#{super}.csv" end end module Metrics def self.[](name) const_get(name.to_s.camelize) rescue NameError nil end class Base include ActionView::Helpers::NumberHelper attr_reader :total def initialize @total = 0 end def name @name ||= self.class.name.demodulize.underscore end def benchmark with_gc_stats do before = measure yield @total += (measure - before) end end # overridden by each implementation def profile; end protected # overridden by each implementation def with_gc_stats; end end class Time < Base def measure ::Time.now.to_f end def format(measurement) if measurement < 1 '%d ms' % (measurement * 1000) else '%.2f sec' % measurement end end end class Amount < Base def format(measurement) number_with_delimiter(measurement.floor) end end class DigitalInformationUnit < Base def format(measurement) number_to_human_size(measurement, :precision => 2) end end # each implementation provides its own metrics like ProcessTime, Memory or GcRuns end end end end RUBY_ENGINE = 'ruby' unless defined?(RUBY_ENGINE) # mri 1.8 case RUBY_ENGINE when 'ruby' then require 'active_support/testing/performance/ruby' when 'rbx' then require 'active_support/testing/performance/rubinius' when 'jruby' then require 'active_support/testing/performance/jruby' else $stderr.puts 'Your ruby interpreter is not supported for benchmarking.' exit end activesupport-3.2.16/lib/active_support/testing/deprecation.rb0000644000175000017500000000336212247654667024202 0ustar ondrejondrejrequire 'active_support/deprecation' module ActiveSupport module Testing module Deprecation #:nodoc: def assert_deprecated(match = nil, &block) result, warnings = collect_deprecations(&block) assert !warnings.empty?, "Expected a deprecation warning within the block but received none" if match match = Regexp.new(Regexp.escape(match)) unless match.is_a?(Regexp) assert warnings.any? { |w| w =~ match }, "No deprecation warning matched #{match}: #{warnings.join(', ')}" end result end def assert_not_deprecated(&block) result, deprecations = collect_deprecations(&block) assert deprecations.empty?, "Expected no deprecation warning within the block but received #{deprecations.size}: \n #{deprecations * "\n "}" result end private def collect_deprecations old_behavior = ActiveSupport::Deprecation.behavior deprecations = [] ActiveSupport::Deprecation.behavior = Proc.new do |message, callstack| deprecations << message end result = yield [result, deprecations] ensure ActiveSupport::Deprecation.behavior = old_behavior end end end end begin require 'test/unit/error' rescue LoadError # Using miniunit, ignore. else module Test module Unit class Error #:nodoc: # Silence warnings when reporting test errors. def message_with_silenced_deprecation ::ActiveSupport::Deprecation.silence { message_without_silenced_deprecation } end alias_method :message_without_silenced_deprecation, :message alias_method :message, :message_with_silenced_deprecation end end end end activesupport-3.2.16/lib/active_support/testing/isolation.rb0000644000175000017500000001020212247654667023675 0ustar ondrejondrejrequire 'rbconfig' module ActiveSupport module Testing class RemoteError < StandardError attr_reader :message, :backtrace def initialize(exception) @message = "caught #{exception.class.name}: #{exception.message}" @backtrace = exception.backtrace end end class ProxyTestResult def initialize(calls = []) @calls = calls end def add_error(e) e = Test::Unit::Error.new(e.test_name, RemoteError.new(e.exception)) @calls << [:add_error, e] end def __replay__(result) @calls.each do |name, args| result.send(name, *args) end end def marshal_dump @calls end def marshal_load(calls) initialize(calls) end def method_missing(name, *args) @calls << [name, args] end end module Isolation def self.forking_env? !ENV["NO_FORK"] && ((RbConfig::CONFIG['host_os'] !~ /mswin|mingw/) && (RUBY_PLATFORM !~ /java/)) end def self.included(base) if defined?(::MiniTest) && base < ::MiniTest::Unit::TestCase base.send :include, MiniTest elsif defined?(Test::Unit) base.send :include, TestUnit end end def _run_class_setup # class setup method should only happen in parent unless defined?(@@ran_class_setup) || ENV['ISOLATION_TEST'] self.class.setup if self.class.respond_to?(:setup) @@ran_class_setup = true end end module TestUnit def run(result) _run_class_setup yield(Test::Unit::TestCase::STARTED, name) @_result = result serialized = run_in_isolation do |proxy| begin super(proxy) { } rescue Exception => e proxy.add_error(Test::Unit::Error.new(name, e)) end end retval, proxy = Marshal.load(serialized) proxy.__replay__(@_result) yield(Test::Unit::TestCase::FINISHED, name) retval end end module MiniTest def run(runner) _run_class_setup serialized = run_in_isolation do |isolated_runner| super(isolated_runner) end retval, proxy = Marshal.load(serialized) proxy.__replay__(runner) retval end end module Forking def run_in_isolation(&blk) read, write = IO.pipe pid = fork do read.close proxy = ProxyTestResult.new retval = yield proxy write.puts [Marshal.dump([retval, proxy])].pack("m") exit! end write.close result = read.read Process.wait2(pid) return result.unpack("m")[0] end end module Subprocess ORIG_ARGV = ARGV.dup unless defined?(ORIG_ARGV) # Crazy H4X to get this working in windows / jruby with # no forking. def run_in_isolation(&blk) require "tempfile" if ENV["ISOLATION_TEST"] proxy = ProxyTestResult.new retval = yield proxy File.open(ENV["ISOLATION_OUTPUT"], "w") do |file| file.puts [Marshal.dump([retval, proxy])].pack("m") end exit! else Tempfile.open("isolation") do |tmpfile| ENV["ISOLATION_TEST"] = @method_name ENV["ISOLATION_OUTPUT"] = tmpfile.path load_paths = $-I.map {|p| "-I\"#{File.expand_path(p)}\"" }.join(" ") `#{Gem.ruby} #{load_paths} #{$0} #{ORIG_ARGV.join(" ")} -t\"#{self.class}\"` ENV.delete("ISOLATION_TEST") ENV.delete("ISOLATION_OUTPUT") return tmpfile.read.unpack("m")[0] end end end end include forking_env? ? Forking : Subprocess end end end # Only in subprocess for windows / jruby. if ENV['ISOLATION_TEST'] require "test/unit/collector/objectspace" class Test::Unit::Collector::ObjectSpace def include?(test) super && test.method_name == ENV['ISOLATION_TEST'] end end end activesupport-3.2.16/lib/active_support/all.rb0000644000175000017500000000013112247654667020767 0ustar ondrejondrejrequire 'active_support' require 'active_support/time' require 'active_support/core_ext' activesupport-3.2.16/lib/active_support/descendants_tracker.rb0000644000175000017500000000224012247654667024230 0ustar ondrejondrejmodule ActiveSupport # This module provides an internal implementation to track descendants # which is faster than iterating through ObjectSpace. module DescendantsTracker @@direct_descendants = Hash.new { |h, k| h[k] = [] } def self.direct_descendants(klass) @@direct_descendants[klass] end def self.descendants(klass) @@direct_descendants[klass].inject([]) do |descendants, _klass| descendants << _klass descendants.concat _klass.descendants end end def self.clear if defined? ActiveSupport::Dependencies @@direct_descendants.each do |klass, descendants| if ActiveSupport::Dependencies.autoloaded?(klass) @@direct_descendants.delete(klass) else descendants.reject! { |v| ActiveSupport::Dependencies.autoloaded?(v) } end end else @@direct_descendants.clear end end def inherited(base) self.direct_descendants << base super end def direct_descendants DescendantsTracker.direct_descendants(self) end def descendants DescendantsTracker.descendants(self) end end end activesupport-3.2.16/lib/active_support/values/0000755000175000017500000000000012247654667021176 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/values/unicode_tables.dat0000644000175000017500000306443712247654667024671 0ustar ondrejondrej[ }EUio:1ActiveSupport::Multibyte::Unicode::Codepoint :@combining_classi:@uppercase_mappingi:@lowercase_mappingi: @codei:@decomp_type0:@decomp_mapping0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;if; iF; 0; 0iGo; ;i;i;ig; iG; 0; 0iHo; ;i;i;ih; iH; 0; 0iIo; ;i;i;ii; iI; 0; 0iJo; ;i;i;ij; iJ; 0; 0iKo; ;i;i;ik; iK; 0; 0iLo; ;i;i;il; iL; 0; 0iMo; ;i;i;im; iM; 0; 0iNo; ;i;i;in; iN; 0; 0iOo; ;i;i;io; iO; 0; 0iPo; ;i;i;ip; iP; 0; 0iQo; ;i;i;iq; iQ; 0; 0iRo; ;i;i;ir; iR; 0; 0iSo; ;i;i;is; iS; 0; 0iTo; ;i;i;it; iT; 0; 0iUo; ;i;i;iu; iU; 0; 0iVo; ;i;i;iv; iV; 0; 0iWo; ;i;i;iw; iW; 0; 0iXo; ;i;i;ix; iX; 0; 0iYo; ;i;i;iy; iY; 0; 0iZo; ;i;i;iz; iZ; 0; 0i[o; ;i;i;i{; i[; 0; 0i\o; ;i;i;i|; i\; 0; 0i]o; ;i;i;i}; i]; 0; 0i^o; ;i;i;i~; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;iF;i; if; 0; 0igo; ;i;iG;i; ig; 0; 0iho; ;i;iH;i; ih; 0; 0iio; ;i;iI;i; ii; 0; 0ijo; ;i;iJ;i; ij; 0; 0iko; ;i;iK;i; ik; 0; 0ilo; ;i;iL;i; il; 0; 0imo; ;i;iM;i; im; 0; 0ino; ;i;iN;i; in; 0; 0ioo; ;i;iO;i; io; 0; 0ipo; ;i;iP;i; ip; 0; 0iqo; ;i;iQ;i; iq; 0; 0iro; ;i;iR;i; ir; 0; 0iso; ;i;iS;i; is; 0; 0ito; ;i;iT;i; it; 0; 0iuo; ;i;iU;i; iu; 0; 0ivo; ;i;iV;i; iv; 0; 0iwo; ;i;iW;i; iw; 0; 0ixo; ;i;iX;i; ix; 0; 0iyo; ;i;iY;i; iy; 0; 0izo; ;i;iZ;i; iz; 0; 0i{o; ;i;i[;i; i{; 0; 0i|o; ;i;i\;i; i|; 0; 0i}o; ;i;i];i; i}; 0; 0i~o; ;i;i^;i; i~; 0; 0io; ;i;i_;i; i; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" noBreak:ET; [i%io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [ifio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [i7io; ;i;i;i; i; I" super; T; [i8io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%i'io; ;i;i;i; i; I" super; T; [i6io; ;i;i;i; i; I" super; T; [itio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" fraction; T; [i6iD i9io; ;i;i;i; i; I" fraction; T; [i6iD i7io; ;i;i;i; i; I" fraction; T; [i8iD i9io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iHi'io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iSiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ihi'io; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [isiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; 0io; ;i;ix;i; i; 0; [i~iio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFi(io; ;i;i;i; i; 0; [ifi(io; ;i;i;i; i; 0; [iHiio; ;i;i;i; i; 0; [ihiio; ;i;i;i ; i; 0; [iHii o; ;i;i;i; i ; 0; [ihii o; ;i;i;i ; i ; 0; [iHii o; ;i;i ;i; i ; 0; [ihii o; ;i;i;i ; i ; 0; [iHi i o; ;i;i ;i; i ; 0; [ihi io; ;i;i;i; i; 0; [iIi io; ;i;i;i; i; 0; [iii io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJi(io; ;i;i;i; i; 0; [iji(io; ;i;i;i; i; 0; [iJi io; ;i;i;i; i; 0; [iji io; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [iliio; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [ilii o; ;i;i;i!; i ; 0; [iLii!o; ;i;i ;i; i!; 0; [ilii"o; ;i;i;i#; i"; 0; [iLi'i#o; ;i;i";i; i#; 0; [ili'i$o; ;i;i;i%; i$; 0; [iMii%o; ;i;i$;i; i%; 0; [imii&o; ;i;i;i'; i&; 0; 0i'o; ;i;i&;i; i'; 0; 0i(o; ;i;i;i); i(; 0; [iNii)o; ;i;i(;i; i); 0; [inii*o; ;i;i;i+; i*; 0; [iNii+o; ;i;i*;i; i+; 0; [inii,o; ;i;i;i-; i,; 0; [iNii-o; ;i;i,;i; i-; 0; [inii.o; ;i;i;i/; i.; 0; [iNi(i/o; ;i;i.;i; i/; 0; [ini(i0o; ;i;i;in; i0; 0; [iNii1o; ;i;iN;i; i1; 0; 0i2o; ;i;i;i3; i2; I" compat; T; [iNiOi3o; ;i;i2;i; i3; I" compat; T; [inioi4o; ;i;i;i5; i4; 0; [iOii5o; ;i;i4;i; i5; 0; [ioii6o; ;i;i;i7; i6; 0; [iPi'i7o; ;i;i6;i; i7; 0; [ipi'i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i:; i9; 0; [iQii:o; ;i;i9;i; i:; 0; [iqii;o; ;i;i;i<; i;; 0; [iQi'i<o; ;i;i;;i; i<; 0; [iqi'i=o; ;i;i;i>; i=; 0; [iQi i>o; ;i;i=;i; i>; 0; [iqi i?o; ;i;i;i@; i?; I" compat; T; [iQii@o; ;i;i?;i; i@; I" compat; T; [iqiiAo; ;i;i;iB; iA; 0; 0iBo; ;i;iA;i; iB; 0; 0iCo; ;i;i;iD; iC; 0; [iSiiDo; ;i;iC;i; iD; 0; [isiiEo; ;i;i;iF; iE; 0; [iSi'iFo; ;i;iE;i; iF; 0; [isi'iGo; ;i;i;iH; iG; 0; [iSi iHo; ;i;iG;i; iH; 0; [isi iIo; ;i;i;i; iI; I" compat; T; [iisiJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; [iTiiMo; ;i;iL;i; iM; 0; [itiiNo; ;i;i;iO; iN; 0; [iTiiOo; ;i;iN;i; iO; 0; [itiiPo; ;i;i;iQ; iP; 0; [iTi iQo; ;i;iP;i; iQ; 0; [iti iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; [iWiiUo; ;i;iT;i; iU; 0; [iwiiVo; ;i;i;iW; iV; 0; [iWi'iWo; ;i;iV;i; iW; 0; [iwi'iXo; ;i;i;iY; iX; 0; [iWi iYo; ;i;iX;i; iY; 0; [iwi iZo; ;i;i;i[; iZ; 0; [iXii[o; ;i;iZ;i; i[; 0; [ixii\o; ;i;i;i]; i\; 0; [iXii]o; ;i;i\;i; i]; 0; [ixii^o; ;i;i;i_; i^; 0; [iXi'i_o; ;i;i^;i; i_; 0; [ixi'i`o; ;i;i;ia; i`; 0; [iXi iao; ;i;i`;i; ia; 0; [ixi ibo; ;i;i;ic; ib; 0; [iYi'ico; ;i;ib;i; ic; 0; [iyi'ido; ;i;i;ie; id; 0; [iYi ieo; ;i;id;i; ie; 0; [iyi ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; [iZiiio; ;i;ih;i; ii; 0; [iziijo; ;i;i;ik; ij; 0; [iZiiko; ;i;ij;i; ik; 0; [iziilo; ;i;i;im; il; 0; [iZiimo; ;i;il;i; im; 0; [iziino; ;i;i;io; in; 0; [iZi ioo; ;i;in;i; io; 0; [izi ipo; ;i;i;iq; ip; 0; [iZi iqo; ;i;ip;i; iq; 0; [izi iro; ;i;i;is; ir; 0; [iZi(iso; ;i;ir;i; is; 0; [izi(ito; ;i;i;iu; it; 0; [i\iiuo; ;i;it;i; iu; 0; [i|iivo; ;i;i;iw; iv; 0; [i^iiwo; ;i;iv;i; iw; 0; [i~iixo; ;i;i;i; ix; 0; [i^iiyo; ;i;i;iz; iy; 0; [i_iizo; ;i;iy;i; iz; 0; [iii{o; ;i;i;i|; i{; 0; [i_ii|o; ;i;i{;i; i|; 0; [iii}o; ;i;i;i~; i}; 0; [i_i i~o; ;i;i};i; i~; 0; [ii io; ;i;iX;i; i; I" compat; T; [ixio; ;i;iC;i; i; 0; 0io; ;i;i;iS; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iT; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iV; i; 0; 0io; ;i;i;iW; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iY; i; 0; 0io; ;i;i;i[; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i`; i; 0; 0io; ;i;i;ic; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;ii; i; 0; 0io; ;i;i;ih; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i=;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;io; i; 0; 0io; ;i;i;ir; i; 0; 0io; ;i;i ;i; i; 0; 0io; ;i;i;iu; i; 0; 0io; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iIi}io; ;i;i;i; i; I" compat; T; [iIi~io; ;i;i;i; i; I" compat; T; [iii~io; ;i;i;i; i; I" compat; T; [iQiOio; ;i;i;i; i; I" compat; T; [iQioio; ;i;i;i; i; I" compat; T; [iqioio; ;i;i;i; i; I" compat; T; [iSiOio; ;i;i;i; i; I" compat; T; [iSioio; ;i;i;i; i; I" compat; T; [isioio; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; [iNi io; ;i;i;i; i; 0; [ini io; ;i;i;i; i; 0; [iTi io; ;i;i;i; i; 0; [iti io; ;i;i;i; i; 0; [iZi io; ;i;i;i; i; 0; [izi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i&iio; ;i;i;i; i; 0; [i'iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iLi io; ;i;i;i; i; 0; [ili io; ;i;i;i; i; 0; [iPi io; ;i;i;i; i; 0; [ipi io; ;i;i;i; i; 0; [iTi(io; ;i;i;i; i; 0; [iti(io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ioi io; ;i;i;i; i; I" compat; T; [iIi_io; ;i;i;i; i; I" compat; T; [iIiio; ;i;i;i; i; I" compat; T; [iiiio; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [iliio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iSiio; ;i;i;i; i; 0; [isiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i ; i; 0; [iNii o; ;i;i;i; i ; 0; [inii o; ;i;i;i ; i ; 0; [iNii o; ;i;i ;i; i ; 0; [inii o; ;i;i;i ; i ; 0; [iTii o; ;i;i ;i; i ; 0; [itiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [iWiio; ;i;i;i; i; 0; [iwiio; ;i;i;i; i; 0; [iWiio; ;i;i;i; i; 0; [iwiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iXi&io; ;i;i;i; i; 0; [ixi&io; ;i;i;i; i; 0; [iYi&io; ;i;i;i; i; 0; [iyi&io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iMi io; ;i;i;i; i; 0; [imi i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i&o; ;i;i;i'; i&; 0; [iFii'o; ;i;i&;i; i'; 0; [ifii(o; ;i;i;i); i(; 0; [iJi'i)o; ;i;i(;i; i); 0; [iji'i*o; ;i;i;i+; i*; 0; [iii+o; ;i;i*;i; i+; 0; [iii,o; ;i;i;i-; i,; 0; [iii-o; ;i;i,;i; i-; 0; [iii.o; ;i;i;i/; i.; 0; [iTii/o; ;i;i.;i; i/; 0; [itii0o; ;i;i;i1; i0; 0; [i.ii1o; ;i;i0;i; i1; 0; [i/ii2o; ;i;i;i3; i2; 0; [i^ii3o; ;i;i2;i; i3; 0; [i~ii4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;ie,; i:; 0; 0i;o; ;i;i;i<; i;; 0; 0i<o; ;i;i;;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;if,; i>; 0; 0i?o; ;i;i~,;i; i?; 0; 0i@o; ;i;i,;i; i@; 0; 0iAo; ;i;i;iB; iA; 0; 0iBo; ;i;iA;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;io,;i; iP; 0; 0iQo; ;i;im,;i; iQ; 0; 0iRo; ;i;ip,;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;ib,;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;in,;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;id,;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;iD;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;iE;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [imio; ;i;i;i; i; I" super; T; [ifio; ;i;i;i; i; I" super; T; [ioio; ;i;i;i; i; I" super; T; [iwio; ;i;i;i; i; I" super; T; [iyio; ;i;i;i; i; I" super; T; [i{io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [i|io; ;i;i;i; i; I" super; T; [i~io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%i io; ;i;i;i; i; I" compat; T; [i%i(io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%i io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [icio; ;i;i;i; i; I" super; T; [iqio; ;i;i;i; i; I" super; T; [ixio; ;i;i;i; i; I" super; T; [i}io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; [iiAo; ;i;i;i; iA; 0; [iiBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iiDo; ;i;i;i; iD; 0; [iiiEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;iq; ip; 0; 0iqo; ;i;ip;i; iq; 0; 0iro; ;i;i;is; ir; 0; 0iso; ;i;ir;i; is; 0; 0ito; ;i;i;i; it; 0; [iiuo; ;i;i;i; iu; 0; 0ivo; ;i;i;iw; iv; 0; 0iwo; ;i;iv;i; iw; 0; 0izo; ;i;i;i; iz; I" compat; T; [i%iEi{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; [i@io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i{; i; 0; 0io; ;i;i;i|; i; 0; 0io; ;i;i;i}; i; 0; 0io; ;i;i;iP; i; 0; [iiio; ;i;i;iQ; i; 0; [iiio; ;i;i;iR; i; 0; 0io; ;i;i;iS; i; 0; [iiio; ;i;i;iT; i; 0; 0io; ;i;i;iU; i; 0; 0io; ;i;i;iV; i; 0; 0io; ;i;i;iW; i; 0; [iiio; ;i;i;iX; i; 0; 0i o; ;i;i;iY; i ; 0; 0i o; ;i;i;iZ; i ; 0; 0i o; ;i;i;i[; i ; 0; 0i o; ;i;i;i\; i ; 0; [iii o; ;i;i;i]; i ; 0; [iiio; ;i;i;i^; i; 0; [i#iio; ;i;i;i_; i; 0; 0io; ;i;i;i0; i; 0; 0io; ;i;i;i1; i; 0; 0io; ;i;i;i2; i; 0; 0io; ;i;i;i3; i; 0; 0io; ;i;i;i4; i; 0; 0io; ;i;i;i5; i; 0; 0io; ;i;i;i6; i; 0; 0io; ;i;i;i7; i; 0; 0io; ;i;i;i8; i; 0; 0io; ;i;i;i9; i; 0; [iiio; ;i;i;i:; i; 0; 0io; ;i;i;i;; i; 0; 0io; ;i;i;i<; i; 0; 0io; ;i;i;i=; i; 0; 0io; ;i;i;i>; i; 0; 0io; ;i;i;i?; i; 0; 0i o; ;i;i;i@; i ; 0; 0i!o; ;i;i;iA; i!; 0; 0i"o; ;i;i;iB; i"; 0; 0i#o; ;i;i;iC; i#; 0; 0i$o; ;i;i;iD; i$; 0; 0i%o; ;i;i;iE; i%; 0; 0i&o; ;i;i;iF; i&; 0; 0i'o; ;i;i;iG; i'; 0; 0i(o; ;i;i;iH; i(; 0; 0i)o; ;i;i;iI; i); 0; 0i*o; ;i;i;iJ; i*; 0; 0i+o; ;i;i;iK; i+; 0; 0i,o; ;i;i;iL; i,; 0; 0i-o; ;i;i;iM; i-; 0; 0i.o; ;i;i;iN; i.; 0; 0i/o; ;i;i;iO; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; [i8ii:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i ;i; i@; 0; 0iAo; ;i;i!;i; iA; 0; 0iBo; ;i;i";i; iB; 0; 0iCo; ;i;i#;i; iC; 0; 0iDo; ;i;i$;i; iD; 0; 0iEo; ;i;i%;i; iE; 0; 0iFo; ;i;i&;i; iF; 0; 0iGo; ;i;i';i; iG; 0; 0iHo; ;i;i(;i; iH; 0; 0iIo; ;i;i);i; iI; 0; 0iJo; ;i;i*;i; iJ; 0; 0iKo; ;i;i+;i; iK; 0; 0iLo; ;i;i,;i; iL; 0; 0iMo; ;i;i-;i; iM; 0; 0iNo; ;i;i.;i; iN; 0; 0iOo; ;i;i/;i; iO; 0; 0iPo; ;i;i;i; iP; 0; [i5iiQo; ;i;i;i; iQ; 0; [i5iiRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; [i3iiTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; [iViiXo; ;i;i;i; iX; 0; 0iYo; ;i;i ;i; iY; 0; 0iZo; ;i;i ;i; iZ; 0; 0i[o; ;i;i ;i; i[; 0; 0i\o; ;i;i ;i; i\; 0; [i:ii]o; ;i;i ;i; i]; 0; [i8ii^o; ;i;i;i; i^; 0; [iCii_o; ;i;i;i; i_; 0; 0i`o; ;i;i;ia; i`; 0; 0iao; ;i;i`;i; ia; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;io; in; 0; 0ioo; ;i;in;i; io; 0; 0ipo; ;i;i;iq; ip; 0; 0iqo; ;i;ip;i; iq; 0; 0iro; ;i;i;is; ir; 0; 0iso; ;i;ir;i; is; 0; 0ito; ;i;i;iu; it; 0; 0iuo; ;i;it;i; iu; 0; 0ivo; ;i;i;iw; iv; 0; [itiiwo; ;i;iv;i; iw; 0; [iuiixo; ;i;i;iy; ix; 0; 0iyo; ;i;ix;i; iy; 0; 0izo; ;i;i;i{; iz; 0; 0i{o; ;i;iz;i; i{; 0; 0i|o; ;i;i;i}; i|; 0; 0i}o; ;i;i|;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i~;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i6iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i0iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i0iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i5iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i6iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i7iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i8iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i8iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i>iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i-iio; ;i;i;i; i; 0; [iMiio; ;i;i;i; i; 0; [i#iio; ;i;i;i; i; 0; [iCiio; ;i;i;i; i; 0; [i#iio; ;i;i;i; i; 0; [iCiio; ;i;i;i; i; 0; [i#i io; ;i;i;i; i; 0; [iCi io; ;i;i;i; i; 0; [i'iio; ;i;i;i; i; 0; [iGiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [i+iio; ;i;i;i; i; 0; [iKiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i ; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i ; i ; 0; 0i o; ;i;i ;i; i ; 0; 0i o; ;i;i;i ; i ; 0; 0i o; ;i;i ;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i!; i ; 0; 0i!o; ;i;i ;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i1o; ;i;i;ia; i1; 0; 0i2o; ;i;i;ib; i2; 0; 0i3o; ;i;i;ic; i3; 0; 0i4o; ;i;i;id; i4; 0; 0i5o; ;i;i;ie; i5; 0; 0i6o; ;i;i;if; i6; 0; 0i7o; ;i;i;ig; i7; 0; 0i8o; ;i;i;ih; i8; 0; 0i9o; ;i;i;ii; i9; 0; 0i:o; ;i;i;ij; i:; 0; 0i;o; ;i;i;ik; i;; 0; 0i<o; ;i;i;il; i<; 0; 0i=o; ;i;i;im; i=; 0; 0i>o; ;i;i;in; i>; 0; 0i?o; ;i;i;io; i?; 0; 0i@o; ;i;i;ip; i@; 0; 0iAo; ;i;i;iq; iA; 0; 0iBo; ;i;i;ir; iB; 0; 0iCo; ;i;i;is; iC; 0; 0iDo; ;i;i;it; iD; 0; 0iEo; ;i;i;iu; iE; 0; 0iFo; ;i;i;iv; iF; 0; 0iGo; ;i;i;iw; iG; 0; 0iHo; ;i;i;ix; iH; 0; 0iIo; ;i;i;iy; iI; 0; 0iJo; ;i;i;iz; iJ; 0; 0iKo; ;i;i;i{; iK; 0; 0iLo; ;i;i;i|; iL; 0; 0iMo; ;i;i;i}; iM; 0; 0iNo; ;i;i;i~; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0iao; ;i;i1;i; ia; 0; 0ibo; ;i;i2;i; ib; 0; 0ico; ;i;i3;i; ic; 0; 0ido; ;i;i4;i; id; 0; 0ieo; ;i;i5;i; ie; 0; 0ifo; ;i;i6;i; if; 0; 0igo; ;i;i7;i; ig; 0; 0iho; ;i;i8;i; ih; 0; 0iio; ;i;i9;i; ii; 0; 0ijo; ;i;i:;i; ij; 0; 0iko; ;i;i;;i; ik; 0; 0ilo; ;i;i<;i; il; 0; 0imo; ;i;i=;i; im; 0; 0ino; ;i;i>;i; in; 0; 0ioo; ;i;i?;i; io; 0; 0ipo; ;i;i@;i; ip; 0; 0iqo; ;i;iA;i; iq; 0; 0iro; ;i;iB;i; ir; 0; 0iso; ;i;iC;i; is; 0; 0ito; ;i;iD;i; it; 0; 0iuo; ;i;iE;i; iu; 0; 0ivo; ;i;iF;i; iv; 0; 0iwo; ;i;iG;i; iw; 0; 0ixo; ;i;iH;i; ix; 0; 0iyo; ;i;iI;i; iy; 0; 0izo; ;i;iJ;i; iz; 0; 0i{o; ;i;iK;i; i{; 0; 0i|o; ;i;iL;i; i|; 0; 0i}o; ;i;iM;i; i}; 0; 0i~o; ;i;iN;i; i~; 0; 0io; ;i;iO;i; i; 0; 0io; ;i;iP;i; i; 0; 0io; ;i;iQ;i; i; 0; 0io; ;i;iR;i; i; 0; 0io; ;i;iS;i; i; 0; 0io; ;i;iT;i; i; 0; 0io; ;i;iU;i; i; 0; 0io; ;i;iV;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [ieiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i#;i;i; i; 0; 0io; ;i$;i;i; i; 0; 0io; ;i%;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; [i'iSi#o; ;i;i;i; i#; 0; [i'iTi$o; ;i;i;i; i$; 0; [iHiTi%o; ;i;i;i; i%; 0; [i'iUi&o; ;i;i;i; i&; 0; [iJiTi'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i ;i;i; iK; 0; 0iLo; ;i!;i;i; iL; 0; 0iMo; ;i";i;i; iM; 0; 0iNo; ;i#;i;i; iN; 0; 0iOo; ;i$;i;i; iO; 0; 0iPo; ;i%;i;i; iP; 0; 0iQo; ;i&;i;i; iQ; 0; 0iRo; ;i';i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i(;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; I" compat; T; [i'itivo; ;i;i;i; iv; I" compat; T; [iHitiwo; ;i;i;i; iw; I" compat; T; [iitixo; ;i;i;i; ix; I" compat; T; [iJitiyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i);i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; [i( i< i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; [i0 i< i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; [i3 i< i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iX o; ;i;i;i; iX ; 0; [i i< iY o; ;i;i;i; iY ; 0; [i i< iZ o; ;i;i;i; iZ ; 0; [i i< i[ o; ;i;i;i; i[ ; 0; [i i< i\ o; ;i;i;i; i\ ; 0; [i! i< i] o; ;i;i;i; i] ; 0; [i" i< i^ o; ;i;i;i; i^ ; 0; [i+ i< i_ o; ;i;i;i; i_ ; 0; [i/ i< i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; [i2 i< i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; [i8 i< i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iY o; ;i;i;i; iY ; 0; [i i< iZ o; ;i;i;i; iZ ; 0; [i i< i[ o; ;i;i;i; i[ ; 0; [i i< i\ o; ;i;i;i; i\ ; 0; 0i^ o; ;i;i;i; i^ ; 0; [i+ i< if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; [iG iV iK o; ;i;i;i; iK ; 0; [iG i> iL o; ;i;i;i; iL ; 0; [iG iW iM o; ;i;i;i; iM ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0i\ o; ;i;i;i; i\ ; 0; [i! i< i] o; ;i;i;i; i] ; 0; [i" i< i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; [iF iV iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iU o; ;iY;i;i; iU ; 0; 0iV o; ;i`;i;i; iV ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iJ o; ;i;i;i; iJ ; 0; [iF i> iK o; ;i;i;i; iK ; 0; [iG i> iL o; ;i;i;i; iL ; 0; [iF iW iM o; ;i;i;i; iM ; 0; 0iW o; ;i;i;i; iW ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; I" compat; T; [iMi2i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;il;i;i; i8; 0; 0i9o; ;il;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;ip;i;i; iH; 0; 0iIo; ;ip;i;i; iI; 0; 0iJo; ;ip;i;i; iJ; 0; 0iKo; ;ip;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i{;i;i; i; 0; 0io; ;i{;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" noBreak; T; [i i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iBiiDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; [iLiiNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; [iQiiSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; [iViiXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; [i[ii]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; [i@iijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; [iqirito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; [iqitivo; ;i;i;i; iv; 0; [iiiwo; ;i;i;i; iw; I" compat; T; [iiixo; ;i;i;i; ix; 0; [iiiyo; ;i;i;i; iy; I" compat; T; [iiizo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iqiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; [i%i.i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i ;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i!-; i; 0; 0io; ;i;i;i"-; i; 0; 0io; ;i;i;i#-; i; 0; 0io; ;i;i;i$-; i; 0; 0io; ;i;i;i%-; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iXo; ;i;i;i; iX; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i@o; ;i;i;i; i@; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i5i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i5i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; [i i5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i ;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; [i:i5i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; [i<i5i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; [i>i5iAo; ;i;i;i; iA; 0; [i?i5iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iBi5iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i ;i;i; i7; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; I" super; T; [iFi-o; ;i;i;i; i-; I" super; T; [ii.o; ;i;i;i; i.; I" super; T; [iGi/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; I" super; T; [iIi1o; ;i;i;i; i1; I" super; T; [iJi2o; ;i;i;i; i2; I" super; T; [ii3o; ;i;i;i; i3; I" super; T; [iLi4o; ;i;i;i; i4; I" super; T; [iMi5o; ;i;i;i; i5; I" super; T; [iNi6o; ;i;i;i; i6; I" super; T; [iOi7o; ;i;i;i; i7; I" super; T; [iPi8o; ;i;i;i; i8; I" super; T; [iQi9o; ;i;i;i; i9; I" super; T; [iRi:o; ;i;i;i; i:; I" super; T; [iSi;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; I" super; T; [iTi=o; ;i;i;i; i=; I" super; T; [i"i>o; ;i;i;i; i>; I" super; T; [iUi?o; ;i;i;i; i?; I" super; T; [iWi@o; ;i;i;i; i@; I" super; T; [iYiAo; ;i;i;i; iA; I" super; T; [iZiBo; ;i;i;i; iB; I" super; T; [i\iCo; ;i;i;i; iC; I" super; T; [ifiDo; ;i;i;i; iD; I" super; T; [iPiEo; ;i;i;i; iE; I" super; T; [iQiFo; ;i;i;i; iF; I" super; T; [iiGo; ;i;i;i; iG; I" super; T; [igiHo; ;i;i;i; iH; I" super; T; [iiiIo; ;i;i;i; iI; I" super; T; [ijiJo; ;i;i;i; iJ; I" super; T; [iYiKo; ;i;i;i; iK; I" super; T; [i[iLo; ;i;i;i; iL; I" super; T; [i\iMo; ;i;i;i; iM; I" super; T; [iliNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; I" super; T; [ipiPo; ;i;i;i; iP; I" super; T; [iriQo; ;i;i;i; iQ; I" super; T; [iKiRo; ;i;i;i; iR; I" super; T; [itiSo; ;i;i;i; iS; I" super; T; [iTiTo; ;i;i;i; iT; I" super; T; [iiUo; ;i;i;i; iU; I" super; T; [iiVo; ;i;i;i; iV; I" super; T; [iuiWo; ;i;i;i; iW; I" super; T; [iyiXo; ;i;i;i; iX; I" super; T; [iziYo; ;i;i;i; iY; I" super; T; [iiZo; ;i;i;i; iZ; I" super; T; [ioi[o; ;i;i;i; i[; I" super; T; [i{i\o; ;i;i;i; i\; I" super; T; [i%i]o; ;i;i;i; i]; I" super; T; [ii^o; ;i;i;i; i^; I" super; T; [ii_o; ;i;i;i; i_; I" super; T; [ii`o; ;i;i;i; i`; I" super; T; [iiao; ;i;i;i; ia; I" super; T; [iibo; ;i;i;i; ib; I"sub; T; [inico; ;i;i;i; ic; I"sub; T; [iwido; ;i;i;i; id; I"sub; T; [izieo; ;i;i;i; ie; I"sub; T; [i{ifo; ;i;i;i; if; I"sub; T; [iigo; ;i;i;i; ig; I"sub; T; [iiho; ;i;i;i; ih; I"sub; T; [iiio; ;i;i;i; ii; I"sub; T; [iijo; ;i;i;i; ij; I"sub; T; [iiko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; I" super; T; [i=iyo; ;i;i};i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;ic,;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [iRio; ;i;i;i; i; I" super; T; [ihio; ;i;i;i; i; I" super; T; [iUio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [i\io; ;i;i;i; i; I" super; T; [ikio; ;i;i;i; i; I" super; T; [i_io; ;i;i;i; i; I" super; T; [iaio; ;i;i;i; i; I" super; T; [ieio; ;i;i;i; i; I" super; T; [ihio; ;i;i;i; i; I" super; T; [iiio; ;i;i;i; i; I" super; T; [ijio; ;i;i;i; i; I" super; T; [i{io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [imio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iqio; ;i;i;i; i; I" super; T; [ipio; ;i;i;i; i; I" super; T; [irio; ;i;i;i; i; I" super; T; [isio; ;i;i;i; i; I" super; T; [itio; ;i;i;i; i; I" super; T; [iuio; ;i;i;i; i; I" super; T; [ixio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFi%io; ;i;i;i; i; 0; [ifi%io; ;i;i;i; i; 0; [iGiio; ;i;i;i; i; 0; [igiio; ;i;i;i; i; 0; [iGi#io; ;i;i;i; i; 0; [igi#io; ;i;i;i; i; 0; [iGi1io; ;i;i;i; i; 0; [igi1io; ;i;i;i ; i; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i ; i ; 0; [iIii o; ;i;i ;i; i ; 0; [iiii o; ;i;i;i ; i ; 0; [iIi#i o; ;i;i ;i; i ; 0; [iii#io; ;i;i;i; i; 0; [iIi1io; ;i;i;i; i; 0; [iii1io; ;i;i;i; i; 0; [iIi'io; ;i;i;i; i; 0; [iii'io; ;i;i;i; i; 0; [iIi-io; ;i;i;i; i; 0; [iii-io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iJi-io; ;i;i;i; i; 0; [iji-io; ;i;i;i; i; 0; [iJi0io; ;i;i;i; i; 0; [iji0io; ;i;i;i; i; 0; [i(iio; ;i;i;i; i; 0; [i)iio; ;i;i;i; i; 0; [iKiio; ;i;i;i; i; 0; [ikii o; ;i;i;i!; i ; 0; [iLii!o; ;i;i ;i; i!; 0; [ilii"o; ;i;i;i#; i"; 0; [iMii#o; ;i;i";i; i#; 0; [imii$o; ;i;i;i%; i$; 0; [iMi#i%o; ;i;i$;i; i%; 0; [imi#i&o; ;i;i;i'; i&; 0; [iMii'o; ;i;i&;i; i'; 0; [imii(o; ;i;i;i); i(; 0; [iMi'i)o; ;i;i(;i; i); 0; [imi'i*o; ;i;i;i+; i*; 0; [iMi.i+o; ;i;i*;i; i+; 0; [imi.i,o; ;i;i;i-; i,; 0; [iNi0i-o; ;i;i,;i; i-; 0; [ini0i.o; ;i;i;i/; i.; 0; [iii/o; ;i;i.;i; i/; 0; [iii0o; ;i;i;i1; i0; 0; [iPii1o; ;i;i0;i; i1; 0; [ipii2o; ;i;i;i3; i2; 0; [iPi#i3o; ;i;i2;i; i3; 0; [ipi#i4o; ;i;i;i5; i4; 0; [iPi1i5o; ;i;i4;i; i5; 0; [ipi1i6o; ;i;i;i7; i6; 0; [iQi#i7o; ;i;i6;i; i7; 0; [iqi#i8o; ;i;i;i9; i8; 0; [i6ii9o; ;i;i8;i; i9; 0; [i7ii:o; ;i;i;i;; i:; 0; [iQi1i;o; ;i;i:;i; i;; 0; [iqi1i<o; ;i;i;i=; i<; 0; [iQi-i=o; ;i;i<;i; i=; 0; [iqi-i>o; ;i;i;i?; i>; 0; [iRii?o; ;i;i>;i; i?; 0; [irii@o; ;i;i;iA; i@; 0; [iRiiAo; ;i;i@;i; iA; 0; [iriiBo; ;i;i;iC; iB; 0; [iRi#iCo; ;i;iB;i; iC; 0; [iri#iDo; ;i;i;iE; iD; 0; [iSiiEo; ;i;iD;i; iE; 0; [isiiFo; ;i;i;iG; iF; 0; [iSi#iGo; ;i;iF;i; iG; 0; [isi#iHo; ;i;i;iI; iH; 0; [iSi1iIo; ;i;iH;i; iI; 0; [isi1iJo; ;i;i;iK; iJ; 0; [iSi-iKo; ;i;iJ;i; iK; 0; [isi-iLo; ;i;i;iM; iL; 0; [iiiMo; ;i;iL;i; iM; 0; [iiiNo; ;i;i;iO; iN; 0; [iiiOo; ;i;iN;i; iO; 0; [iiiPo; ;i;i;iQ; iP; 0; [iLiiQo; ;i;iP;i; iQ; 0; [iMiiRo; ;i;i;iS; iR; 0; [iLiiSo; ;i;iR;i; iS; 0; [iMiiTo; ;i;i;iU; iT; 0; [iUiiUo; ;i;iT;i; iU; 0; [iuiiVo; ;i;i;iW; iV; 0; [iUiiWo; ;i;iV;i; iW; 0; [iuiiXo; ;i;i;iY; iX; 0; [iWiiYo; ;i;iX;i; iY; 0; [iwiiZo; ;i;i;i[; iZ; 0; [iWi#i[o; ;i;iZ;i; i[; 0; [iwi#i\o; ;i;i;i]; i\; 0; [iZii]o; ;i;i\;i; i]; 0; [i[ii^o; ;i;i;i_; i^; 0; [iWi1i_o; ;i;i^;i; i_; 0; [iwi1i`o; ;i;i;ia; i`; 0; [iXiiao; ;i;i`;i; ia; 0; [ixiibo; ;i;i;ic; ib; 0; [iXi#ico; ;i;ib;i; ic; 0; [ixi#ido; ;i;i;ie; id; 0; [iZiieo; ;i;id;i; ie; 0; [i[iifo; ;i;i;ig; if; 0; [i`iigo; ;i;if;i; ig; 0; [iaiiho; ;i;i;ii; ih; 0; [ibiiio; ;i;ih;i; ii; 0; [iciijo; ;i;i;ik; ij; 0; [iYiiko; ;i;ij;i; ik; 0; [iyiilo; ;i;i;im; il; 0; [iYi#imo; ;i;il;i; im; 0; [iyi#ino; ;i;i;io; in; 0; [iYi1ioo; ;i;in;i; io; 0; [iyi1ipo; ;i;i;iq; ip; 0; [iYi-iqo; ;i;ip;i; iq; 0; [iyi-iro; ;i;i;is; ir; 0; [iZi$iso; ;i;ir;i; is; 0; [izi$ito; ;i;i;iu; it; 0; [iZi0iuo; ;i;it;i; iu; 0; [izi0ivo; ;i;i;iw; iv; 0; [iZi-iwo; ;i;iv;i; iw; 0; [izi-ixo; ;i;i;iy; ix; 0; [ihiiyo; ;i;ix;i; iy; 0; [iiiizo; ;i;i;i{; iz; 0; [ijii{o; ;i;iz;i; i{; 0; [ikii|o; ;i;i;i}; i|; 0; [i[ii}o; ;i;i|;i; i}; 0; [i{ii~o; ;i;i;i; i~; 0; [i[i#io; ;i;i~;i; i; 0; [i{i#io; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\i#io; ;i;i;i; i; 0; [i|i#io; ;i;i;i; i; 0; [i]iio; ;i;i;i; i; 0; [i}iio; ;i;i;i; i; 0; [i]iio; ;i;i;i; i; 0; [i}iio; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; [i_iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i_i#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [i_i1io; ;i;i;i; i; 0; [ii1io; ;i;i;i; i; 0; [imi1io; ;i;i;i; i; 0; [iyiio; ;i;i;i; i; 0; [i|i io; ;i;i;i; i; 0; [i~i io; ;i;i;i; i; I" compat; T; [ifiio; ;i;i`;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFi#io; ;i;i;i; i; 0; [ifi#io; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iJi#io; ;i;i;i; i; 0; [iji#io; ;i;i;i; i; 0; [iJi io; ;i;i;i; i; 0; [iji io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iNi io; ;i;i;i; i; 0; [ini io; ;i;i;i; i; 0; [iNi#io; ;i;i;i; i; 0; [ini#io; ;i;i;i; i; 0; [iTi#io; ;i;i;i; i; 0; [iti#io; ;i;i;i; i; 0; [iTi io; ;i;i;i; i; 0; [iti io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [iZi#io; ;i;i;i; i; 0; [izi#io; ;i;i;i; i; 0; [iZi io; ;i;i;i; i; 0; [izi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; [i^i#io; ;i;i;i; i; 0; [i~i#io; ;i;i;i; i; 0; [i^i io; ;i;i;i; i; 0; [i~i io; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [i ii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [i iio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [i iBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iii o; ;i;i(;i; i ; 0; [iii!o; ;i;i);i; i!; 0; [iii"o; ;i;i*;i; i"; 0; [i ii#o; ;i;i+;i; i#; 0; [i!ii$o; ;i;i,;i; i$; 0; [i ii%o; ;i;i-;i; i%; 0; [i!ii&o; ;i;i.;i; i&; 0; [i iBi'o; ;i;i/;i; i'; 0; [i!iBi(o; ;i;i;i ; i(; 0; [iii)o; ;i;i;i!; i); 0; [iii*o; ;i;i;i"; i*; 0; [i(ii+o; ;i;i;i#; i+; 0; [i)ii,o; ;i;i;i$; i,; 0; [i(ii-o; ;i;i;i%; i-; 0; [i)ii.o; ;i;i;i&; i.; 0; [i(iBi/o; ;i;i;i'; i/; 0; [i)iBi0o; ;i;i8;i; i0; 0; [iii1o; ;i;i9;i; i1; 0; [iii2o; ;i;i:;i; i2; 0; [i0ii3o; ;i;i;;i; i3; 0; [i1ii4o; ;i;i<;i; i4; 0; [i0ii5o; ;i;i=;i; i5; 0; [i1ii6o; ;i;i>;i; i6; 0; [i0iBi7o; ;i;i?;i; i7; 0; [i1iBi8o; ;i;i;i0; i8; 0; [iii9o; ;i;i;i1; i9; 0; [iii:o; ;i;i;i2; i:; 0; [i8ii;o; ;i;i;i3; i;; 0; [i9ii<o; ;i;i;i4; i<; 0; [i8ii=o; ;i;i;i5; i=; 0; [i9ii>o; ;i;i;i6; i>; 0; [i8iBi?o; ;i;i;i7; i?; 0; [i9iBi@o; ;i;iH;i; i@; 0; [iiiAo; ;i;iI;i; iA; 0; [iiiBo; ;i;iJ;i; iB; 0; [i@iiCo; ;i;iK;i; iC; 0; [iAiiDo; ;i;iL;i; iD; 0; [i@iiEo; ;i;iM;i; iE; 0; [iAiiHo; ;i;i;i@; iH; 0; [iiiIo; ;i;i;iA; iI; 0; [iiiJo; ;i;i;iB; iJ; 0; [iHiiKo; ;i;i;iC; iK; 0; [iIiiLo; ;i;i;iD; iL; 0; [iHiiMo; ;i;i;iE; iM; 0; [iIiiPo; ;i;i;i; iP; 0; [iiiQo; ;i;iY;i; iQ; 0; [iiiRo; ;i;i;i; iR; 0; [iPiiSo; ;i;i[;i; iS; 0; [iQiiTo; ;i;i;i; iT; 0; [iPiiUo; ;i;i];i; iU; 0; [iQiiVo; ;i;i;i; iV; 0; [iPiBiWo; ;i;i_;i; iW; 0; [iQiBiYo; ;i;i;iQ; iY; 0; [iii[o; ;i;i;iS; i[; 0; [iYii]o; ;i;i;iU; i]; 0; [iYii_o; ;i;i;iW; i_; 0; [iYiBi`o; ;i;ih;i; i`; 0; [iiiao; ;i;ii;i; ia; 0; [iiibo; ;i;ij;i; ib; 0; [i`iico; ;i;ik;i; ic; 0; [iaiido; ;i;il;i; id; 0; [i`iieo; ;i;im;i; ie; 0; [iaiifo; ;i;in;i; if; 0; [i`iBigo; ;i;io;i; ig; 0; [iaiBiho; ;i;i;i`; ih; 0; [iiiio; ;i;i;ia; ii; 0; [iiijo; ;i;i;ib; ij; 0; [ihiiko; ;i;i;ic; ik; 0; [iiiilo; ;i;i;id; il; 0; [ihiimo; ;i;i;ie; im; 0; [iiiino; ;i;i;if; in; 0; [ihiBioo; ;i;i;ig; io; 0; [iiiBipo; ;i;i;i; ip; 0; [iiiqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [iiiso; ;i;i;i; is; 0; [iito; ;i;i;i; it; 0; [iiiuo; ;i;i;i; iu; 0; [iivo; ;i;i;i; iv; 0; [iiiwo; ;i;i;i; iw; 0; [iixo; ;i;i;i; ix; 0; [iiiyo; ;i;i;i; iy; 0; [iizo; ;i;i;i; iz; 0; [iii{o; ;i;i;i; i{; 0; [ii|o; ;i;i;i; i|; 0; [iii}o; ;i;i;i; i}; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i!iEio; ;i;i;i; i; 0; [i"iEio; ;i;i;i; i; 0; [i#iEio; ;i;i;i; i; 0; [i$iEio; ;i;i;i; i; 0; [i%iEio; ;i;i;i; i; 0; [i&iEio; ;i;i;i; i; 0; [i'iEio; ;i;i;i; i; 0; [i(iEio; ;i;i;i; i; 0; [i)iEio; ;i;i;i; i; 0; [i*iEio; ;i;i;i; i; 0; [i+iEio; ;i;i;i; i; 0; [i,iEio; ;i;i;i; i; 0; [i-iEio; ;i;i;i; i; 0; [i.iEio; ;i;i;i; i; 0; [i/iEio; ;i;i;i; i; 0; [i`iEio; ;i;i;i; i; 0; [iaiEio; ;i;i;i; i; 0; [ibiEio; ;i;i;i; i; 0; [iciEio; ;i;i;i; i; 0; [idiEio; ;i;i;i; i; 0; [ieiEio; ;i;i;i; i; 0; [ifiEio; ;i;i;i; i; 0; [igiEio; ;i;i;i; i; 0; [ihiEio; ;i;i;i; i; 0; [iiiEio; ;i;i;i; i; 0; [ijiEio; ;i;i;i; i; 0; [ikiEio; ;i;i;i; i; 0; [iliEio; ;i;i;i; i; 0; [imiEio; ;i;i;i; i; 0; [iniEio; ;i;i;i; i; 0; [ioiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ipiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;ip; i; 0; [iiio; ;i;i;iq; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%iBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [itiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;ir; i; 0; [iiio; ;i;i;is; i; 0; [iio; ;i;i;it; i; 0; [iiio; ;i;i;iu; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;iv; i; 0; [iiio; ;i;i;iw; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;iz; i; 0; [iiio; ;i;i;i{; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [i|iEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;ix; i; 0; [iiio; ;i;i;iy; i; 0; [iio; ;i;i;i|; i; 0; [iiio; ;i;i;i}; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [i%ii o; ;i;i;i; i ; 0; [i i o; ;i;i;i; i ; 0; [i i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" noBreak; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" noBreak; T; [i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" compat; T; [i%i3i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; I" compat; T; [i3i% o; ;i;i;i; i% ; I" compat; T; [i3i3i& o; ;i;i;i; i& ; I" compat; T; [i3i3i3i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; I" noBreak; T; [i%i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; I" compat; T; [i2 i2 i4 o; ;i;i;i; i4 ; I" compat; T; [i2 i2 i2 i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; I" compat; T; [i5 i5 i7 o; ;i;i;i; i7 ; I" compat; T; [i5 i5 i5 i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; I" compat; T; [i&i&i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; I" compat; T; [i%ii? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; I" compat; T; [iDiDiH o; ;i;i;i; iH ; I" compat; T; [iDi&iI o; ;i;i;i; iI ; I" compat; T; [i&iDiJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; I" compat; T; [ i2 i2 i2 i2 iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; I" compat; T; [i%i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; I" super; T; [i5iq o; ;i;i;i; iq ; I" super; T; [init o; ;i;i;i; it ; I" super; T; [i9iu o; ;i;i;i; iu ; I" super; T; [i:iv o; ;i;i;i; iv ; I" super; T; [i;iw o; ;i;i;i; iw ; I" super; T; [iiz o; ;i;i;i; iz ; I" super; T; [i0i{ o; ;i;i;i; i{ ; I" super; T; [i"i| o; ;i;i;i; i| ; I" super; T; [iBi} o; ;i;i;i; i} ; I" super; T; [i-i~ o; ;i;i;i; i~ ; I" super; T; [i.i o; ;i;i;i; i ; I" super; T; [isi o; ;i;i;i; i ; I"sub; T; [i5i o; ;i;i;i; i ; I"sub; T; [i6i o; ;i;i;i; i ; I"sub; T; [i7i o; ;i;i;i; i ; I"sub; T; [i8i o; ;i;i;i; i ; I"sub; T; [i9i o; ;i;i;i; i ; I"sub; T; [i:i o; ;i;i;i; i ; I"sub; T; [i;i o; ;i;i;i; i ; I"sub; T; [ii o; ;i;i;i; i ; I"sub; T; [i0i o; ;i;i;i; i ; I"sub; T; [i"i o; ;i;i;i; i ; I"sub; T; [iBi o; ;i;i;i; i ; I"sub; T; [i-i o; ;i;i;i; i ; I"sub; T; [i.i o; ;i;i;i; i ; I"sub; T; [ifi o; ;i;i;i; i ; I"sub; T; [iji o; ;i;i;i; i ; I"sub; T; [iti o; ;i;i;i; i ; I"sub; T; [i}i o; ;i;i;i; i ; I"sub; T; [iYi o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" compat; T; [iWixi o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; I" compat; T; [ifi4ihi!o; ;i;i;i; i!; I" compat; T; [ifi4ixi!o; ;i;i;i; i!; I" font; T; [iHi!o; ;i;i;i; i!; I" compat; T; [iiHi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" compat; T; [ihi4iti!o; ;i;i;i; i!; I" compat; T; [ihi4izi!o; ;i;i;i; i!; I" compat; T; [ii!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; I" compat; T; [iiKi !o; ;i;i;i; i !; I" font; T; [ili !o; ;i;i;i; i !; I" font; T; [iMi !o; ;i;i;i; i !; I" font; T; [iMi !o; ;i;i;i; i !; I" font; T; [iMi!o; ;i;i;i; i!; I" font; T; [imi!o; ;i;i;i; i!; I" font; T; [i'i!o; ;i;i;i; i!; I" font; T; [iNi!o; ;i;i;i; i!; I" font; T; [iNi!o; ;i;i;i; i!; I" font; T; [iQi!o; ;i;i;i; i!; I" font; T; [iqi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" font; T; [iSi!o; ;i;i;i; i!; I" compat; T; [iSiti!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" font; T; [iUi!o; ;i;i;i; i!; I" font; T; [iVi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; I" super; T; [iXiRi!!o; ;i;i;i; i!!; I" compat; T; [iYiJiQi"!o; ;i;i;i; i"!; I" super; T; [iYiRi#!o; ;i;i;i; i#!; 0; 0i$!o; ;i;i;i; i$!; I" font; T; [i_i%!o; ;i;i;i; i%!; 0; 0i&!o; ;i;i;i; i&!; 0; [ii'!o; ;i;i;i; i'!; 0; 0i(!o; ;i;i;i; i(!; I" font; T; [i_i)!o; ;i;i;i; i)!; 0; 0i*!o; ;i;i;ip; i*!; 0; [iPi+!o; ;i;i;i; i+!; 0; [ii,!o; ;i;i;i; i,!; I" font; T; [iGi-!o; ;i;i;i; i-!; I" font; T; [iHi.!o; ;i;i;i; i.!; 0; 0i/!o; ;i;i;i; i/!; I" font; T; [iji0!o; ;i;i;i; i0!; I" font; T; [iJi1!o; ;i;i;i; i1!; I" font; T; [iKi2!o; ;i;i;iN!; i2!; 0; 0i3!o; ;i;i;i; i3!; I" font; T; [iRi4!o; ;i;i;i; i4!; I" font; T; [iti5!o; ;i;i;i; i5!; I" compat; T; [ii6!o; ;i;i;i; i6!; I" compat; T; [ii7!o; ;i;i;i; i7!; I" compat; T; [ii8!o; ;i;i;i; i8!; I" compat; T; [ii9!o; ;i;i;i; i9!; I" font; T; [ini:!o; ;i;i;i; i:!; 0; 0i;!o; ;i;i;i; i;!; I" compat; T; [iKiFi]i!o; ;i;i;i; i>!; I" font; T; [ii?!o; ;i;i;i; i?!; I" font; T; [ii@!o; ;i;i;i; i@!; I" font; T; [i"iA!o; ;i;i;i; iA!; 0; 0iB!o; ;i;i;i; iB!; 0; 0iC!o; ;i;i;i; iC!; 0; 0iD!o; ;i;i;i; iD!; 0; 0iE!o; ;i;i;i; iE!; I" font; T; [iIiF!o; ;i;i;i; iF!; I" font; T; [iiiG!o; ;i;i;i; iG!; I" font; T; [ijiH!o; ;i;i;i; iH!; I" font; T; [iniI!o; ;i;i;i; iI!; I" font; T; [ioiJ!o; ;i;i;i; iJ!; 0; 0iK!o; ;i;i;i; iK!; 0; 0iL!o; ;i;i;i; iL!; 0; 0iM!o; ;i;i;i; iM!; 0; 0iN!o; ;i;i2!;i; iN!; 0; 0iO!o; ;i;i;i; iO!; 0; 0iP!o; ;i;i;i; iP!; I" fraction; T; [i6iD iiR!o; ;i;i;i; iR!; I" fraction; T; [ i6iD i6i5iS!o; ;i;i;i; iS!; I" fraction; T; [i6iD i8iT!o; ;i;i;i; iT!; I" fraction; T; [i7iD i8iU!o; ;i;i;i; iU!; I" fraction; T; [i6iD i:iV!o; ;i;i;i; iV!; I" fraction; T; [i7iD i:iW!o; ;i;i;i; iW!; I" fraction; T; [i8iD i:iX!o; ;i;i;i; iX!; I" fraction; T; [i9iD i:iY!o; ;i;i;i; iY!; I" fraction; T; [i6iD i;iZ!o; ;i;i;i; iZ!; I" fraction; T; [i:iD i;i[!o; ;i;i;i; i[!; I" fraction; T; [i6iD i=i\!o; ;i;i;i; i\!; I" fraction; T; [i8iD i=i]!o; ;i;i;i; i]!; I" fraction; T; [i:iD i=i^!o; ;i;i;i; i^!; I" fraction; T; [i"o; ;i;i;i; i>"; 0; 0i?"o; ;i;i;i; i?"; 0; 0i@"o; ;i;i;i; i@"; 0; 0iA"o; ;i;i;i; iA"; 0; [i<"i8iB"o; ;i;i;i; iB"; 0; 0iC"o; ;i;i;i; iC"; 0; 0iD"o; ;i;i;i; iD"; 0; [iC"i8iE"o; ;i;i;i; iE"; 0; 0iF"o; ;i;i;i; iF"; 0; 0iG"o; ;i;i;i; iG"; 0; [iE"i8iH"o; ;i;i;i; iH"; 0; 0iI"o; ;i;i;i; iI"; 0; [iH"i8iJ"o; ;i;i;i; iJ"; 0; 0iK"o; ;i;i;i; iK"; 0; 0iL"o; ;i;i;i; iL"; 0; 0iM"o; ;i;i;i; iM"; 0; 0iN"o; ;i;i;i; iN"; 0; 0iO"o; ;i;i;i; iO"; 0; 0iP"o; ;i;i;i; iP"; 0; 0iQ"o; ;i;i;i; iQ"; 0; 0iR"o; ;i;i;i; iR"; 0; 0iS"o; ;i;i;i; iS"; 0; 0iT"o; ;i;i;i; iT"; 0; 0iU"o; ;i;i;i; iU"; 0; 0iV"o; ;i;i;i; iV"; 0; 0iW"o; ;i;i;i; iW"; 0; 0iX"o; ;i;i;i; iX"; 0; 0iY"o; ;i;i;i; iY"; 0; 0iZ"o; ;i;i;i; iZ"; 0; 0i["o; ;i;i;i; i["; 0; 0i\"o; ;i;i;i; i\"; 0; 0i]"o; ;i;i;i; i]"; 0; 0i^"o; ;i;i;i; i^"; 0; 0i_"o; ;i;i;i; i_"; 0; 0i`"o; ;i;i;i; i`"; 0; [iBi8ia"o; ;i;i;i; ia"; 0; 0ib"o; ;i;i;i; ib"; 0; [ia"i8ic"o; ;i;i;i; ic"; 0; 0id"o; ;i;i;i; id"; 0; 0ie"o; ;i;i;i; ie"; 0; 0if"o; ;i;i;i; if"; 0; 0ig"o; ;i;i;i; ig"; 0; 0ih"o; ;i;i;i; ih"; 0; 0ii"o; ;i;i;i; ii"; 0; 0ij"o; ;i;i;i; ij"; 0; 0ik"o; ;i;i;i; ik"; 0; 0il"o; ;i;i;i; il"; 0; 0im"o; ;i;i;i; im"; 0; [iM"i8in"o; ;i;i;i; in"; 0; [iAi8io"o; ;i;i;i; io"; 0; [iCi8ip"o; ;i;i;i; ip"; 0; [id"i8iq"o; ;i;i;i; iq"; 0; [ie"i8ir"o; ;i;i;i; ir"; 0; 0is"o; ;i;i;i; is"; 0; 0it"o; ;i;i;i; it"; 0; [ir"i8iu"o; ;i;i;i; iu"; 0; [is"i8iv"o; ;i;i;i; iv"; 0; 0iw"o; ;i;i;i; iw"; 0; 0ix"o; ;i;i;i; ix"; 0; [iv"i8iy"o; ;i;i;i; iy"; 0; [iw"i8iz"o; ;i;i;i; iz"; 0; 0i{"o; ;i;i;i; i{"; 0; 0i|"o; ;i;i;i; i|"; 0; 0i}"o; ;i;i;i; i}"; 0; 0i~"o; ;i;i;i; i~"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [iz"i8i"o; ;i;i;i; i"; 0; [i{"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i|"i8i"o; ;i;i;i; i"; 0; [i}"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i!#o; ;i;i;i; i!#; 0; 0i"#o; ;i;i;i; i"#; 0; 0i##o; ;i;i;i; i##; 0; 0i$#o; ;i;i;i; i$#; 0; 0i%#o; ;i;i;i; i%#; 0; 0i&#o; ;i;i;i; i&#; 0; 0i'#o; ;i;i;i; i'#; 0; 0i(#o; ;i;i;i; i(#; 0; 0i)#o; ;i;i;i; i)#; 0; [i0i*#o; ;i;i;i; i*#; 0; [i 0i+#o; ;i;i;i; i+#; 0; 0i,#o; ;i;i;i; i,#; 0; 0i-#o; ;i;i;i; i-#; 0; 0i.#o; ;i;i;i; i.#; 0; 0i/#o; ;i;i;i; i/#; 0; 0i0#o; ;i;i;i; i0#; 0; 0i1#o; ;i;i;i; i1#; 0; 0i2#o; ;i;i;i; i2#; 0; 0i3#o; ;i;i;i; i3#; 0; 0i4#o; ;i;i;i; i4#; 0; 0i5#o; ;i;i;i; i5#; 0; 0i6#o; ;i;i;i; i6#; 0; 0i7#o; ;i;i;i; i7#; 0; 0i8#o; ;i;i;i; i8#; 0; 0i9#o; ;i;i;i; i9#; 0; 0i:#o; ;i;i;i; i:#; 0; 0i;#o; ;i;i;i; i;#; 0; 0i<#o; ;i;i;i; i<#; 0; 0i=#o; ;i;i;i; i=#; 0; 0i>#o; ;i;i;i; i>#; 0; 0i?#o; ;i;i;i; i?#; 0; 0i@#o; ;i;i;i; i@#; 0; 0iA#o; ;i;i;i; iA#; 0; 0iB#o; ;i;i;i; iB#; 0; 0iC#o; ;i;i;i; iC#; 0; 0iD#o; ;i;i;i; iD#; 0; 0iE#o; ;i;i;i; iE#; 0; 0iF#o; ;i;i;i; iF#; 0; 0iG#o; ;i;i;i; iG#; 0; 0iH#o; ;i;i;i; iH#; 0; 0iI#o; ;i;i;i; iI#; 0; 0iJ#o; ;i;i;i; iJ#; 0; 0iK#o; ;i;i;i; iK#; 0; 0iL#o; ;i;i;i; iL#; 0; 0iM#o; ;i;i;i; iM#; 0; 0iN#o; ;i;i;i; iN#; 0; 0iO#o; ;i;i;i; iO#; 0; 0iP#o; ;i;i;i; iP#; 0; 0iQ#o; ;i;i;i; iQ#; 0; 0iR#o; ;i;i;i; iR#; 0; 0iS#o; ;i;i;i; iS#; 0; 0iT#o; ;i;i;i; iT#; 0; 0iU#o; ;i;i;i; iU#; 0; 0iV#o; ;i;i;i; iV#; 0; 0iW#o; ;i;i;i; iW#; 0; 0iX#o; ;i;i;i; iX#; 0; 0iY#o; ;i;i;i; iY#; 0; 0iZ#o; ;i;i;i; iZ#; 0; 0i[#o; ;i;i;i; i[#; 0; 0i\#o; ;i;i;i; i\#; 0; 0i]#o; ;i;i;i; i]#; 0; 0i^#o; ;i;i;i; i^#; 0; 0i_#o; ;i;i;i; i_#; 0; 0i`#o; ;i;i;i; i`#; 0; 0ia#o; ;i;i;i; ia#; 0; 0ib#o; ;i;i;i; ib#; 0; 0ic#o; ;i;i;i; ic#; 0; 0id#o; ;i;i;i; id#; 0; 0ie#o; ;i;i;i; ie#; 0; 0if#o; ;i;i;i; if#; 0; 0ig#o; ;i;i;i; ig#; 0; 0ih#o; ;i;i;i; ih#; 0; 0ii#o; ;i;i;i; ii#; 0; 0ij#o; ;i;i;i; ij#; 0; 0ik#o; ;i;i;i; ik#; 0; 0il#o; ;i;i;i; il#; 0; 0im#o; ;i;i;i; im#; 0; 0in#o; ;i;i;i; in#; 0; 0io#o; ;i;i;i; io#; 0; 0ip#o; ;i;i;i; ip#; 0; 0iq#o; ;i;i;i; iq#; 0; 0ir#o; ;i;i;i; ir#; 0; 0is#o; ;i;i;i; is#; 0; 0it#o; ;i;i;i; it#; 0; 0iu#o; ;i;i;i; iu#; 0; 0iv#o; ;i;i;i; iv#; 0; 0iw#o; ;i;i;i; iw#; 0; 0ix#o; ;i;i;i; ix#; 0; 0iy#o; ;i;i;i; iy#; 0; 0iz#o; ;i;i;i; iz#; 0; 0i{#o; ;i;i;i; i{#; 0; 0i|#o; ;i;i;i; i|#; 0; 0i}#o; ;i;i;i; i}#; 0; 0i~#o; ;i;i;i; i~#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i!$o; ;i;i;i; i!$; 0; 0i"$o; ;i;i;i; i"$; 0; 0i#$o; ;i;i;i; i#$; 0; 0i$$o; ;i;i;i; i$$; 0; 0i%$o; ;i;i;i; i%$; 0; 0i&$o; ;i;i;i; i&$; 0; 0i@$o; ;i;i;i; i@$; 0; 0iA$o; ;i;i;i; iA$; 0; 0iB$o; ;i;i;i; iB$; 0; 0iC$o; ;i;i;i; iC$; 0; 0iD$o; ;i;i;i; iD$; 0; 0iE$o; ;i;i;i; iE$; 0; 0iF$o; ;i;i;i; iF$; 0; 0iG$o; ;i;i;i; iG$; 0; 0iH$o; ;i;i;i; iH$; 0; 0iI$o; ;i;i;i; iI$; 0; 0iJ$o; ;i;i;i; iJ$; 0; 0i`$o; ;i;i;i; i`$; I" circle; T; [i6ia$o; ;i;i;i; ia$; I" circle; T; [i7ib$o; ;i;i;i; ib$; I" circle; T; [i8ic$o; ;i;i;i; ic$; I" circle; T; [i9id$o; ;i;i;i; id$; I" circle; T; [i:ie$o; ;i;i;i; ie$; I" circle; T; [i;if$o; ;i;i;i; if$; I" circle; T; [iii$o; ;i;i;i; ii$; I" circle; T; [i6i5ij$o; ;i;i;i; ij$; I" circle; T; [i6i6ik$o; ;i;i;i; ik$; I" circle; T; [i6i7il$o; ;i;i;i; il$; I" circle; T; [i6i8im$o; ;i;i;i; im$; I" circle; T; [i6i9in$o; ;i;i;i; in$; I" circle; T; [i6i:io$o; ;i;i;i; io$; I" circle; T; [i6i;ip$o; ;i;i;i; ip$; I" circle; T; [i6iis$o; ;i;i;i; is$; I" circle; T; [i7i5it$o; ;i;i;i; it$; I" compat; T; [i-i6i.iu$o; ;i;i;i; iu$; I" compat; T; [i-i7i.iv$o; ;i;i;i; iv$; I" compat; T; [i-i8i.iw$o; ;i;i;i; iw$; I" compat; T; [i-i9i.ix$o; ;i;i;i; ix$; I" compat; T; [i-i:i.iy$o; ;i;i;i; iy$; I" compat; T; [i-i;i.iz$o; ;i;i;i; iz$; I" compat; T; [i-ii.i}$o; ;i;i;i; i}$; I" compat; T; [ i-i6i5i.i~$o; ;i;i;i; i~$; I" compat; T; [ i-i6i6i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i7i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i8i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i9i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i:i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i;i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6ii.i$o; ;i;i;i; i$; I" compat; T; [ i-i7i5i.i$o; ;i;i;i; i$; I" compat; T; [i6i3i$o; ;i;i;i; i$; I" compat; T; [i7i3i$o; ;i;i;i; i$; I" compat; T; [i8i3i$o; ;i;i;i; i$; I" compat; T; [i9i3i$o; ;i;i;i; i$; I" compat; T; [i:i3i$o; ;i;i;i; i$; I" compat; T; [i;i3i$o; ;i;i;i; i$; I" compat; T; [ii3i$o; ;i;i;i; i$; I" compat; T; [i6i5i3i$o; ;i;i;i; i$; I" compat; T; [i6i6i3i$o; ;i;i;i; i$; I" compat; T; [i6i7i3i$o; ;i;i;i; i$; I" compat; T; [i6i8i3i$o; ;i;i;i; i$; I" compat; T; [i6i9i3i$o; ;i;i;i; i$; I" compat; T; [i6i:i3i$o; ;i;i;i; i$; I" compat; T; [i6i;i3i$o; ;i;i;i; i$; I" compat; T; [i6ii3i$o; ;i;i;i; i$; I" compat; T; [i7i5i3i$o; ;i;i;i; i$; I" compat; T; [i-ifi.i$o; ;i;i;i; i$; I" compat; T; [i-igi.i$o; ;i;i;i; i$; I" compat; T; [i-ihi.i$o; ;i;i;i; i$; I" compat; T; [i-iii.i$o; ;i;i;i; i$; I" compat; T; [i-iji.i$o; ;i;i;i; i$; I" compat; T; [i-iki.i$o; ;i;i;i; i$; I" compat; T; [i-ili.i$o; ;i;i;i; i$; I" compat; T; [i-imi.i$o; ;i;i;i; i$; I" compat; T; [i-ini.i$o; ;i;i;i; i$; I" compat; T; [i-ioi.i$o; ;i;i;i; i$; I" compat; T; [i-ipi.i$o; ;i;i;i; i$; I" compat; T; [i-iqi.i$o; ;i;i;i; i$; I" compat; T; [i-iri.i$o; ;i;i;i; i$; I" compat; T; [i-isi.i$o; ;i;i;i; i$; I" compat; T; [i-iti.i$o; ;i;i;i; i$; I" compat; T; [i-iui.i$o; ;i;i;i; i$; I" compat; T; [i-ivi.i$o; ;i;i;i; i$; I" compat; T; [i-iwi.i$o; ;i;i;i; i$; I" compat; T; [i-ixi.i$o; ;i;i;i; i$; I" compat; T; [i-iyi.i$o; ;i;i;i; i$; I" compat; T; [i-izi.i$o; ;i;i;i; i$; I" compat; T; [i-i{i.i$o; ;i;i;i; i$; I" compat; T; [i-i|i.i$o; ;i;i;i; i$; I" compat; T; [i-i}i.i$o; ;i;i;i; i$; I" compat; T; [i-i~i.i$o; ;i;i;i; i$; I" compat; T; [i-ii.i$o; ;i;i;i$; i$; I" circle; T; [iFi$o; ;i;i;i$; i$; I" circle; T; [iGi$o; ;i;i;i$; i$; I" circle; T; [iHi$o; ;i;i;i$; i$; I" circle; T; [iIi$o; ;i;i;i$; i$; I" circle; T; [iJi$o; ;i;i;i$; i$; I" circle; T; [iKi$o; ;i;i;i$; i$; I" circle; T; [iLi$o; ;i;i;i$; i$; I" circle; T; [iMi$o; ;i;i;i$; i$; I" circle; T; [iNi$o; ;i;i;i$; i$; I" circle; T; [iOi$o; ;i;i;i$; i$; I" circle; T; [iPi$o; ;i;i;i$; i$; I" circle; T; [iQi$o; ;i;i;i$; i$; I" circle; T; [iRi$o; ;i;i;i$; i$; I" circle; T; [iSi$o; ;i;i;i$; i$; I" circle; T; [iTi$o; ;i;i;i$; i$; I" circle; T; [iUi$o; ;i;i;i$; i$; I" circle; T; [iVi$o; ;i;i;i$; i$; I" circle; T; [iWi$o; ;i;i;i$; i$; I" circle; T; [iXi$o; ;i;i;i$; i$; I" circle; T; [iYi$o; ;i;i;i$; i$; I" circle; T; [iZi$o; ;i;i;i$; i$; I" circle; T; [i[i$o; ;i;i;i$; i$; I" circle; T; [i\i$o; ;i;i;i$; i$; I" circle; T; [i]i$o; ;i;i;i$; i$; I" circle; T; [i^i$o; ;i;i;i$; i$; I" circle; T; [i_i$o; ;i;i$;i; i$; I" circle; T; [ifi$o; ;i;i$;i; i$; I" circle; T; [igi$o; ;i;i$;i; i$; I" circle; T; [ihi$o; ;i;i$;i; i$; I" circle; T; [iii$o; ;i;i$;i; i$; I" circle; T; [iji$o; ;i;i$;i; i$; I" circle; T; [iki$o; ;i;i$;i; i$; I" circle; T; [ili$o; ;i;i$;i; i$; I" circle; T; [imi$o; ;i;i$;i; i$; I" circle; T; [ini$o; ;i;i$;i; i$; I" circle; T; [ioi$o; ;i;i$;i; i$; I" circle; T; [ipi$o; ;i;i$;i; i$; I" circle; T; [iqi$o; ;i;i$;i; i$; I" circle; T; [iri$o; ;i;i$;i; i$; I" circle; T; [isi$o; ;i;i$;i; i$; I" circle; T; [iti$o; ;i;i$;i; i$; I" circle; T; [iui$o; ;i;i$;i; i$; I" circle; T; [ivi$o; ;i;i$;i; i$; I" circle; T; [iwi$o; ;i;i$;i; i$; I" circle; T; [ixi$o; ;i;i$;i; i$; I" circle; T; [iyi$o; ;i;i$;i; i$; I" circle; T; [izi$o; ;i;i$;i; i$; I" circle; T; [i{i$o; ;i;i$;i; i$; I" circle; T; [i|i$o; ;i;i$;i; i$; I" circle; T; [i}i$o; ;i;i$;i; i$; I" circle; T; [i~i$o; ;i;i$;i; i$; I" circle; T; [ii$o; ;i;i;i; i$; I" circle; T; [i5i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i %o; ;i;i;i; i %; 0; 0i!%o; ;i;i;i; i!%; 0; 0i"%o; ;i;i;i; i"%; 0; 0i#%o; ;i;i;i; i#%; 0; 0i$%o; ;i;i;i; i$%; 0; 0i%%o; ;i;i;i; i%%; 0; 0i&%o; ;i;i;i; i&%; 0; 0i'%o; ;i;i;i; i'%; 0; 0i(%o; ;i;i;i; i(%; 0; 0i)%o; ;i;i;i; i)%; 0; 0i*%o; ;i;i;i; i*%; 0; 0i+%o; ;i;i;i; i+%; 0; 0i,%o; ;i;i;i; i,%; 0; 0i-%o; ;i;i;i; i-%; 0; 0i.%o; ;i;i;i; i.%; 0; 0i/%o; ;i;i;i; i/%; 0; 0i0%o; ;i;i;i; i0%; 0; 0i1%o; ;i;i;i; i1%; 0; 0i2%o; ;i;i;i; i2%; 0; 0i3%o; ;i;i;i; i3%; 0; 0i4%o; ;i;i;i; i4%; 0; 0i5%o; ;i;i;i; i5%; 0; 0i6%o; ;i;i;i; i6%; 0; 0i7%o; ;i;i;i; i7%; 0; 0i8%o; ;i;i;i; i8%; 0; 0i9%o; ;i;i;i; i9%; 0; 0i:%o; ;i;i;i; i:%; 0; 0i;%o; ;i;i;i; i;%; 0; 0i<%o; ;i;i;i; i<%; 0; 0i=%o; ;i;i;i; i=%; 0; 0i>%o; ;i;i;i; i>%; 0; 0i?%o; ;i;i;i; i?%; 0; 0i@%o; ;i;i;i; i@%; 0; 0iA%o; ;i;i;i; iA%; 0; 0iB%o; ;i;i;i; iB%; 0; 0iC%o; ;i;i;i; iC%; 0; 0iD%o; ;i;i;i; iD%; 0; 0iE%o; ;i;i;i; iE%; 0; 0iF%o; ;i;i;i; iF%; 0; 0iG%o; ;i;i;i; iG%; 0; 0iH%o; ;i;i;i; iH%; 0; 0iI%o; ;i;i;i; iI%; 0; 0iJ%o; ;i;i;i; iJ%; 0; 0iK%o; ;i;i;i; iK%; 0; 0iL%o; ;i;i;i; iL%; 0; 0iM%o; ;i;i;i; iM%; 0; 0iN%o; ;i;i;i; iN%; 0; 0iO%o; ;i;i;i; iO%; 0; 0iP%o; ;i;i;i; iP%; 0; 0iQ%o; ;i;i;i; iQ%; 0; 0iR%o; ;i;i;i; iR%; 0; 0iS%o; ;i;i;i; iS%; 0; 0iT%o; ;i;i;i; iT%; 0; 0iU%o; ;i;i;i; iU%; 0; 0iV%o; ;i;i;i; iV%; 0; 0iW%o; ;i;i;i; iW%; 0; 0iX%o; ;i;i;i; iX%; 0; 0iY%o; ;i;i;i; iY%; 0; 0iZ%o; ;i;i;i; iZ%; 0; 0i[%o; ;i;i;i; i[%; 0; 0i\%o; ;i;i;i; i\%; 0; 0i]%o; ;i;i;i; i]%; 0; 0i^%o; ;i;i;i; i^%; 0; 0i_%o; ;i;i;i; i_%; 0; 0i`%o; ;i;i;i; i`%; 0; 0ia%o; ;i;i;i; ia%; 0; 0ib%o; ;i;i;i; ib%; 0; 0ic%o; ;i;i;i; ic%; 0; 0id%o; ;i;i;i; id%; 0; 0ie%o; ;i;i;i; ie%; 0; 0if%o; ;i;i;i; if%; 0; 0ig%o; ;i;i;i; ig%; 0; 0ih%o; ;i;i;i; ih%; 0; 0ii%o; ;i;i;i; ii%; 0; 0ij%o; ;i;i;i; ij%; 0; 0ik%o; ;i;i;i; ik%; 0; 0il%o; ;i;i;i; il%; 0; 0im%o; ;i;i;i; im%; 0; 0in%o; ;i;i;i; in%; 0; 0io%o; ;i;i;i; io%; 0; 0ip%o; ;i;i;i; ip%; 0; 0iq%o; ;i;i;i; iq%; 0; 0ir%o; ;i;i;i; ir%; 0; 0is%o; ;i;i;i; is%; 0; 0it%o; ;i;i;i; it%; 0; 0iu%o; ;i;i;i; iu%; 0; 0iv%o; ;i;i;i; iv%; 0; 0iw%o; ;i;i;i; iw%; 0; 0ix%o; ;i;i;i; ix%; 0; 0iy%o; ;i;i;i; iy%; 0; 0iz%o; ;i;i;i; iz%; 0; 0i{%o; ;i;i;i; i{%; 0; 0i|%o; ;i;i;i; i|%; 0; 0i}%o; ;i;i;i; i}%; 0; 0i~%o; ;i;i;i; i~%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i &o; ;i;i;i; i &; 0; 0i!&o; ;i;i;i; i!&; 0; 0i"&o; ;i;i;i; i"&; 0; 0i#&o; ;i;i;i; i#&; 0; 0i$&o; ;i;i;i; i$&; 0; 0i%&o; ;i;i;i; i%&; 0; 0i&&o; ;i;i;i; i&&; 0; 0i'&o; ;i;i;i; i'&; 0; 0i(&o; ;i;i;i; i(&; 0; 0i)&o; ;i;i;i; i)&; 0; 0i*&o; ;i;i;i; i*&; 0; 0i+&o; ;i;i;i; i+&; 0; 0i,&o; ;i;i;i; i,&; 0; 0i-&o; ;i;i;i; i-&; 0; 0i.&o; ;i;i;i; i.&; 0; 0i/&o; ;i;i;i; i/&; 0; 0i0&o; ;i;i;i; i0&; 0; 0i1&o; ;i;i;i; i1&; 0; 0i2&o; ;i;i;i; i2&; 0; 0i3&o; ;i;i;i; i3&; 0; 0i4&o; ;i;i;i; i4&; 0; 0i5&o; ;i;i;i; i5&; 0; 0i6&o; ;i;i;i; i6&; 0; 0i7&o; ;i;i;i; i7&; 0; 0i8&o; ;i;i;i; i8&; 0; 0i9&o; ;i;i;i; i9&; 0; 0i:&o; ;i;i;i; i:&; 0; 0i;&o; ;i;i;i; i;&; 0; 0i<&o; ;i;i;i; i<&; 0; 0i=&o; ;i;i;i; i=&; 0; 0i>&o; ;i;i;i; i>&; 0; 0i?&o; ;i;i;i; i?&; 0; 0i@&o; ;i;i;i; i@&; 0; 0iA&o; ;i;i;i; iA&; 0; 0iB&o; ;i;i;i; iB&; 0; 0iC&o; ;i;i;i; iC&; 0; 0iD&o; ;i;i;i; iD&; 0; 0iE&o; ;i;i;i; iE&; 0; 0iF&o; ;i;i;i; iF&; 0; 0iG&o; ;i;i;i; iG&; 0; 0iH&o; ;i;i;i; iH&; 0; 0iI&o; ;i;i;i; iI&; 0; 0iJ&o; ;i;i;i; iJ&; 0; 0iK&o; ;i;i;i; iK&; 0; 0iL&o; ;i;i;i; iL&; 0; 0iM&o; ;i;i;i; iM&; 0; 0iN&o; ;i;i;i; iN&; 0; 0iO&o; ;i;i;i; iO&; 0; 0iP&o; ;i;i;i; iP&; 0; 0iQ&o; ;i;i;i; iQ&; 0; 0iR&o; ;i;i;i; iR&; 0; 0iS&o; ;i;i;i; iS&; 0; 0iT&o; ;i;i;i; iT&; 0; 0iU&o; ;i;i;i; iU&; 0; 0iV&o; ;i;i;i; iV&; 0; 0iW&o; ;i;i;i; iW&; 0; 0iX&o; ;i;i;i; iX&; 0; 0iY&o; ;i;i;i; iY&; 0; 0iZ&o; ;i;i;i; iZ&; 0; 0i[&o; ;i;i;i; i[&; 0; 0i\&o; ;i;i;i; i\&; 0; 0i]&o; ;i;i;i; i]&; 0; 0i^&o; ;i;i;i; i^&; 0; 0i_&o; ;i;i;i; i_&; 0; 0i`&o; ;i;i;i; i`&; 0; 0ia&o; ;i;i;i; ia&; 0; 0ib&o; ;i;i;i; ib&; 0; 0ic&o; ;i;i;i; ic&; 0; 0id&o; ;i;i;i; id&; 0; 0ie&o; ;i;i;i; ie&; 0; 0if&o; ;i;i;i; if&; 0; 0ig&o; ;i;i;i; ig&; 0; 0ih&o; ;i;i;i; ih&; 0; 0ii&o; ;i;i;i; ii&; 0; 0ij&o; ;i;i;i; ij&; 0; 0ik&o; ;i;i;i; ik&; 0; 0il&o; ;i;i;i; il&; 0; 0im&o; ;i;i;i; im&; 0; 0in&o; ;i;i;i; in&; 0; 0io&o; ;i;i;i; io&; 0; 0ip&o; ;i;i;i; ip&; 0; 0iq&o; ;i;i;i; iq&; 0; 0ir&o; ;i;i;i; ir&; 0; 0is&o; ;i;i;i; is&; 0; 0it&o; ;i;i;i; it&; 0; 0iu&o; ;i;i;i; iu&; 0; 0iv&o; ;i;i;i; iv&; 0; 0iw&o; ;i;i;i; iw&; 0; 0ix&o; ;i;i;i; ix&; 0; 0iy&o; ;i;i;i; iy&; 0; 0iz&o; ;i;i;i; iz&; 0; 0i{&o; ;i;i;i; i{&; 0; 0i|&o; ;i;i;i; i|&; 0; 0i}&o; ;i;i;i; i}&; 0; 0i~&o; ;i;i;i; i~&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i 'o; ;i;i;i; i '; 0; 0i!'o; ;i;i;i; i!'; 0; 0i"'o; ;i;i;i; i"'; 0; 0i#'o; ;i;i;i; i#'; 0; 0i$'o; ;i;i;i; i$'; 0; 0i%'o; ;i;i;i; i%'; 0; 0i&'o; ;i;i;i; i&'; 0; 0i''o; ;i;i;i; i''; 0; 0i)'o; ;i;i;i; i)'; 0; 0i*'o; ;i;i;i; i*'; 0; 0i+'o; ;i;i;i; i+'; 0; 0i,'o; ;i;i;i; i,'; 0; 0i-'o; ;i;i;i; i-'; 0; 0i.'o; ;i;i;i; i.'; 0; 0i/'o; ;i;i;i; i/'; 0; 0i0'o; ;i;i;i; i0'; 0; 0i1'o; ;i;i;i; i1'; 0; 0i2'o; ;i;i;i; i2'; 0; 0i3'o; ;i;i;i; i3'; 0; 0i4'o; ;i;i;i; i4'; 0; 0i5'o; ;i;i;i; i5'; 0; 0i6'o; ;i;i;i; i6'; 0; 0i7'o; ;i;i;i; i7'; 0; 0i8'o; ;i;i;i; i8'; 0; 0i9'o; ;i;i;i; i9'; 0; 0i:'o; ;i;i;i; i:'; 0; 0i;'o; ;i;i;i; i;'; 0; 0i<'o; ;i;i;i; i<'; 0; 0i='o; ;i;i;i; i='; 0; 0i>'o; ;i;i;i; i>'; 0; 0i?'o; ;i;i;i; i?'; 0; 0i@'o; ;i;i;i; i@'; 0; 0iA'o; ;i;i;i; iA'; 0; 0iB'o; ;i;i;i; iB'; 0; 0iC'o; ;i;i;i; iC'; 0; 0iD'o; ;i;i;i; iD'; 0; 0iE'o; ;i;i;i; iE'; 0; 0iF'o; ;i;i;i; iF'; 0; 0iG'o; ;i;i;i; iG'; 0; 0iH'o; ;i;i;i; iH'; 0; 0iI'o; ;i;i;i; iI'; 0; 0iJ'o; ;i;i;i; iJ'; 0; 0iK'o; ;i;i;i; iK'; 0; 0iM'o; ;i;i;i; iM'; 0; 0iO'o; ;i;i;i; iO'; 0; 0iP'o; ;i;i;i; iP'; 0; 0iQ'o; ;i;i;i; iQ'; 0; 0iR'o; ;i;i;i; iR'; 0; 0iV'o; ;i;i;i; iV'; 0; 0iW'o; ;i;i;i; iW'; 0; 0iX'o; ;i;i;i; iX'; 0; 0iY'o; ;i;i;i; iY'; 0; 0iZ'o; ;i;i;i; iZ'; 0; 0i['o; ;i;i;i; i['; 0; 0i\'o; ;i;i;i; i\'; 0; 0i]'o; ;i;i;i; i]'; 0; 0i^'o; ;i;i;i; i^'; 0; 0ia'o; ;i;i;i; ia'; 0; 0ib'o; ;i;i;i; ib'; 0; 0ic'o; ;i;i;i; ic'; 0; 0id'o; ;i;i;i; id'; 0; 0ie'o; ;i;i;i; ie'; 0; 0if'o; ;i;i;i; if'; 0; 0ig'o; ;i;i;i; ig'; 0; 0ih'o; ;i;i;i; ih'; 0; 0ii'o; ;i;i;i; ii'; 0; 0ij'o; ;i;i;i; ij'; 0; 0ik'o; ;i;i;i; ik'; 0; 0il'o; ;i;i;i; il'; 0; 0im'o; ;i;i;i; im'; 0; 0in'o; ;i;i;i; in'; 0; 0io'o; ;i;i;i; io'; 0; 0ip'o; ;i;i;i; ip'; 0; 0iq'o; ;i;i;i; iq'; 0; 0ir'o; ;i;i;i; ir'; 0; 0is'o; ;i;i;i; is'; 0; 0it'o; ;i;i;i; it'; 0; 0iu'o; ;i;i;i; iu'; 0; 0iv'o; ;i;i;i; iv'; 0; 0iw'o; ;i;i;i; iw'; 0; 0ix'o; ;i;i;i; ix'; 0; 0iy'o; ;i;i;i; iy'; 0; 0iz'o; ;i;i;i; iz'; 0; 0i{'o; ;i;i;i; i{'; 0; 0i|'o; ;i;i;i; i|'; 0; 0i}'o; ;i;i;i; i}'; 0; 0i~'o; ;i;i;i; i~'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i (o; ;i;i;i; i (; 0; 0i!(o; ;i;i;i; i!(; 0; 0i"(o; ;i;i;i; i"(; 0; 0i#(o; ;i;i;i; i#(; 0; 0i$(o; ;i;i;i; i$(; 0; 0i%(o; ;i;i;i; i%(; 0; 0i&(o; ;i;i;i; i&(; 0; 0i'(o; ;i;i;i; i'(; 0; 0i((o; ;i;i;i; i((; 0; 0i)(o; ;i;i;i; i)(; 0; 0i*(o; ;i;i;i; i*(; 0; 0i+(o; ;i;i;i; i+(; 0; 0i,(o; ;i;i;i; i,(; 0; 0i-(o; ;i;i;i; i-(; 0; 0i.(o; ;i;i;i; i.(; 0; 0i/(o; ;i;i;i; i/(; 0; 0i0(o; ;i;i;i; i0(; 0; 0i1(o; ;i;i;i; i1(; 0; 0i2(o; ;i;i;i; i2(; 0; 0i3(o; ;i;i;i; i3(; 0; 0i4(o; ;i;i;i; i4(; 0; 0i5(o; ;i;i;i; i5(; 0; 0i6(o; ;i;i;i; i6(; 0; 0i7(o; ;i;i;i; i7(; 0; 0i8(o; ;i;i;i; i8(; 0; 0i9(o; ;i;i;i; i9(; 0; 0i:(o; ;i;i;i; i:(; 0; 0i;(o; ;i;i;i; i;(; 0; 0i<(o; ;i;i;i; i<(; 0; 0i=(o; ;i;i;i; i=(; 0; 0i>(o; ;i;i;i; i>(; 0; 0i?(o; ;i;i;i; i?(; 0; 0i@(o; ;i;i;i; i@(; 0; 0iA(o; ;i;i;i; iA(; 0; 0iB(o; ;i;i;i; iB(; 0; 0iC(o; ;i;i;i; iC(; 0; 0iD(o; ;i;i;i; iD(; 0; 0iE(o; ;i;i;i; iE(; 0; 0iF(o; ;i;i;i; iF(; 0; 0iG(o; ;i;i;i; iG(; 0; 0iH(o; ;i;i;i; iH(; 0; 0iI(o; ;i;i;i; iI(; 0; 0iJ(o; ;i;i;i; iJ(; 0; 0iK(o; ;i;i;i; iK(; 0; 0iL(o; ;i;i;i; iL(; 0; 0iM(o; ;i;i;i; iM(; 0; 0iN(o; ;i;i;i; iN(; 0; 0iO(o; ;i;i;i; iO(; 0; 0iP(o; ;i;i;i; iP(; 0; 0iQ(o; ;i;i;i; iQ(; 0; 0iR(o; ;i;i;i; iR(; 0; 0iS(o; ;i;i;i; iS(; 0; 0iT(o; ;i;i;i; iT(; 0; 0iU(o; ;i;i;i; iU(; 0; 0iV(o; ;i;i;i; iV(; 0; 0iW(o; ;i;i;i; iW(; 0; 0iX(o; ;i;i;i; iX(; 0; 0iY(o; ;i;i;i; iY(; 0; 0iZ(o; ;i;i;i; iZ(; 0; 0i[(o; ;i;i;i; i[(; 0; 0i\(o; ;i;i;i; i\(; 0; 0i](o; ;i;i;i; i](; 0; 0i^(o; ;i;i;i; i^(; 0; 0i_(o; ;i;i;i; i_(; 0; 0i`(o; ;i;i;i; i`(; 0; 0ia(o; ;i;i;i; ia(; 0; 0ib(o; ;i;i;i; ib(; 0; 0ic(o; ;i;i;i; ic(; 0; 0id(o; ;i;i;i; id(; 0; 0ie(o; ;i;i;i; ie(; 0; 0if(o; ;i;i;i; if(; 0; 0ig(o; ;i;i;i; ig(; 0; 0ih(o; ;i;i;i; ih(; 0; 0ii(o; ;i;i;i; ii(; 0; 0ij(o; ;i;i;i; ij(; 0; 0ik(o; ;i;i;i; ik(; 0; 0il(o; ;i;i;i; il(; 0; 0im(o; ;i;i;i; im(; 0; 0in(o; ;i;i;i; in(; 0; 0io(o; ;i;i;i; io(; 0; 0ip(o; ;i;i;i; ip(; 0; 0iq(o; ;i;i;i; iq(; 0; 0ir(o; ;i;i;i; ir(; 0; 0is(o; ;i;i;i; is(; 0; 0it(o; ;i;i;i; it(; 0; 0iu(o; ;i;i;i; iu(; 0; 0iv(o; ;i;i;i; iv(; 0; 0iw(o; ;i;i;i; iw(; 0; 0ix(o; ;i;i;i; ix(; 0; 0iy(o; ;i;i;i; iy(; 0; 0iz(o; ;i;i;i; iz(; 0; 0i{(o; ;i;i;i; i{(; 0; 0i|(o; ;i;i;i; i|(; 0; 0i}(o; ;i;i;i; i}(; 0; 0i~(o; ;i;i;i; i~(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i )o; ;i;i;i; i ); 0; 0i!)o; ;i;i;i; i!); 0; 0i")o; ;i;i;i; i"); 0; 0i#)o; ;i;i;i; i#); 0; 0i$)o; ;i;i;i; i$); 0; 0i%)o; ;i;i;i; i%); 0; 0i&)o; ;i;i;i; i&); 0; 0i')o; ;i;i;i; i'); 0; 0i()o; ;i;i;i; i(); 0; 0i))o; ;i;i;i; i)); 0; 0i*)o; ;i;i;i; i*); 0; 0i+)o; ;i;i;i; i+); 0; 0i,)o; ;i;i;i; i,); 0; 0i-)o; ;i;i;i; i-); 0; 0i.)o; ;i;i;i; i.); 0; 0i/)o; ;i;i;i; i/); 0; 0i0)o; ;i;i;i; i0); 0; 0i1)o; ;i;i;i; i1); 0; 0i2)o; ;i;i;i; i2); 0; 0i3)o; ;i;i;i; i3); 0; 0i4)o; ;i;i;i; i4); 0; 0i5)o; ;i;i;i; i5); 0; 0i6)o; ;i;i;i; i6); 0; 0i7)o; ;i;i;i; i7); 0; 0i8)o; ;i;i;i; i8); 0; 0i9)o; ;i;i;i; i9); 0; 0i:)o; ;i;i;i; i:); 0; 0i;)o; ;i;i;i; i;); 0; 0i<)o; ;i;i;i; i<); 0; 0i=)o; ;i;i;i; i=); 0; 0i>)o; ;i;i;i; i>); 0; 0i?)o; ;i;i;i; i?); 0; 0i@)o; ;i;i;i; i@); 0; 0iA)o; ;i;i;i; iA); 0; 0iB)o; ;i;i;i; iB); 0; 0iC)o; ;i;i;i; iC); 0; 0iD)o; ;i;i;i; iD); 0; 0iE)o; ;i;i;i; iE); 0; 0iF)o; ;i;i;i; iF); 0; 0iG)o; ;i;i;i; iG); 0; 0iH)o; ;i;i;i; iH); 0; 0iI)o; ;i;i;i; iI); 0; 0iJ)o; ;i;i;i; iJ); 0; 0iK)o; ;i;i;i; iK); 0; 0iL)o; ;i;i;i; iL); 0; 0iM)o; ;i;i;i; iM); 0; 0iN)o; ;i;i;i; iN); 0; 0iO)o; ;i;i;i; iO); 0; 0iP)o; ;i;i;i; iP); 0; 0iQ)o; ;i;i;i; iQ); 0; 0iR)o; ;i;i;i; iR); 0; 0iS)o; ;i;i;i; iS); 0; 0iT)o; ;i;i;i; iT); 0; 0iU)o; ;i;i;i; iU); 0; 0iV)o; ;i;i;i; iV); 0; 0iW)o; ;i;i;i; iW); 0; 0iX)o; ;i;i;i; iX); 0; 0iY)o; ;i;i;i; iY); 0; 0iZ)o; ;i;i;i; iZ); 0; 0i[)o; ;i;i;i; i[); 0; 0i\)o; ;i;i;i; i\); 0; 0i])o; ;i;i;i; i]); 0; 0i^)o; ;i;i;i; i^); 0; 0i_)o; ;i;i;i; i_); 0; 0i`)o; ;i;i;i; i`); 0; 0ia)o; ;i;i;i; ia); 0; 0ib)o; ;i;i;i; ib); 0; 0ic)o; ;i;i;i; ic); 0; 0id)o; ;i;i;i; id); 0; 0ie)o; ;i;i;i; ie); 0; 0if)o; ;i;i;i; if); 0; 0ig)o; ;i;i;i; ig); 0; 0ih)o; ;i;i;i; ih); 0; 0ii)o; ;i;i;i; ii); 0; 0ij)o; ;i;i;i; ij); 0; 0ik)o; ;i;i;i; ik); 0; 0il)o; ;i;i;i; il); 0; 0im)o; ;i;i;i; im); 0; 0in)o; ;i;i;i; in); 0; 0io)o; ;i;i;i; io); 0; 0ip)o; ;i;i;i; ip); 0; 0iq)o; ;i;i;i; iq); 0; 0ir)o; ;i;i;i; ir); 0; 0is)o; ;i;i;i; is); 0; 0it)o; ;i;i;i; it); 0; 0iu)o; ;i;i;i; iu); 0; 0iv)o; ;i;i;i; iv); 0; 0iw)o; ;i;i;i; iw); 0; 0ix)o; ;i;i;i; ix); 0; 0iy)o; ;i;i;i; iy); 0; 0iz)o; ;i;i;i; iz); 0; 0i{)o; ;i;i;i; i{); 0; 0i|)o; ;i;i;i; i|); 0; 0i})o; ;i;i;i; i}); 0; 0i~)o; ;i;i;i; i~); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; I" compat; T; [ i+"i+"i+"i+"i *o; ;i;i;i; i *; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i *o; ;i;i;i; i *; 0; 0i!*o; ;i;i;i; i!*; 0; 0i"*o; ;i;i;i; i"*; 0; 0i#*o; ;i;i;i; i#*; 0; 0i$*o; ;i;i;i; i$*; 0; 0i%*o; ;i;i;i; i%*; 0; 0i&*o; ;i;i;i; i&*; 0; 0i'*o; ;i;i;i; i'*; 0; 0i(*o; ;i;i;i; i(*; 0; 0i)*o; ;i;i;i; i)*; 0; 0i**o; ;i;i;i; i**; 0; 0i+*o; ;i;i;i; i+*; 0; 0i,*o; ;i;i;i; i,*; 0; 0i-*o; ;i;i;i; i-*; 0; 0i.*o; ;i;i;i; i.*; 0; 0i/*o; ;i;i;i; i/*; 0; 0i0*o; ;i;i;i; i0*; 0; 0i1*o; ;i;i;i; i1*; 0; 0i2*o; ;i;i;i; i2*; 0; 0i3*o; ;i;i;i; i3*; 0; 0i4*o; ;i;i;i; i4*; 0; 0i5*o; ;i;i;i; i5*; 0; 0i6*o; ;i;i;i; i6*; 0; 0i7*o; ;i;i;i; i7*; 0; 0i8*o; ;i;i;i; i8*; 0; 0i9*o; ;i;i;i; i9*; 0; 0i:*o; ;i;i;i; i:*; 0; 0i;*o; ;i;i;i; i;*; 0; 0i<*o; ;i;i;i; i<*; 0; 0i=*o; ;i;i;i; i=*; 0; 0i>*o; ;i;i;i; i>*; 0; 0i?*o; ;i;i;i; i?*; 0; 0i@*o; ;i;i;i; i@*; 0; 0iA*o; ;i;i;i; iA*; 0; 0iB*o; ;i;i;i; iB*; 0; 0iC*o; ;i;i;i; iC*; 0; 0iD*o; ;i;i;i; iD*; 0; 0iE*o; ;i;i;i; iE*; 0; 0iF*o; ;i;i;i; iF*; 0; 0iG*o; ;i;i;i; iG*; 0; 0iH*o; ;i;i;i; iH*; 0; 0iI*o; ;i;i;i; iI*; 0; 0iJ*o; ;i;i;i; iJ*; 0; 0iK*o; ;i;i;i; iK*; 0; 0iL*o; ;i;i;i; iL*; 0; 0iM*o; ;i;i;i; iM*; 0; 0iN*o; ;i;i;i; iN*; 0; 0iO*o; ;i;i;i; iO*; 0; 0iP*o; ;i;i;i; iP*; 0; 0iQ*o; ;i;i;i; iQ*; 0; 0iR*o; ;i;i;i; iR*; 0; 0iS*o; ;i;i;i; iS*; 0; 0iT*o; ;i;i;i; iT*; 0; 0iU*o; ;i;i;i; iU*; 0; 0iV*o; ;i;i;i; iV*; 0; 0iW*o; ;i;i;i; iW*; 0; 0iX*o; ;i;i;i; iX*; 0; 0iY*o; ;i;i;i; iY*; 0; 0iZ*o; ;i;i;i; iZ*; 0; 0i[*o; ;i;i;i; i[*; 0; 0i\*o; ;i;i;i; i\*; 0; 0i]*o; ;i;i;i; i]*; 0; 0i^*o; ;i;i;i; i^*; 0; 0i_*o; ;i;i;i; i_*; 0; 0i`*o; ;i;i;i; i`*; 0; 0ia*o; ;i;i;i; ia*; 0; 0ib*o; ;i;i;i; ib*; 0; 0ic*o; ;i;i;i; ic*; 0; 0id*o; ;i;i;i; id*; 0; 0ie*o; ;i;i;i; ie*; 0; 0if*o; ;i;i;i; if*; 0; 0ig*o; ;i;i;i; ig*; 0; 0ih*o; ;i;i;i; ih*; 0; 0ii*o; ;i;i;i; ii*; 0; 0ij*o; ;i;i;i; ij*; 0; 0ik*o; ;i;i;i; ik*; 0; 0il*o; ;i;i;i; il*; 0; 0im*o; ;i;i;i; im*; 0; 0in*o; ;i;i;i; in*; 0; 0io*o; ;i;i;i; io*; 0; 0ip*o; ;i;i;i; ip*; 0; 0iq*o; ;i;i;i; iq*; 0; 0ir*o; ;i;i;i; ir*; 0; 0is*o; ;i;i;i; is*; 0; 0it*o; ;i;i;i; it*; I" compat; T; [i?i?iBiu*o; ;i;i;i; iu*; I" compat; T; [iBiBiv*o; ;i;i;i; iv*; I" compat; T; [iBiBiBiw*o; ;i;i;i; iw*; 0; 0ix*o; ;i;i;i; ix*; 0; 0iy*o; ;i;i;i; iy*; 0; 0iz*o; ;i;i;i; iz*; 0; 0i{*o; ;i;i;i; i{*; 0; 0i|*o; ;i;i;i; i|*; 0; 0i}*o; ;i;i;i; i}*; 0; 0i~*o; ;i;i;i; i~*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; [i*i8i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i +o; ;i;i;i; i +; 0; 0i!+o; ;i;i;i; i!+; 0; 0i"+o; ;i;i;i; i"+; 0; 0i#+o; ;i;i;i; i#+; 0; 0i$+o; ;i;i;i; i$+; 0; 0i%+o; ;i;i;i; i%+; 0; 0i&+o; ;i;i;i; i&+; 0; 0i'+o; ;i;i;i; i'+; 0; 0i(+o; ;i;i;i; i(+; 0; 0i)+o; ;i;i;i; i)+; 0; 0i*+o; ;i;i;i; i*+; 0; 0i++o; ;i;i;i; i++; 0; 0i,+o; ;i;i;i; i,+; 0; 0i-+o; ;i;i;i; i-+; 0; 0i.+o; ;i;i;i; i.+; 0; 0i/+o; ;i;i;i; i/+; 0; 0i0+o; ;i;i;i; i0+; 0; 0i1+o; ;i;i;i; i1+; 0; 0i2+o; ;i;i;i; i2+; 0; 0i3+o; ;i;i;i; i3+; 0; 0i4+o; ;i;i;i; i4+; 0; 0i5+o; ;i;i;i; i5+; 0; 0i6+o; ;i;i;i; i6+; 0; 0i7+o; ;i;i;i; i7+; 0; 0i8+o; ;i;i;i; i8+; 0; 0i9+o; ;i;i;i; i9+; 0; 0i:+o; ;i;i;i; i:+; 0; 0i;+o; ;i;i;i; i;+; 0; 0i<+o; ;i;i;i; i<+; 0; 0i=+o; ;i;i;i; i=+; 0; 0i>+o; ;i;i;i; i>+; 0; 0i?+o; ;i;i;i; i?+; 0; 0i@+o; ;i;i;i; i@+; 0; 0iA+o; ;i;i;i; iA+; 0; 0iB+o; ;i;i;i; iB+; 0; 0iC+o; ;i;i;i; iC+; 0; 0iD+o; ;i;i;i; iD+; 0; 0iE+o; ;i;i;i; iE+; 0; 0iF+o; ;i;i;i; iF+; 0; 0iG+o; ;i;i;i; iG+; 0; 0iH+o; ;i;i;i; iH+; 0; 0iI+o; ;i;i;i; iI+; 0; 0iJ+o; ;i;i;i; iJ+; 0; 0iK+o; ;i;i;i; iK+; 0; 0iL+o; ;i;i;i; iL+; 0; 0iP+o; ;i;i;i; iP+; 0; 0iQ+o; ;i;i;i; iQ+; 0; 0iR+o; ;i;i;i; iR+; 0; 0iS+o; ;i;i;i; iS+; 0; 0iT+o; ;i;i;i; iT+; 0; 0iU+o; ;i;i;i; iU+; 0; 0iV+o; ;i;i;i; iV+; 0; 0iW+o; ;i;i;i; iW+; 0; 0iX+o; ;i;i;i; iX+; 0; 0iY+o; ;i;i;i; iY+; 0; 0i,o; ;i;i;i0,; i,; 0; 0i,o; ;i;i;i1,; i,; 0; 0i,o; ;i;i;i2,; i,; 0; 0i,o; ;i;i;i3,; i,; 0; 0i,o; ;i;i;i4,; i,; 0; 0i,o; ;i;i;i5,; i,; 0; 0i,o; ;i;i;i6,; i,; 0; 0i,o; ;i;i;i7,; i,; 0; 0i,o; ;i;i;i8,; i,; 0; 0i ,o; ;i;i;i9,; i ,; 0; 0i ,o; ;i;i;i:,; i ,; 0; 0i ,o; ;i;i;i;,; i ,; 0; 0i ,o; ;i;i;i<,; i ,; 0; 0i ,o; ;i;i;i=,; i ,; 0; 0i,o; ;i;i;i>,; i,; 0; 0i,o; ;i;i;i?,; i,; 0; 0i,o; ;i;i;i@,; i,; 0; 0i,o; ;i;i;iA,; i,; 0; 0i,o; ;i;i;iB,; i,; 0; 0i,o; ;i;i;iC,; i,; 0; 0i,o; ;i;i;iD,; i,; 0; 0i,o; ;i;i;iE,; i,; 0; 0i,o; ;i;i;iF,; i,; 0; 0i,o; ;i;i;iG,; i,; 0; 0i,o; ;i;i;iH,; i,; 0; 0i,o; ;i;i;iI,; i,; 0; 0i,o; ;i;i;iJ,; i,; 0; 0i,o; ;i;i;iK,; i,; 0; 0i,o; ;i;i;iL,; i,; 0; 0i,o; ;i;i;iM,; i,; 0; 0i,o; ;i;i;iN,; i,; 0; 0i,o; ;i;i;iO,; i,; 0; 0i ,o; ;i;i;iP,; i ,; 0; 0i!,o; ;i;i;iQ,; i!,; 0; 0i",o; ;i;i;iR,; i",; 0; 0i#,o; ;i;i;iS,; i#,; 0; 0i$,o; ;i;i;iT,; i$,; 0; 0i%,o; ;i;i;iU,; i%,; 0; 0i&,o; ;i;i;iV,; i&,; 0; 0i',o; ;i;i;iW,; i',; 0; 0i(,o; ;i;i;iX,; i(,; 0; 0i),o; ;i;i;iY,; i),; 0; 0i*,o; ;i;i;iZ,; i*,; 0; 0i+,o; ;i;i;i[,; i+,; 0; 0i,,o; ;i;i;i\,; i,,; 0; 0i-,o; ;i;i;i],; i-,; 0; 0i.,o; ;i;i;i^,; i.,; 0; 0i0,o; ;i;i,;i; i0,; 0; 0i1,o; ;i;i,;i; i1,; 0; 0i2,o; ;i;i,;i; i2,; 0; 0i3,o; ;i;i,;i; i3,; 0; 0i4,o; ;i;i,;i; i4,; 0; 0i5,o; ;i;i,;i; i5,; 0; 0i6,o; ;i;i,;i; i6,; 0; 0i7,o; ;i;i,;i; i7,; 0; 0i8,o; ;i;i,;i; i8,; 0; 0i9,o; ;i;i ,;i; i9,; 0; 0i:,o; ;i;i ,;i; i:,; 0; 0i;,o; ;i;i ,;i; i;,; 0; 0i<,o; ;i;i ,;i; i<,; 0; 0i=,o; ;i;i ,;i; i=,; 0; 0i>,o; ;i;i,;i; i>,; 0; 0i?,o; ;i;i,;i; i?,; 0; 0i@,o; ;i;i,;i; i@,; 0; 0iA,o; ;i;i,;i; iA,; 0; 0iB,o; ;i;i,;i; iB,; 0; 0iC,o; ;i;i,;i; iC,; 0; 0iD,o; ;i;i,;i; iD,; 0; 0iE,o; ;i;i,;i; iE,; 0; 0iF,o; ;i;i,;i; iF,; 0; 0iG,o; ;i;i,;i; iG,; 0; 0iH,o; ;i;i,;i; iH,; 0; 0iI,o; ;i;i,;i; iI,; 0; 0iJ,o; ;i;i,;i; iJ,; 0; 0iK,o; ;i;i,;i; iK,; 0; 0iL,o; ;i;i,;i; iL,; 0; 0iM,o; ;i;i,;i; iM,; 0; 0iN,o; ;i;i,;i; iN,; 0; 0iO,o; ;i;i,;i; iO,; 0; 0iP,o; ;i;i ,;i; iP,; 0; 0iQ,o; ;i;i!,;i; iQ,; 0; 0iR,o; ;i;i",;i; iR,; 0; 0iS,o; ;i;i#,;i; iS,; 0; 0iT,o; ;i;i$,;i; iT,; 0; 0iU,o; ;i;i%,;i; iU,; 0; 0iV,o; ;i;i&,;i; iV,; 0; 0iW,o; ;i;i',;i; iW,; 0; 0iX,o; ;i;i(,;i; iX,; 0; 0iY,o; ;i;i),;i; iY,; 0; 0iZ,o; ;i;i*,;i; iZ,; 0; 0i[,o; ;i;i+,;i; i[,; 0; 0i\,o; ;i;i,,;i; i\,; 0; 0i],o; ;i;i-,;i; i],; 0; 0i^,o; ;i;i.,;i; i^,; 0; 0i`,o; ;i;i;ia,; i`,; 0; 0ia,o; ;i;i`,;i; ia,; 0; 0ib,o; ;i;i;ik; ib,; 0; 0ic,o; ;i;i;i}; ic,; 0; 0id,o; ;i;i;i}; id,; 0; 0ie,o; ;i;i:;i; ie,; 0; 0if,o; ;i;i>;i; if,; 0; 0ig,o; ;i;i;ih,; ig,; 0; 0ih,o; ;i;ig,;i; ih,; 0; 0ii,o; ;i;i;ij,; ii,; 0; 0ij,o; ;i;ii,;i; ij,; 0; 0ik,o; ;i;i;il,; ik,; 0; 0il,o; ;i;ik,;i; il,; 0; 0im,o; ;i;i;iQ; im,; 0; 0in,o; ;i;i;iq; in,; 0; 0io,o; ;i;i;iP; io,; 0; 0ip,o; ;i;i;iR; ip,; 0; 0iq,o; ;i;i;i; iq,; 0; 0ir,o; ;i;i;is,; ir,; 0; 0is,o; ;i;ir,;i; is,; 0; 0it,o; ;i;i;i; it,; 0; 0iu,o; ;i;i;iv,; iu,; 0; 0iv,o; ;i;iu,;i; iv,; 0; 0iw,o; ;i;i;i; iw,; 0; 0ix,o; ;i;i;i; ix,; 0; 0iy,o; ;i;i;i; iy,; 0; 0iz,o; ;i;i;i; iz,; 0; 0i{,o; ;i;i;i; i{,; 0; 0i|,o; ;i;i;i; i|,; I"sub; T; [ioi},o; ;i;i;i; i},; I" super; T; [i[i~,o; ;i;i;i?; i~,; 0; 0i,o; ;i;i;i@; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i -o; ;i;i;i; i -; 0; 0i!-o; ;i;i;i; i!-; 0; 0i"-o; ;i;i;i; i"-; 0; 0i#-o; ;i;i;i; i#-; 0; 0i$-o; ;i;i;i; i$-; 0; 0i%-o; ;i;i;i; i%-; 0; 0i0-o; ;i;i;i; i0-; 0; 0i1-o; ;i;i;i; i1-; 0; 0i2-o; ;i;i;i; i2-; 0; 0i3-o; ;i;i;i; i3-; 0; 0i4-o; ;i;i;i; i4-; 0; 0i5-o; ;i;i;i; i5-; 0; 0i6-o; ;i;i;i; i6-; 0; 0i7-o; ;i;i;i; i7-; 0; 0i8-o; ;i;i;i; i8-; 0; 0i9-o; ;i;i;i; i9-; 0; 0i:-o; ;i;i;i; i:-; 0; 0i;-o; ;i;i;i; i;-; 0; 0i<-o; ;i;i;i; i<-; 0; 0i=-o; ;i;i;i; i=-; 0; 0i>-o; ;i;i;i; i>-; 0; 0i?-o; ;i;i;i; i?-; 0; 0i@-o; ;i;i;i; i@-; 0; 0iA-o; ;i;i;i; iA-; 0; 0iB-o; ;i;i;i; iB-; 0; 0iC-o; ;i;i;i; iC-; 0; 0iD-o; ;i;i;i; iD-; 0; 0iE-o; ;i;i;i; iE-; 0; 0iF-o; ;i;i;i; iF-; 0; 0iG-o; ;i;i;i; iG-; 0; 0iH-o; ;i;i;i; iH-; 0; 0iI-o; ;i;i;i; iI-; 0; 0iJ-o; ;i;i;i; iJ-; 0; 0iK-o; ;i;i;i; iK-; 0; 0iL-o; ;i;i;i; iL-; 0; 0iM-o; ;i;i;i; iM-; 0; 0iN-o; ;i;i;i; iN-; 0; 0iO-o; ;i;i;i; iO-; 0; 0iP-o; ;i;i;i; iP-; 0; 0iQ-o; ;i;i;i; iQ-; 0; 0iR-o; ;i;i;i; iR-; 0; 0iS-o; ;i;i;i; iS-; 0; 0iT-o; ;i;i;i; iT-; 0; 0iU-o; ;i;i;i; iU-; 0; 0iV-o; ;i;i;i; iV-; 0; 0iW-o; ;i;i;i; iW-; 0; 0iX-o; ;i;i;i; iX-; 0; 0iY-o; ;i;i;i; iY-; 0; 0iZ-o; ;i;i;i; iZ-; 0; 0i[-o; ;i;i;i; i[-; 0; 0i\-o; ;i;i;i; i\-; 0; 0i]-o; ;i;i;i; i]-; 0; 0i^-o; ;i;i;i; i^-; 0; 0i_-o; ;i;i;i; i_-; 0; 0i`-o; ;i;i;i; i`-; 0; 0ia-o; ;i;i;i; ia-; 0; 0ib-o; ;i;i;i; ib-; 0; 0ic-o; ;i;i;i; ic-; 0; 0id-o; ;i;i;i; id-; 0; 0ie-o; ;i;i;i; ie-; 0; 0io-o; ;i;i;i; io-; I" super; T; [ia-i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i .o; ;i;i;i; i .; 0; 0i!.o; ;i;i;i; i!.; 0; 0i".o; ;i;i;i; i".; 0; 0i#.o; ;i;i;i; i#.; 0; 0i$.o; ;i;i;i; i$.; 0; 0i%.o; ;i;i;i; i%.; 0; 0i&.o; ;i;i;i; i&.; 0; 0i'.o; ;i;i;i; i'.; 0; 0i(.o; ;i;i;i; i(.; 0; 0i).o; ;i;i;i; i).; 0; 0i*.o; ;i;i;i; i*.; 0; 0i+.o; ;i;i;i; i+.; 0; 0i,.o; ;i;i;i; i,.; 0; 0i-.o; ;i;i;i; i-.; 0; 0i..o; ;i;i;i; i..; 0; 0i/.o; ;i;i;i; i/.; 0; 0i0.o; ;i;i;i; i0.; 0; 0i1.o; ;i;i;i; i1.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; I" compat; T; [iki.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [i(Ni/o; ;i;i;i; i/; I" compat; T; [i6Ni/o; ;i;i;i; i/; I" compat; T; [i?Ni/o; ;i;i;i; i/; I" compat; T; [iYNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi /o; ;i;i;i; i /; I" compat; T; [i?Qi /o; ;i;i;i; i /; I" compat; T; [ieQi /o; ;i;i;i; i /; I" compat; T; [ikQi /o; ;i;i;i; i /; I" compat; T; [iQi /o; ;i;i;i; i /; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [i8Si/o; ;i;i;i; i/; I" compat; T; [iASi/o; ;i;i;i; i/; I" compat; T; [i\Si/o; ;i;i;i; i/; I" compat; T; [iiSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iVi/o; ;i;i;i; i/; I" compat; T; [iWi /o; ;i;i;i; i /; I" compat; T; [iXi!/o; ;i;i;i; i!/; I" compat; T; [iYi"/o; ;i;i;i; i"/; I" compat; T; [i Yi#/o; ;i;i;i; i#/; I" compat; T; [iYi$/o; ;i;i;i; i$/; I" compat; T; [i'Yi%/o; ;i;i;i; i%/; I" compat; T; [isYi&/o; ;i;i;i; i&/; I" compat; T; [iP[i'/o; ;i;i;i; i'/; I" compat; T; [i[i(/o; ;i;i;i; i(/; I" compat; T; [i[i)/o; ;i;i;i; i)/; I" compat; T; [i\i*/o; ;i;i;i; i*/; I" compat; T; [i"\i+/o; ;i;i;i; i+/; I" compat; T; [i8\i,/o; ;i;i;i; i,/; I" compat; T; [in\i-/o; ;i;i;i; i-/; I" compat; T; [iq\i./o; ;i;i;i; i./; I" compat; T; [i]i//o; ;i;i;i; i//; I" compat; T; [i]i0/o; ;i;i;i; i0/; I" compat; T; [i]i1/o; ;i;i;i; i1/; I" compat; T; [i]i2/o; ;i;i;i; i2/; I" compat; T; [ir^i3/o; ;i;i;i; i3/; I" compat; T; [iz^i4/o; ;i;i;i; i4/; I" compat; T; [i^i5/o; ;i;i;i; i5/; I" compat; T; [i^i6/o; ;i;i;i; i6/; I" compat; T; [i^i7/o; ;i;i;i; i7/; I" compat; T; [i _i8/o; ;i;i;i; i8/; I" compat; T; [i_i9/o; ;i;i;i; i9/; I" compat; T; [iP_i:/o; ;i;i;i; i:/; I" compat; T; [ia_i;/o; ;i;i;i; i;/; I" compat; T; [is_i/o; ;i;i;i; i>/; I" compat; T; [i6bi?/o; ;i;i;i; i?/; I" compat; T; [iKbi@/o; ;i;i;i; i@/; I" compat; T; [i/eiA/o; ;i;i;i; iA/; I" compat; T; [i4eiB/o; ;i;i;i; iB/; I" compat; T; [ieiC/o; ;i;i;i; iC/; I" compat; T; [ieiD/o; ;i;i;i; iD/; I" compat; T; [ieiE/o; ;i;i;i; iE/; I" compat; T; [ieiF/o; ;i;i;i; iF/; I" compat; T; [ieiG/o; ;i;i;i; iG/; I" compat; T; [ieiH/o; ;i;i;i; iH/; I" compat; T; [ifiI/o; ;i;i;i; iI/; I" compat; T; [igiJ/o; ;i;i;i; iJ/; I" compat; T; [i(giK/o; ;i;i;i; iK/; I" compat; T; [i kiL/o; ;i;i;i; iL/; I" compat; T; [ibkiM/o; ;i;i;i; iM/; I" compat; T; [iykiN/o; ;i;i;i; iN/; I" compat; T; [ikiO/o; ;i;i;i; iO/; I" compat; T; [ikiP/o; ;i;i;i; iP/; I" compat; T; [ikiQ/o; ;i;i;i; iQ/; I" compat; T; [ikiR/o; ;i;i;i; iR/; I" compat; T; [iliS/o; ;i;i;i; iS/; I" compat; T; [iliT/o; ;i;i;i; iT/; I" compat; T; [i4liU/o; ;i;i;i; iU/; I" compat; T; [ikpiV/o; ;i;i;i; iV/; I" compat; T; [i*riW/o; ;i;i;i; iW/; I" compat; T; [i6riX/o; ;i;i;i; iX/; I" compat; T; [i;riY/o; ;i;i;i; iY/; I" compat; T; [i?riZ/o; ;i;i;i; iZ/; I" compat; T; [iGri[/o; ;i;i;i; i[/; I" compat; T; [iYri\/o; ;i;i;i; i\/; I" compat; T; [i[ri]/o; ;i;i;i; i]/; I" compat; T; [iri^/o; ;i;i;i; i^/; I" compat; T; [isi_/o; ;i;i;i; i_/; I" compat; T; [isi`/o; ;i;i;i; i`/; I" compat; T; [itia/o; ;i;i;i; ia/; I" compat; T; [itib/o; ;i;i;i; ib/; I" compat; T; [iuic/o; ;i;i;i; ic/; I" compat; T; [iuid/o; ;i;i;i; id/; I" compat; T; [i(uie/o; ;i;i;i; ie/; I" compat; T; [i0uif/o; ;i;i;i; if/; I" compat; T; [iuig/o; ;i;i;i; ig/; I" compat; T; [iuih/o; ;i;i;i; ih/; I" compat; T; [ivvii/o; ;i;i;i; ii/; I" compat; T; [i}vij/o; ;i;i;i; ij/; I" compat; T; [ivik/o; ;i;i;i; ik/; I" compat; T; [ivil/o; ;i;i;i; il/; I" compat; T; [ivim/o; ;i;i;i; im/; I" compat; T; [iwin/o; ;i;i;i; in/; I" compat; T; [iwio/o; ;i;i;i; io/; I" compat; T; [iwip/o; ;i;i;i; ip/; I" compat; T; [i:yiq/o; ;i;i;i; iq/; I" compat; T; [iyir/o; ;i;i;i; ir/; I" compat; T; [iyis/o; ;i;i;i; is/; I" compat; T; [itzit/o; ;i;i;i; it/; I" compat; T; [iziu/o; ;i;i;i; iu/; I" compat; T; [iziv/o; ;i;i;i; iv/; I" compat; T; [is|iw/o; ;i;i;i; iw/; I" compat; T; [i|ix/o; ;i;i;i; ix/; I" compat; T; [i6iy/o; ;i;i;i; iy/; I" compat; T; [iQiz/o; ;i;i;i; iz/; I" compat; T; [ii{/o; ;i;i;i; i{/; I" compat; T; [ii|/o; ;i;i;i; i|/; I" compat; T; [ii}/o; ;i;i;i; i}/; I" compat; T; [i i~/o; ;i;i;i; i~/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i3i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ini/o; ;i;i;i; i/; I" compat; T; [iri/o; ;i;i;i; i/; I" compat; T; [ixi/o; ;i;i;i; i/; I" compat; T; [iMi/o; ;i;i;i; i/; I" compat; T; [iki/o; ;i;i;i; i/; I" compat; T; [i@i/o; ;i;i;i; i/; I" compat; T; [iLi/o; ;i;i;i; i/; I" compat; T; [ici/o; ;i;i;i; i/; I" compat; T; [i~i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i҉i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i7i/o; ;i;i;i; i/; I" compat; T; [iFi/o; ;i;i;i; i/; I" compat; T; [iUi/o; ;i;i;i; i/; I" compat; T; [ixi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [idi/o; ;i;i;i; i/; I" compat; T; [ipi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iʎi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iIi/o; ;i;i;i; i/; I" compat; T; [iƑi/o; ;i;i;i; i/; I" compat; T; [ȋi/o; ;i;i;i; i/; I" compat; T; [iёi/o; ;i;i;i; i/; I" compat; T; [iwi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [i^i/o; ;i;i;i; i/; I" compat; T; [ibi/o; ;i;i;i; i/; I" compat; T; [iii/o; ;i;i;i; i/; I" compat; T; [i˗i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iۘi/o; ;i;i;i; i/; I" compat; T; [iߘi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iؚi/o; ;i;i;i; i/; I" compat; T; [iߚi/o; ;i;i;i; i/; I" compat; T; [i%i/o; ;i;i;i; i/; I" compat; T; [i/i/o; ;i;i;i; i/; I" compat; T; [i2i/o; ;i;i;i; i/; I" compat; T; [i0o; ;i;i;i; i>0; 0; 0i?0o; ;i;i;i; i?0; 0; 0iA0o; ;i;i;i; iA0; 0; 0iB0o; ;i;i;i; iB0; 0; 0iC0o; ;i;i;i; iC0; 0; 0iD0o; ;i;i;i; iD0; 0; 0iE0o; ;i;i;i; iE0; 0; 0iF0o; ;i;i;i; iF0; 0; 0iG0o; ;i;i;i; iG0; 0; 0iH0o; ;i;i;i; iH0; 0; 0iI0o; ;i;i;i; iI0; 0; 0iJ0o; ;i;i;i; iJ0; 0; 0iK0o; ;i;i;i; iK0; 0; 0iL0o; ;i;i;i; iL0; 0; [iK0i0iM0o; ;i;i;i; iM0; 0; 0iN0o; ;i;i;i; iN0; 0; [iM0i0iO0o; ;i;i;i; iO0; 0; 0iP0o; ;i;i;i; iP0; 0; [iO0i0iQ0o; ;i;i;i; iQ0; 0; 0iR0o; ;i;i;i; iR0; 0; [iQ0i0iS0o; ;i;i;i; iS0; 0; 0iT0o; ;i;i;i; iT0; 0; [iS0i0iU0o; ;i;i;i; iU0; 0; 0iV0o; ;i;i;i; iV0; 0; [iU0i0iW0o; ;i;i;i; iW0; 0; 0iX0o; ;i;i;i; iX0; 0; [iW0i0iY0o; ;i;i;i; iY0; 0; 0iZ0o; ;i;i;i; iZ0; 0; [iY0i0i[0o; ;i;i;i; i[0; 0; 0i\0o; ;i;i;i; i\0; 0; [i[0i0i]0o; ;i;i;i; i]0; 0; 0i^0o; ;i;i;i; i^0; 0; [i]0i0i_0o; ;i;i;i; i_0; 0; 0i`0o; ;i;i;i; i`0; 0; [i_0i0ia0o; ;i;i;i; ia0; 0; 0ib0o; ;i;i;i; ib0; 0; [ia0i0ic0o; ;i;i;i; ic0; 0; 0id0o; ;i;i;i; id0; 0; 0ie0o; ;i;i;i; ie0; 0; [id0i0if0o; ;i;i;i; if0; 0; 0ig0o; ;i;i;i; ig0; 0; [if0i0ih0o; ;i;i;i; ih0; 0; 0ii0o; ;i;i;i; ii0; 0; [ih0i0ij0o; ;i;i;i; ij0; 0; 0ik0o; ;i;i;i; ik0; 0; 0il0o; ;i;i;i; il0; 0; 0im0o; ;i;i;i; im0; 0; 0in0o; ;i;i;i; in0; 0; 0io0o; ;i;i;i; io0; 0; 0ip0o; ;i;i;i; ip0; 0; [io0i0iq0o; ;i;i;i; iq0; 0; [io0i0ir0o; ;i;i;i; ir0; 0; 0is0o; ;i;i;i; is0; 0; [ir0i0it0o; ;i;i;i; it0; 0; [ir0i0iu0o; ;i;i;i; iu0; 0; 0iv0o; ;i;i;i; iv0; 0; [iu0i0iw0o; ;i;i;i; iw0; 0; [iu0i0ix0o; ;i;i;i; ix0; 0; 0iy0o; ;i;i;i; iy0; 0; [ix0i0iz0o; ;i;i;i; iz0; 0; [ix0i0i{0o; ;i;i;i; i{0; 0; 0i|0o; ;i;i;i; i|0; 0; [i{0i0i}0o; ;i;i;i; i}0; 0; [i{0i0i~0o; ;i;i;i; i~0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [iF0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i ;i;i; i0; 0; 0i0o; ;i ;i;i; i0; 0; 0i0o; ;i;i;i; i0; I" compat; T; [i%i0i0o; ;i;i;i; i0; I" compat; T; [i%i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; I" vertical; T; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; I" vertical; T; [i0i0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i!1o; ;i;i;i; i!1; 0; 0i"1o; ;i;i;i; i"1; 0; 0i#1o; ;i;i;i; i#1; 0; 0i$1o; ;i;i;i; i$1; 0; 0i%1o; ;i;i;i; i%1; 0; 0i&1o; ;i;i;i; i&1; 0; 0i'1o; ;i;i;i; i'1; 0; 0i(1o; ;i;i;i; i(1; 0; 0i)1o; ;i;i;i; i)1; 0; 0i*1o; ;i;i;i; i*1; 0; 0i+1o; ;i;i;i; i+1; 0; 0i,1o; ;i;i;i; i,1; 0; 0i-1o; ;i;i;i; i-1; 0; 0i11o; ;i;i;i; i11; I" compat; T; [ii21o; ;i;i;i; i21; I" compat; T; [ii31o; ;i;i;i; i31; I" compat; T; [ii41o; ;i;i;i; i41; I" compat; T; [ii51o; ;i;i;i; i51; I" compat; T; [ii61o; ;i;i;i; i61; I" compat; T; [ii71o; ;i;i;i; i71; I" compat; T; [ii81o; ;i;i;i; i81; I" compat; T; [ii91o; ;i;i;i; i91; I" compat; T; [ii:1o; ;i;i;i; i:1; I" compat; T; [ii;1o; ;i;i;i; i;1; I" compat; T; [ii<1o; ;i;i;i; i<1; I" compat; T; [ii=1o; ;i;i;i; i=1; I" compat; T; [ii>1o; ;i;i;i; i>1; I" compat; T; [ii?1o; ;i;i;i; i?1; I" compat; T; [ii@1o; ;i;i;i; i@1; I" compat; T; [iiA1o; ;i;i;i; iA1; I" compat; T; [iiB1o; ;i;i;i; iB1; I" compat; T; [iiC1o; ;i;i;i; iC1; I" compat; T; [iiD1o; ;i;i;i; iD1; I" compat; T; [i!iE1o; ;i;i;i; iE1; I" compat; T; [i iF1o; ;i;i;i; iF1; I" compat; T; [i iG1o; ;i;i;i; iG1; I" compat; T; [i iH1o; ;i;i;i; iH1; I" compat; T; [i iI1o; ;i;i;i; iI1; I" compat; T; [i iJ1o; ;i;i;i; iJ1; I" compat; T; [iiK1o; ;i;i;i; iK1; I" compat; T; [iiL1o; ;i;i;i; iL1; I" compat; T; [iiM1o; ;i;i;i; iM1; I" compat; T; [iiN1o; ;i;i;i; iN1; I" compat; T; [iiO1o; ;i;i;i; iO1; I" compat; T; [iaiP1o; ;i;i;i; iP1; I" compat; T; [ibiQ1o; ;i;i;i; iQ1; I" compat; T; [iciR1o; ;i;i;i; iR1; I" compat; T; [idiS1o; ;i;i;i; iS1; I" compat; T; [ieiT1o; ;i;i;i; iT1; I" compat; T; [ifiU1o; ;i;i;i; iU1; I" compat; T; [igiV1o; ;i;i;i; iV1; I" compat; T; [ihiW1o; ;i;i;i; iW1; I" compat; T; [iiiX1o; ;i;i;i; iX1; I" compat; T; [ijiY1o; ;i;i;i; iY1; I" compat; T; [ikiZ1o; ;i;i;i; iZ1; I" compat; T; [ili[1o; ;i;i;i; i[1; I" compat; T; [imi\1o; ;i;i;i; i\1; I" compat; T; [ini]1o; ;i;i;i; i]1; I" compat; T; [ioi^1o; ;i;i;i; i^1; I" compat; T; [ipi_1o; ;i;i;i; i_1; I" compat; T; [iqi`1o; ;i;i;i; i`1; I" compat; T; [iria1o; ;i;i;i; ia1; I" compat; T; [isib1o; ;i;i;i; ib1; I" compat; T; [itic1o; ;i;i;i; ic1; I" compat; T; [iuid1o; ;i;i;i; id1; I" compat; T; [i`ie1o; ;i;i;i; ie1; I" compat; T; [iif1o; ;i;i;i; if1; I" compat; T; [iig1o; ;i;i;i; ig1; I" compat; T; [iih1o; ;i;i;i; ih1; I" compat; T; [iii1o; ;i;i;i; ii1; I" compat; T; [iij1o; ;i;i;i; ij1; I" compat; T; [iik1o; ;i;i;i; ik1; I" compat; T; [iil1o; ;i;i;i; il1; I" compat; T; [iim1o; ;i;i;i; im1; I" compat; T; [iin1o; ;i;i;i; in1; I" compat; T; [iio1o; ;i;i;i; io1; I" compat; T; [iip1o; ;i;i;i; ip1; I" compat; T; [iiq1o; ;i;i;i; iq1; I" compat; T; [iir1o; ;i;i;i; ir1; I" compat; T; [iis1o; ;i;i;i; is1; I" compat; T; [i it1o; ;i;i;i; it1; I" compat; T; [i"iu1o; ;i;i;i; iu1; I" compat; T; [i#iv1o; ;i;i;i; iv1; I" compat; T; [i'iw1o; ;i;i;i; iw1; I" compat; T; [i)ix1o; ;i;i;i; ix1; I" compat; T; [i+iy1o; ;i;i;i; iy1; I" compat; T; [i,iz1o; ;i;i;i; iz1; I" compat; T; [i-i{1o; ;i;i;i; i{1; I" compat; T; [i.i|1o; ;i;i;i; i|1; I" compat; T; [i/i}1o; ;i;i;i; i}1; I" compat; T; [i2i~1o; ;i;i;i; i~1; I" compat; T; [i6i1o; ;i;i;i; i1; I" compat; T; [i@i1o; ;i;i;i; i1; I" compat; T; [iGi1o; ;i;i;i; i1; I" compat; T; [iLi1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [iWi1o; ;i;i;i; i1; I" compat; T; [iXi1o; ;i;i;i; i1; I" compat; T; [iYi1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [iVi1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [i-Ni1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [i2ui1o; ;i;i;i; i1; I" super; T; [iYNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [i)Yi1o; ;i;i;i; i1; I" super; T; [i0Wi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-i ini.i2o; ;i;i;i; i2; I" compat; T; [ i-i iii ieii.i2o; ;i;i;i; i2; I" compat; T; [ i-i iiiini.i 2o; ;i;i;i; i 2; I" compat; T; [i-iNi.i!2o; ;i;i;i; i!2; I" compat; T; [i-iNi.i"2o; ;i;i;i; i"2; I" compat; T; [i-i Ni.i#2o; ;i;i;i; i#2; I" compat; T; [i-iVi.i$2o; ;i;i;i; i$2; I" compat; T; [i-iNi.i%2o; ;i;i;i; i%2; I" compat; T; [i-imQi.i&2o; ;i;i;i; i&2; I" compat; T; [i-iNi.i'2o; ;i;i;i; i'2; I" compat; T; [i-ikQi.i(2o; ;i;i;i; i(2; I" compat; T; [i-i]Ni.i)2o; ;i;i;i; i)2; I" compat; T; [i-iASi.i*2o; ;i;i;i; i*2; I" compat; T; [i-igi.i+2o; ;i;i;i; i+2; I" compat; T; [i-ikpi.i,2o; ;i;i;i; i,2; I" compat; T; [i-i4li.i-2o; ;i;i;i; i-2; I" compat; T; [i-i(gi.i.2o; ;i;i;i; i.2; I" compat; T; [i-iёi.i/2o; ;i;i;i; i/2; I" compat; T; [i-iWi.i02o; ;i;i;i; i02; I" compat; T; [i-iei.i12o; ;i;i;i; i12; I" compat; T; [i-i*hi.i22o; ;i;i;i; i22; I" compat; T; [i-i gi.i32o; ;i;i;i; i32; I" compat; T; [i-i>yi.i42o; ;i;i;i; i42; I" compat; T; [i-i Ti.i52o; ;i;i;i; i52; I" compat; T; [i-iyri.i62o; ;i;i;i; i62; I" compat; T; [i-ii.i72o; ;i;i;i; i72; I" compat; T; [i-i]yi.i82o; ;i;i;i; i82; I" compat; T; [i-iRi.i92o; ;i;i;i; i92; I" compat; T; [i-iNi.i:2o; ;i;i;i; i:2; I" compat; T; [i-i|Ti.i;2o; ;i;i;i; i;2; I" compat; T; [i-if[i.i<2o; ;i;i;i; i<2; I" compat; T; [i-ivi.i=2o; ;i;i;i; i=2; I" compat; T; [i-iOi.i>2o; ;i;i;i; i>2; I" compat; T; [i-inji.i?2o; ;i;i;i; i?2; I" compat; T; [i-iTSi.i@2o; ;i;i;i; i@2; I" compat; T; [i-imyi.iA2o; ;i;i;i; iA2; I" compat; T; [i-iOi.iB2o; ;i;i;i; iB2; I" compat; T; [i-ii.iC2o; ;i;i;i; iC2; I" compat; T; [i-ii.iD2o; ;i;i;i; iD2; I" circle; T; [iOUiE2o; ;i;i;i; iE2; I" circle; T; [i|^iF2o; ;i;i;i; iF2; I" circle; T; [ieiG2o; ;i;i;i; iG2; I" circle; T; [i{iH2o; ;i;i;i; iH2; 0; 0iI2o; ;i;i;i; iI2; 0; 0iJ2o; ;i;i;i; iJ2; 0; 0iK2o; ;i;i;i; iK2; 0; 0iL2o; ;i;i;i; iL2; 0; 0iM2o; ;i;i;i; iM2; 0; 0iN2o; ;i;i;i; iN2; 0; 0iO2o; ;i;i;i; iO2; 0; 0iP2o; ;i;i;i; iP2; I" square; T; [iUiYiJiQ2o; ;i;i;i; iQ2; I" circle; T; [i7i6iR2o; ;i;i;i; iR2; I" circle; T; [i7i7iS2o; ;i;i;i; iS2; I" circle; T; [i7i8iT2o; ;i;i;i; iT2; I" circle; T; [i7i9iU2o; ;i;i;i; iU2; I" circle; T; [i7i:iV2o; ;i;i;i; iV2; I" circle; T; [i7i;iW2o; ;i;i;i; iW2; I" circle; T; [i7iiZ2o; ;i;i;i; iZ2; I" circle; T; [i8i5i[2o; ;i;i;i; i[2; I" circle; T; [i8i6i\2o; ;i;i;i; i\2; I" circle; T; [i8i7i]2o; ;i;i;i; i]2; I" circle; T; [i8i8i^2o; ;i;i;i; i^2; I" circle; T; [i8i9i_2o; ;i;i;i; i_2; I" circle; T; [i8i:i`2o; ;i;i;i; i`2; I" circle; T; [iia2o; ;i;i;i; ia2; I" circle; T; [iib2o; ;i;i;i; ib2; I" circle; T; [iic2o; ;i;i;i; ic2; I" circle; T; [iid2o; ;i;i;i; id2; I" circle; T; [iie2o; ;i;i;i; ie2; I" circle; T; [iif2o; ;i;i;i; if2; I" circle; T; [i ig2o; ;i;i;i; ig2; I" circle; T; [i ih2o; ;i;i;i; ih2; I" circle; T; [i ii2o; ;i;i;i; ii2; I" circle; T; [iij2o; ;i;i;i; ij2; I" circle; T; [iik2o; ;i;i;i; ik2; I" circle; T; [iil2o; ;i;i;i; il2; I" circle; T; [iim2o; ;i;i;i; im2; I" circle; T; [iin2o; ;i;i;i; in2; I" circle; T; [iiaio2o; ;i;i;i; io2; I" circle; T; [iiaip2o; ;i;i;i; ip2; I" circle; T; [iiaiq2o; ;i;i;i; iq2; I" circle; T; [iiair2o; ;i;i;i; ir2; I" circle; T; [iiais2o; ;i;i;i; is2; I" circle; T; [iiait2o; ;i;i;i; it2; I" circle; T; [i iaiu2o; ;i;i;i; iu2; I" circle; T; [i iaiv2o; ;i;i;i; iv2; I" circle; T; [i iaiw2o; ;i;i;i; iw2; I" circle; T; [iiaix2o; ;i;i;i; ix2; I" circle; T; [iiaiy2o; ;i;i;i; iy2; I" circle; T; [iiaiz2o; ;i;i;i; iz2; I" circle; T; [iiai{2o; ;i;i;i; i{2; I" circle; T; [iiai|2o; ;i;i;i; i|2; I" circle; T; [ iiaiiiii}2o; ;i;i;i; i}2; I" circle; T; [ i ini iti~2o; ;i;i;i; i~2; I" circle; T; [i ini2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [iVi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [imQi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [ikQi2o; ;i;i;i; i2; I" circle; T; [i]Ni2o; ;i;i;i; i2; I" circle; T; [iASi2o; ;i;i;i; i2; I" circle; T; [igi2o; ;i;i;i; i2; I" circle; T; [ikpi2o; ;i;i;i; i2; I" circle; T; [i4li2o; ;i;i;i; i2; I" circle; T; [i(gi2o; ;i;i;i; i2; I" circle; T; [iёi2o; ;i;i;i; i2; I" circle; T; [iWi2o; ;i;i;i; i2; I" circle; T; [iei2o; ;i;i;i; i2; I" circle; T; [i*hi2o; ;i;i;i; i2; I" circle; T; [i gi2o; ;i;i;i; i2; I" circle; T; [i>yi2o; ;i;i;i; i2; I" circle; T; [i Ti2o; ;i;i;i; i2; I" circle; T; [iyri2o; ;i;i;i; i2; I" circle; T; [ii2o; ;i;i;i; i2; I" circle; T; [i]yi2o; ;i;i;i; i2; I" circle; T; [iRi2o; ;i;i;i; i2; I" circle; T; [iyi2o; ;i;i;i; i2; I" circle; T; [i7ui2o; ;i;i;i; i2; I" circle; T; [isYi2o; ;i;i;i; i2; I" circle; T; [iii2o; ;i;i;i; i2; I" circle; T; [i*Qi2o; ;i;i;i; i2; I" circle; T; [ipSi2o; ;i;i;i; i2; I" circle; T; [ili2o; ;i;i;i; i2; I" circle; T; [ii2o; ;i;i;i; i2; I" circle; T; [iOi2o; ;i;i;i; i2; I" circle; T; [iQi2o; ;i;i;i; i2; I" circle; T; [icki2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [i-Ni2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [i]i2o; ;i;i;i; i2; I" circle; T; [iSi2o; ;i;i;i; i2; I" circle; T; [i;Si2o; ;i;i;i; i2; I" circle; T; [i[i2o; ;i;i;i; i2; I" circle; T; [if[i2o; ;i;i;i; i2; I" circle; T; [ivi2o; ;i;i;i; i2; I" circle; T; [iOi2o; ;i;i;i; i2; I" circle; T; [inji2o; ;i;i;i; i2; I" circle; T; [iTSi2o; ;i;i;i; i2; I" circle; T; [iYi2o; ;i;i;i; i2; I" circle; T; [i8i;i2o; ;i;i;i; i2; I" circle; T; [i8ii2o; ;i;i;i; i2; I" circle; T; [i9i5i2o; ;i;i;i; i2; I" circle; T; [i9i6i2o; ;i;i;i; i2; I" circle; T; [i9i7i2o; ;i;i;i; i2; I" circle; T; [i9i8i2o; ;i;i;i; i2; I" circle; T; [i9i9i2o; ;i;i;i; i2; I" circle; T; [i9i:i2o; ;i;i;i; i2; I" circle; T; [i9i;i2o; ;i;i;i; i2; I" circle; T; [i9ii2o; ;i;i;i; i2; I" circle; T; [i:i5i2o; ;i;i;i; i2; I" compat; T; [i6igi2o; ;i;i;i; i2; I" compat; T; [i7igi2o; ;i;i;i; i2; I" compat; T; [i8igi2o; ;i;i;i; i2; I" compat; T; [i9igi2o; ;i;i;i; i2; I" compat; T; [i:igi2o; ;i;i;i; i2; I" compat; T; [i;igi2o; ;i;i;i; i2; I" compat; T; [iigi2o; ;i;i;i; i2; I" compat; T; [i6i5igi2o; ;i;i;i; i2; I" compat; T; [i6i6igi2o; ;i;i;i; i2; I" compat; T; [i6i7igi2o; ;i;i;i; i2; I" square; T; [iMili2o; ;i;i;i; i2; I" square; T; [ijiwili2o; ;i;i;i; i2; I" square; T; [iji[i2o; ;i;i;i; i2; I" square; T; [iQiYiIi2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i0i!3o; ;i;i;i; i!3; I" square; T; [ i0i0i0i0i"3o; ;i;i;i; i"3; I" square; T; [i0i0i0i#3o; ;i;i;i; i#3; I" square; T; [i0i0i0i$3o; ;i;i;i; i$3; I" square; T; [i0i0i0i%3o; ;i;i;i; i%3; I" square; T; [i0i0i&3o; ;i;i;i; i&3; I" square; T; [i0i0i'3o; ;i;i;i; i'3; I" square; T; [i0i0i(3o; ;i;i;i; i(3; I" square; T; [i0i0i)3o; ;i;i;i; i)3; I" square; T; [i0i0i0i*3o; ;i;i;i; i*3; I" square; T; [i0i0i0i+3o; ;i;i;i; i+3; I" square; T; [ i0i0i0i0i0i,3o; ;i;i;i; i,3; I" square; T; [i0i0i0i-3o; ;i;i;i; i-3; I" square; T; [ i0i0i0i0i.3o; ;i;i;i; i.3; I" square; T; [ i0i0i0i0i0i/3o; ;i;i;i; i/3; I" square; T; [i0i0i0i03o; ;i;i;i; i03; I" square; T; [i0i0i13o; ;i;i;i; i13; I" square; T; [i0i0i23o; ;i;i;i; i23; I" square; T; [ i0i0i0i0i0i33o; ;i;i;i; i33; I" square; T; [ i0i0i0i0i43o; ;i;i;i; i43; I" square; T; [ i0i0i0i0i0i53o; ;i;i;i; i53; I" square; T; [i0i0i0i63o; ;i;i;i; i63; I" square; T; [ i0i0i0i0i0i73o; ;i;i;i; i73; I" square; T; [i0i0i83o; ;i;i;i; i83; I" square; T; [i0i0i0i93o; ;i;i;i; i93; I" square; T; [i0i0i0i:3o; ;i;i;i; i:3; I" square; T; [i0i0i0i;3o; ;i;i;i; i;3; I" square; T; [i0i0i0i<3o; ;i;i;i; i<3; I" square; T; [i0i0i0i=3o; ;i;i;i; i=3; I" square; T; [ i0i0i0i0i>3o; ;i;i;i; i>3; I" square; T; [i0i0i0i?3o; ;i;i;i; i?3; I" square; T; [i0i0i@3o; ;i;i;i; i@3; I" square; T; [i0i0i0iA3o; ;i;i;i; iA3; I" square; T; [i0i0i0iB3o; ;i;i;i; iB3; I" square; T; [i0i0i0iC3o; ;i;i;i; iC3; I" square; T; [ i0i0i0i0iD3o; ;i;i;i; iD3; I" square; T; [i0i0i0iE3o; ;i;i;i; iE3; I" square; T; [i0i0i0iF3o; ;i;i;i; iF3; I" square; T; [i0i0i0iG3o; ;i;i;i; iG3; I" square; T; [ i0i0i0i0i0iH3o; ;i;i;i; iH3; I" square; T; [ i0i0i0i0iI3o; ;i;i;i; iI3; I" square; T; [i0i0iJ3o; ;i;i;i; iJ3; I" square; T; [ i0i0i0i0i0iK3o; ;i;i;i; iK3; I" square; T; [i0i0iL3o; ;i;i;i; iL3; I" square; T; [ i0i0i0i0iM3o; ;i;i;i; iM3; I" square; T; [ i0i0i0i0iN3o; ;i;i;i; iN3; I" square; T; [i0i0i0iO3o; ;i;i;i; iO3; I" square; T; [i0i0i0iP3o; ;i;i;i; iP3; I" square; T; [i0i0i0iQ3o; ;i;i;i; iQ3; I" square; T; [ i0i0i0i0iR3o; ;i;i;i; iR3; I" square; T; [i0i0iS3o; ;i;i;i; iS3; I" square; T; [i0i0i0iT3o; ;i;i;i; iT3; I" square; T; [ i0i0i0i0iU3o; ;i;i;i; iU3; I" square; T; [i0i0iV3o; ;i;i;i; iV3; I" square; T; [ i0i0i0i0i0iW3o; ;i;i;i; iW3; I" square; T; [i0i0i0iX3o; ;i;i;i; iX3; I" compat; T; [i5ipiY3o; ;i;i;i; iY3; I" compat; T; [i6ipiZ3o; ;i;i;i; iZ3; I" compat; T; [i7ipi[3o; ;i;i;i; i[3; I" compat; T; [i8ipi\3o; ;i;i;i; i\3; I" compat; T; [i9ipi]3o; ;i;i;i; i]3; I" compat; T; [i:ipi^3o; ;i;i;i; i^3; I" compat; T; [i;ipi_3o; ;i;i;i; i_3; I" compat; T; [iipib3o; ;i;i;i; ib3; I" compat; T; [i6i5ipic3o; ;i;i;i; ic3; I" compat; T; [i6i6ipid3o; ;i;i;i; id3; I" compat; T; [i6i7ipie3o; ;i;i;i; ie3; I" compat; T; [i6i8ipif3o; ;i;i;i; if3; I" compat; T; [i6i9ipig3o; ;i;i;i; ig3; I" compat; T; [i6i:ipih3o; ;i;i;i; ih3; I" compat; T; [i6i;ipii3o; ;i;i;i; ii3; I" compat; T; [i6iipil3o; ;i;i;i; il3; I" compat; T; [i7i5ipim3o; ;i;i;i; im3; I" compat; T; [i7i6ipin3o; ;i;i;i; in3; I" compat; T; [i7i7ipio3o; ;i;i;i; io3; I" compat; T; [i7i8ipip3o; ;i;i;i; ip3; I" compat; T; [i7i9ipiq3o; ;i;i;i; iq3; I" square; T; [imiUifir3o; ;i;i;i; ir3; I" square; T; [iiifis3o; ;i;i;i; is3; I" square; T; [iFiZit3o; ;i;i;i; it3; I" square; T; [igifiwiu3o; ;i;i;i; iu3; I" square; T; [iti[iv3o; ;i;i;i; iv3; I" square; T; [iuihiw3o; ;i;i;i; iw3; I" square; T; [iiirix3o; ;i;i;i; ix3; I" square; T; [iiiriiy3o; ;i;i;i; iy3; I" square; T; [iiiriiz3o; ;i;i;i; iz3; I" square; T; [iNiZi{3o; ;i;i;i; i{3; I" square; T; [is^ibi|3o; ;i;i;i; i|3; I" square; T; [i-fiTi}3o; ;i;i;i; i}3; I" square; T; [i'Yicki~3o; ;i;i;i; i~3; I" square; T; [ifili3o; ;i;i;i; i3; I" square; T; [ i*hi_iOi>yi3o; ;i;i;i; i3; I" square; T; [iuiFi3o; ;i;i;i; i3; I" square; T; [isiFi3o; ;i;i;i; i3; I" square; T; [iiFi3o; ;i;i;i; i3; I" square; T; [iriFi3o; ;i;i;i; i3; I" square; T; [ipiFi3o; ;i;i;i; i3; I" square; T; [iPiGi3o; ;i;i;i; i3; I" square; T; [iRiGi3o; ;i;i;i; i3; I" square; T; [iLiGi3o; ;i;i;i; i3; I" square; T; [ihifiqi3o; ;i;i;i; i3; I" square; T; [ ipihifiqi3o; ;i;i;i; i3; I" square; T; [iuiKi3o; ;i;i;i; i3; I" square; T; [isiKi3o; ;i;i;i; i3; I" square; T; [iiKi3o; ;i;i;i; i3; I" square; T; [iili3o; ;i;i;i; i3; I" square; T; [irili3o; ;i;i;i; i3; I" square; T; [ipili3o; ;i;i;i; i3; I" square; T; [iMii3o; ;i;i;i; i3; I" square; T; [ipiMii3o; ;i;i;i; i3; I" square; T; [iRiMii3o; ;i;i;i; i3; I" square; T; [iLiMii3o; ;i;i;i; i3; I" square; T; [iYiMii3o; ;i;i;i; i3; I" square; T; [ii!i3o; ;i;i;i; i3; I" square; T; [iri!i3o; ;i;i;i; i3; I" square; T; [iii!i3o; ;i;i;i; i3; I" square; T; [ipi!i3o; ;i;i;i; i3; I" square; T; [ikiri3o; ;i;i;i; i3; I" square; T; [isiri3o; ;i;i;i; i3; I" square; T; [iiri3o; ;i;i;i; i3; I" square; T; [iriri3o; ;i;i;i; i3; I" square; T; [ihiri3o; ;i;i;i; i3; I" square; T; [ipiri3o; ;i;i;i; i3; I" square; T; [iririi3o; ;i;i;i; i3; I" square; T; [ihirii3o; ;i;i;i; i3; I" square; T; [irii3o; ;i;i;i; i3; I" square; T; [ipirii3o; ;i;i;i; i3; I" square; T; [iririi3o; ;i;i;i; i3; I" square; T; [ihirii3o; ;i;i;i; i3; I" square; T; [irii3o; ;i;i;i; i3; I" square; T; [ipirii3o; ;i;i;i; i3; I" square; T; [iri"ixi3o; ;i;i;i; i3; I" square; T; [ iri"ixii3o; ;i;i;i; i3; I" square; T; [iUifi3o; ;i;i;i; i3; I" square; T; [ipiUifi3o; ;i;i;i; i3; I" square; T; [iRiUifi3o; ;i;i;i; i3; I" square; T; [iLiUifi3o; ;i;i;i; i3; I" square; T; [iwifiii3o; ;i;i;i; i3; I" square; T; [ iwifiii"ixi3o; ;i;i;i; i3; I" square; T; [ iwifiii"ixii3o; ;i;i;i; i3; I" square; T; [iuixi3o; ;i;i;i; i3; I" square; T; [isixi3o; ;i;i;i; i3; I" square; T; [iixi3o; ;i;i;i; i3; I" square; T; [irixi3o; ;i;i;i; i3; I" square; T; [iui[i3o; ;i;i;i; i3; I" square; T; [isi[i3o; ;i;i;i; i3; I" square; T; [ii[i3o; ;i;i;i; i3; I" square; T; [iri[i3o; ;i;i;i; i3; I" square; T; [ipi[i3o; ;i;i;i; i3; I" square; T; [iRi[i3o; ;i;i;i; i3; I" square; T; [iui\i3o; ;i;i;i; i3; I" square; T; [isi\i3o; ;i;i;i; i3; I" square; T; [ii\i3o; ;i;i;i; i3; I" square; T; [iri\i3o; ;i;i;i; i3; I" square; T; [ipi\i3o; ;i;i;i; i3; I" square; T; [iRi\i3o; ;i;i;i; i3; I" square; T; [ipii3o; ;i;i;i; i3; I" square; T; [iRii3o; ;i;i;i; i3; I" square; T; [ ifi3iri3i3o; ;i;i;i; i3; I" square; T; [iGivi3o; ;i;i;i; i3; I" square; T; [ihihi3o; ;i;i;i; i3; I" square; T; [ihiii3o; ;i;i;i; i3; I" square; T; [ iHi"ipili3o; ;i;i;i; i3; I" square; T; [iHiti3i3o; ;i;i;i; i3; I" square; T; [iiiGi3o; ;i;i;i; i3; I" square; T; [iLi~i3o; ;i;i;i; i3; I" square; T; [imifi3o; ;i;i;i; i3; I" square; T; [iMiUi3o; ;i;i;i; i3; I" square; T; [inisi3o; ;i;i;i; i3; I" square; T; [iPiPi3o; ;i;i;i; i3; I" square; T; [iPiRi3o; ;i;i;i; i3; I" square; T; [ipiyi3o; ;i;i;i; i3; I" square; T; [iqiri3o; ;i;i;i; i3; I" square; T; [iqisi3o; ;i;i;i; i3; I" square; T; [iqitili3o; ;i;i;i; i3; I" square; T; [iqi}i3o; ;i;i;i; i3; I" square; T; [irigi3o; ;i;i;i; i3; I" square; T; [iriniqi3o; ;i;i;i; i3; I" square; T; [iritiqi3o; ;i;i;i; i3; I" square; T; [iUiMi3o; ;i;i;i; i3; I" square; T; [ iui3iri3i3o; ;i;i;i; i3; I" square; T; [iUiUiRi3o; ;i;i;i; i3; I" square; T; [iUiWi3o; ;i;i;i; i3; I" square; T; [ixiwi3o; ;i;i;i; i3; I" square; T; [iXi{i3o; ;i;i;i; i3; I" square; T; [i\igi3o; ;i;i;i; i3; I" square; T; [i[i"iri3o; ;i;i;i; i3; I" square; T; [iFi"iri3o; ;i;i;i; i3; I" compat; T; [i6iei3o; ;i;i;i; i3; I" compat; T; [i7iei3o; ;i;i;i; i3; I" compat; T; [i8iei3o; ;i;i;i; i3; I" compat; T; [i9iei3o; ;i;i;i; i3; I" compat; T; [i:iei3o; ;i;i;i; i3; I" compat; T; [i;iei3o; ;i;i;i; i3; I" compat; T; [iiei3o; ;i;i;i; i3; I" compat; T; [i6i5iei3o; ;i;i;i; i3; I" compat; T; [i6i6iei3o; ;i;i;i; i3; I" compat; T; [i6i7iei3o; ;i;i;i; i3; I" compat; T; [i6i8iei3o; ;i;i;i; i3; I" compat; T; [i6i9iei3o; ;i;i;i; i3; I" compat; T; [i6i:iei3o; ;i;i;i; i3; I" compat; T; [i6i;iei3o; ;i;i;i; i3; I" compat; T; [i6iiei3o; ;i;i;i; i3; I" compat; T; [i7i5iei3o; ;i;i;i; i3; I" compat; T; [i7i6iei3o; ;i;i;i; i3; I" compat; T; [i7i7iei3o; ;i;i;i; i3; I" compat; T; [i7i8iei3o; ;i;i;i; i3; I" compat; T; [i7i9iei3o; ;i;i;i; i3; I" compat; T; [i7i:iei3o; ;i;i;i; i3; I" compat; T; [i7i;iei3o; ;i;i;i; i3; I" compat; T; [i7iiei3o; ;i;i;i; i3; I" compat; T; [i8i5iei3o; ;i;i;i; i3; I" compat; T; [i8i6iei3o; ;i;i;i; i3; I" square; T; [ilifiqi4o; ;i;i;i; i4; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0i˟o; ;i;i;i; i˟; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0iào; ;i;i;i; ià; 0; 0iĠo; ;i;i;i; iĠ; 0; 0iŠo; ;i;i;i; iŠ; 0; 0iƠo; ;i;i;i; iƠ; 0; 0iǠo; ;i;i;i; iǠ; 0; 0iȠo; ;i;i;i; iȠ; 0; 0iɠo; ;i;i;i; iɠ; 0; 0iʠo; ;i;i;i; iʠ; 0; 0iˠo; ;i;i;i; iˠ; 0; 0i̠o; ;i;i;i; i̠; 0; 0i͠o; ;i;i;i; i͠; 0; 0iΠo; ;i;i;i; iΠ; 0; 0iϠo; ;i;i;i; iϠ; 0; 0iРo; ;i;i;i; iР; 0; 0iѠo; ;i;i;i; iѠ; 0; 0iҠo; ;i;i;i; iҠ; 0; 0iӠo; ;i;i;i; iӠ; 0; 0iԠo; ;i;i;i; iԠ; 0; 0iՠo; ;i;i;i; iՠ; 0; 0i֠o; ;i;i;i; i֠; 0; 0iנo; ;i;i;i; iנ; 0; 0iؠo; ;i;i;i; iؠ; 0; 0i٠o; ;i;i;i; i٠; 0; 0iڠo; ;i;i;i; iڠ; 0; 0i۠o; ;i;i;i; i۠; 0; 0iܠo; ;i;i;i; iܠ; 0; 0iݠo; ;i;i;i; iݠ; 0; 0iޠo; ;i;i;i; iޠ; 0; 0iߠo; ;i;i;i; iߠ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¡o; ;i;i;i; i¡; 0; 0iáo; ;i;i;i; iá; 0; 0iġo; ;i;i;i; iġ; 0; 0išo; ;i;i;i; iš; 0; 0iơo; ;i;i;i; iơ; 0; 0iǡo; ;i;i;i; iǡ; 0; 0iȡo; ;i;i;i; iȡ; 0; 0iɡo; ;i;i;i; iɡ; 0; 0iʡo; ;i;i;i; iʡ; 0; 0iˡo; ;i;i;i; iˡ; 0; 0i̡o; ;i;i;i; i̡; 0; 0i͡o; ;i;i;i; i͡; 0; 0iΡo; ;i;i;i; iΡ; 0; 0iϡo; ;i;i;i; iϡ; 0; 0iСo; ;i;i;i; iС; 0; 0iѡo; ;i;i;i; iѡ; 0; 0iҡo; ;i;i;i; iҡ; 0; 0iӡo; ;i;i;i; iӡ; 0; 0iԡo; ;i;i;i; iԡ; 0; 0iաo; ;i;i;i; iա; 0; 0i֡o; ;i;i;i; i֡; 0; 0iסo; ;i;i;i; iס; 0; 0iءo; ;i;i;i; iء; 0; 0i١o; ;i;i;i; i١; 0; 0iڡo; ;i;i;i; iڡ; 0; 0iۡo; ;i;i;i; iۡ; 0; 0iܡo; ;i;i;i; iܡ; 0; 0iݡo; ;i;i;i; iݡ; 0; 0iޡo; ;i;i;i; iޡ; 0; 0iߡo; ;i;i;i; iߡ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¢o; ;i;i;i; i¢; 0; 0iâo; ;i;i;i; iâ; 0; 0iĢo; ;i;i;i; iĢ; 0; 0iŢo; ;i;i;i; iŢ; 0; 0iƢo; ;i;i;i; iƢ; 0; 0iǢo; ;i;i;i; iǢ; 0; 0iȢo; ;i;i;i; iȢ; 0; 0iɢo; ;i;i;i; iɢ; 0; 0iʢo; ;i;i;i; iʢ; 0; 0iˢo; ;i;i;i; iˢ; 0; 0i̢o; ;i;i;i; i̢; 0; 0i͢o; ;i;i;i; i͢; 0; 0i΢o; ;i;i;i; i΢; 0; 0iϢo; ;i;i;i; iϢ; 0; 0iТo; ;i;i;i; iТ; 0; 0iѢo; ;i;i;i; iѢ; 0; 0iҢo; ;i;i;i; iҢ; 0; 0iӢo; ;i;i;i; iӢ; 0; 0iԢo; ;i;i;i; iԢ; 0; 0iբo; ;i;i;i; iբ; 0; 0i֢o; ;i;i;i; i֢; 0; 0iעo; ;i;i;i; iע; 0; 0iآo; ;i;i;i; iآ; 0; 0i٢o; ;i;i;i; i٢; 0; 0iڢo; ;i;i;i; iڢ; 0; 0iۢo; ;i;i;i; iۢ; 0; 0iܢo; ;i;i;i; iܢ; 0; 0iݢo; ;i;i;i; iݢ; 0; 0iޢo; ;i;i;i; iޢ; 0; 0iߢo; ;i;i;i; iߢ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i£o; ;i;i;i; i£; 0; 0ião; ;i;i;i; iã; 0; 0iģo; ;i;i;i; iģ; 0; 0iţo; ;i;i;i; iţ; 0; 0iƣo; ;i;i;i; iƣ; 0; 0iǣo; ;i;i;i; iǣ; 0; 0iȣo; ;i;i;i; iȣ; 0; 0iɣo; ;i;i;i; iɣ; 0; 0iʣo; ;i;i;i; iʣ; 0; 0iˣo; ;i;i;i; iˣ; 0; 0ịo; ;i;i;i; ị; 0; 0iͣo; ;i;i;i; iͣ; 0; 0iΣo; ;i;i;i; iΣ; 0; 0iϣo; ;i;i;i; iϣ; 0; 0iУo; ;i;i;i; iУ; 0; 0iѣo; ;i;i;i; iѣ; 0; 0iңo; ;i;i;i; iң; 0; 0iӣo; ;i;i;i; iӣ; 0; 0iԣo; ;i;i;i; iԣ; 0; 0iգo; ;i;i;i; iգ; 0; 0i֣o; ;i;i;i; i֣; 0; 0iףo; ;i;i;i; iף; 0; 0iأo; ;i;i;i; iأ; 0; 0i٣o; ;i;i;i; i٣; 0; 0iڣo; ;i;i;i; iڣ; 0; 0iۣo; ;i;i;i; iۣ; 0; 0iܣo; ;i;i;i; iܣ; 0; 0iݣo; ;i;i;i; iݣ; 0; 0iޣo; ;i;i;i; iޣ; 0; 0iߣo; ;i;i;i; iߣ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¤o; ;i;i;i; i¤; 0; 0iäo; ;i;i;i; iä; 0; 0iĤo; ;i;i;i; iĤ; 0; 0iŤo; ;i;i;i; iŤ; 0; 0iƤo; ;i;i;i; iƤ; 0; 0iФo; ;i;i;i; iФ; 0; 0iѤo; ;i;i;i; iѤ; 0; 0iҤo; ;i;i;i; iҤ; 0; 0iӤo; ;i;i;i; iӤ; 0; 0iԤo; ;i;i;i; iԤ; 0; 0iդo; ;i;i;i; iդ; 0; 0i֤o; ;i;i;i; i֤; 0; 0iפo; ;i;i;i; iפ; 0; 0iؤo; ;i;i;i; iؤ; 0; 0i٤o; ;i;i;i; i٤; 0; 0iڤo; ;i;i;i; iڤ; 0; 0iۤo; ;i;i;i; iۤ; 0; 0iܤo; ;i;i;i; iܤ; 0; 0iݤo; ;i;i;i; iݤ; 0; 0iޤo; ;i;i;i; iޤ; 0; 0iߤo; ;i;i;i; iߤ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¥o; ;i;i;i; i¥; 0; 0iåo; ;i;i;i; iå; 0; 0iĥo; ;i;i;i; iĥ; 0; 0iťo; ;i;i;i; iť; 0; 0iƥo; ;i;i;i; iƥ; 0; 0iǥo; ;i;i;i; iǥ; 0; 0iȥo; ;i;i;i; iȥ; 0; 0iɥo; ;i;i;i; iɥ; 0; 0iʥo; ;i;i;i; iʥ; 0; 0i˥o; ;i;i;i; i˥; 0; 0i̥o; ;i;i;i; i̥; 0; 0iͥo; ;i;i;i; iͥ; 0; 0iΥo; ;i;i;i; iΥ; 0; 0iϥo; ;i;i;i; iϥ; 0; 0iХo; ;i;i;i; iХ; 0; 0iѥo; ;i;i;i; iѥ; 0; 0iҥo; ;i;i;i; iҥ; 0; 0iӥo; ;i;i;i; iӥ; 0; 0iԥo; ;i;i;i; iԥ; 0; 0iեo; ;i;i;i; iե; 0; 0i֥o; ;i;i;i; i֥; 0; 0iץo; ;i;i;i; iץ; 0; 0iإo; ;i;i;i; iإ; 0; 0i٥o; ;i;i;i; i٥; 0; 0iڥo; ;i;i;i; iڥ; 0; 0iۥo; ;i;i;i; iۥ; 0; 0iܥo; ;i;i;i; iܥ; 0; 0iݥo; ;i;i;i; iݥ; 0; 0iޥo; ;i;i;i; iޥ; 0; 0iߥo; ;i;i;i; iߥ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i@o; ;i;i;iA; i@; 0; 0iAo; ;i;i@;i; iA; 0; 0iBo; ;i;i;iC; iB; 0; 0iCo; ;i;iB;i; iC; 0; 0iDo; ;i;i;iE; iD; 0; 0iEo; ;i;iD;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;i;iQ; iP; 0; 0iQo; ;i;iP;i; iQ; 0; 0iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; 0iUo; ;i;iT;i; iU; 0; 0iVo; ;i;i;iW; iV; 0; 0iWo; ;i;iV;i; iW; 0; 0iXo; ;i;i;iY; iX; 0; 0iYo; ;i;iX;i; iY; 0; 0iZo; ;i;i;i[; iZ; 0; 0i[o; ;i;iZ;i; i[; 0; 0i\o; ;i;i;i]; i\; 0; 0i]o; ;i;i\;i; i]; 0; 0i^o; ;i;i;i_; i^; 0; 0i_o; ;i;i^;i; i_; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¦o; ;i;i;i; i¦; 0; 0iæo; ;i;i;i; iæ; 0; 0iĦo; ;i;i;i; iĦ; 0; 0iŦo; ;i;i;i; iŦ; 0; 0iƦo; ;i;i;i; iƦ; 0; 0iǦo; ;i;i;i; iǦ; 0; 0iȦo; ;i;i;i; iȦ; 0; 0iɦo; ;i;i;i; iɦ; 0; 0iʦo; ;i;i;i; iʦ; 0; 0i˦o; ;i;i;i; i˦; 0; 0i̦o; ;i;i;i; i̦; 0; 0iͦo; ;i;i;i; iͦ; 0; 0iΦo; ;i;i;i; iΦ; 0; 0iϦo; ;i;i;i; iϦ; 0; 0iЦo; ;i;i;i; iЦ; 0; 0iѦo; ;i;i;i; iѦ; 0; 0iҦo; ;i;i;i; iҦ; 0; 0iӦo; ;i;i;i; iӦ; 0; 0iԦo; ;i;i;i; iԦ; 0; 0iզo; ;i;i;i; iզ; 0; 0i֦o; ;i;i;i; i֦; 0; 0iצo; ;i;i;i; iצ; 0; 0iئo; ;i;i;i; iئ; 0; 0i٦o; ;i;i;i; i٦; 0; 0iڦo; ;i;i;i; iڦ; 0; 0iۦo; ;i;i;i; iۦ; 0; 0iܦo; ;i;i;i; iܦ; 0; 0iݦo; ;i;i;i; iݦ; 0; 0iަo; ;i;i;i; iަ; 0; 0iߦo; ;i;i;i; iߦ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i&o; ;i;i;i'; i&; 0; 0i'o; ;i;i&;i; i'; 0; 0i(o; ;i;i;i); i(; 0; 0i)o; ;i;i(;i; i); 0; 0i*o; ;i;i;i+; i*; 0; 0i+o; ;i;i*;i; i+; 0; 0i,o; ;i;i;i-; i,; 0; 0i-o; ;i;i,;i; i-; 0; 0i.o; ;i;i;i/; i.; 0; 0i/o; ;i;i.;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i3; i2; 0; 0i3o; ;i;i2;i; i3; 0; 0i4o; ;i;i;i5; i4; 0; 0i5o; ;i;i4;i; i5; 0; 0i6o; ;i;i;i7; i6; 0; 0i7o; ;i;i6;i; i7; 0; 0i8o; ;i;i;i9; i8; 0; 0i9o; ;i;i8;i; i9; 0; 0i:o; ;i;i;i;; i:; 0; 0i;o; ;i;i:;i; i;; 0; 0io; ;i;i;i?; i>; 0; 0i?o; ;i;i>;i; i?; 0; 0i@o; ;i;i;iA; i@; 0; 0iAo; ;i;i@;i; iA; 0; 0iBo; ;i;i;iC; iB; 0; 0iCo; ;i;iB;i; iC; 0; 0iDo; ;i;i;iE; iD; 0; 0iEo; ;i;iD;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;i;iQ; iP; 0; 0iQo; ;i;iP;i; iQ; 0; 0iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; 0iUo; ;i;iT;i; iU; 0; 0iVo; ;i;i;iW; iV; 0; 0iWo; ;i;iV;i; iW; 0; 0iXo; ;i;i;iY; iX; 0; 0iYo; ;i;iX;i; iY; 0; 0iZo; ;i;i;i[; iZ; 0; 0i[o; ;i;iZ;i; i[; 0; 0i\o; ;i;i;i]; i\; 0; 0i]o; ;i;i\;i; i]; 0; 0i^o; ;i;i;i_; i^; 0; 0i_o; ;i;i^;i; i_; 0; 0i`o; ;i;i;ia; i`; 0; 0iao; ;i;i`;i; ia; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;io; in; 0; 0ioo; ;i;in;i; io; 0; 0ipo; ;i;i;i; ip; I" super; T; [ioiqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;iz; iy; 0; 0izo; ;i;iy;i; iz; 0; 0i{o; ;i;i;i|; i{; 0; 0i|o; ;i;i{;i; i|; 0; 0i}o; ;i;i;iy; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i~;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¨o; ;i;i;i; i¨; 0; 0ièo; ;i;i;i; iè; 0; 0iĨo; ;i;i;i; iĨ; 0; 0iΨo; ;i;i;i; iΨ; 0; 0iϨo; ;i;i;i; iϨ; 0; 0iШo; ;i;i;i; iШ; 0; 0iѨo; ;i;i;i; iѨ; 0; 0iҨo; ;i;i;i; iҨ; 0; 0iӨo; ;i;i;i; iӨ; 0; 0iԨo; ;i;i;i; iԨ; 0; 0iըo; ;i;i;i; iը; 0; 0i֨o; ;i;i;i; i֨; 0; 0iרo; ;i;i;i; iר; 0; 0iبo; ;i;i;i; iب; 0; 0i٨o; ;i;i;i; i٨; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i©o; ;i;i;i; i©; 0; 0iéo; ;i;i;i; ié; 0; 0iĩo; ;i;i;i; iĩ; 0; 0iũo; ;i;i;i; iũ; 0; 0iƩo; ;i;i;i; iƩ; 0; 0iǩo; ;i;i;i; iǩ; 0; 0iȩo; ;i;i;i; iȩ; 0; 0iɩo; ;i;i;i; iɩ; 0; 0iʩo; ;i;i;i; iʩ; 0; 0i˩o; ;i;i;i; i˩; 0; 0i̩o; ;i;i;i; i̩; 0; 0iͩo; ;i;i;i; iͩ; 0; 0iϩo; ;i;i;i; iϩ; 0; 0iЩo; ;i;i;i; iЩ; 0; 0iѩo; ;i;i;i; iѩ; 0; 0iҩo; ;i;i;i; iҩ; 0; 0iөo; ;i;i;i; iө; 0; 0iԩo; ;i;i;i; iԩ; 0; 0iթo; ;i;i;i; iթ; 0; 0i֩o; ;i;i;i; i֩; 0; 0iשo; ;i;i;i; iש; 0; 0iةo; ;i;i;i; iة; 0; 0i٩o; ;i;i;i; i٩; 0; 0iީo; ;i;i;i; iީ; 0; 0iߩo; ;i;i;i; iߩ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0iªo; ;i;i;i; iª; 0; 0i۪o; ;i;i;i; i۪; 0; 0iܪo; ;i;i;i; iܪ; 0; 0iݪo; ;i;i;i; iݪ; 0; 0iުo; ;i;i;i; iު; 0; 0iߪo; ;i;i;i; iߪ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i«o; ;i;i;i; i«; 0; 0iëo; ;i;i;i; ië; 0; 0iīo; ;i;i;i; iī; 0; 0iūo; ;i;i;i; iū; 0; 0iƫo; ;i;i;i; iƫ; 0; 0iǫo; ;i;i;i; iǫ; 0; 0iȫo; ;i;i;i; iȫ; 0; 0iɫo; ;i;i;i; iɫ; 0; 0iʫo; ;i;i;i; iʫ; 0; 0i˫o; ;i;i;i; i˫; 0; 0i̫o; ;i;i;i; i̫; 0; 0iͫo; ;i;i;i; iͫ; 0; 0iΫo; ;i;i;i; iΫ; 0; 0iϫo; ;i;i;i; iϫ; 0; 0iЫo; ;i;i;i; iЫ; 0; 0iѫo; ;i;i;i; iѫ; 0; 0iҫo; ;i;i;i; iҫ; 0; 0iӫo; ;i;i;i; iӫ; 0; 0iԫo; ;i;i;i; iԫ; 0; 0iիo; ;i;i;i; iի; 0; 0i֫o; ;i;i;i; i֫; 0; 0i׫o; ;i;i;i; i׫; 0; 0iثo; ;i;i;i; iث; 0; 0i٫o; ;i;i;i; i٫; 0; 0iګo; ;i;i;i; iګ; 0; 0i۫o; ;i;i;i; i۫; 0; 0iܫo; ;i;i;i; iܫ; 0; 0iݫo; ;i;i;i; iݫ; 0; 0iޫo; ;i;i;i; iޫ; 0; 0i߫o; ;i;i;i; i߫; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iHio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iʎio; ;i;i;i; i; 0; [iȌio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i2Nio; ;i;i;i; i; 0; [iSio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ii o; ;i;i;i; i ; 0; [iQYi o; ;i;i;i; i ; 0; [iёi o; ;i;i;i; i ; 0; [iUi o; ;i;i;i; i ; 0; [iHYi o; ;i;i;i; i ; 0; [iaio; ;i;i;i; i; 0; [iivio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i?io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iuSio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [i-i o; ;i;i;i; i ; 0; [ii!o; ;i;i;i; i!; 0; [iP]i"o; ;i;i;i; i"; 0; [ioi#o; ;i;i;i; i#; 0; [iͅi$o; ;i;i;i; i$; 0; [idi%o; ;i;i;i; i%; 0; [ibi&o; ;i;i;i; i&; 0; [i؁i'o; ;i;i;i; i'; 0; [ii(o; ;i;i;i; i(; 0; [i^i)o; ;i;i;i; i); 0; [igi*o; ;i;i;i; i*; 0; [ijmi+o; ;i;i;i; i+; 0; [iri,o; ;i;i;i; i,; 0; [iΐi-o; ;i;i;i; i-; 0; [iOi.o; ;i;i;i; i.; 0; [iQi/o; ;i;i;i; i/; 0; [iRi0o; ;i;i;i; i0; 0; [idi1o; ;i;i;i; i1; 0; [iji2o; ;i;i;i; i2; 0; [iri3o; ;i;i;i; i3; 0; [ivi4o; ;i;i;i; i4; 0; [ii5o; ;i;i;i; i5; 0; [ii6o; ;i;i;i; i6; 0; [i\i7o; ;i;i;i; i7; 0; [ii8o; ;i;i;i; i8; 0; [i2i9o; ;i;i;i; i9; 0; [ioi:o; ;i;i;i; i:; 0; [ii;o; ;i;i;i; i;; 0; [ixio; ;i;i;i; i>; 0; [iɃi?o; ;i;i;i; i?; 0; [ii@o; ;i;i;i; i@; 0; [iiAo; ;i;i;i; iA; 0; [i֊iBo; ;i;i;i; iB; 0; [iXiCo; ;i;i;i; iC; 0; [i_iDo; ;i;i;i; iD; 0; [i`|iEo; ;i;i;i; iE; 0; [i~iFo; ;i;i;i; iF; 0; [ibriGo; ;i;i;i; iG; 0; [ixiHo; ;i;i;i; iH; 0; [iŒiIo; ;i;i;i; iI; 0; [iiJo; ;i;i;i; iJ; 0; [iXiKo; ;i;i;i; iK; 0; [ib\iLo; ;i;i;i; iL; 0; [ijiMo; ;i;i;i; iM; 0; [imiNo; ;i;i;i; iN; 0; [ioiOo; ;i;i;i; iO; 0; [i/}iPo; ;i;i;i; iP; 0; [i7~iQo; ;i;i;i; iQ; 0; [iKiRo; ;i;i;i; iR; 0; [iRiSo; ;i;i;i; iS; 0; [iiTo; ;i;i;i; iT; 0; [iQiUo; ;i;i;i; iU; 0; [iQiVo; ;i;i;i; iV; 0; [iziWo; ;i;i;i; iW; 0; [i}iXo; ;i;i;i; iX; 0; [iiYo; ;i;i;i; iY; 0; [iuiZo; ;i;i;i; iZ; 0; [ii[o; ;i;i;i; i[; 0; [ibi\o; ;i;i;i; i\; 0; [iji]o; ;i;i;i; i]; 0; [ii^o; ;i;i;i; i^; 0; [i9Ni_o; ;i;i;i; i_; 0; [i[i`o; ;i;i;i; i`; 0; [i`iao; ;i;i;i; ia; 0; [isibo; ;i;i;i; ib; 0; [ipuico; ;i;i;i; ic; 0; [iSido; ;i;i;i; id; 0; [ixieo; ;i;i;i; ie; 0; [iOifo; ;i;i;i; if; 0; [i_igo; ;i;i;i; ig; 0; [i Niho; ;i;i;i; ih; 0; [iliio; ;i;i;i; ii; 0; [ixeijo; ;i;i;i; ij; 0; [i"}iko; ;i;i;i; ik; 0; [iSilo; ;i;i;i; il; 0; [i^Ximo; ;i;i;i; im; 0; [iwino; ;i;i;i; in; 0; [iIioo; ;i;i;i; io; 0; [iipo; ;i;i;i; ip; 0; [ikiqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [iliso; ;i;i;i; is; 0; [ibito; ;i;i;i; it; 0; [iiuo; ;i;i;i; iu; 0; [icivo; ;i;i;i; iv; 0; [ieuiwo; ;i;i;i; iw; 0; [iNixo; ;i;i;i; ix; 0; [iiQiyo; ;i;i;i; iy; 0; [iQizo; ;i;i;i; iz; 0; [ihi{o; ;i;i;i; i{; 0; [i|i|o; ;i;i;i; i|; 0; [ioi}o; ;i;i;i; i}; 0; [iҊi~o; ;i;i;i; i~; 0; [iϑio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iBTio; ;i;i;i; i; 0; [isYio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i*yio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iΞio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iwkio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [it^io; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [i#oio; ;i;i;i; i; 0; [iIqio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i&io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i#io; ;i;i;i; i; 0; [iJio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [iˆio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i{cio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [i>|io; ;i;i;i; i; 0; [iusio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iVio; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [iitio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iFio; ;i;i;i; i; 0; [i4io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iHio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iPio; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [i?\io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [iBvio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i.io; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i{gio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i tio; ;i;i;i; i; 0; [iYuio; ;i;i;i; i; 0; [ikxio; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [imQio; ;i;i;i; i; 0; [i.bio; ;i;i;i; i; 0; [ixio; ;i;i;i; i; 0; [i+Pio; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [i*io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [iDaio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i)Rio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [ie\io; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iNgio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [ilio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iuio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iψio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ȋio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i?Sio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iWio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [izio; ;i;i;i; i; 0; [i {io; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [iXio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [i6io; ;i;i;i; i; 0; [i:Rio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iLi o; ;i;i;i; i ; 0; [iMi o; ;i;i;i; i ; 0; [ii o; ;i;i;i; i ; 0; [i^i o; ;i;i;i; i ; 0; [i@Qi o; ;i;i;i; i ; 0; [iUio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZXio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [itfio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [i*sio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [io; ;i;i;i; i>; 0; [ihai?o; ;i;i;i; i?; 0; [iai@o; ;i;i;i; i@; 0; [iaiAo; ;i;i;i; iA; 0; [iOeiBo; ;i;i;i; iB; 0; [ieiCo; ;i;i;i; iC; 0; [ifiDo; ;i;i;i; iD; 0; [ihiEo; ;i;i;i; iE; 0; [iwmiFo; ;i;i;i; iF; 0; [iniGo; ;i;i;i; iG; 0; [i"oiHo; ;i;i;i; iH; 0; [inqiIo; ;i;i;i; iI; 0; [i+riJo; ;i;i;i; iJ; 0; [i"tiKo; ;i;i;i; iK; 0; [ixiLo; ;i;i;i; iL; 0; [i>yiMo; ;i;i;i; iM; 0; [iIyiNo; ;i;i;i; iN; 0; [iHyiOo; ;i;i;i; iO; 0; [iPyiPo; ;i;i;i; iP; 0; [iVyiQo; ;i;i;i; iQ; 0; [i]yiRo; ;i;i;i; iR; 0; [iyiSo; ;i;i;i; iS; 0; [iyiTo; ;i;i;i; iT; 0; [i@ziUo; ;i;i;i; iU; 0; [iziVo; ;i;i;i; iV; 0; [i{iWo; ;i;i;i; iW; 0; [i}iXo; ;i;i;i; iX; 0; [i ~iYo; ;i;i;i; iY; 0; [iA~iZo; ;i;i;i; iZ; 0; [iri[o; ;i;i;i; i[; 0; [ii\o; ;i;i;i; i\; 0; [ii]o; ;i;i;i; i]; 0; [iyi^o; ;i;i;i; i^; 0; [iyi_o; ;i;i;i; i_; 0; [iWi`o; ;i;i;i; i`; 0; [iiao; ;i;i;i; ia; 0; [iibo; ;i;i;i; ib; 0; [iico; ;i;i;i; ic; 0; [i9ido; ;i;i;i; id; 0; [iӌieo; ;i;i;i; ie; 0; [iifo; ;i;i;i; if; 0; [iigo; ;i;i;i; ig; 0; [i8iho; ;i;i;i; ih; 0; [iiio; ;i;i;i; ii; 0; [iijo; ;i;i;i; ij; 0; [i;iko; ;i;i;i; ik; 0; [iu`ilo; ;i;i;i; il; 0; [iBimo; ;i;i;i; im; 0; [iipo; ;i;i;i; ip; 0; [i&Niqo; ;i;i;i; iq; 0; [iQiro; ;i;i;i; ir; 0; [ihQiso; ;i;i;i; is; 0; [iOito; ;i;i;i; it; 0; [iEQiuo; ;i;i;i; iu; 0; [iQivo; ;i;i;i; iv; 0; [iRiwo; ;i;i;i; iw; 0; [iRixo; ;i;i;i; ix; 0; [iUiyo; ;i;i;i; iy; 0; [iUUizo; ;i;i;i; iz; 0; [iUi{o; ;i;i;i; i{; 0; [iUi|o; ;i;i;i; i|; 0; [iZXi}o; ;i;i;i; i}; 0; [iXi~o; ;i;i;i; i~; 0; [iDYio; ;i;i;i; i; 0; [iTYio; ;i;i;i; i; 0; [ibZio; ;i;i;i; i; 0; [i([io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ii_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iNaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [i`aio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [i4bio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [iRdio; ;i;i;i; i; 0; [iVeio; ;i;i;i; i; 0; [itfio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iVgio; ;i;i;i; i; 0; [iykio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i"oio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [inqio; ;i;i;i; i; 0; [iwio; ;i;i;i; i; 0; [i5rio; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [i*sio; ;i;i;i; i; 0; [iqtio; ;i;i;i; i; 0; [iuio; ;i;i;i; i; 0; [i;uio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [iJwio; ;i;i;i; i; 0; [i@wio; ;i;i;i; i; 0; [ixio; ;i;i;i; i; 0; [izio; ;i;i;i; i; 0; [i{io; ;i;i;i; i; 0; [i{|io; ;i;i;i; i; 0; [i[}io; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [i>io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iAio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iˊio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i9io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iVio; ;i;i;i; i; 0; [iۗio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i io; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iJ(io; ;i;i;i; i; 0; [iD(io; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [i@io; ;i;i;i; i; 0; [i9@io; ;i;i;i; i; 0; [iIRio; ;i;i;i; i; 0; [i\io; ;i;i;i; i; 0; [i~io; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [ikikio; ;i;i;i; i; I" compat; T; [ikinio; ;i;i;i; i; I" compat; T; [ikiqio; ;i;i;i; i; I" compat; T; [ikikinio; ;i;i;i; i; I" compat; T; [ikikiqio; ;i;i;i; i; I" compat; T; [iiyio; ;i;i;i; i; I" compat; T; [ixiyio; ;i;i;i; i; I" compat; T; [itivio; ;i;i;i; i; I" compat; T; [itieio; ;i;i;i; i; I" compat; T; [itikio; ;i;i;i; i; I" compat; T; [i~ivio; ;i;i;i; i; I" compat; T; [itimio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iii o; ;i;i;i; i ; I" font; T; [ii!o; ;i;i;i; i!; I" font; T; [ii"o; ;i;i;i; i"; I" font; T; [ii#o; ;i;i;i; i#; I" font; T; [ii$o; ;i;i;i; i$; I" font; T; [ii%o; ;i;i;i; i%; I" font; T; [ii&o; ;i;i;i; i&; I" font; T; [ii'o; ;i;i;i; i'; I" font; T; [ii(o; ;i;i;i; i(; I" font; T; [ii)o; ;i;i;i; i); I" font; T; [i0i*o; ;i;i;i; i*; 0; [iii+o; ;i;i;i; i+; 0; [iii,o; ;i;i;i; i,; 0; [iIii-o; ;i;i;i; i-; 0; [iIii.o; ;i;i;i; i.; 0; [iii/o; ;i;i;i; i/; 0; [iii0o; ;i;i;i; i0; 0; [iii1o; ;i;i;i; i1; 0; [iii2o; ;i;i;i; i2; 0; [iii3o; ;i;i;i; i3; 0; [iii4o; ;i;i;i; i4; 0; [iii5o; ;i;i;i; i5; 0; [iii6o; ;i;i;i; i6; 0; [iii8o; ;i;i;i; i8; 0; [iii9o; ;i;i;i; i9; 0; [iii:o; ;i;i;i; i:; 0; [iii;o; ;i;i;i; i;; 0; [iiio; ;i;i;i; i>; 0; [iii@o; ;i;i;i; i@; 0; [iiiAo; ;i;i;i; iA; 0; [iiiCo; ;i;i;i; iC; 0; [iiiDo; ;i;i;i; iD; 0; [iiiFo; ;i;i;i; iF; 0; [iiiGo; ;i;i;i; iG; 0; [iiiHo; ;i;i;i; iH; 0; [iiiIo; ;i;i;i; iI; 0; [iiiJo; ;i;i;i; iJ; 0; [iiiKo; ;i;i;i; iK; 0; [iiiLo; ;i;i;i; iL; 0; [iiiMo; ;i;i;i; iM; 0; [iiiNo; ;i;i;i; iN; 0; [iiiOo; ;i;i;i; iO; I" compat; T; [iiiPo; ;i;i;i; iP; I" isolated; T; [iqiQo; ;i;i;i; iQ; I" final; T; [iqiRo; ;i;i;i; iR; I" isolated; T; [i{iSo; ;i;i;i; iS; I" final; T; [i{iTo; ;i;i;i; iT; I" initial; T; [i{iUo; ;i;i;i; iU; I" medial; T; [i{iVo; ;i;i;i; iV; I" isolated; T; [i~iWo; ;i;i;i; iW; I" final; T; [i~iXo; ;i;i;i; iX; I" initial; T; [i~iYo; ;i;i;i; iY; I" medial; T; [i~iZo; ;i;i;i; iZ; I" isolated; T; [ii[o; ;i;i;i; i[; I" final; T; [ii\o; ;i;i;i; i\; I" initial; T; [ii]o; ;i;i;i; i]; I" medial; T; [ii^o; ;i;i;i; i^; I" isolated; T; [izi_o; ;i;i;i; i_; I" final; T; [izi`o; ;i;i;i; i`; I" initial; T; [iziao; ;i;i;i; ia; I" medial; T; [izibo; ;i;i;i; ib; I" isolated; T; [iico; ;i;i;i; ic; I" final; T; [iido; ;i;i;i; id; I" initial; T; [iieo; ;i;i;i; ie; I" medial; T; [iifo; ;i;i;i; if; I" isolated; T; [iyigo; ;i;i;i; ig; I" final; T; [iyiho; ;i;i;i; ih; I" initial; T; [iyiio; ;i;i;i; ii; I" medial; T; [iyijo; ;i;i;i; ij; I" isolated; T; [iiko; ;i;i;i; ik; I" final; T; [iilo; ;i;i;i; il; I" initial; T; [iimo; ;i;i;i; im; I" medial; T; [iino; ;i;i;i; in; I" isolated; T; [iioo; ;i;i;i; io; I" final; T; [iipo; ;i;i;i; ip; I" initial; T; [iiqo; ;i;i;i; iq; I" medial; T; [iiro; ;i;i;i; ir; I" isolated; T; [iiso; ;i;i;i; is; I" final; T; [iito; ;i;i;i; it; I" initial; T; [iiuo; ;i;i;i; iu; I" medial; T; [iivo; ;i;i;i; iv; I" isolated; T; [iiwo; ;i;i;i; iw; I" final; T; [iixo; ;i;i;i; ix; I" initial; T; [iiyo; ;i;i;i; iy; I" medial; T; [iizo; ;i;i;i; iz; I" isolated; T; [ii{o; ;i;i;i; i{; I" final; T; [ii|o; ;i;i;i; i|; I" initial; T; [ii}o; ;i;i;i; i}; I" medial; T; [ii~o; ;i;i;i; i~; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iwio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" initial; T; [iIio; ;i;i;i; i; I" medial; T; [iIio; ;i;i;i; i; I" isolated; T; [i&i'io; ;i;i;i; i; I" final; T; [i&i'io; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iHio; ;i;i;i; i; I" final; T; [i&iHio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" initial; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iIio; ;i;i;i; i; I" final; T; [i&iIio; ;i;i;i; i; I" initial; T; [i&iIio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [i&i,io; ;i;i;i; i; I" isolated; T; [i&i-io; ;i;i;i; i; I" isolated; T; [i&iEio; ;i;i;i; i; I" isolated; T; [i&iIio; ;i;i;i; i; I" isolated; T; [i&iJio; ;i;i;i; i; I" isolated; T; [i(i,io; ;i;i;i; i; I" isolated; T; [i(i-io; ;i;i;i; i; I" isolated; T; [i(i.io; ;i;i;i; i; I" isolated; T; [i(iEi o; ;i;i;i; i ; I" isolated; T; [i(iIi o; ;i;i;i; i ; I" isolated; T; [i(iJi o; ;i;i;i; i ; I" isolated; T; [i*i,i o; ;i;i;i; i ; I" isolated; T; [i*i-i o; ;i;i;i; i ; I" isolated; T; [i*i.io; ;i;i;i; i; I" isolated; T; [i*iEio; ;i;i;i; i; I" isolated; T; [i*iIio; ;i;i;i; i; I" isolated; T; [i*iJio; ;i;i;i; i; I" isolated; T; [i+i,io; ;i;i;i; i; I" isolated; T; [i+iEio; ;i;i;i; i; I" isolated; T; [i+iIio; ;i;i;i; i; I" isolated; T; [i+iJio; ;i;i;i; i; I" isolated; T; [i,i-io; ;i;i;i; i; I" isolated; T; [i,iEio; ;i;i;i; i; I" isolated; T; [i-i,io; ;i;i;i; i; I" isolated; T; [i-iEio; ;i;i;i; i; I" isolated; T; [i.i,io; ;i;i;i; i; I" isolated; T; [i.i-io; ;i;i;i; i; I" isolated; T; [i.iEio; ;i;i;i; i; I" isolated; T; [i3i,io; ;i;i;i; i; I" isolated; T; [i3i-io; ;i;i;i; i; I" isolated; T; [i3i.io; ;i;i;i; i; I" isolated; T; [i3iEi o; ;i;i;i; i ; I" isolated; T; [i5i-i!o; ;i;i;i; i!; I" isolated; T; [i5iEi"o; ;i;i;i; i"; I" isolated; T; [i6i,i#o; ;i;i;i; i#; I" isolated; T; [i6i-i$o; ;i;i;i; i$; I" isolated; T; [i6i.i%o; ;i;i;i; i%; I" isolated; T; [i6iEi&o; ;i;i;i; i&; I" isolated; T; [i7i-i'o; ;i;i;i; i'; I" isolated; T; [i7iEi(o; ;i;i;i; i(; I" isolated; T; [i8iEi)o; ;i;i;i; i); I" isolated; T; [i9i,i*o; ;i;i;i; i*; I" isolated; T; [i9iEi+o; ;i;i;i; i+; I" isolated; T; [i:i,i,o; ;i;i;i; i,; I" isolated; T; [i:iEi-o; ;i;i;i; i-; I" isolated; T; [iAi,i.o; ;i;i;i; i.; I" isolated; T; [iAi-i/o; ;i;i;i; i/; I" isolated; T; [iAi.i0o; ;i;i;i; i0; I" isolated; T; [iAiEi1o; ;i;i;i; i1; I" isolated; T; [iAiIi2o; ;i;i;i; i2; I" isolated; T; [iAiJi3o; ;i;i;i; i3; I" isolated; T; [iBi-i4o; ;i;i;i; i4; I" isolated; T; [iBiEi5o; ;i;i;i; i5; I" isolated; T; [iBiIi6o; ;i;i;i; i6; I" isolated; T; [iBiJi7o; ;i;i;i; i7; I" isolated; T; [iCi'i8o; ;i;i;i; i8; I" isolated; T; [iCi,i9o; ;i;i;i; i9; I" isolated; T; [iCi-i:o; ;i;i;i; i:; I" isolated; T; [iCi.i;o; ;i;i;i; i;; I" isolated; T; [iCiDio; ;i;i;i; i>; I" isolated; T; [iCiJi?o; ;i;i;i; i?; I" isolated; T; [iDi,i@o; ;i;i;i; i@; I" isolated; T; [iDi-iAo; ;i;i;i; iA; I" isolated; T; [iDi.iBo; ;i;i;i; iB; I" isolated; T; [iDiEiCo; ;i;i;i; iC; I" isolated; T; [iDiIiDo; ;i;i;i; iD; I" isolated; T; [iDiJiEo; ;i;i;i; iE; I" isolated; T; [iEi,iFo; ;i;i;i; iF; I" isolated; T; [iEi-iGo; ;i;i;i; iG; I" isolated; T; [iEi.iHo; ;i;i;i; iH; I" isolated; T; [iEiEiIo; ;i;i;i; iI; I" isolated; T; [iEiIiJo; ;i;i;i; iJ; I" isolated; T; [iEiJiKo; ;i;i;i; iK; I" isolated; T; [iFi,iLo; ;i;i;i; iL; I" isolated; T; [iFi-iMo; ;i;i;i; iM; I" isolated; T; [iFi.iNo; ;i;i;i; iN; I" isolated; T; [iFiEiOo; ;i;i;i; iO; I" isolated; T; [iFiIiPo; ;i;i;i; iP; I" isolated; T; [iFiJiQo; ;i;i;i; iQ; I" isolated; T; [iGi,iRo; ;i;i;i; iR; I" isolated; T; [iGiEiSo; ;i;i;i; iS; I" isolated; T; [iGiIiTo; ;i;i;i; iT; I" isolated; T; [iGiJiUo; ;i;i;i; iU; I" isolated; T; [iJi,iVo; ;i;i;i; iV; I" isolated; T; [iJi-iWo; ;i;i;i; iW; I" isolated; T; [iJi.iXo; ;i;i;i; iX; I" isolated; T; [iJiEiYo; ;i;i;i; iY; I" isolated; T; [iJiIiZo; ;i;i;i; iZ; I" isolated; T; [iJiJi[o; ;i;i;i; i[; I" isolated; T; [i0ipi\o; ;i;i;i; i\; I" isolated; T; [i1ipi]o; ;i;i;i; i]; I" isolated; T; [iIipi^o; ;i;i;i; i^; I" isolated; T; [i%iLiQi_o; ;i;i;i; i_; I" isolated; T; [i%iMiQi`o; ;i;i;i; i`; I" isolated; T; [i%iNiQiao; ;i;i;i; ia; I" isolated; T; [i%iOiQibo; ;i;i;i; ib; I" isolated; T; [i%iPiQico; ;i;i;i; ic; I" isolated; T; [i%iQipido; ;i;i;i; id; I" final; T; [i&i1ieo; ;i;i;i; ie; I" final; T; [i&i2ifo; ;i;i;i; if; I" final; T; [i&iEigo; ;i;i;i; ig; I" final; T; [i&iFiho; ;i;i;i; ih; I" final; T; [i&iIiio; ;i;i;i; ii; I" final; T; [i&iJijo; ;i;i;i; ij; I" final; T; [i(i1iko; ;i;i;i; ik; I" final; T; [i(i2ilo; ;i;i;i; il; I" final; T; [i(iEimo; ;i;i;i; im; I" final; T; [i(iFino; ;i;i;i; in; I" final; T; [i(iIioo; ;i;i;i; io; I" final; T; [i(iJipo; ;i;i;i; ip; I" final; T; [i*i1iqo; ;i;i;i; iq; I" final; T; [i*i2iro; ;i;i;i; ir; I" final; T; [i*iEiso; ;i;i;i; is; I" final; T; [i*iFito; ;i;i;i; it; I" final; T; [i*iIiuo; ;i;i;i; iu; I" final; T; [i*iJivo; ;i;i;i; iv; I" final; T; [i+i1iwo; ;i;i;i; iw; I" final; T; [i+i2ixo; ;i;i;i; ix; I" final; T; [i+iEiyo; ;i;i;i; iy; I" final; T; [i+iFizo; ;i;i;i; iz; I" final; T; [i+iIi{o; ;i;i;i; i{; I" final; T; [i+iJi|o; ;i;i;i; i|; I" final; T; [iAiIi}o; ;i;i;i; i}; I" final; T; [iAiJi~o; ;i;i;i; i~; I" final; T; [iBiIio; ;i;i;i; i; I" final; T; [iBiJio; ;i;i;i; i; I" final; T; [iCi'io; ;i;i;i; i; I" final; T; [iCiDio; ;i;i;i; i; I" final; T; [iCiEio; ;i;i;i; i; I" final; T; [iCiIio; ;i;i;i; i; I" final; T; [iCiJio; ;i;i;i; i; I" final; T; [iDiEio; ;i;i;i; i; I" final; T; [iDiIio; ;i;i;i; i; I" final; T; [iDiJio; ;i;i;i; i; I" final; T; [iEi'io; ;i;i;i; i; I" final; T; [iEiEio; ;i;i;i; i; I" final; T; [iFi1io; ;i;i;i; i; I" final; T; [iFi2io; ;i;i;i; i; I" final; T; [iFiEio; ;i;i;i; i; I" final; T; [iFiFio; ;i;i;i; i; I" final; T; [iFiIio; ;i;i;i; i; I" final; T; [iFiJio; ;i;i;i; i; I" final; T; [iIipio; ;i;i;i; i; I" final; T; [iJi1io; ;i;i;i; i; I" final; T; [iJi2io; ;i;i;i; i; I" final; T; [iJiEio; ;i;i;i; i; I" final; T; [iJiFio; ;i;i;i; i; I" final; T; [iJiIio; ;i;i;i; i; I" final; T; [iJiJio; ;i;i;i; i; I" initial; T; [i&i,io; ;i;i;i; i; I" initial; T; [i&i-io; ;i;i;i; i; I" initial; T; [i&i.io; ;i;i;i; i; I" initial; T; [i&iEio; ;i;i;i; i; I" initial; T; [i&iGio; ;i;i;i; i; I" initial; T; [i(i,io; ;i;i;i; i; I" initial; T; [i(i-io; ;i;i;i; i; I" initial; T; [i(i.io; ;i;i;i; i; I" initial; T; [i(iEio; ;i;i;i; i; I" initial; T; [i(iGio; ;i;i;i; i; I" initial; T; [i*i,io; ;i;i;i; i; I" initial; T; [i*i-io; ;i;i;i; i; I" initial; T; [i*i.io; ;i;i;i; i; I" initial; T; [i*iEio; ;i;i;i; i; I" initial; T; [i*iGio; ;i;i;i; i; I" initial; T; [i+iEio; ;i;i;i; i; I" initial; T; [i,i-io; ;i;i;i; i; I" initial; T; [i,iEio; ;i;i;i; i; I" initial; T; [i-i,io; ;i;i;i; i; I" initial; T; [i-iEio; ;i;i;i; i; I" initial; T; [i.i,io; ;i;i;i; i; I" initial; T; [i.iEio; ;i;i;i; i; I" initial; T; [i3i,io; ;i;i;i; i; I" initial; T; [i3i-io; ;i;i;i; i; I" initial; T; [i3i.io; ;i;i;i; i; I" initial; T; [i3iEio; ;i;i;i; i; I" initial; T; [i5i-io; ;i;i;i; i; I" initial; T; [i5i.io; ;i;i;i; i; I" initial; T; [i5iEio; ;i;i;i; i; I" initial; T; [i6i,io; ;i;i;i; i; I" initial; T; [i6i-io; ;i;i;i; i; I" initial; T; [i6i.io; ;i;i;i; i; I" initial; T; [i6iEio; ;i;i;i; i; I" initial; T; [i7i-io; ;i;i;i; i; I" initial; T; [i8iEio; ;i;i;i; i; I" initial; T; [i9i,io; ;i;i;i; i; I" initial; T; [i9iEio; ;i;i;i; i; I" initial; T; [i:i,io; ;i;i;i; i; I" initial; T; [i:iEio; ;i;i;i; i; I" initial; T; [iAi,io; ;i;i;i; i; I" initial; T; [iAi-io; ;i;i;i; i; I" initial; T; [iAi.io; ;i;i;i; i; I" initial; T; [iAiEio; ;i;i;i; i; I" initial; T; [iBi-io; ;i;i;i; i; I" initial; T; [iBiEio; ;i;i;i; i; I" initial; T; [iCi,io; ;i;i;i; i; I" initial; T; [iCi-io; ;i;i;i; i; I" initial; T; [iCi.io; ;i;i;i; i; I" initial; T; [iCiDio; ;i;i;i; i; I" initial; T; [iCiEio; ;i;i;i; i; I" initial; T; [iDi,io; ;i;i;i; i; I" initial; T; [iDi-io; ;i;i;i; i; I" initial; T; [iDi.io; ;i;i;i; i; I" initial; T; [iDiEio; ;i;i;i; i; I" initial; T; [iDiGio; ;i;i;i; i; I" initial; T; [iEi,io; ;i;i;i; i; I" initial; T; [iEi-io; ;i;i;i; i; I" initial; T; [iEi.io; ;i;i;i; i; I" initial; T; [iEiEio; ;i;i;i; i; I" initial; T; [iFi,io; ;i;i;i; i; I" initial; T; [iFi-io; ;i;i;i; i; I" initial; T; [iFi.io; ;i;i;i; i; I" initial; T; [iFiEio; ;i;i;i; i; I" initial; T; [iFiGio; ;i;i;i; i; I" initial; T; [iGi,io; ;i;i;i; i; I" initial; T; [iGiEio; ;i;i;i; i; I" initial; T; [iGipio; ;i;i;i; i; I" initial; T; [iJi,io; ;i;i;i; i; I" initial; T; [iJi-io; ;i;i;i; i; I" initial; T; [iJi.io; ;i;i;i; i; I" initial; T; [iJiEio; ;i;i;i; i; I" initial; T; [iJiGio; ;i;i;i; i; I" medial; T; [i&iEio; ;i;i;i; i; I" medial; T; [i&iGio; ;i;i;i; i; I" medial; T; [i(iEio; ;i;i;i; i; I" medial; T; [i(iGio; ;i;i;i; i; I" medial; T; [i*iEio; ;i;i;i; i; I" medial; T; [i*iGio; ;i;i;i; i; I" medial; T; [i+iEio; ;i;i;i; i; I" medial; T; [i+iGio; ;i;i;i; i; I" medial; T; [i3iEio; ;i;i;i; i; I" medial; T; [i3iGio; ;i;i;i; i; I" medial; T; [i4iEio; ;i;i;i; i; I" medial; T; [i4iGio; ;i;i;i; i; I" medial; T; [iCiDio; ;i;i;i; i; I" medial; T; [iCiEio; ;i;i;i; i; I" medial; T; [iDiEio; ;i;i;i; i; I" medial; T; [iFiEio; ;i;i;i; i; I" medial; T; [iFiGio; ;i;i;i; i; I" medial; T; [iJiEio; ;i;i;i; i; I" medial; T; [iJiGio; ;i;i;i; i; I" medial; T; [i@iNiQio; ;i;i;i; i; I" medial; T; [i@iOiQio; ;i;i;i; i; I" medial; T; [i@iPiQio; ;i;i;i; i; I" isolated; T; [i7iIio; ;i;i;i; i; I" isolated; T; [i7iJio; ;i;i;i; i; I" isolated; T; [i9iIio; ;i;i;i; i; I" isolated; T; [i9iJio; ;i;i;i; i; I" isolated; T; [i:iIio; ;i;i;i; i; I" isolated; T; [i:iJio; ;i;i;i; i; I" isolated; T; [i3iIio; ;i;i;i; i; I" isolated; T; [i3iJio; ;i;i;i; i; I" isolated; T; [i4iIio; ;i;i;i; i; I" isolated; T; [i4iJio; ;i;i;i; i; I" isolated; T; [i-iIio; ;i;i;i; i; I" isolated; T; [i-iJio; ;i;i;i; i; I" isolated; T; [i,iIio; ;i;i;i; i; I" isolated; T; [i,iJio; ;i;i;i; i; I" isolated; T; [i.iIio; ;i;i;i; i; I" isolated; T; [i.iJio; ;i;i;i; i; I" isolated; T; [i5iIio; ;i;i;i; i; I" isolated; T; [i5iJio; ;i;i;i; i; I" isolated; T; [i6iIio; ;i;i;i; i; I" isolated; T; [i6iJi o; ;i;i;i; i ; I" isolated; T; [i4i,i o; ;i;i;i; i ; I" isolated; T; [i4i-i o; ;i;i;i; i ; I" isolated; T; [i4i.i o; ;i;i;i; i ; I" isolated; T; [i4iEi o; ;i;i;i; i ; I" isolated; T; [i4i1io; ;i;i;i; i; I" isolated; T; [i3i1io; ;i;i;i; i; I" isolated; T; [i5i1io; ;i;i;i; i; I" isolated; T; [i6i1io; ;i;i;i; i; I" final; T; [i7iIio; ;i;i;i; i; I" final; T; [i7iJio; ;i;i;i; i; I" final; T; [i9iIio; ;i;i;i; i; I" final; T; [i9iJio; ;i;i;i; i; I" final; T; [i:iIio; ;i;i;i; i; I" final; T; [i:iJio; ;i;i;i; i; I" final; T; [i3iIio; ;i;i;i; i; I" final; T; [i3iJio; ;i;i;i; i; I" final; T; [i4iIio; ;i;i;i; i; I" final; T; [i4iJio; ;i;i;i; i; I" final; T; [i-iIio; ;i;i;i; i; I" final; T; [i-iJio; ;i;i;i; i; I" final; T; [i,iIio; ;i;i;i; i; I" final; T; [i,iJio; ;i;i;i; i; I" final; T; [i.iIi o; ;i;i;i; i ; I" final; T; [i.iJi!o; ;i;i;i; i!; I" final; T; [i5iIi"o; ;i;i;i; i"; I" final; T; [i5iJi#o; ;i;i;i; i#; I" final; T; [i6iIi$o; ;i;i;i; i$; I" final; T; [i6iJi%o; ;i;i;i; i%; I" final; T; [i4i,i&o; ;i;i;i; i&; I" final; T; [i4i-i'o; ;i;i;i; i'; I" final; T; [i4i.i(o; ;i;i;i; i(; I" final; T; [i4iEi)o; ;i;i;i; i); I" final; T; [i4i1i*o; ;i;i;i; i*; I" final; T; [i3i1i+o; ;i;i;i; i+; I" final; T; [i5i1i,o; ;i;i;i; i,; I" final; T; [i6i1i-o; ;i;i;i; i-; I" initial; T; [i4i,i.o; ;i;i;i; i.; I" initial; T; [i4i-i/o; ;i;i;i; i/; I" initial; T; [i4i.i0o; ;i;i;i; i0; I" initial; T; [i4iEi1o; ;i;i;i; i1; I" initial; T; [i3iGi2o; ;i;i;i; i2; I" initial; T; [i4iGi3o; ;i;i;i; i3; I" initial; T; [i7iEi4o; ;i;i;i; i4; I" medial; T; [i3i,i5o; ;i;i;i; i5; I" medial; T; [i3i-i6o; ;i;i;i; i6; I" medial; T; [i3i.i7o; ;i;i;i; i7; I" medial; T; [i4i,i8o; ;i;i;i; i8; I" medial; T; [i4i-i9o; ;i;i;i; i9; I" medial; T; [i4i.i:o; ;i;i;i; i:; I" medial; T; [i7iEi;o; ;i;i;i; i;; I" medial; T; [i8iEio; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0iPo; ;i;i;i; iP; I" initial; T; [i*i,iEiQo; ;i;i;i; iQ; I" final; T; [i*i-i,iRo; ;i;i;i; iR; I" initial; T; [i*i-i,iSo; ;i;i;i; iS; I" initial; T; [i*i-iEiTo; ;i;i;i; iT; I" initial; T; [i*i.iEiUo; ;i;i;i; iU; I" initial; T; [i*iEi,iVo; ;i;i;i; iV; I" initial; T; [i*iEi-iWo; ;i;i;i; iW; I" initial; T; [i*iEi.iXo; ;i;i;i; iX; I" final; T; [i,iEi-iYo; ;i;i;i; iY; I" initial; T; [i,iEi-iZo; ;i;i;i; iZ; I" final; T; [i-iEiJi[o; ;i;i;i; i[; I" final; T; [i-iEiIi\o; ;i;i;i; i\; I" initial; T; [i3i-i,i]o; ;i;i;i; i]; I" initial; T; [i3i,i-i^o; ;i;i;i; i^; I" final; T; [i3i,iIi_o; ;i;i;i; i_; I" final; T; [i3iEi-i`o; ;i;i;i; i`; I" initial; T; [i3iEi-iao; ;i;i;i; ia; I" initial; T; [i3iEi,ibo; ;i;i;i; ib; I" final; T; [i3iEiEico; ;i;i;i; ic; I" initial; T; [i3iEiEido; ;i;i;i; id; I" final; T; [i5i-i-ieo; ;i;i;i; ie; I" initial; T; [i5i-i-ifo; ;i;i;i; if; I" final; T; [i5iEiEigo; ;i;i;i; ig; I" final; T; [i4i-iEiho; ;i;i;i; ih; I" initial; T; [i4i-iEiio; ;i;i;i; ii; I" final; T; [i4i,iJijo; ;i;i;i; ij; I" final; T; [i4iEi.iko; ;i;i;i; ik; I" initial; T; [i4iEi.ilo; ;i;i;i; il; I" final; T; [i4iEiEimo; ;i;i;i; im; I" initial; T; [i4iEiEino; ;i;i;i; in; I" final; T; [i6i-iIioo; ;i;i;i; io; I" final; T; [i6i.iEipo; ;i;i;i; ip; I" initial; T; [i6i.iEiqo; ;i;i;i; iq; I" final; T; [i7iEi-iro; ;i;i;i; ir; I" initial; T; [i7iEi-iso; ;i;i;i; is; I" initial; T; [i7iEiEito; ;i;i;i; it; I" final; T; [i7iEiJiuo; ;i;i;i; iu; I" final; T; [i9i,iEivo; ;i;i;i; iv; I" final; T; [i9iEiEiwo; ;i;i;i; iw; I" initial; T; [i9iEiEixo; ;i;i;i; ix; I" final; T; [i9iEiIiyo; ;i;i;i; iy; I" final; T; [i:iEiEizo; ;i;i;i; iz; I" final; T; [i:iEiJi{o; ;i;i;i; i{; I" final; T; [i:iEiIi|o; ;i;i;i; i|; I" final; T; [iAi.iEi}o; ;i;i;i; i}; I" initial; T; [iAi.iEi~o; ;i;i;i; i~; I" final; T; [iBiEi-io; ;i;i;i; i; I" final; T; [iBiEiEio; ;i;i;i; i; I" final; T; [iDi-iEio; ;i;i;i; i; I" final; T; [iDi-iJio; ;i;i;i; i; I" final; T; [iDi-iIio; ;i;i;i; i; I" initial; T; [iDi,i,io; ;i;i;i; i; I" final; T; [iDi,i,io; ;i;i;i; i; I" final; T; [iDi.iEio; ;i;i;i; i; I" initial; T; [iDi.iEio; ;i;i;i; i; I" final; T; [iDiEi-io; ;i;i;i; i; I" initial; T; [iDiEi-io; ;i;i;i; i; I" initial; T; [iEi-i,io; ;i;i;i; i; I" initial; T; [iEi-iEio; ;i;i;i; i; I" final; T; [iEi-iJio; ;i;i;i; i; I" initial; T; [iEi,i-io; ;i;i;i; i; I" initial; T; [iEi,iEio; ;i;i;i; i; I" initial; T; [iEi.i,io; ;i;i;i; i; I" initial; T; [iEi.iEio; ;i;i;i; i; I" initial; T; [iEi,i.io; ;i;i;i; i; I" initial; T; [iGiEi,io; ;i;i;i; i; I" initial; T; [iGiEiEio; ;i;i;i; i; I" initial; T; [iFi-iEio; ;i;i;i; i; I" final; T; [iFi-iIio; ;i;i;i; i; I" final; T; [iFi,iEio; ;i;i;i; i; I" initial; T; [iFi,iEio; ;i;i;i; i; I" final; T; [iFi,iIio; ;i;i;i; i; I" final; T; [iFiEiJio; ;i;i;i; i; I" final; T; [iFiEiIio; ;i;i;i; i; I" final; T; [iJiEiEio; ;i;i;i; i; I" initial; T; [iJiEiEio; ;i;i;i; i; I" final; T; [i(i.iJio; ;i;i;i; i; I" final; T; [i*i,iJio; ;i;i;i; i; I" final; T; [i*i,iIio; ;i;i;i; i; I" final; T; [i*i.iJio; ;i;i;i; i; I" final; T; [i*i.iIio; ;i;i;i; i; I" final; T; [i*iEiJio; ;i;i;i; i; I" final; T; [i*iEiIio; ;i;i;i; i; I" final; T; [i,iEiJio; ;i;i;i; i; I" final; T; [i,i-iIio; ;i;i;i; i; I" final; T; [i,iEiIio; ;i;i;i; i; I" final; T; [i3i.iIio; ;i;i;i; i; I" final; T; [i5i-iJio; ;i;i;i; i; I" final; T; [i4i-iJio; ;i;i;i; i; I" final; T; [i6i-iJio; ;i;i;i; i; I" final; T; [iDi,iJio; ;i;i;i; i; I" final; T; [iDiEiJio; ;i;i;i; i; I" final; T; [iJi-iJio; ;i;i;i; i; I" final; T; [iJi,iJio; ;i;i;i; i; I" final; T; [iJiEiJio; ;i;i;i; i; I" final; T; [iEiEiJio; ;i;i;i; i; I" final; T; [iBiEiJio; ;i;i;i; i; I" final; T; [iFi-iJio; ;i;i;i; i; I" initial; T; [iBiEi-io; ;i;i;i; i; I" initial; T; [iDi-iEio; ;i;i;i; i; I" final; T; [i9iEiJio; ;i;i;i; i; I" final; T; [iCiEiJio; ;i;i;i; i; I" initial; T; [iFi,i-io; ;i;i;i; i; I" final; T; [iEi.iJio; ;i;i;i; i; I" initial; T; [iDi,iEio; ;i;i;i; i; I" final; T; [iCiEiEio; ;i;i;i; i; I" final; T; [iDi,iEio; ;i;i;i; i; I" final; T; [iFi,i-io; ;i;i;i; i; I" final; T; [i,i-iJio; ;i;i;i; i; I" final; T; [i-i,iJio; ;i;i;i; i; I" final; T; [iEi,iJio; ;i;i;i; i; I" final; T; [iAiEiJio; ;i;i;i; i; I" final; T; [i(i-iJio; ;i;i;i; i; I" initial; T; [iCiEiEio; ;i;i;i; i; I" initial; T; [i9i,iEio; ;i;i;i; i; I" initial; T; [i5iEiEio; ;i;i;i; i; I" final; T; [i3i.iJio; ;i;i;i; i; I" final; T; [iFi,iJio; ;i;i;i; i; I" isolated; T; [i5iDiio; ;i;i;i; i; I" isolated; T; [iBiDiio; ;i;i;i; i; I" isolated; T; [ i'iDiDiGio; ;i;i;i; i; I" isolated; T; [ i'iCi(i1io; ;i;i;i; i; I" isolated; T; [ iEi-iEi/io; ;i;i;i; i; I" isolated; T; [ i5iDi9iEio; ;i;i;i; i; I" isolated; T; [ i1i3iHiDio; ;i;i;i; i; I" isolated; T; [ i9iDiJiGio; ;i;i;i; i; I" isolated; T; [ iHi3iDiEio; ;i;i;i; i; I" isolated; T; [i5iDiIio; ;i;i;i; i; I" isolated; T; [i5iDiIi%i'iDiDiGi%i9iDiJiGi%iHi3iDiEio; ;i;i;i; i; I" isolated; T; [ i,iDi%i,iDi'iDiGio; ;i;i;i; i; I" isolated; T; [ i1ii'iDio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" vertical; T; [i1io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i?io; ;i;i;i; i; I" vertical; T; [i@io; ;i;i;i; i; I" vertical; T; [i&io; ;i;i;i; i; I" vertical; T; [iDio; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i& i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i0o; ;i;i;i; i0; I" vertical; T; [i% i1o; ;i;i;i; i1; I" vertical; T; [i i2o; ;i;i;i; i2; I" vertical; T; [i i3o; ;i;i;i; i3; I" vertical; T; [idi4o; ;i;i;i; i4; I" vertical; T; [idi5o; ;i;i;i; i5; I" vertical; T; [i-i6o; ;i;i;i; i6; I" vertical; T; [i.i7o; ;i;i;i; i7; I" vertical; T; [i{i8o; ;i;i;i; i8; I" vertical; T; [i}i9o; ;i;i;i; i9; I" vertical; T; [i0i:o; ;i;i;i; i:; I" vertical; T; [i0i;o; ;i;i;i; i;; I" vertical; T; [i0io; ;i;i;i; i>; I" vertical; T; [i 0i?o; ;i;i;i; i?; I" vertical; T; [i0i@o; ;i;i;i; i@; I" vertical; T; [i 0iAo; ;i;i;i; iA; I" vertical; T; [i 0iBo; ;i;i;i; iB; I" vertical; T; [i 0iCo; ;i;i;i; iC; I" vertical; T; [i0iDo; ;i;i;i; iD; I" vertical; T; [i0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; I" vertical; T; [i`iHo; ;i;i;i; iH; I" vertical; T; [ibiIo; ;i;i;i; iI; I" compat; T; [i> iJo; ;i;i;i; iJ; I" compat; T; [i> iKo; ;i;i;i; iK; I" compat; T; [i> iLo; ;i;i;i; iL; I" compat; T; [i> iMo; ;i;i;i; iM; I" compat; T; [idiNo; ;i;i;i; iN; I" compat; T; [idiOo; ;i;i;i; iO; I" compat; T; [idiPo; ;i;i;i; iP; I" small; T; [i1iQo; ;i;i;i; iQ; I" small; T; [i0iRo; ;i;i;i; iR; I" small; T; [i3iTo; ;i;i;i; iT; I" small; T; [i@iUo; ;i;i;i; iU; I" small; T; [i?iVo; ;i;i;i; iV; I" small; T; [iDiWo; ;i;i;i; iW; I" small; T; [i&iXo; ;i;i;i; iX; I" small; T; [i iYo; ;i;i;i; iY; I" small; T; [i-iZo; ;i;i;i; iZ; I" small; T; [i.i[o; ;i;i;i; i[; I" small; T; [i{i\o; ;i;i;i; i\; I" small; T; [i}i]o; ;i;i;i; i]; I" small; T; [i0i^o; ;i;i;i; i^; I" small; T; [i0i_o; ;i;i;i; i_; I" small; T; [i(i`o; ;i;i;i; i`; I" small; T; [i+iao; ;i;i;i; ia; I" small; T; [i/ibo; ;i;i;i; ib; I" small; T; [i0ico; ;i;i;i; ic; I" small; T; [i2ido; ;i;i;i; id; I" small; T; [iAieo; ;i;i;i; ie; I" small; T; [iCifo; ;i;i;i; if; I" small; T; [iBiho; ;i;i;i; ih; I" small; T; [iaiio; ;i;i;i; ii; I" small; T; [i)ijo; ;i;i;i; ij; I" small; T; [i*iko; ;i;i;i; ik; I" small; T; [iEipo; ;i;i;i; ip; I" isolated; T; [i%iKiqo; ;i;i;i; iq; I" medial; T; [i@iKiro; ;i;i;i; ir; I" isolated; T; [i%iLiso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; I" isolated; T; [i%iMivo; ;i;i;i; iv; I" isolated; T; [i%iNiwo; ;i;i;i; iw; I" medial; T; [i@iNixo; ;i;i;i; ix; I" isolated; T; [i%iOiyo; ;i;i;i; iy; I" medial; T; [i@iOizo; ;i;i;i; iz; I" isolated; T; [i%iPi{o; ;i;i;i; i{; I" medial; T; [i@iPi|o; ;i;i;i; i|; I" isolated; T; [i%iQi}o; ;i;i;i; i}; I" medial; T; [i@iQi~o; ;i;i;i; i~; I" isolated; T; [i%iRio; ;i;i;i; i; I" medial; T; [i@iRio; ;i;i;i; i; I" isolated; T; [i!io; ;i;i;i; i; I" isolated; T; [i"io; ;i;i;i; i; I" final; T; [i"io; ;i;i;i; i; I" isolated; T; [i#io; ;i;i;i; i; I" final; T; [i#io; ;i;i;i; i; I" isolated; T; [i$io; ;i;i;i; i; I" final; T; [i$io; ;i;i;i; i; I" isolated; T; [i%io; ;i;i;i; i; I" final; T; [i%io; ;i;i;i; i; I" isolated; T; [i&io; ;i;i;i; i; I" final; T; [i&io; ;i;i;i; i; I" initial; T; [i&io; ;i;i;i; i; I" medial; T; [i&io; ;i;i;i; i; I" isolated; T; [i'io; ;i;i;i; i; I" final; T; [i'io; ;i;i;i; i; I" isolated; T; [i(io; ;i;i;i; i; I" final; T; [i(io; ;i;i;i; i; I" initial; T; [i(io; ;i;i;i; i; I" medial; T; [i(io; ;i;i;i; i; I" isolated; T; [i)io; ;i;i;i; i; I" final; T; [i)io; ;i;i;i; i; I" isolated; T; [i*io; ;i;i;i; i; I" final; T; [i*io; ;i;i;i; i; I" initial; T; [i*io; ;i;i;i; i; I" medial; T; [i*io; ;i;i;i; i; I" isolated; T; [i+io; ;i;i;i; i; I" final; T; [i+io; ;i;i;i; i; I" initial; T; [i+io; ;i;i;i; i; I" medial; T; [i+io; ;i;i;i; i; I" isolated; T; [i,io; ;i;i;i; i; I" final; T; [i,io; ;i;i;i; i; I" initial; T; [i,io; ;i;i;i; i; I" medial; T; [i,io; ;i;i;i; i; I" isolated; T; [i-io; ;i;i;i; i; I" final; T; [i-io; ;i;i;i; i; I" initial; T; [i-io; ;i;i;i; i; I" medial; T; [i-io; ;i;i;i; i; I" isolated; T; [i.io; ;i;i;i; i; I" final; T; [i.io; ;i;i;i; i; I" initial; T; [i.io; ;i;i;i; i; I" medial; T; [i.io; ;i;i;i; i; I" isolated; T; [i/io; ;i;i;i; i; I" final; T; [i/io; ;i;i;i; i; I" isolated; T; [i0io; ;i;i;i; i; I" final; T; [i0io; ;i;i;i; i; I" isolated; T; [i1io; ;i;i;i; i; I" final; T; [i1io; ;i;i;i; i; I" isolated; T; [i2io; ;i;i;i; i; I" final; T; [i2io; ;i;i;i; i; I" isolated; T; [i3io; ;i;i;i; i; I" final; T; [i3io; ;i;i;i; i; I" initial; T; [i3io; ;i;i;i; i; I" medial; T; [i3io; ;i;i;i; i; I" isolated; T; [i4io; ;i;i;i; i; I" final; T; [i4io; ;i;i;i; i; I" initial; T; [i4io; ;i;i;i; i; I" medial; T; [i4io; ;i;i;i; i; I" isolated; T; [i5io; ;i;i;i; i; I" final; T; [i5io; ;i;i;i; i; I" initial; T; [i5io; ;i;i;i; i; I" medial; T; [i5io; ;i;i;i; i; I" isolated; T; [i6io; ;i;i;i; i; I" final; T; [i6io; ;i;i;i; i; I" initial; T; [i6io; ;i;i;i; i; I" medial; T; [i6io; ;i;i;i; i; I" isolated; T; [i7io; ;i;i;i; i; I" final; T; [i7io; ;i;i;i; i; I" initial; T; [i7io; ;i;i;i; i; I" medial; T; [i7io; ;i;i;i; i; I" isolated; T; [i8io; ;i;i;i; i; I" final; T; [i8io; ;i;i;i; i; I" initial; T; [i8io; ;i;i;i; i; I" medial; T; [i8io; ;i;i;i; i; I" isolated; T; [i9io; ;i;i;i; i; I" final; T; [i9io; ;i;i;i; i; I" initial; T; [i9io; ;i;i;i; i; I" medial; T; [i9io; ;i;i;i; i; I" isolated; T; [i:io; ;i;i;i; i; I" final; T; [i:io; ;i;i;i; i; I" initial; T; [i:io; ;i;i;i; i; I" medial; T; [i:io; ;i;i;i; i; I" isolated; T; [iAio; ;i;i;i; i; I" final; T; [iAio; ;i;i;i; i; I" initial; T; [iAio; ;i;i;i; i; I" medial; T; [iAio; ;i;i;i; i; I" isolated; T; [iBio; ;i;i;i; i; I" final; T; [iBio; ;i;i;i; i; I" initial; T; [iBio; ;i;i;i; i; I" medial; T; [iBio; ;i;i;i; i; I" isolated; T; [iCio; ;i;i;i; i; I" final; T; [iCio; ;i;i;i; i; I" initial; T; [iCio; ;i;i;i; i; I" medial; T; [iCio; ;i;i;i; i; I" isolated; T; [iDio; ;i;i;i; i; I" final; T; [iDio; ;i;i;i; i; I" initial; T; [iDio; ;i;i;i; i; I" medial; T; [iDio; ;i;i;i; i; I" isolated; T; [iEio; ;i;i;i; i; I" final; T; [iEio; ;i;i;i; i; I" initial; T; [iEio; ;i;i;i; i; I" medial; T; [iEio; ;i;i;i; i; I" isolated; T; [iFio; ;i;i;i; i; I" final; T; [iFio; ;i;i;i; i; I" initial; T; [iFio; ;i;i;i; i; I" medial; T; [iFio; ;i;i;i; i; I" isolated; T; [iGio; ;i;i;i; i; I" final; T; [iGio; ;i;i;i; i; I" initial; T; [iGio; ;i;i;i; i; I" medial; T; [iGio; ;i;i;i; i; I" isolated; T; [iHio; ;i;i;i; i; I" final; T; [iHio; ;i;i;i; i; I" isolated; T; [iIio; ;i;i;i; i; I" final; T; [iIio; ;i;i;i; i; I" isolated; T; [iJio; ;i;i;i; i; I" final; T; [iJio; ;i;i;i; i; I" initial; T; [iJio; ;i;i;i; i; I" medial; T; [iJio; ;i;i;i; i; I" isolated; T; [iDi"io; ;i;i;i; i; I" final; T; [iDi"io; ;i;i;i; i; I" isolated; T; [iDi#io; ;i;i;i; i; I" final; T; [iDi#io; ;i;i;i; i; I" isolated; T; [iDi%io; ;i;i;i; i; I" final; T; [iDi%io; ;i;i;i; i; I" isolated; T; [iDi'io; ;i;i;i; i; I" final; T; [iDi'io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" wide; T; [i&io; ;i;i;i; i; I" wide; T; [i'io; ;i;i;i; i; I" wide; T; [i(io; ;i;i;i; i; I" wide; T; [i)io; ;i;i;i; i; I" wide; T; [i*io; ;i;i;i; i; I" wide; T; [i+io; ;i;i;i; i; I" wide; T; [i,io; ;i;i;i; i; I" wide; T; [i-i o; ;i;i;i; i ; I" wide; T; [i.i o; ;i;i;i; i ; I" wide; T; [i/i o; ;i;i;i; i ; I" wide; T; [i0i o; ;i;i;i; i ; I" wide; T; [i1i o; ;i;i;i; i ; I" wide; T; [i2io; ;i;i;i; i; I" wide; T; [i3io; ;i;i;i; i; I" wide; T; [i4io; ;i;i;i; i; I" wide; T; [i5io; ;i;i;i; i; I" wide; T; [i6io; ;i;i;i; i; I" wide; T; [i7io; ;i;i;i; i; I" wide; T; [i8io; ;i;i;i; i; I" wide; T; [i9io; ;i;i;i; i; I" wide; T; [i:io; ;i;i;i; i; I" wide; T; [i;io; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [i?io; ;i;i;i; i; I" wide; T; [i@io; ;i;i;i; i; I" wide; T; [iAio; ;i;i;i; i; I" wide; T; [iBio; ;i;i;i; i; I" wide; T; [iCio; ;i;i;i; i; I" wide; T; [iDi o; ;i;i;i; i ; I" wide; T; [iEi!o; ;i;i;iA; i!; I" wide; T; [iFi"o; ;i;i;iB; i"; I" wide; T; [iGi#o; ;i;i;iC; i#; I" wide; T; [iHi$o; ;i;i;iD; i$; I" wide; T; [iIi%o; ;i;i;iE; i%; I" wide; T; [iJi&o; ;i;i;iF; i&; I" wide; T; [iKi'o; ;i;i;iG; i'; I" wide; T; [iLi(o; ;i;i;iH; i(; I" wide; T; [iMi)o; ;i;i;iI; i); I" wide; T; [iNi*o; ;i;i;iJ; i*; I" wide; T; [iOi+o; ;i;i;iK; i+; I" wide; T; [iPi,o; ;i;i;iL; i,; I" wide; T; [iQi-o; ;i;i;iM; i-; I" wide; T; [iRi.o; ;i;i;iN; i.; I" wide; T; [iSi/o; ;i;i;iO; i/; I" wide; T; [iTi0o; ;i;i;iP; i0; I" wide; T; [iUi1o; ;i;i;iQ; i1; I" wide; T; [iVi2o; ;i;i;iR; i2; I" wide; T; [iWi3o; ;i;i;iS; i3; I" wide; T; [iXi4o; ;i;i;iT; i4; I" wide; T; [iYi5o; ;i;i;iU; i5; I" wide; T; [iZi6o; ;i;i;iV; i6; I" wide; T; [i[i7o; ;i;i;iW; i7; I" wide; T; [i\i8o; ;i;i;iX; i8; I" wide; T; [i]i9o; ;i;i;iY; i9; I" wide; T; [i^i:o; ;i;i;iZ; i:; I" wide; T; [i_i;o; ;i;i;i; i;; I" wide; T; [i`io; ;i;i;i; i>; I" wide; T; [ici?o; ;i;i;i; i?; I" wide; T; [idi@o; ;i;i;i; i@; I" wide; T; [ieiAo; ;i;i!;i; iA; I" wide; T; [ifiBo; ;i;i";i; iB; I" wide; T; [igiCo; ;i;i#;i; iC; I" wide; T; [ihiDo; ;i;i$;i; iD; I" wide; T; [iiiEo; ;i;i%;i; iE; I" wide; T; [ijiFo; ;i;i&;i; iF; I" wide; T; [ikiGo; ;i;i';i; iG; I" wide; T; [iliHo; ;i;i(;i; iH; I" wide; T; [imiIo; ;i;i);i; iI; I" wide; T; [iniJo; ;i;i*;i; iJ; I" wide; T; [ioiKo; ;i;i+;i; iK; I" wide; T; [ipiLo; ;i;i,;i; iL; I" wide; T; [iqiMo; ;i;i-;i; iM; I" wide; T; [iriNo; ;i;i.;i; iN; I" wide; T; [isiOo; ;i;i/;i; iO; I" wide; T; [itiPo; ;i;i0;i; iP; I" wide; T; [iuiQo; ;i;i1;i; iQ; I" wide; T; [iviRo; ;i;i2;i; iR; I" wide; T; [iwiSo; ;i;i3;i; iS; I" wide; T; [ixiTo; ;i;i4;i; iT; I" wide; T; [iyiUo; ;i;i5;i; iU; I" wide; T; [iziVo; ;i;i6;i; iV; I" wide; T; [i{iWo; ;i;i7;i; iW; I" wide; T; [i|iXo; ;i;i8;i; iX; I" wide; T; [i}iYo; ;i;i9;i; iY; I" wide; T; [i~iZo; ;i;i:;i; iZ; I" wide; T; [ii[o; ;i;i;i; i[; I" wide; T; [i{i\o; ;i;i;i; i\; I" wide; T; [i|i]o; ;i;i;i; i]; I" wide; T; [i}i^o; ;i;i;i; i^; I" wide; T; [i~i_o; ;i;i;i; i_; I" wide; T; [i)i`o; ;i;i;i; i`; I" wide; T; [i)iao; ;i;i;i; ia; I" narrow; T; [i0ibo; ;i;i;i; ib; I" narrow; T; [i 0ico; ;i;i;i; ic; I" narrow; T; [i 0ido; ;i;i;i; id; I" narrow; T; [i0ieo; ;i;i;i; ie; I" narrow; T; [i0ifo; ;i;i;i; if; I" narrow; T; [i0igo; ;i;i;i; ig; I" narrow; T; [i0iho; ;i;i;i; ih; I" narrow; T; [i0iio; ;i;i;i; ii; I" narrow; T; [i0ijo; ;i;i;i; ij; I" narrow; T; [i0iko; ;i;i;i; ik; I" narrow; T; [i0ilo; ;i;i;i; il; I" narrow; T; [i0imo; ;i;i;i; im; I" narrow; T; [i0ino; ;i;i;i; in; I" narrow; T; [i0ioo; ;i;i;i; io; I" narrow; T; [i0ipo; ;i;i;i; ip; I" narrow; T; [i0iqo; ;i;i;i; iq; I" narrow; T; [i0iro; ;i;i;i; ir; I" narrow; T; [i0iso; ;i;i;i; is; I" narrow; T; [i0ito; ;i;i;i; it; I" narrow; T; [i0iuo; ;i;i;i; iu; I" narrow; T; [i0ivo; ;i;i;i; iv; I" narrow; T; [i0iwo; ;i;i;i; iw; I" narrow; T; [i0ixo; ;i;i;i; ix; I" narrow; T; [i0iyo; ;i;i;i; iy; I" narrow; T; [i0izo; ;i;i;i; iz; I" narrow; T; [i0i{o; ;i;i;i; i{; I" narrow; T; [i0i|o; ;i;i;i; i|; I" narrow; T; [i0i}o; ;i;i;i; i}; I" narrow; T; [i0i~o; ;i;i;i; i~; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [id1io; ;i;i;i; i; I" narrow; T; [i11io; ;i;i;i; i; I" narrow; T; [i21io; ;i;i;i; i; I" narrow; T; [i31io; ;i;i;i; i; I" narrow; T; [i41io; ;i;i;i; i; I" narrow; T; [i51io; ;i;i;i; i; I" narrow; T; [i61io; ;i;i;i; i; I" narrow; T; [i71io; ;i;i;i; i; I" narrow; T; [i81io; ;i;i;i; i; I" narrow; T; [i91io; ;i;i;i; i; I" narrow; T; [i:1io; ;i;i;i; i; I" narrow; T; [i;1io; ;i;i;i; i; I" narrow; T; [i<1io; ;i;i;i; i; I" narrow; T; [i=1io; ;i;i;i; i; I" narrow; T; [i>1io; ;i;i;i; i; I" narrow; T; [i?1io; ;i;i;i; i; I" narrow; T; [i@1io; ;i;i;i; i; I" narrow; T; [iA1io; ;i;i;i; i; I" narrow; T; [iB1io; ;i;i;i; i; I" narrow; T; [iC1io; ;i;i;i; i; I" narrow; T; [iD1io; ;i;i;i; i; I" narrow; T; [iE1io; ;i;i;i; i; I" narrow; T; [iF1io; ;i;i;i; i; I" narrow; T; [iG1io; ;i;i;i; i; I" narrow; T; [iH1io; ;i;i;i; i; I" narrow; T; [iI1io; ;i;i;i; i; I" narrow; T; [iJ1io; ;i;i;i; i; I" narrow; T; [iK1io; ;i;i;i; i; I" narrow; T; [iL1io; ;i;i;i; i; I" narrow; T; [iM1io; ;i;i;i; i; I" narrow; T; [iN1io; ;i;i;i; i; I" narrow; T; [iO1io; ;i;i;i; i; I" narrow; T; [iP1io; ;i;i;i; i; I" narrow; T; [iQ1io; ;i;i;i; i; I" narrow; T; [iR1io; ;i;i;i; i; I" narrow; T; [iS1io; ;i;i;i; i; I" narrow; T; [iT1io; ;i;i;i; i; I" narrow; T; [iU1io; ;i;i;i; i; I" narrow; T; [iV1io; ;i;i;i; i; I" narrow; T; [iW1io; ;i;i;i; i; I" narrow; T; [iX1io; ;i;i;i; i; I" narrow; T; [iY1io; ;i;i;i; i; I" narrow; T; [iZ1io; ;i;i;i; i; I" narrow; T; [i[1io; ;i;i;i; i; I" narrow; T; [i\1io; ;i;i;i; i; I" narrow; T; [i]1io; ;i;i;i; i; I" narrow; T; [i^1io; ;i;i;i; i; I" narrow; T; [i_1io; ;i;i;i; i; I" narrow; T; [i`1io; ;i;i;i; i; I" narrow; T; [ia1io; ;i;i;i; i; I" narrow; T; [ib1io; ;i;i;i; i; I" narrow; T; [ic1io; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [i io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i(; i; 0; 0io; ;i;i;i); i; 0; 0io; ;i;i;i*; i; 0; 0io; ;i;i;i+; i; 0; 0io; ;i;i;i,; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i.; i; 0; 0io; ;i;i;i/; i; 0; 0io; ;i;i;i0; i; 0; 0i o; ;i;i;i1; i ; 0; 0i o; ;i;i;i2; i ; 0; 0i o; ;i;i;i3; i ; 0; 0i o; ;i;i;i4; i ; 0; 0i o; ;i;i;i5; i ; 0; 0io; ;i;i;i6; i; 0; 0io; ;i;i;i7; i; 0; 0io; ;i;i;i8; i; 0; 0io; ;i;i;i9; i; 0; 0io; ;i;i;i:; i; 0; 0io; ;i;i;i;; i; 0; 0io; ;i;i;i<; i; 0; 0io; ;i;i;i=; i; 0; 0io; ;i;i;i>; i; 0; 0io; ;i;i;i?; i; 0; 0io; ;i;i;i@; i; 0; 0io; ;i;i;iA; i; 0; 0io; ;i;i;iB; i; 0; 0io; ;i;i;iC; i; 0; 0io; ;i;i;iD; i; 0; 0io; ;i;i;iE; i; 0; 0io; ;i;i;iF; i; 0; 0io; ;i;i;iG; i; 0; 0i o; ;i;i;iH; i ; 0; 0i!o; ;i;i;iI; i!; 0; 0i"o; ;i;i;iJ; i"; 0; 0i#o; ;i;i;iK; i#; 0; 0i$o; ;i;i;iL; i$; 0; 0i%o; ;i;i;iM; i%; 0; 0i&o; ;i;i;iN; i&; 0; 0i'o; ;i;i;iO; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i ;i; i1; 0; 0i2o; ;i;i ;i; i2; 0; 0i3o; ;i;i ;i; i3; 0; 0i4o; ;i;i ;i; i4; 0; 0i5o; ;i;i ;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i ;i; iH; 0; 0iIo; ;i;i!;i; iI; 0; 0iJo; ;i;i";i; iJ; 0; 0iKo; ;i;i#;i; iK; 0; 0iLo; ;i;i$;i; iL; 0; 0iMo; ;i;i%;i; iM; 0; 0iNo; ;i;i&;i; iN; 0; 0iOo; ;i;i';i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i<o; ;i;i;i; i<; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i? o; ;i;i;i; i? ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0iX o; ;i;i;i; iX ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; 0; 0i!!o; ;i;i;i; i!!; 0; 0i"!o; ;i;i;i; i"!; 0; 0i#!o; ;i;i;i; i#!; 0; 0i$!o; ;i;i;i; i$!; 0; 0i%!o; ;i;i;i; i%!; 0; 0i&!o; ;i;i;i; i&!; 0; 0i'!o; ;i;i;i; i'!; 0; 0i(!o; ;i;i;i; i(!; 0; 0i)!o; ;i;i;i; i)!; 0; 0i*!o; ;i;i;i; i*!; 0; 0i+!o; ;i;i;i; i+!; 0; 0i,!o; ;i;i;i; i,!; 0; 0i-!o; ;i;i;i; i-!; 0; 0i.!o; ;i;i;i; i.!; 0; 0i/!o; ;i;i;i; i/!; 0; 0i0!o; ;i;i;i; i0!; 0; 0i1!o; ;i;i;i; i1!; 0; 0i2!o; ;i;i;i; i2!; 0; 0i3!o; ;i;i;i; i3!; 0; 0i4!o; ;i;i;i; i4!; 0; 0i5!o; ;i;i;i; i5!; 0; 0i6!o; ;i;i;i; i6!; 0; 0i7!o; ;i;i;i; i7!; 0; 0i8!o; ;i;i;i; i8!; 0; 0i9!o; ;i;i;i; i9!; 0; 0i:!o; ;i;i;i; i:!; 0; 0i;!o; ;i;i;i; i;!; 0; 0i!o; ;i;i;i; i>!; 0; 0i?!o; ;i;i;i; i?!; 0; 0i@!o; ;i;i;i; i@!; 0; 0iA!o; ;i;i;i; iA!; 0; 0iB!o; ;i;i;i; iB!; 0; 0iC!o; ;i;i;i; iC!; 0; 0iD!o; ;i;i;i; iD!; 0; 0iE!o; ;i;i;i; iE!; 0; 0iF!o; ;i;i;i; iF!; 0; 0iG!o; ;i;i;i; iG!; 0; 0iH!o; ;i;i;i; iH!; 0; 0iI!o; ;i;i;i; iI!; 0; 0iJ!o; ;i;i;i; iJ!; 0; 0iK!o; ;i;i;i; iK!; 0; 0iL!o; ;i;i;i; iL!; 0; 0iM!o; ;i;i;i; iM!; 0; 0iN!o; ;i;i;i; iN!; 0; 0iO!o; ;i;i;i; iO!; 0; 0iP!o; ;i;i;i; iP!; 0; 0iQ!o; ;i;i;i; iQ!; 0; 0iR!o; ;i;i;i; iR!; 0; 0iS!o; ;i;i;i; iS!; 0; 0iT!o; ;i;i;i; iT!; 0; 0iU!o; ;i;i;i; iU!; 0; 0iV!o; ;i;i;i; iV!; 0; 0iW!o; ;i;i;i; iW!; 0; 0iX!o; ;i;i;i; iX!; 0; 0iY!o; ;i;i;i; iY!; 0; 0iZ!o; ;i;i;i; iZ!; 0; 0i[!o; ;i;i;i; i[!; 0; 0i\!o; ;i;i;i; i\!; 0; 0i]!o; ;i;i;i; i]!; 0; 0i^!o; ;i;i;i; i^!; 0; 0i_!o; ;i;i;i; i_!; 0; 0i`!o; ;i;i;i; i`!; 0; 0ia!o; ;i;i;i; ia!; 0; 0ib!o; ;i;i;i; ib!; 0; 0ic!o; ;i;i;i; ic!; 0; 0id!o; ;i;i;i; id!; 0; 0ie!o; ;i;i;i; ie!; 0; 0if!o; ;i;i;i; if!; 0; 0ig!o; ;i;i;i; ig!; 0; 0ih!o; ;i;i;i; ih!; 0; 0ii!o; ;i;i;i; ii!; 0; 0ij!o; ;i;i;i; ij!; 0; 0ik!o; ;i;i;i; ik!; 0; 0il!o; ;i;i;i; il!; 0; 0im!o; ;i;i;i; im!; 0; 0in!o; ;i;i;i; in!; 0; 0io!o; ;i;i;i; io!; 0; 0ip!o; ;i;i;i; ip!; 0; 0iq!o; ;i;i;i; iq!; 0; 0ir!o; ;i;i;i; ir!; 0; 0is!o; ;i;i;i; is!; 0; 0it!o; ;i;i;i; it!; 0; 0iu!o; ;i;i;i; iu!; 0; 0iv!o; ;i;i;i; iv!; 0; 0iw!o; ;i;i;i; iw!; 0; 0ix!o; ;i;i;i; ix!; 0; 0iy!o; ;i;i;i; iy!; 0; 0iz!o; ;i;i;i; iz!; 0; 0i{!o; ;i;i;i; i{!; 0; 0i|!o; ;i;i;i; i|!; 0; 0i}!o; ;i;i;i; i}!; 0; 0i~!o; ;i;i;i; i~!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i "o; ;i;i;i; i "; 0; 0i!"o; ;i;i;i; i!"; 0; 0i""o; ;i;i;i; i""; 0; 0i#"o; ;i;i;i; i#"; 0; 0i$"o; ;i;i;i; i$"; 0; 0i%"o; ;i;i;i; i%"; 0; 0i&"o; ;i;i;i; i&"; 0; 0i'"o; ;i;i;i; i'"; 0; 0i("o; ;i;i;i; i("; 0; 0i)"o; ;i;i;i; i)"; 0; 0i*"o; ;i;i;i; i*"; 0; 0i+"o; ;i;i;i; i+"; 0; 0i,"o; ;i;i;i; i,"; 0; 0i-"o; ;i;i;i; i-"; 0; 0i."o; ;i;i;i; i."; 0; 0i/"o; ;i;i;i; i/"; 0; 0i0"o; ;i;i;i; i0"; 0; 0i1"o; ;i;i;i; i1"; 0; 0i2"o; ;i;i;i; i2"; 0; 0i3"o; ;i;i;i; i3"; 0; 0i4"o; ;i;i;i; i4"; 0; 0i5"o; ;i;i;i; i5"; 0; 0i6"o; ;i;i;i; i6"; 0; 0i7"o; ;i;i;i; i7"; 0; 0i8"o; ;i;i;i; i8"; 0; 0i9"o; ;i;i;i; i9"; 0; 0i:"o; ;i;i;i; i:"; 0; 0i;"o; ;i;i;i; i;"; 0; 0i<"o; ;i;i;i; i<"; 0; 0i="o; ;i;i;i; i="; 0; 0i>"o; ;i;i;i; i>"; 0; 0i?"o; ;i;i;i; i?"; 0; 0i@"o; ;i;i;i; i@"; 0; 0iA"o; ;i;i;i; iA"; 0; 0iB"o; ;i;i;i; iB"; 0; 0iC"o; ;i;i;i; iC"; 0; 0iD"o; ;i;i;i; iD"; 0; 0iE"o; ;i;i;i; iE"; 0; 0iF"o; ;i;i;i; iF"; 0; 0iG"o; ;i;i;i; iG"; 0; 0iH"o; ;i;i;i; iH"; 0; 0iI"o; ;i;i;i; iI"; 0; 0iJ"o; ;i;i;i; iJ"; 0; 0iK"o; ;i;i;i; iK"; 0; 0iL"o; ;i;i;i; iL"; 0; 0iM"o; ;i;i;i; iM"; 0; 0iN"o; ;i;i;i; iN"; 0; 0iO"o; ;i;i;i; iO"; 0; 0iP"o; ;i;i;i; iP"; 0; 0iQ"o; ;i;i;i; iQ"; 0; 0iR"o; ;i;i;i; iR"; 0; 0iS"o; ;i;i;i; iS"; 0; 0iT"o; ;i;i;i; iT"; 0; 0iU"o; ;i;i;i; iU"; 0; 0iV"o; ;i;i;i; iV"; 0; 0iW"o; ;i;i;i; iW"; 0; 0iX"o; ;i;i;i; iX"; 0; 0iY"o; ;i;i;i; iY"; 0; 0iZ"o; ;i;i;i; iZ"; 0; 0i["o; ;i;i;i; i["; 0; 0i\"o; ;i;i;i; i\"; 0; 0i]"o; ;i;i;i; i]"; 0; 0i^"o; ;i;i;i; i^"; 0; 0i_"o; ;i;i;i; i_"; 0; 0i`"o; ;i;i;i; i`"; 0; 0ia"o; ;i;i;i; ia"; 0; 0ib"o; ;i;i;i; ib"; 0; 0ic"o; ;i;i;i; ic"; 0; 0id"o; ;i;i;i; id"; 0; 0ie"o; ;i;i;i; ie"; 0; 0if"o; ;i;i;i; if"; 0; 0ig"o; ;i;i;i; ig"; 0; 0ih"o; ;i;i;i; ih"; 0; 0ii"o; ;i;i;i; ii"; 0; 0ij"o; ;i;i;i; ij"; 0; 0ik"o; ;i;i;i; ik"; 0; 0il"o; ;i;i;i; il"; 0; 0im"o; ;i;i;i; im"; 0; 0in"o; ;i;i;i; in"; 0; 0io"o; ;i;i;i; io"; 0; 0ip"o; ;i;i;i; ip"; 0; 0iq"o; ;i;i;i; iq"; 0; 0ir"o; ;i;i;i; ir"; 0; 0is"o; ;i;i;i; is"; 0; 0it"o; ;i;i;i; it"; 0; 0iu"o; ;i;i;i; iu"; 0; 0iv"o; ;i;i;i; iv"; 0; 0iw"o; ;i;i;i; iw"; 0; 0ix"o; ;i;i;i; ix"; 0; 0iy"o; ;i;i;i; iy"; 0; 0iz"o; ;i;i;i; iz"; 0; 0i{"o; ;i;i;i; i{"; 0; 0i|"o; ;i;i;i; i|"; 0; 0i}"o; ;i;i;i; i}"; 0; 0i~"o; ;i;i;i; i~"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i!#o; ;i;i;i; i!#; 0; 0i"#o; ;i;i;i; i"#; 0; 0i##o; ;i;i;i; i##; 0; 0i$#o; ;i;i;i; i$#; 0; 0i%#o; ;i;i;i; i%#; 0; 0i&#o; ;i;i;i; i&#; 0; 0i'#o; ;i;i;i; i'#; 0; 0i(#o; ;i;i;i; i(#; 0; 0i)#o; ;i;i;i; i)#; 0; 0i*#o; ;i;i;i; i*#; 0; 0i+#o; ;i;i;i; i+#; 0; 0i,#o; ;i;i;i; i,#; 0; 0i-#o; ;i;i;i; i-#; 0; 0i.#o; ;i;i;i; i.#; 0; 0i/#o; ;i;i;i; i/#; 0; 0i0#o; ;i;i;i; i0#; 0; 0i1#o; ;i;i;i; i1#; 0; 0i2#o; ;i;i;i; i2#; 0; 0i3#o; ;i;i;i; i3#; 0; 0i4#o; ;i;i;i; i4#; 0; 0i5#o; ;i;i;i; i5#; 0; 0i6#o; ;i;i;i; i6#; 0; 0i7#o; ;i;i;i; i7#; 0; 0i8#o; ;i;i;i; i8#; 0; 0i9#o; ;i;i;i; i9#; 0; 0i:#o; ;i;i;i; i:#; 0; 0i;#o; ;i;i;i; i;#; 0; 0i<#o; ;i;i;i; i<#; 0; 0i=#o; ;i;i;i; i=#; 0; 0i>#o; ;i;i;i; i>#; 0; 0i?#o; ;i;i;i; i?#; 0; 0i@#o; ;i;i;i; i@#; 0; 0iA#o; ;i;i;i; iA#; 0; 0iB#o; ;i;i;i; iB#; 0; 0iC#o; ;i;i;i; iC#; 0; 0iD#o; ;i;i;i; iD#; 0; 0iE#o; ;i;i;i; iE#; 0; 0iF#o; ;i;i;i; iF#; 0; 0iG#o; ;i;i;i; iG#; 0; 0iH#o; ;i;i;i; iH#; 0; 0iI#o; ;i;i;i; iI#; 0; 0iJ#o; ;i;i;i; iJ#; 0; 0iK#o; ;i;i;i; iK#; 0; 0iL#o; ;i;i;i; iL#; 0; 0iM#o; ;i;i;i; iM#; 0; 0iN#o; ;i;i;i; iN#; 0; 0iO#o; ;i;i;i; iO#; 0; 0iP#o; ;i;i;i; iP#; 0; 0iQ#o; ;i;i;i; iQ#; 0; 0iR#o; ;i;i;i; iR#; 0; 0iS#o; ;i;i;i; iS#; 0; 0iT#o; ;i;i;i; iT#; 0; 0iU#o; ;i;i;i; iU#; 0; 0iV#o; ;i;i;i; iV#; 0; 0iW#o; ;i;i;i; iW#; 0; 0iX#o; ;i;i;i; iX#; 0; 0iY#o; ;i;i;i; iY#; 0; 0iZ#o; ;i;i;i; iZ#; 0; 0i[#o; ;i;i;i; i[#; 0; 0i\#o; ;i;i;i; i\#; 0; 0i]#o; ;i;i;i; i]#; 0; 0i^#o; ;i;i;i; i^#; 0; 0i_#o; ;i;i;i; i_#; 0; 0i`#o; ;i;i;i; i`#; 0; 0ia#o; ;i;i;i; ia#; 0; 0ib#o; ;i;i;i; ib#; 0; 0ic#o; ;i;i;i; ic#; 0; 0id#o; ;i;i;i; id#; 0; 0ie#o; ;i;i;i; ie#; 0; 0if#o; ;i;i;i; if#; 0; 0ig#o; ;i;i;i; ig#; 0; 0ih#o; ;i;i;i; ih#; 0; 0ii#o; ;i;i;i; ii#; 0; 0ij#o; ;i;i;i; ij#; 0; 0ik#o; ;i;i;i; ik#; 0; 0il#o; ;i;i;i; il#; 0; 0im#o; ;i;i;i; im#; 0; 0in#o; ;i;i;i; in#; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i!$o; ;i;i;i; i!$; 0; 0i"$o; ;i;i;i; i"$; 0; 0i#$o; ;i;i;i; i#$; 0; 0i$$o; ;i;i;i; i$$; 0; 0i%$o; ;i;i;i; i%$; 0; 0i&$o; ;i;i;i; i&$; 0; 0i'$o; ;i;i;i; i'$; 0; 0i($o; ;i;i;i; i($; 0; 0i)$o; ;i;i;i; i)$; 0; 0i*$o; ;i;i;i; i*$; 0; 0i+$o; ;i;i;i; i+$; 0; 0i,$o; ;i;i;i; i,$; 0; 0i-$o; ;i;i;i; i-$; 0; 0i.$o; ;i;i;i; i.$; 0; 0i/$o; ;i;i;i; i/$; 0; 0i0$o; ;i;i;i; i0$; 0; 0i1$o; ;i;i;i; i1$; 0; 0i2$o; ;i;i;i; i2$; 0; 0i3$o; ;i;i;i; i3$; 0; 0i4$o; ;i;i;i; i4$; 0; 0i5$o; ;i;i;i; i5$; 0; 0i6$o; ;i;i;i; i6$; 0; 0i7$o; ;i;i;i; i7$; 0; 0i8$o; ;i;i;i; i8$; 0; 0i9$o; ;i;i;i; i9$; 0; 0i:$o; ;i;i;i; i:$; 0; 0i;$o; ;i;i;i; i;$; 0; 0i<$o; ;i;i;i; i<$; 0; 0i=$o; ;i;i;i; i=$; 0; 0i>$o; ;i;i;i; i>$; 0; 0i?$o; ;i;i;i; i?$; 0; 0i@$o; ;i;i;i; i@$; 0; 0iA$o; ;i;i;i; iA$; 0; 0iB$o; ;i;i;i; iB$; 0; 0iC$o; ;i;i;i; iC$; 0; 0iD$o; ;i;i;i; iD$; 0; 0iE$o; ;i;i;i; iE$; 0; 0iF$o; ;i;i;i; iF$; 0; 0iG$o; ;i;i;i; iG$; 0; 0iH$o; ;i;i;i; iH$; 0; 0iI$o; ;i;i;i; iI$; 0; 0iJ$o; ;i;i;i; iJ$; 0; 0iK$o; ;i;i;i; iK$; 0; 0iL$o; ;i;i;i; iL$; 0; 0iM$o; ;i;i;i; iM$; 0; 0iN$o; ;i;i;i; iN$; 0; 0iO$o; ;i;i;i; iO$; 0; 0iP$o; ;i;i;i; iP$; 0; 0iQ$o; ;i;i;i; iQ$; 0; 0iR$o; ;i;i;i; iR$; 0; 0iS$o; ;i;i;i; iS$; 0; 0iT$o; ;i;i;i; iT$; 0; 0iU$o; ;i;i;i; iU$; 0; 0iV$o; ;i;i;i; iV$; 0; 0iW$o; ;i;i;i; iW$; 0; 0iX$o; ;i;i;i; iX$; 0; 0iY$o; ;i;i;i; iY$; 0; 0iZ$o; ;i;i;i; iZ$; 0; 0i[$o; ;i;i;i; i[$; 0; 0i\$o; ;i;i;i; i\$; 0; 0i]$o; ;i;i;i; i]$; 0; 0i^$o; ;i;i;i; i^$; 0; 0i_$o; ;i;i;i; i_$; 0; 0i`$o; ;i;i;i; i`$; 0; 0ia$o; ;i;i;i; ia$; 0; 0ib$o; ;i;i;i; ib$; 0; 0ip$o; ;i;i;i; ip$; 0; 0iq$o; ;i;i;i; iq$; 0; 0ir$o; ;i;i;i; ir$; 0; 0is$o; ;i;i;i; is$; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i!0o; ;i;i;i; i!0; 0; 0i"0o; ;i;i;i; i"0; 0; 0i#0o; ;i;i;i; i#0; 0; 0i$0o; ;i;i;i; i$0; 0; 0i%0o; ;i;i;i; i%0; 0; 0i&0o; ;i;i;i; i&0; 0; 0i'0o; ;i;i;i; i'0; 0; 0i(0o; ;i;i;i; i(0; 0; 0i)0o; ;i;i;i; i)0; 0; 0i*0o; ;i;i;i; i*0; 0; 0i+0o; ;i;i;i; i+0; 0; 0i,0o; ;i;i;i; i,0; 0; 0i-0o; ;i;i;i; i-0; 0; 0i.0o; ;i;i;i; i.0; 0; 0i/0o; ;i;i;i; i/0; 0; 0i00o; ;i;i;i; i00; 0; 0i10o; ;i;i;i; i10; 0; 0i20o; ;i;i;i; i20; 0; 0i30o; ;i;i;i; i30; 0; 0i40o; ;i;i;i; i40; 0; 0i50o; ;i;i;i; i50; 0; 0i60o; ;i;i;i; i60; 0; 0i70o; ;i;i;i; i70; 0; 0i80o; ;i;i;i; i80; 0; 0i90o; ;i;i;i; i90; 0; 0i:0o; ;i;i;i; i:0; 0; 0i;0o; ;i;i;i; i;0; 0; 0i<0o; ;i;i;i; i<0; 0; 0i=0o; ;i;i;i; i=0; 0; 0i>0o; ;i;i;i; i>0; 0; 0i?0o; ;i;i;i; i?0; 0; 0i@0o; ;i;i;i; i@0; 0; 0iA0o; ;i;i;i; iA0; 0; 0iB0o; ;i;i;i; iB0; 0; 0iC0o; ;i;i;i; iC0; 0; 0iD0o; ;i;i;i; iD0; 0; 0iE0o; ;i;i;i; iE0; 0; 0iF0o; ;i;i;i; iF0; 0; 0iG0o; ;i;i;i; iG0; 0; 0iH0o; ;i;i;i; iH0; 0; 0iI0o; ;i;i;i; iI0; 0; 0iJ0o; ;i;i;i; iJ0; 0; 0iK0o; ;i;i;i; iK0; 0; 0iL0o; ;i;i;i; iL0; 0; 0iM0o; ;i;i;i; iM0; 0; 0iN0o; ;i;i;i; iN0; 0; 0iO0o; ;i;i;i; iO0; 0; 0iP0o; ;i;i;i; iP0; 0; 0iQ0o; ;i;i;i; iQ0; 0; 0iR0o; ;i;i;i; iR0; 0; 0iS0o; ;i;i;i; iS0; 0; 0iT0o; ;i;i;i; iT0; 0; 0iU0o; ;i;i;i; iU0; 0; 0iV0o; ;i;i;i; iV0; 0; 0iW0o; ;i;i;i; iW0; 0; 0iX0o; ;i;i;i; iX0; 0; 0iY0o; ;i;i;i; iY0; 0; 0iZ0o; ;i;i;i; iZ0; 0; 0i[0o; ;i;i;i; i[0; 0; 0i\0o; ;i;i;i; i\0; 0; 0i]0o; ;i;i;i; i]0; 0; 0i^0o; ;i;i;i; i^0; 0; 0i_0o; ;i;i;i; i_0; 0; 0i`0o; ;i;i;i; i`0; 0; 0ia0o; ;i;i;i; ia0; 0; 0ib0o; ;i;i;i; ib0; 0; 0ic0o; ;i;i;i; ic0; 0; 0id0o; ;i;i;i; id0; 0; 0ie0o; ;i;i;i; ie0; 0; 0if0o; ;i;i;i; if0; 0; 0ig0o; ;i;i;i; ig0; 0; 0ih0o; ;i;i;i; ih0; 0; 0ii0o; ;i;i;i; ii0; 0; 0ij0o; ;i;i;i; ij0; 0; 0ik0o; ;i;i;i; ik0; 0; 0il0o; ;i;i;i; il0; 0; 0im0o; ;i;i;i; im0; 0; 0in0o; ;i;i;i; in0; 0; 0io0o; ;i;i;i; io0; 0; 0ip0o; ;i;i;i; ip0; 0; 0iq0o; ;i;i;i; iq0; 0; 0ir0o; ;i;i;i; ir0; 0; 0is0o; ;i;i;i; is0; 0; 0it0o; ;i;i;i; it0; 0; 0iu0o; ;i;i;i; iu0; 0; 0iv0o; ;i;i;i; iv0; 0; 0iw0o; ;i;i;i; iw0; 0; 0ix0o; ;i;i;i; ix0; 0; 0iy0o; ;i;i;i; iy0; 0; 0iz0o; ;i;i;i; iz0; 0; 0i{0o; ;i;i;i; i{0; 0; 0i|0o; ;i;i;i; i|0; 0; 0i}0o; ;i;i;i; i}0; 0; 0i~0o; ;i;i;i; i~0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i!1o; ;i;i;i; i!1; 0; 0i"1o; ;i;i;i; i"1; 0; 0i#1o; ;i;i;i; i#1; 0; 0i$1o; ;i;i;i; i$1; 0; 0i%1o; ;i;i;i; i%1; 0; 0i&1o; ;i;i;i; i&1; 0; 0i'1o; ;i;i;i; i'1; 0; 0i(1o; ;i;i;i; i(1; 0; 0i)1o; ;i;i;i; i)1; 0; 0i*1o; ;i;i;i; i*1; 0; 0i+1o; ;i;i;i; i+1; 0; 0i,1o; ;i;i;i; i,1; 0; 0i-1o; ;i;i;i; i-1; 0; 0i.1o; ;i;i;i; i.1; 0; 0i/1o; ;i;i;i; i/1; 0; 0i01o; ;i;i;i; i01; 0; 0i11o; ;i;i;i; i11; 0; 0i21o; ;i;i;i; i21; 0; 0i31o; ;i;i;i; i31; 0; 0i41o; ;i;i;i; i41; 0; 0i51o; ;i;i;i; i51; 0; 0i61o; ;i;i;i; i61; 0; 0i71o; ;i;i;i; i71; 0; 0i81o; ;i;i;i; i81; 0; 0i91o; ;i;i;i; i91; 0; 0i:1o; ;i;i;i; i:1; 0; 0i;1o; ;i;i;i; i;1; 0; 0i<1o; ;i;i;i; i<1; 0; 0i=1o; ;i;i;i; i=1; 0; 0i>1o; ;i;i;i; i>1; 0; 0i?1o; ;i;i;i; i?1; 0; 0i@1o; ;i;i;i; i@1; 0; 0iA1o; ;i;i;i; iA1; 0; 0iB1o; ;i;i;i; iB1; 0; 0iC1o; ;i;i;i; iC1; 0; 0iD1o; ;i;i;i; iD1; 0; 0iE1o; ;i;i;i; iE1; 0; 0iF1o; ;i;i;i; iF1; 0; 0iG1o; ;i;i;i; iG1; 0; 0iH1o; ;i;i;i; iH1; 0; 0iI1o; ;i;i;i; iI1; 0; 0iJ1o; ;i;i;i; iJ1; 0; 0iK1o; ;i;i;i; iK1; 0; 0iL1o; ;i;i;i; iL1; 0; 0iM1o; ;i;i;i; iM1; 0; 0iN1o; ;i;i;i; iN1; 0; 0iO1o; ;i;i;i; iO1; 0; 0iP1o; ;i;i;i; iP1; 0; 0iQ1o; ;i;i;i; iQ1; 0; 0iR1o; ;i;i;i; iR1; 0; 0iS1o; ;i;i;i; iS1; 0; 0iT1o; ;i;i;i; iT1; 0; 0iU1o; ;i;i;i; iU1; 0; 0iV1o; ;i;i;i; iV1; 0; 0iW1o; ;i;i;i; iW1; 0; 0iX1o; ;i;i;i; iX1; 0; 0iY1o; ;i;i;i; iY1; 0; 0iZ1o; ;i;i;i; iZ1; 0; 0i[1o; ;i;i;i; i[1; 0; 0i\1o; ;i;i;i; i\1; 0; 0i]1o; ;i;i;i; i]1; 0; 0i^1o; ;i;i;i; i^1; 0; 0i_1o; ;i;i;i; i_1; 0; 0i`1o; ;i;i;i; i`1; 0; 0ia1o; ;i;i;i; ia1; 0; 0ib1o; ;i;i;i; ib1; 0; 0ic1o; ;i;i;i; ic1; 0; 0id1o; ;i;i;i; id1; 0; 0ie1o; ;i;i;i; ie1; 0; 0if1o; ;i;i;i; if1; 0; 0ig1o; ;i;i;i; ig1; 0; 0ih1o; ;i;i;i; ih1; 0; 0ii1o; ;i;i;i; ii1; 0; 0ij1o; ;i;i;i; ij1; 0; 0ik1o; ;i;i;i; ik1; 0; 0il1o; ;i;i;i; il1; 0; 0im1o; ;i;i;i; im1; 0; 0in1o; ;i;i;i; in1; 0; 0io1o; ;i;i;i; io1; 0; 0ip1o; ;i;i;i; ip1; 0; 0iq1o; ;i;i;i; iq1; 0; 0ir1o; ;i;i;i; ir1; 0; 0is1o; ;i;i;i; is1; 0; 0it1o; ;i;i;i; it1; 0; 0iu1o; ;i;i;i; iu1; 0; 0iv1o; ;i;i;i; iv1; 0; 0iw1o; ;i;i;i; iw1; 0; 0ix1o; ;i;i;i; ix1; 0; 0iy1o; ;i;i;i; iy1; 0; 0iz1o; ;i;i;i; iz1; 0; 0i{1o; ;i;i;i; i{1; 0; 0i|1o; ;i;i;i; i|1; 0; 0i}1o; ;i;i;i; i}1; 0; 0i~1o; ;i;i;i; i~1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i!2o; ;i;i;i; i!2; 0; 0i"2o; ;i;i;i; i"2; 0; 0i#2o; ;i;i;i; i#2; 0; 0i$2o; ;i;i;i; i$2; 0; 0i%2o; ;i;i;i; i%2; 0; 0i&2o; ;i;i;i; i&2; 0; 0i'2o; ;i;i;i; i'2; 0; 0i(2o; ;i;i;i; i(2; 0; 0i)2o; ;i;i;i; i)2; 0; 0i*2o; ;i;i;i; i*2; 0; 0i+2o; ;i;i;i; i+2; 0; 0i,2o; ;i;i;i; i,2; 0; 0i-2o; ;i;i;i; i-2; 0; 0i.2o; ;i;i;i; i.2; 0; 0i/2o; ;i;i;i; i/2; 0; 0i02o; ;i;i;i; i02; 0; 0i12o; ;i;i;i; i12; 0; 0i22o; ;i;i;i; i22; 0; 0i32o; ;i;i;i; i32; 0; 0i42o; ;i;i;i; i42; 0; 0i52o; ;i;i;i; i52; 0; 0i62o; ;i;i;i; i62; 0; 0i72o; ;i;i;i; i72; 0; 0i82o; ;i;i;i; i82; 0; 0i92o; ;i;i;i; i92; 0; 0i:2o; ;i;i;i; i:2; 0; 0i;2o; ;i;i;i; i;2; 0; 0i<2o; ;i;i;i; i<2; 0; 0i=2o; ;i;i;i; i=2; 0; 0i>2o; ;i;i;i; i>2; 0; 0i?2o; ;i;i;i; i?2; 0; 0i@2o; ;i;i;i; i@2; 0; 0iA2o; ;i;i;i; iA2; 0; 0iB2o; ;i;i;i; iB2; 0; 0iC2o; ;i;i;i; iC2; 0; 0iD2o; ;i;i;i; iD2; 0; 0iE2o; ;i;i;i; iE2; 0; 0iF2o; ;i;i;i; iF2; 0; 0iG2o; ;i;i;i; iG2; 0; 0iH2o; ;i;i;i; iH2; 0; 0iI2o; ;i;i;i; iI2; 0; 0iJ2o; ;i;i;i; iJ2; 0; 0iK2o; ;i;i;i; iK2; 0; 0iL2o; ;i;i;i; iL2; 0; 0iM2o; ;i;i;i; iM2; 0; 0iN2o; ;i;i;i; iN2; 0; 0iO2o; ;i;i;i; iO2; 0; 0iP2o; ;i;i;i; iP2; 0; 0iQ2o; ;i;i;i; iQ2; 0; 0iR2o; ;i;i;i; iR2; 0; 0iS2o; ;i;i;i; iS2; 0; 0iT2o; ;i;i;i; iT2; 0; 0iU2o; ;i;i;i; iU2; 0; 0iV2o; ;i;i;i; iV2; 0; 0iW2o; ;i;i;i; iW2; 0; 0iX2o; ;i;i;i; iX2; 0; 0iY2o; ;i;i;i; iY2; 0; 0iZ2o; ;i;i;i; iZ2; 0; 0i[2o; ;i;i;i; i[2; 0; 0i\2o; ;i;i;i; i\2; 0; 0i]2o; ;i;i;i; i]2; 0; 0i^2o; ;i;i;i; i^2; 0; 0i_2o; ;i;i;i; i_2; 0; 0i`2o; ;i;i;i; i`2; 0; 0ia2o; ;i;i;i; ia2; 0; 0ib2o; ;i;i;i; ib2; 0; 0ic2o; ;i;i;i; ic2; 0; 0id2o; ;i;i;i; id2; 0; 0ie2o; ;i;i;i; ie2; 0; 0if2o; ;i;i;i; if2; 0; 0ig2o; ;i;i;i; ig2; 0; 0ih2o; ;i;i;i; ih2; 0; 0ii2o; ;i;i;i; ii2; 0; 0ij2o; ;i;i;i; ij2; 0; 0ik2o; ;i;i;i; ik2; 0; 0il2o; ;i;i;i; il2; 0; 0im2o; ;i;i;i; im2; 0; 0in2o; ;i;i;i; in2; 0; 0io2o; ;i;i;i; io2; 0; 0ip2o; ;i;i;i; ip2; 0; 0iq2o; ;i;i;i; iq2; 0; 0ir2o; ;i;i;i; ir2; 0; 0is2o; ;i;i;i; is2; 0; 0it2o; ;i;i;i; it2; 0; 0iu2o; ;i;i;i; iu2; 0; 0iv2o; ;i;i;i; iv2; 0; 0iw2o; ;i;i;i; iw2; 0; 0ix2o; ;i;i;i; ix2; 0; 0iy2o; ;i;i;i; iy2; 0; 0iz2o; ;i;i;i; iz2; 0; 0i{2o; ;i;i;i; i{2; 0; 0i|2o; ;i;i;i; i|2; 0; 0i}2o; ;i;i;i; i}2; 0; 0i~2o; ;i;i;i; i~2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i!3o; ;i;i;i; i!3; 0; 0i"3o; ;i;i;i; i"3; 0; 0i#3o; ;i;i;i; i#3; 0; 0i$3o; ;i;i;i; i$3; 0; 0i%3o; ;i;i;i; i%3; 0; 0i&3o; ;i;i;i; i&3; 0; 0i'3o; ;i;i;i; i'3; 0; 0i(3o; ;i;i;i; i(3; 0; 0i)3o; ;i;i;i; i)3; 0; 0i*3o; ;i;i;i; i*3; 0; 0i+3o; ;i;i;i; i+3; 0; 0i,3o; ;i;i;i; i,3; 0; 0i-3o; ;i;i;i; i-3; 0; 0i.3o; ;i;i;i; i.3; 0; 0i/3o; ;i;i;i; i/3; 0; 0i03o; ;i;i;i; i03; 0; 0i13o; ;i;i;i; i13; 0; 0i23o; ;i;i;i; i23; 0; 0i33o; ;i;i;i; i33; 0; 0i43o; ;i;i;i; i43; 0; 0i53o; ;i;i;i; i53; 0; 0i63o; ;i;i;i; i63; 0; 0i73o; ;i;i;i; i73; 0; 0i83o; ;i;i;i; i83; 0; 0i93o; ;i;i;i; i93; 0; 0i:3o; ;i;i;i; i:3; 0; 0i;3o; ;i;i;i; i;3; 0; 0i<3o; ;i;i;i; i<3; 0; 0i=3o; ;i;i;i; i=3; 0; 0i>3o; ;i;i;i; i>3; 0; 0i?3o; ;i;i;i; i?3; 0; 0i@3o; ;i;i;i; i@3; 0; 0iA3o; ;i;i;i; iA3; 0; 0iB3o; ;i;i;i; iB3; 0; 0iC3o; ;i;i;i; iC3; 0; 0iD3o; ;i;i;i; iD3; 0; 0iE3o; ;i;i;i; iE3; 0; 0iF3o; ;i;i;i; iF3; 0; 0iG3o; ;i;i;i; iG3; 0; 0iH3o; ;i;i;i; iH3; 0; 0iI3o; ;i;i;i; iI3; 0; 0iJ3o; ;i;i;i; iJ3; 0; 0iK3o; ;i;i;i; iK3; 0; 0iL3o; ;i;i;i; iL3; 0; 0iM3o; ;i;i;i; iM3; 0; 0iN3o; ;i;i;i; iN3; 0; 0iO3o; ;i;i;i; iO3; 0; 0iP3o; ;i;i;i; iP3; 0; 0iQ3o; ;i;i;i; iQ3; 0; 0iR3o; ;i;i;i; iR3; 0; 0iS3o; ;i;i;i; iS3; 0; 0iT3o; ;i;i;i; iT3; 0; 0iU3o; ;i;i;i; iU3; 0; 0iV3o; ;i;i;i; iV3; 0; 0iW3o; ;i;i;i; iW3; 0; 0iX3o; ;i;i;i; iX3; 0; 0iY3o; ;i;i;i; iY3; 0; 0iZ3o; ;i;i;i; iZ3; 0; 0i[3o; ;i;i;i; i[3; 0; 0i\3o; ;i;i;i; i\3; 0; 0i]3o; ;i;i;i; i]3; 0; 0i^3o; ;i;i;i; i^3; 0; 0i_3o; ;i;i;i; i_3; 0; 0i`3o; ;i;i;i; i`3; 0; 0ia3o; ;i;i;i; ia3; 0; 0ib3o; ;i;i;i; ib3; 0; 0ic3o; ;i;i;i; ic3; 0; 0id3o; ;i;i;i; id3; 0; 0ie3o; ;i;i;i; ie3; 0; 0if3o; ;i;i;i; if3; 0; 0ig3o; ;i;i;i; ig3; 0; 0ih3o; ;i;i;i; ih3; 0; 0ii3o; ;i;i;i; ii3; 0; 0ij3o; ;i;i;i; ij3; 0; 0ik3o; ;i;i;i; ik3; 0; 0il3o; ;i;i;i; il3; 0; 0im3o; ;i;i;i; im3; 0; 0in3o; ;i;i;i; in3; 0; 0io3o; ;i;i;i; io3; 0; 0ip3o; ;i;i;i; ip3; 0; 0iq3o; ;i;i;i; iq3; 0; 0ir3o; ;i;i;i; ir3; 0; 0is3o; ;i;i;i; is3; 0; 0it3o; ;i;i;i; it3; 0; 0iu3o; ;i;i;i; iu3; 0; 0iv3o; ;i;i;i; iv3; 0; 0iw3o; ;i;i;i; iw3; 0; 0ix3o; ;i;i;i; ix3; 0; 0iy3o; ;i;i;i; iy3; 0; 0iz3o; ;i;i;i; iz3; 0; 0i{3o; ;i;i;i; i{3; 0; 0i|3o; ;i;i;i; i|3; 0; 0i}3o; ;i;i;i; i}3; 0; 0i~3o; ;i;i;i; i~3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i!4o; ;i;i;i; i!4; 0; 0i"4o; ;i;i;i; i"4; 0; 0i#4o; ;i;i;i; i#4; 0; 0i$4o; ;i;i;i; i$4; 0; 0i%4o; ;i;i;i; i%4; 0; 0i&4o; ;i;i;i; i&4; 0; 0i'4o; ;i;i;i; i'4; 0; 0i(4o; ;i;i;i; i(4; 0; 0i)4o; ;i;i;i; i)4; 0; 0i*4o; ;i;i;i; i*4; 0; 0i+4o; ;i;i;i; i+4; 0; 0i,4o; ;i;i;i; i,4; 0; 0i-4o; ;i;i;i; i-4; 0; 0i.4o; ;i;i;i; i.4; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; [iWiei_o; ;i;i;i; i_; 0; [iXiei`o; ;i;i;i; i`; 0; [i_iniao; ;i;i;i; ia; 0; [i_ioibo; ;i;i;i; ib; 0; [i_ipico; ;i;i;i; ic; 0; [i_iqido; ;i;i;i; id; 0; [i_irieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iieio; ;i;i;i; i; 0; [iieio; ;i;i;i; i; 0; [iinio; ;i;i;i; i; 0; [iinio; ;i;i;i; i; 0; [iioio; ;i;i;i; i; 0; [iioio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0io; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNi o; ;i;i;i; i ; I" font; T; [iOi o; ;i;i;i; i ; I" font; T; [iPi o; ;i;i;i; i ; I" font; T; [iQi o; ;i;i;i; i ; I" font; T; [iRi o; ;i;i;i; i ; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [iki o; ;i;i;i; i ; I" font; T; [ili!o; ;i;i;i; i!; I" font; T; [imi"o; ;i;i;i; i"; I" font; T; [ini#o; ;i;i;i; i#; I" font; T; [ioi$o; ;i;i;i; i$; I" font; T; [ipi%o; ;i;i;i; i%; I" font; T; [iqi&o; ;i;i;i; i&; I" font; T; [iri'o; ;i;i;i; i'; I" font; T; [isi(o; ;i;i;i; i(; I" font; T; [iti)o; ;i;i;i; i); I" font; T; [iui*o; ;i;i;i; i*; I" font; T; [ivi+o; ;i;i;i; i+; I" font; T; [iwi,o; ;i;i;i; i,; I" font; T; [ixi-o; ;i;i;i; i-; I" font; T; [iyi.o; ;i;i;i; i.; I" font; T; [izi/o; ;i;i;i; i/; I" font; T; [i{i0o; ;i;i;i; i0; I" font; T; [i|i1o; ;i;i;i; i1; I" font; T; [i}i2o; ;i;i;i; i2; I" font; T; [i~i3o; ;i;i;i; i3; I" font; T; [ii4o; ;i;i;i; i4; I" font; T; [iFi5o; ;i;i;i; i5; I" font; T; [iGi6o; ;i;i;i; i6; I" font; T; [iHi7o; ;i;i;i; i7; I" font; T; [iIi8o; ;i;i;i; i8; I" font; T; [iJi9o; ;i;i;i; i9; I" font; T; [iKi:o; ;i;i;i; i:; I" font; T; [iLi;o; ;i;i;i; i;; I" font; T; [iMi<o; ;i;i;i; i<; I" font; T; [iNi=o; ;i;i;i; i=; I" font; T; [iOi>o; ;i;i;i; i>; I" font; T; [iPi?o; ;i;i;i; i?; I" font; T; [iQi@o; ;i;i;i; i@; I" font; T; [iRiAo; ;i;i;i; iA; I" font; T; [iSiBo; ;i;i;i; iB; I" font; T; [iTiCo; ;i;i;i; iC; I" font; T; [iUiDo; ;i;i;i; iD; I" font; T; [iViEo; ;i;i;i; iE; I" font; T; [iWiFo; ;i;i;i; iF; I" font; T; [iXiGo; ;i;i;i; iG; I" font; T; [iYiHo; ;i;i;i; iH; I" font; T; [iZiIo; ;i;i;i; iI; I" font; T; [i[iJo; ;i;i;i; iJ; I" font; T; [i\iKo; ;i;i;i; iK; I" font; T; [i]iLo; ;i;i;i; iL; I" font; T; [i^iMo; ;i;i;i; iM; I" font; T; [i_iNo; ;i;i;i; iN; I" font; T; [ifiOo; ;i;i;i; iO; I" font; T; [igiPo; ;i;i;i; iP; I" font; T; [ihiQo; ;i;i;i; iQ; I" font; T; [iiiRo; ;i;i;i; iR; I" font; T; [ijiSo; ;i;i;i; iS; I" font; T; [ikiTo; ;i;i;i; iT; I" font; T; [iliVo; ;i;i;i; iV; I" font; T; [iniWo; ;i;i;i; iW; I" font; T; [ioiXo; ;i;i;i; iX; I" font; T; [ipiYo; ;i;i;i; iY; I" font; T; [iqiZo; ;i;i;i; iZ; I" font; T; [iri[o; ;i;i;i; i[; I" font; T; [isi\o; ;i;i;i; i\; I" font; T; [iti]o; ;i;i;i; i]; I" font; T; [iui^o; ;i;i;i; i^; I" font; T; [ivi_o; ;i;i;i; i_; I" font; T; [iwi`o; ;i;i;i; i`; I" font; T; [ixiao; ;i;i;i; ia; I" font; T; [iyibo; ;i;i;i; ib; I" font; T; [izico; ;i;i;i; ic; I" font; T; [i{ido; ;i;i;i; id; I" font; T; [i|ieo; ;i;i;i; ie; I" font; T; [i}ifo; ;i;i;i; if; I" font; T; [i~igo; ;i;i;i; ig; I" font; T; [iiho; ;i;i;i; ih; I" font; T; [iFiio; ;i;i;i; ii; I" font; T; [iGijo; ;i;i;i; ij; I" font; T; [iHiko; ;i;i;i; ik; I" font; T; [iIilo; ;i;i;i; il; I" font; T; [iJimo; ;i;i;i; im; I" font; T; [iKino; ;i;i;i; in; I" font; T; [iLioo; ;i;i;i; io; I" font; T; [iMipo; ;i;i;i; ip; I" font; T; [iNiqo; ;i;i;i; iq; I" font; T; [iOiro; ;i;i;i; ir; I" font; T; [iPiso; ;i;i;i; is; I" font; T; [iQito; ;i;i;i; it; I" font; T; [iRiuo; ;i;i;i; iu; I" font; T; [iSivo; ;i;i;i; iv; I" font; T; [iTiwo; ;i;i;i; iw; I" font; T; [iUixo; ;i;i;i; ix; I" font; T; [iViyo; ;i;i;i; iy; I" font; T; [iWizo; ;i;i;i; iz; I" font; T; [iXi{o; ;i;i;i; i{; I" font; T; [iYi|o; ;i;i;i; i|; I" font; T; [iZi}o; ;i;i;i; i}; I" font; T; [i[i~o; ;i;i;i; i~; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJi o; ;i;i;i; i ; I" font; T; [iKi o; ;i;i;i; i ; I" font; T; [iLi o; ;i;i;i; i ; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igi o; ;i;i;i; i ; I" font; T; [ihi!o; ;i;i;i; i!; I" font; T; [iii"o; ;i;i;i; i"; I" font; T; [iji#o; ;i;i;i; i#; I" font; T; [iki$o; ;i;i;i; i$; I" font; T; [ili%o; ;i;i;i; i%; I" font; T; [imi&o; ;i;i;i; i&; I" font; T; [ini'o; ;i;i;i; i'; I" font; T; [ioi(o; ;i;i;i; i(; I" font; T; [ipi)o; ;i;i;i; i); I" font; T; [iqi*o; ;i;i;i; i*; I" font; T; [iri+o; ;i;i;i; i+; I" font; T; [isi,o; ;i;i;i; i,; I" font; T; [iti-o; ;i;i;i; i-; I" font; T; [iui.o; ;i;i;i; i.; I" font; T; [ivi/o; ;i;i;i; i/; I" font; T; [iwi0o; ;i;i;i; i0; I" font; T; [ixi1o; ;i;i;i; i1; I" font; T; [iyi2o; ;i;i;i; i2; I" font; T; [izi3o; ;i;i;i; i3; I" font; T; [i{i4o; ;i;i;i; i4; I" font; T; [i|i5o; ;i;i;i; i5; I" font; T; [i}i6o; ;i;i;i; i6; I" font; T; [i~i7o; ;i;i;i; i7; I" font; T; [ii8o; ;i;i;i; i8; I" font; T; [iFi9o; ;i;i;i; i9; I" font; T; [iGi;o; ;i;i;i; i;; I" font; T; [iIi<o; ;i;i;i; i<; I" font; T; [iJi=o; ;i;i;i; i=; I" font; T; [iKi>o; ;i;i;i; i>; I" font; T; [iLi@o; ;i;i;i; i@; I" font; T; [iNiAo; ;i;i;i; iA; I" font; T; [iOiBo; ;i;i;i; iB; I" font; T; [iPiCo; ;i;i;i; iC; I" font; T; [iQiDo; ;i;i;i; iD; I" font; T; [iRiFo; ;i;i;i; iF; I" font; T; [iTiJo; ;i;i;i; iJ; I" font; T; [iXiKo; ;i;i;i; iK; I" font; T; [iYiLo; ;i;i;i; iL; I" font; T; [iZiMo; ;i;i;i; iM; I" font; T; [i[iNo; ;i;i;i; iN; I" font; T; [i\iOo; ;i;i;i; iO; I" font; T; [i]iPo; ;i;i;i; iP; I" font; T; [i^iRo; ;i;i;i; iR; I" font; T; [ifiSo; ;i;i;i; iS; I" font; T; [igiTo; ;i;i;i; iT; I" font; T; [ihiUo; ;i;i;i; iU; I" font; T; [iiiVo; ;i;i;i; iV; I" font; T; [ijiWo; ;i;i;i; iW; I" font; T; [ikiXo; ;i;i;i; iX; I" font; T; [iliYo; ;i;i;i; iY; I" font; T; [imiZo; ;i;i;i; iZ; I" font; T; [ini[o; ;i;i;i; i[; I" font; T; [ioi\o; ;i;i;i; i\; I" font; T; [ipi]o; ;i;i;i; i]; I" font; T; [iqi^o; ;i;i;i; i^; I" font; T; [iri_o; ;i;i;i; i_; I" font; T; [isi`o; ;i;i;i; i`; I" font; T; [itiao; ;i;i;i; ia; I" font; T; [iuibo; ;i;i;i; ib; I" font; T; [ivico; ;i;i;i; ic; I" font; T; [iwido; ;i;i;i; id; I" font; T; [ixieo; ;i;i;i; ie; I" font; T; [iyifo; ;i;i;i; if; I" font; T; [izigo; ;i;i;i; ig; I" font; T; [i{iho; ;i;i;i; ih; I" font; T; [i|iio; ;i;i;i; ii; I" font; T; [i}ijo; ;i;i;i; ij; I" font; T; [i~iko; ;i;i;i; ik; I" font; T; [iilo; ;i;i;i; il; I" font; T; [iFimo; ;i;i;i; im; I" font; T; [iGino; ;i;i;i; in; I" font; T; [iHioo; ;i;i;i; io; I" font; T; [iIipo; ;i;i;i; ip; I" font; T; [iJiqo; ;i;i;i; iq; I" font; T; [iKiro; ;i;i;i; ir; I" font; T; [iLiso; ;i;i;i; is; I" font; T; [iMito; ;i;i;i; it; I" font; T; [iNiuo; ;i;i;i; iu; I" font; T; [iOivo; ;i;i;i; iv; I" font; T; [iPiwo; ;i;i;i; iw; I" font; T; [iQixo; ;i;i;i; ix; I" font; T; [iRiyo; ;i;i;i; iy; I" font; T; [iSizo; ;i;i;i; iz; I" font; T; [iTi{o; ;i;i;i; i{; I" font; T; [iUi|o; ;i;i;i; i|; I" font; T; [iVi}o; ;i;i;i; i}; I" font; T; [iWi~o; ;i;i;i; i~; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFi o; ;i;i;i; i ; I" font; T; [iGi o; ;i;i;i; i ; I" font; T; [iHi o; ;i;i;i; i ; I" font; T; [iIi o; ;i;i;i; i ; I" font; T; [iJi o; ;i;i;i; i ; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]i o; ;i;i;i; i ; I" font; T; [i^i!o; ;i;i;i; i!; I" font; T; [i_i"o; ;i;i;i; i"; I" font; T; [ifi#o; ;i;i;i; i#; I" font; T; [igi$o; ;i;i;i; i$; I" font; T; [ihi%o; ;i;i;i; i%; I" font; T; [iii&o; ;i;i;i; i&; I" font; T; [iji'o; ;i;i;i; i'; I" font; T; [iki(o; ;i;i;i; i(; I" font; T; [ili)o; ;i;i;i; i); I" font; T; [imi*o; ;i;i;i; i*; I" font; T; [ini+o; ;i;i;i; i+; I" font; T; [ioi,o; ;i;i;i; i,; I" font; T; [ipi-o; ;i;i;i; i-; I" font; T; [iqi.o; ;i;i;i; i.; I" font; T; [iri/o; ;i;i;i; i/; I" font; T; [isi0o; ;i;i;i; i0; I" font; T; [iti1o; ;i;i;i; i1; I" font; T; [iui2o; ;i;i;i; i2; I" font; T; [ivi3o; ;i;i;i; i3; I" font; T; [iwi4o; ;i;i;i; i4; I" font; T; [ixi5o; ;i;i;i; i5; I" font; T; [iyi6o; ;i;i;i; i6; I" font; T; [izi7o; ;i;i;i; i7; I" font; T; [i{i8o; ;i;i;i; i8; I" font; T; [i|i9o; ;i;i;i; i9; I" font; T; [i}i:o; ;i;i;i; i:; I" font; T; [i~i;o; ;i;i;i; i;; I" font; T; [ii<o; ;i;i;i; i<; I" font; T; [iFi=o; ;i;i;i; i=; I" font; T; [iGi>o; ;i;i;i; i>; I" font; T; [iHi?o; ;i;i;i; i?; I" font; T; [iIi@o; ;i;i;i; i@; I" font; T; [iJiAo; ;i;i;i; iA; I" font; T; [iKiBo; ;i;i;i; iB; I" font; T; [iLiCo; ;i;i;i; iC; I" font; T; [iMiDo; ;i;i;i; iD; I" font; T; [iNiEo; ;i;i;i; iE; I" font; T; [iOiFo; ;i;i;i; iF; I" font; T; [iPiGo; ;i;i;i; iG; I" font; T; [iQiHo; ;i;i;i; iH; I" font; T; [iRiIo; ;i;i;i; iI; I" font; T; [iSiJo; ;i;i;i; iJ; I" font; T; [iTiKo; ;i;i;i; iK; I" font; T; [iUiLo; ;i;i;i; iL; I" font; T; [iViMo; ;i;i;i; iM; I" font; T; [iWiNo; ;i;i;i; iN; I" font; T; [iXiOo; ;i;i;i; iO; I" font; T; [iYiPo; ;i;i;i; iP; I" font; T; [iZiQo; ;i;i;i; iQ; I" font; T; [i[iRo; ;i;i;i; iR; I" font; T; [i\iSo; ;i;i;i; iS; I" font; T; [i]iTo; ;i;i;i; iT; I" font; T; [i^iUo; ;i;i;i; iU; I" font; T; [i_iVo; ;i;i;i; iV; I" font; T; [ifiWo; ;i;i;i; iW; I" font; T; [igiXo; ;i;i;i; iX; I" font; T; [ihiYo; ;i;i;i; iY; I" font; T; [iiiZo; ;i;i;i; iZ; I" font; T; [iji[o; ;i;i;i; i[; I" font; T; [iki\o; ;i;i;i; i\; I" font; T; [ili]o; ;i;i;i; i]; I" font; T; [imi^o; ;i;i;i; i^; I" font; T; [ini_o; ;i;i;i; i_; I" font; T; [ioi`o; ;i;i;i; i`; I" font; T; [ipiao; ;i;i;i; ia; I" font; T; [iqibo; ;i;i;i; ib; I" font; T; [irico; ;i;i;i; ic; I" font; T; [isido; ;i;i;i; id; I" font; T; [itieo; ;i;i;i; ie; I" font; T; [iuifo; ;i;i;i; if; I" font; T; [ivigo; ;i;i;i; ig; I" font; T; [iwiho; ;i;i;i; ih; I" font; T; [ixiio; ;i;i;i; ii; I" font; T; [iyijo; ;i;i;i; ij; I" font; T; [iziko; ;i;i;i; ik; I" font; T; [i{ilo; ;i;i;i; il; I" font; T; [i|imo; ;i;i;i; im; I" font; T; [i}ino; ;i;i;i; in; I" font; T; [i~ioo; ;i;i;i; io; I" font; T; [iipo; ;i;i;i; ip; I" font; T; [iFiqo; ;i;i;i; iq; I" font; T; [iGiro; ;i;i;i; ir; I" font; T; [iHiso; ;i;i;i; is; I" font; T; [iIito; ;i;i;i; it; I" font; T; [iJiuo; ;i;i;i; iu; I" font; T; [iKivo; ;i;i;i; iv; I" font; T; [iLiwo; ;i;i;i; iw; I" font; T; [iMixo; ;i;i;i; ix; I" font; T; [iNiyo; ;i;i;i; iy; I" font; T; [iOizo; ;i;i;i; iz; I" font; T; [iPi{o; ;i;i;i; i{; I" font; T; [iQi|o; ;i;i;i; i|; I" font; T; [iRi}o; ;i;i;i; i}; I" font; T; [iSi~o; ;i;i;i; i~; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i1io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii!o; ;i;i;i; i!; I" font; T; [ii"o; ;i;i;i; i"; I" font; T; [ii#o; ;i;i;i; i#; I" font; T; [ii$o; ;i;i;i; i$; I" font; T; [ii%o; ;i;i;i; i%; I" font; T; [ii&o; ;i;i;i; i&; I" font; T; [ii'o; ;i;i;i; i'; I" font; T; [ii(o; ;i;i;i; i(; I" font; T; [ii)o; ;i;i;i; i); I" font; T; [ii*o; ;i;i;i; i*; I" font; T; [ii+o; ;i;i;i; i+; I" font; T; [ii,o; ;i;i;i; i,; I" font; T; [ii-o; ;i;i;i; i-; I" font; T; [ii.o; ;i;i;i; i.; I" font; T; [ii/o; ;i;i;i; i/; I" font; T; [ii0o; ;i;i;i; i0; I" font; T; [ii1o; ;i;i;i; i1; I" font; T; [ii2o; ;i;i;i; i2; I" font; T; [ii3o; ;i;i;i; i3; I" font; T; [ii4o; ;i;i;i; i4; I" font; T; [ii5o; ;i;i;i; i5; I" font; T; [i"i6o; ;i;i;i; i6; I" font; T; [ii7o; ;i;i;i; i7; I" font; T; [ii8o; ;i;i;i; i8; I" font; T; [ii9o; ;i;i;i; i9; I" font; T; [ii:o; ;i;i;i; i:; I" font; T; [ii;o; ;i;i;i; i;; I" font; T; [ii<o; ;i;i;i; i<; I" font; T; [ii=o; ;i;i;i; i=; I" font; T; [ii>o; ;i;i;i; i>; I" font; T; [ii?o; ;i;i;i; i?; I" font; T; [ii@o; ;i;i;i; i@; I" font; T; [iiAo; ;i;i;i; iA; I" font; T; [iiBo; ;i;i;i; iB; I" font; T; [iiCo; ;i;i;i; iC; I" font; T; [iiDo; ;i;i;i; iD; I" font; T; [iiEo; ;i;i;i; iE; I" font; T; [iiFo; ;i;i;i; iF; I" font; T; [iiGo; ;i;i;i; iG; I" font; T; [iiHo; ;i;i;i; iH; I" font; T; [iiIo; ;i;i;i; iI; I" font; T; [iiJo; ;i;i;i; iJ; I" font; T; [iiKo; ;i;i;i; iK; I" font; T; [iiLo; ;i;i;i; iL; I" font; T; [iiMo; ;i;i;i; iM; I" font; T; [iiNo; ;i;i;i; iN; I" font; T; [iiOo; ;i;i;i; iO; I" font; T; [i"iPo; ;i;i;i; iP; I" font; T; [iiQo; ;i;i;i; iQ; I" font; T; [iiRo; ;i;i;i; iR; I" font; T; [iiSo; ;i;i;i; iS; I" font; T; [iiTo; ;i;i;i; iT; I" font; T; [iiUo; ;i;i;i; iU; I" font; T; [iiVo; ;i;i;i; iV; I" font; T; [iiWo; ;i;i;i; iW; I" font; T; [iiXo; ;i;i;i; iX; I" font; T; [iiYo; ;i;i;i; iY; I" font; T; [iiZo; ;i;i;i; iZ; I" font; T; [ii[o; ;i;i;i; i[; I" font; T; [ii\o; ;i;i;i; i\; I" font; T; [ii]o; ;i;i;i; i]; I" font; T; [ii^o; ;i;i;i; i^; I" font; T; [ii_o; ;i;i;i; i_; I" font; T; [ii`o; ;i;i;i; i`; I" font; T; [iiao; ;i;i;i; ia; I" font; T; [iibo; ;i;i;i; ib; I" font; T; [iico; ;i;i;i; ic; I" font; T; [iido; ;i;i;i; id; I" font; T; [iieo; ;i;i;i; ie; I" font; T; [iifo; ;i;i;i; if; I" font; T; [iigo; ;i;i;i; ig; I" font; T; [iiho; ;i;i;i; ih; I" font; T; [iiio; ;i;i;i; ii; I" font; T; [iijo; ;i;i;i; ij; I" font; T; [iiko; ;i;i;i; ik; I" font; T; [iilo; ;i;i;i; il; I" font; T; [iimo; ;i;i;i; im; I" font; T; [iino; ;i;i;i; in; I" font; T; [iioo; ;i;i;i; io; I" font; T; [i"ipo; ;i;i;i; ip; I" font; T; [iiqo; ;i;i;i; iq; I" font; T; [iiro; ;i;i;i; ir; I" font; T; [iiso; ;i;i;i; is; I" font; T; [iito; ;i;i;i; it; I" font; T; [iiuo; ;i;i;i; iu; I" font; T; [iivo; ;i;i;i; iv; I" font; T; [iiwo; ;i;i;i; iw; I" font; T; [iixo; ;i;i;i; ix; I" font; T; [iiyo; ;i;i;i; iy; I" font; T; [iizo; ;i;i;i; iz; I" font; T; [ii{o; ;i;i;i; i{; I" font; T; [ii|o; ;i;i;i; i|; I" font; T; [ii}o; ;i;i;i; i}; I" font; T; [ii~o; ;i;i;i; i~; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i5i3io; ;i;i;i; i; I" compat; T; [i5i1io; ;i;i;i; i; I" compat; T; [i6i1io; ;i;i;i; i; I" compat; T; [i7i1io; ;i;i;i; i; I" compat; T; [i8i1io; ;i;i;i; i; I" compat; T; [i9i1io; ;i;i;i; i; I" compat; T; [i:i1io; ;i;i;i; i; I" compat; T; [i;i1io; ;i;i;i; i; I" compat; T; [ii1io; ;i;i;i; i; I" compat; T; [i-iFi.io; ;i;i;i; i; I" compat; T; [i-iGi.io; ;i;i;i; i; I" compat; T; [i-iHi.io; ;i;i;i; i; I" compat; T; [i-iIi.io; ;i;i;i; i; I" compat; T; [i-iJi.io; ;i;i;i; i; I" compat; T; [i-iKi.io; ;i;i;i; i; I" compat; T; [i-iLi.io; ;i;i;i; i; I" compat; T; [i-iMi.io; ;i;i;i; i; I" compat; T; [i-iNi.io; ;i;i;i; i; I" compat; T; [i-iOi.io; ;i;i;i; i; I" compat; T; [i-iPi.io; ;i;i;i; i; I" compat; T; [i-iQi.io; ;i;i;i; i; I" compat; T; [i-iRi.io; ;i;i;i; i; I" compat; T; [i-iSi.io; ;i;i;i; i; I" compat; T; [i-iTi.io; ;i;i;i; i; I" compat; T; [i-iUi.i o; ;i;i;i; i ; I" compat; T; [i-iVi.i!o; ;i;i;i; i!; I" compat; T; [i-iWi.i"o; ;i;i;i; i"; I" compat; T; [i-iXi.i#o; ;i;i;i; i#; I" compat; T; [i-iYi.i$o; ;i;i;i; i$; I" compat; T; [i-iZi.i%o; ;i;i;i; i%; I" compat; T; [i-i[i.i&o; ;i;i;i; i&; I" compat; T; [i-i\i.i'o; ;i;i;i; i'; I" compat; T; [i-i]i.i(o; ;i;i;i; i(; I" compat; T; [i-i^i.i)o; ;i;i;i; i); I" compat; T; [i-i_i.i*o; ;i;i;i; i*; I" compat; T; [i0iXi0i+o; ;i;i;i; i+; I" circle; T; [iHi,o; ;i;i;i; i,; I" circle; T; [iWi-o; ;i;i;i; i-; I" circle; T; [iHiIi.o; ;i;i;i; i.; I" circle; T; [i\i_i1o; ;i;i;i; i1; I" square; T; [iGi=o; ;i;i;i; i=; I" square; T; [iSi?o; ;i;i;i; i?; I" square; T; [iUiBo; ;i;i;i; iB; I" square; T; [iXiFo; ;i;i;i; iF; I" square; T; [i\iJo; ;i;i;i; iJ; I" square; T; [iMi[iKo; ;i;i;i; iK; I" square; T; [iRi[iLo; ;i;i;i; iL; I" square; T; [iXiIiMo; ;i;i;i; iM; I" square; T; [iXiXiNo; ;i;i;i; iN; I" square; T; [iUiUi[iWo; ;i;i;i; iW; 0; 0i_o; ;i;i;i; i_; 0; 0iyo; ;i;i;i; iy; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" square; T; [iIiOio; ;i;i;i; i; I" square; T; [i{0iK0io; ;i;i;i; i; I" square; T; [iKbio; ;i;i;i; i; I" square; T; [iW[io; ;i;i;i; i; I" square; T; [iSio; ;i;i;i; i; I" square; T; [i0io; ;i;i;i; i; I" square; T; [iNio; ;i;i;i; i; I" square; T; [iYio; ;i;i;i; i; I" square; T; [iio; ;i;i;i; i; I" square; T; [i)Yio; ;i;i;i; i; I" square; T; [iNio; ;i;i;i; i; I" square; T; [i fio; ;i;i;i; i; I" square; T; [i!qio; ;i;i;i; i; I" square; T; [ieio; ;i;i;i; i; I" square; T; [iMRio; ;i;i;i; i; I" square; T; [i_io; ;i;i;i; i; I" square; T; [iQio; ;i;i;i; i; I" square; T; [iei o; ;i;i;i; i ; I" square; T; [iRi!o; ;i;i;i; i!; I" square; T; [iB}i"o; ;i;i;i; i"; I" square; T; [iui#o; ;i;i;i; i#; I" square; T; [ii$o; ;i;i;i; i$; I" square; T; [iXi%o; ;i;i;i; i%; I" square; T; [i9Ti&o; ;i;i;i; i&; I" square; T; [ioi'o; ;i;i;i; i'; I" square; T; [ibi(o; ;i;i;i; i(; I" square; T; [iUci)o; ;i;i;i; i); I" square; T; [iNi*o; ;i;i;i; i*; I" square; T; [i Ni+o; ;i;i;i; i+; I" square; T; [iJi,o; ;i;i;i; i,; I" square; T; [i]i-o; ;i;i;i; i-; I" square; T; [i-Ni.o; ;i;i;i; i.; I" square; T; [iSi/o; ;i;i;i; i/; I" square; T; [ici0o; ;i;i;i; i0; I" square; T; [ipi1o; ;i;i;i; i1; I" square; T; [iSbi@o; ;i;i;i; i@; I" compat; T; [i0i,gi0iAo; ;i;i;i; iA; I" compat; T; [i0i Ni0iBo; ;i;i;i; iB; I" compat; T; [i0iNi0iCo; ;i;i;i; iC; I" compat; T; [i0i[i0iDo; ;i;i;i; iD; I" compat; T; [i0ipi0iEo; ;i;i;i; iE; I" compat; T; [i0iSbi0iFo; ;i;i;i; iF; I" compat; T; [i0ivi0iGo; ;i;i;i; iG; I" compat; T; [i0iRi0iHo; ;i;i;i; iH; I" compat; T; [i0iWei0io; ;i;i;i; i; 0; 0i֦o; ;i;i;i; i֦; 0; 0io; ;i;i;i; i; 0; 0i4o; ;i;i;i; i4; 0; 0io; ;i;i;i; i; 0; [i=Nio; ;i;i;i; i; 0; [i8Nio; ;i;i;i; i; 0; [iANio; ;i;i;i; i; 0; [i"io; ;i;i;i; i; 0; [i`Oio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iPio; ;i;i;i; i; 0; [izPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [i4i o; ;i;i;i; i ; 0; [i:io; ;i;i;i; i; 0; [iMQio; ;i;i;i; i; 0; [iTQio; ;i;i;i; i; 0; [idQio; ;i;i;i; i; 0; [iwQio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i4io; ;i;i;i; i; 0; [igQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iKio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iߑio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i4i o; ;i;i;i; i ; 0; [i;Ri!o; ;i;i;i; i!; 0; [iFRi"o; ;i;i;i; i"; 0; [irRi#o; ;i;i;i; i#; 0; [iwRi$o; ;i;i;i; i$; 0; [i5i%o; ;i;i;i; i%; 0; [iRi&o; ;i;i;i; i&; 0; [iRi'o; ;i;i;i; i'; 0; [iRi(o; ;i;i;i; i(; 0; [iRi)o; ;i;i;i; i); 0; [iSi*o; ;i;i;i; i*; 0; [iSi+o; ;i;i;i; i+; 0; [iSi,o; ;i;i;i; i,; 0; [iISi-o; ;i;i;i; i-; 0; [iQSi.o; ;i;i;i; i.; 0; [iZSi/o; ;i;i;i; i/; 0; [isSi0o; ;i;i;i; i0; 0; [i}Si1o; ;i;i;i; i1; 0; [iSi2o; ;i;i;i; i2; 0; [iSi3o; ;i;i;i; i3; 0; [iSi4o; ;i;i;i; i4; 0; [i, i5o; ;i;i;i; i5; 0; [ippi6o; ;i;i;i; i6; 0; [iSi7o; ;i;i;i; i7; 0; [iSi8o; ;i;i;i; i8; 0; [ic i9o; ;i;i;i; i9; 0; [iSi:o; ;i;i;i; i:; 0; [iSi;o; ;i;i;i; i;; 0; [iTi<o; ;i;i;i; i<; 0; [iTi=o; ;i;i;i; i=; 0; [i8Ti>o; ;i;i;i; i>; 0; [iHTi?o; ;i;i;i; i?; 0; [ihTi@o; ;i;i;i; i@; 0; [iTiAo; ;i;i;i; iA; 0; [iTiBo; ;i;i;i; iB; 0; [iUiCo; ;i;i;i; iC; 0; [iSUiDo; ;i;i;i; iD; 0; [icUiEo; ;i;i;i; iE; 0; [iUiFo; ;i;i;i; iF; 0; [iUiGo; ;i;i;i; iG; 0; [iUiHo; ;i;i;i; iH; 0; [iUiIo; ;i;i;i; iI; 0; [iUiJo; ;i;i;i; iJ; 0; [iUiKo; ;i;i;i; iK; 0; [iWiLo; ;i;i;i; iL; 0; [iViMo; ;i;i;i; iM; 0; [iWiNo; ;i;i;i; iN; 0; [iQViOo; ;i;i;i; iO; 0; [itViPo; ;i;i;i; iP; 0; [iRiQo; ;i;i;i; iQ; 0; [iXiRo; ;i;i;i; iR; 0; [iWiSo; ;i;i;i; iS; 0; [iWiTo; ;i;i;i; iT; 0; [i XiUo; ;i;i;i; iU; 0; [iWiVo; ;i;i;i; iV; 0; [i2XiWo; ;i;i;i; iW; 0; [i1XiXo; ;i;i;i; iX; 0; [iXiYo; ;i;i;i; iY; 0; [iiZo; ;i;i;i; iZ; 0; [iXi[o; ;i;i;i; i[; 0; [iXi\o; ;i;i;i; i\; 0; [iYi]o; ;i;i;i; i]; 0; [iYi^o; ;i;i;i; i^; 0; [i"Yi_o; ;i;i;i; i_; 0; [ibYi`o; ;i;i;i; i`; 0; [iiao; ;i;i;i; ia; 0; [iibo; ;i;i;i; ib; 0; [iYico; ;i;i;i; ic; 0; [iZido; ;i;i;i; id; 0; [i'Zieo; ;i;i;i; ie; 0; [iYifo; ;i;i;i; if; 0; [ifZigo; ;i;i;i; ig; 0; [i6iho; ;i;i;i; ih; 0; [i6iio; ;i;i;i; ii; 0; [i[ijo; ;i;i;i; ij; 0; [i>[iko; ;i;i;i; ik; 0; [i>[ilo; ;i;i;i; il; 0; [iimo; ;i;i;i; im; 0; [i[ino; ;i;i;i; in; 0; [i[ioo; ;i;i;i; io; 0; [i[ipo; ;i;i;i; ip; 0; [i[iqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [i[iso; ;i;i;i; is; 0; [i\ito; ;i;i;i; it; 0; [iS_iuo; ;i;i;i; iu; 0; [i"\ivo; ;i;i;i; iv; 0; [i7iwo; ;i;i;i; iw; 0; [i`\ixo; ;i;i;i; ix; 0; [in\iyo; ;i;i;i; iy; 0; [i\izo; ;i;i;i; iz; 0; [i\i{o; ;i;i;i; i{; 0; [ii|o; ;i;i;i; i|; 0; [iC]i}o; ;i;i;i; i}; 0; [ii~o; ;i;i;i; i~; 0; [in]io; ;i;i;i; i; 0; [ik]io; ;i;i;i; i; 0; [i|]io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i/8io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i(^io; ;i;i;i; i; 0; [i=^io; ;i;i;i; i; 0; [ii^io; ;i;i;i; i; 0; [ib8io; ;i;i;i; i; 0; [i!io; ;i;i;i; i; 0; [i|8io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i1#io; ;i;i;i; i; 0; [i1#io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i"_io; ;i;i;i; i; 0; [i"_io; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [i2io; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ib_io; ;i;i;i; i; 0; [ik_io; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [i:9io; ;i;i;i; i; 0; [i9io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [i&io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iHaio; ;i;i;i; i; 0; [iLaio; ;i;i;i; i; 0; [iNaio; ;i;i;i; i; 0; [iLaio; ;i;i;i; i; 0; [izaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [i]bio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [iPcio; ;i;i;i; i; 0; [i +io; ;i;i;i; i; 0; [i=cio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ihcio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [i+io; ;i;i;i; i; 0; [i"dio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [i.:io; ;i;i;i; i; 0; [iidio; ;i;i;i; i; 0; [i~dio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [iwdio; ;i;i;i; i; 0; [il:io; ;i;i;i; i; 0; [iOeio; ;i;i;i; i; 0; [ileio; ;i;i;i; i; 0; [i 0io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iIfio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [i:io; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [i!gio; ;i;i;i; i; 0; [i^gio; ;i;i;i; i; 0; [iSgio; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [iI;io; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iRhio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [im4io; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iBiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [i6io; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [iwmio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [iimio; ;i;i;i; i; 0; [ixmio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [i4mio; ;i;i;i; i; 0; [i/ni o; ;i;i;i; i ; 0; [inni o; ;i;i;i; i ; 0; [i3=i o; ;i;i;i; i ; 0; [ini o; ;i;i;i; i ; 0; [ini o; ;i;i;i; i ; 0; [i>io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [inoio; ;i;i;i; i; 0; [i^?io; ;i;i;i; i; 0; [i?io; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i9pio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [iJpio; ;i;i;i; i; 0; [i}pio; ;i;i;i; i; 0; [iwpio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i%io; ;i;i;i; i; 0; [iEqio; ;i;i;i; i; 0; [icBio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [iCi o; ;i;i;i; i ; 0; [i(ri!o; ;i;i;i; i!; 0; [i5ri"o; ;i;i;i; i"; 0; [iPri#o; ;i;i;i; i#; 0; [iFi$o; ;i;i;i; i$; 0; [iri%o; ;i;i;i; i%; 0; [iri&o; ;i;i;i; i&; 0; [i5Gi'o; ;i;i;i; i'; 0; [iHi(o; ;i;i;i; i(; 0; [izsi)o; ;i;i;i; i); 0; [isi*o; ;i;i;i; i*; 0; [i>i+o; ;i;i;i; i+; 0; [isi,o; ;i;i;i; i,; 0; [i>i-o; ;i;i;i; i-; 0; [i>i.o; ;i;i;i; i.; 0; [iGti/o; ;i;i;i; i/; 0; [i\ti0o; ;i;i;i; i0; 0; [iqti1o; ;i;i;i; i1; 0; [iti2o; ;i;i;i; i2; 0; [iti3o; ;i;i;i; i3; 0; [i?i4o; ;i;i;i; i4; 0; [i$ui5o; ;i;i;i; i5; 0; [i6Li6o; ;i;i;i; i6; 0; [i>ui7o; ;i;i;i; i7; 0; [iLi8o; ;i;i;i; i8; 0; [ipui9o; ;i;i;i; i9; 0; [i!i:o; ;i;i;i; i:; 0; [ivi;o; ;i;i;i; i;; 0; [iOi<o; ;i;i;i; i<; 0; [iOi=o; ;i;i;i; i=; 0; [iDPi>o; ;i;i;i; i>; 0; [i?i?o; ;i;i;i; i?; 0; [i@i@o; ;i;i;i; i@; 0; [iviAo; ;i;i;i; iA; 0; [iPiBo; ;i;i;i; iB; 0; [iPiCo; ;i;i;i; iC; 0; [iQiDo; ;i;i;i; iD; 0; [i3QiEo; ;i;i;i; iE; 0; [iwiFo; ;i;i;i; iF; 0; [iwiGo; ;i;i;i; iG; 0; [iwiHo; ;i;i;i; iH; 0; [iJwiIo; ;i;i;i; iI; 0; [i9@iJo; ;i;i;i; iJ; 0; [iwiKo; ;i;i;i; iK; 0; [iF@iLo; ;i;i;i; iL; 0; [i@iMo; ;i;i;i; iM; 0; [iTiNo; ;i;i;i; iN; 0; [iNxiOo; ;i;i;i; iO; 0; [ixiPo; ;i;i;i; iP; 0; [ixiQo; ;i;i;i; iQ; 0; [i@iRo; ;i;i;i; iR; 0; [i&ViSo; ;i;i;i; iS; 0; [iVyiTo; ;i;i;i; iT; 0; [iViUo; ;i;i;i; iU; 0; [iViVo; ;i;i;i; iV; 0; [iyiWo; ;i;i;i; iW; 0; [iyiXo; ;i;i;i; iX; 0; [i/AiYo; ;i;i;i; iY; 0; [i@ziZo; ;i;i;i; iZ; 0; [iJzi[o; ;i;i;i; i[; 0; [iOzi\o; ;i;i;i; i\; 0; [i|Yi]o; ;i;i;i; i]; 0; [iZi^o; ;i;i;i; i^; 0; [iZi_o; ;i;i;i; i_; 0; [izi`o; ;i;i;i; i`; 0; [iBiao; ;i;i;i; ia; 0; [i[ibo; ;i;i;i; ib; 0; [i{ico; ;i;i;i; ic; 0; [i{ido; ;i;i;i; id; 0; [i'Bieo; ;i;i;i; ie; 0; [i\ifo; ;i;i;i; if; 0; [i|igo; ;i;i;i; ig; 0; [iBiho; ;i;i;i; ih; 0; [i|iio; ;i;i;i; ii; 0; [i|ijo; ;i;i;i; ij; 0; [i}iko; ;i;i;i; ik; 0; [i_ilo; ;i;i;i; il; 0; [ic}imo; ;i;i;i; im; 0; [iCino; ;i;i;i; in; 0; [i}ioo; ;i;i;i; io; 0; [i~ipo; ;i;i;i; ip; 0; [iE~iqo; ;i;i;i; iq; 0; [i4Ciro; ;i;i;i; ir; 0; [i(biso; ;i;i;i; is; 0; [iGbito; ;i;i;i; it; 0; [iYCiuo; ;i;i;i; iu; 0; [ibivo; ;i;i;i; iv; 0; [iziwo; ;i;i;i; iw; 0; [i>cixo; ;i;i;i; ix; 0; [iiyo; ;i;i;i; iy; 0; [iizo; ;i;i;i; iz; 0; [ii{o; ;i;i;i; i{; 0; [idi|o; ;i;i;i; i|; 0; [i#ei}o; ;i;i;i; i}; 0; [i`i~o; ;i;i;i; i~; 0; [ieio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i_3io; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i Dio; ;i;i;i; i; 0; [i>io; ;i;i;i; i; 0; [iZio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ikDio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0o;;i;i;i[ViX iY iZ i[ i\ i] i^ i_ i i i i3 i6 iY iZ i[ i^ i\ i] iCiMiRiWi\iiivixiiiiiiiii*i+i,i-i.i/i0i1i2i3i4i5i6i8i9i:i;ii@iAiCiDiFiGiHiIiJiKiLiMiNi*i^i_i`iaibicidiiiiii{riF{iiiiiiiiiii iiiiii(ii iiiiiii&i%ii#ii iiH{ i'iiiiiii i i iJ{iiiiiiiiiiiiiii(ii iiiiii'i(i-ii0ii#ii iiiiN{iiiiiiiiii(ii*ii,i(i.ii0i iiiii i0i,i ii#iiS{iiiiCi'iEi iGiiiiDi#iFi1iHi-iJiT{iiiiiiiiiiiiLiiNi iPiii ii(iii iiii.i#ii iiZ{iiiiiiiiiihiijiili ini ipi(iriii iiiiii$iri0iti-ivi#ii ii^{iiiiviixii2iiiii#ii iiiif{iiiiiiiiiii iiiiii(ii iiiiiii'i%ii#ii iih{ i'iiiii ii i i ij{iiiiiiiiiiiiiii(ii iiiiii'i)i-ii0ii#ii iiiin{iiiiiiiiii)ii+ii-i(i/i iii ii i0i-i ii#iis{iiiiDi'iFi iHiiiiEi#iGi1iIi-iKit{iiiiiiiiiiiiMiiOi iQiii ii(iii iiii/i#ii iiz{iiiiiiiiiiiiikiimi ioi iqi(isiii iiiiii$isi0iui-iwi#ii ii~{iiiiiiwii3iii iiii#ii iiiiI{ i iii i#i i1ii'ii-iii{ i iii i#i i1ii'ii-iiL{ iiiiii i'i"i iiiii il{ iiiiii!i'i#i iiiii!iM{ ii$i iii"i#i$ii&i'i(i.i*im{ ii%i iii#i#i%ii'i'i)i.i+i1iiO{ii4io{ii5i iiP{ i'i6i iii0i#i2i1i4ip{ i'i7i iii1i#i3i1i5iQ{ ii9i'i;i i=i#i6i1i:i-i<iq{ ii:i'i<i i>i#i7i1i;i-i=iW{ iiTi'iVi iXiiiiiiXi#iZi1i^iw{ iiUi'iWi iYiiiiiiYi#i[i1i_iX{ iiZii\i'i^i i`i&iii`i#ibix{ ii[ii]i'i_i iai&iiiai#iciY{ i'ibi idi&iiiji#ili1ini-ipiy{ i'ici iei&iiiki#imi1ioi-iqiii\{ iitiiiiiiiii#ii|{ iiuiiiiiiiii#ii ii_{ iiyii{i i}iii#ii1ii{ iizii|i i~iii#ii1ii{ iiiii iiii{ iiiii iiii{iii{iii&{iii'{iii{iiiii{iiiii{iii{iii{i ii{i ii{iii{iii{iii{iii{ii*i{ii+i{ii,iiLiiNi{ii-iiMiiOi.{ii0i/{ii1i{iiiBiiii{ iiiiii iiiiiiiEii{ iiiiiiiii{ iiii(ii)iiiEii{ iiiiii8ii9iiiiiii{ iiiiHiiIiii{ iiiiiiYiiiiiii{ iiiihiiiiiiEii{iiiiiBii{ iiiiiiiipiiiiiEiiBii{ iiiiiiiiri{ iiii ii!iitiEiiBii{ iiiiii0ii1iiviiiiiBii{iiiiiBii{ iiiiiiPiiQiiziiiiiBii{ iiii@iiAiixi{ iiii`iiaii|iEiiBii{iiiii{iiiiiii{iii{iii{ii i{ ii iiiiiii#{ iiiiiii ii8{ ii9ii]iiiii5{iiPiiQiii3{iiSiV{iiWi:{ii\iC{ ii^iiiii iit{iiviu{iiwi{iiiii6{iiiii{iiiii0{iiiii{iii{iii{iii7{iii{iii>{iii{iii{iii-{iiiM{iii'{iiiG{iii+{iiiK{iii'{iSi"iTi#iUi%iH{iTi$iJ{iTi&i{iTii{iTii{iTii( {i< i) i0 {i< i1 i3 {i< i4 i {i i i i iG {iV iH i> iK iW iL i {i i i {i i i i i {i i iF {iV iH i {i i i {i i i i i i i {i i iF {i> iJ iW iL iG {i> iK i {i i i i i i i {i i i%{i.i&i{i5ii{i5ii {i5i i {i5i i {i5ii{i5ii:{i5i;i<{i5i=i>{i5i@i?{i5iAiB{i5iCiG{iii#ii1iig{iii#ii1ii{iii{ii i{iiiii{iiiii({iii){iiiK{iiik{iii{ii.i{ii/i6{ii8i7{ii9iR{ii>ii@i#iBir{ii?iiAi#iCiL{iiPiiRiM{iiQiiSiU{iiTiiViu{iiUiiWiZ{ii\i[{ii]iZ{iidi[{iiei`{iifia{iigib{iihic{iiiih{iixii{iiyij{iizik{ii{i[{ii|i#i~i{{ii}i#ii]{iiiii}{iiiii{iii{ iiiii iiii{ iiiii iiii{iiiii{iiiii{ iiiii iiii{ iiiii iiii{ iiiii iiii{ iiiii iiii{iii{iii{ iiiii iiii{ iiiii iiii{iii{iii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiiiBiiEii{ iiiiiBiiEii{ ii ii iBiiEii { ii ii iBiiEii{iiiii{iiiii{iiiii{iiiii { ii"ii$iBi&iEii!{ ii#ii%iBi'iEii({ ii*ii,iBi.iEii){ ii+ii-iBi/iEii0{ii2ii4iBi6i1{ii3ii5iBi7i8{ii:ii<iBi>i9{ii;ii=iBi?i@{iiBiiDiA{iiCiiEiH{iiJiiLiI{iiKiiMiP{iiRiiTiBiViQ{iiSiiUiBiWiY{ii[ii]iBi_i`{ iibiidiBifiEiia{ iiciieiBigiEiih{ iijiiliBiniEiii{ iikiimiBioiEii{iEii{iEii{iEii{iEii{iEii{iEii {iEii {iEii {iEii {iEii{iEii{iEii"{iEii#{iEii${iEii%{iEii&{iEii'{iEii*{iEii+{iEii,{iEii-{iEii.{iEii/{iEiib{iEiic{iEiid{iEiie{iEiif{iEiig{iEiij{iEiik{iEiil{iEiim{iEiin{iEiio{iEiip{iEii{iEii{iEiit{iEii{iEii{iEii{iiiiiBii{iiiiiBii{iiiii{iii|{iEii{iEii{iEii!{i8i!i!{i8i!i!{i8i!i!{i8i!i!{i8i!i!{i8i!i"{i8i"i"{i8i "i "{i8i "i#"{i8i$"i%"{i8i&"i<"{i8iA"iC"{i8iD"iE"{i8iG"iH"{i8iI"iB{i8i`"ia"{i8ib"iM"{i8im"iA{i8in"iC{i8io"id"{i8ip"ie"{i8iq"ir"{i8it"is"{i8iu"iv"{i8ix"iw"{i8iy"iz"{i8i"i{"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i|"{i8i"i}"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"iK0{i0iL0iM0{i0iN0iO0{i0iP0iQ0{i0iR0iS0{i0iT0iU0{i0iV0iW0{i0iX0iY0{i0iZ0i[0{i0i\0i]0{i0i^0i_0{i0i`0ia0{i0ib0id0{i0ie0if0{i0ig0ih0{i0ii0io0{i0ip0i0iq0ir0{i0is0i0it0iu0{i0iv0i0iw0ix0{i0iy0i0iz0i{0{i0i|0i0i}0iF0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i{iii{iii{ii{:cri:lfi: control[o: Range: exclF: begini:endio;;F;i;io;;F;i;i$o;;F;i;iio;;F;i;iiio;;F;i;ii o;;F;i ;i i( i) o;;F;i* ;i. o;;F;i` ;id o;;F;ij ;io io;;F;i;iio;;F;is;izio;;F;i ;i: extend[o;;F;i;ioo;;F;i;io;;F;i;io;;F;i;iio;;F;i;io;;F;i;iio;;F;i;io;;F;iK;i^ipo;;F;i;iio;;F;i;io;;F;i;io;;F;i;iio;;F;i0;iJo;;F;i;io;;F;i;io;;F;i;io;;F;i;i#o;;F;i%;i'o;;F;i);i-o;;F;i ;i i< o;;F;iA ;iH iM o;;F;iQ ;iU o;;F;ib ;ic i i i o;;F;i ;i i i o;;F;i ;i o;;F;i ;i i< o;;F;iA ;iB o;;F;iG ;iH o;;F;iK ;iM iQ o;;F;ip ;iq iu o;;F;i ;i i o;;F;i ;i o;;F;i ;i i o;;F;i ;i i i< i> i? o;;F;iA ;iD iM iV iW o;;F;ib ;ic i i i i i o;;F;i> ;i@ o;;F;iF ;iH o;;F;iJ ;iM o;;F;iU ;iV o;;F;ib ;ic i i i i o;;F;i ;i o;;F;i ;i o;;F;i ;i i> o;;F;iA ;iD iM iW o;;F;ib ;ic i i o;;F;i ;i i i i0i1o;;F;i2;i3o;;F;i4;i:iEo;;F;iG;iNiio;;F;i;io;;F;i;io;;F;i;io;;F;i;io;;F;i;ii5i7i9o;;F;iq;i~o;;F;i;io;;F;i;io;;F;i;io;;F;i;iio;;F;i-;i0o;;F;i2;i7o;;F;i9;i:o;;F;i=;i>o;;F;iX;iYo;;F;i^;i`o;;F;iq;itio;;F;i;iiii_o;;F;i;io;;F;i2;i4o;;F;iR;iSo;;F;ir;iso;;F;i;iio;;F;i;iio;;F;i ;i io;;F;i ;i"o;;F;i';i(i2o;;F;i9;i;o;;F;i;iiVo;;F;iX;i^i`ibo;;F;ie;ilo;;F;is;i|io;;F;i;ii4o;;F;i6;i:i<iBo;;F;ik;iso;;F;i;io;;F;i;io;;F;i;io;;F;i,;i3o;;F;i6;i7o;;F;i;io;;F;i;io;;F;i;iio;;F;i;io;;F;i;io;;F;i ;i o;;F;i ;i o;;F;i ;i i o;;F;i ;i o;;F;i ;i o;;F;i,;i,o;;F;i-;i-o;;F;i*0;i/0o;;F;i0;i0ioo;;F;ip;iro;;F;i|;i}o;;F;i;iiii o;;F;i%;i&iĨo;;F;i;io;;F;i&;i-o;;F;iG;iQo;;F;i;iio;;F;i;iio;;F;i);i.o;;F;i1;i2o;;F;i5;i6iCiLio;;F;i;io;;F;i;io;;F;i;iiiiiio;;F;i;io;;F;i ;i&o;;F;i;iio;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i8 ;i: i? o;;F;i;io;;F;i;io;;F;i;iieo;;F;ig;iio;;F;in;iro;;F;i{;io;;F;i;io;;F;i;io;;F;iB;iDo;;F;i;i: prepend[ o;;F;i@;iDo;;F;i;io;;F;i;iio;;F;i;i:spacingmark[ji o;;F;i> ;i@ o;;F;iI ;iL iN o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i i o;;F;i> ;i@ i o;;F;i ;i i o;;F;i ;i o;;F;i ;i i@ o;;F;iG ;iH o;;F;iK ;iL i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;iA ;iD o;;F;i ;i i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i? ;i@ o;;F;iF ;iH o;;F;iJ ;iL o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i>;i?io;;F;i+;i,i1i8o;;F;i;;i<o;;F;iV;iWo;;F;ib;ido;;F;ig;imo;;F;i;io;;F;i;iio;;F;i;iio;;F;i;io;;F;i;io;;F;i#;i&o;;F;i);i+o;;F;i0;i1o;;F;i3;i8o;;F;i;io;;F;i;io;;F;i;iiUiWiao;;F;ic;ido;;F;im;irii5i;o;;F;i=;iAo;;F;iC;iDiio;;F;i;iio;;F;i$;i+o;;F;i4;i5iio;;F;i#;i$i'o;;F;i;io;;F;i;ièo;;F;iR;iSio;;F;i;io;;F;i;io;;F;i;io;;F;i/;i0o;;F;i3;i4iMi{o;;F;i;io;;F;i;io;;F;i;iiio;;F;i;io;;F;i;iifim:l[o;;F;i;i_o;;F;i`;i|:v[o;;F;i`;io;;F;i;i:t[o;;F;i;io;;F;i;i:lv[iii8iTipiiiĬiiii4iPiliiiiܭiii0iLihiiiiخiii,iHidiiiiԯii i(iDi`i|iiiаiii$i@i\ixiii̱iii ii>i?i?i@i@iAiAiBiBiCiCiDiDiEiEiFiFiGiGiHiHiIiIiJiJiKiKiLiLiMiMiNiNiOiOiPiPiQiQiRiRiSiSiTiTiUiUiViViWiWiXiXiYiYiZiZi[i[i\i\i]i]i^i^i_i_i`i`iaiaibibicicididieieififigigihihiiiiijijikikililimimininioioipipiqiqiririsisititiuiuiviviwiwixixiyiyizizi{i{i|i|i}i}i~i~iii{i{i|i|i}i}i~i~iiii ii iiii ii& ii ii! iiii0 ii`ii9 iiRii}ii ii ii ii ii" ii ii iiii"!iiaii: iiSii~iixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiactivesupport-3.2.16/lib/active_support/values/time_zone.rb0000644000175000017500000004304512247654667023522 0ustar ondrejondrejrequire 'active_support/core_ext/object/blank' require 'active_support/core_ext/object/try' # The TimeZone class serves as a wrapper around TZInfo::Timezone instances. It allows us to do the following: # # * Limit the set of zones provided by TZInfo to a meaningful subset of 142 zones. # * Retrieve and display zones with a friendlier name (e.g., "Eastern Time (US & Canada)" instead of "America/New_York"). # * Lazily load TZInfo::Timezone instances only when they're needed. # * Create ActiveSupport::TimeWithZone instances via TimeZone's +local+, +parse+, +at+ and +now+ methods. # # If you set config.time_zone in the Rails Application, you can access this TimeZone object via Time.zone: # # # application.rb: # class Application < Rails::Application # config.time_zone = "Eastern Time (US & Canada)" # end # # Time.zone # => # # Time.zone.name # => "Eastern Time (US & Canada)" # Time.zone.now # => Sun, 18 May 2008 14:30:44 EDT -04:00 # # The version of TZInfo bundled with Active Support only includes the definitions necessary to support the zones # defined by the TimeZone class. If you need to use zones that aren't defined by TimeZone, you'll need to install the TZInfo gem # (if a recent version of the gem is installed locally, this will be used instead of the bundled version.) module ActiveSupport class TimeZone # Keys are Rails TimeZone names, values are TZInfo identifiers MAPPING = { "International Date Line West" => "Pacific/Midway", "Midway Island" => "Pacific/Midway", "American Samoa" => "Pacific/Pago_Pago", "Hawaii" => "Pacific/Honolulu", "Alaska" => "America/Juneau", "Pacific Time (US & Canada)" => "America/Los_Angeles", "Tijuana" => "America/Tijuana", "Mountain Time (US & Canada)" => "America/Denver", "Arizona" => "America/Phoenix", "Chihuahua" => "America/Chihuahua", "Mazatlan" => "America/Mazatlan", "Central Time (US & Canada)" => "America/Chicago", "Saskatchewan" => "America/Regina", "Guadalajara" => "America/Mexico_City", "Mexico City" => "America/Mexico_City", "Monterrey" => "America/Monterrey", "Central America" => "America/Guatemala", "Eastern Time (US & Canada)" => "America/New_York", "Indiana (East)" => "America/Indiana/Indianapolis", "Bogota" => "America/Bogota", "Lima" => "America/Lima", "Quito" => "America/Lima", "Atlantic Time (Canada)" => "America/Halifax", "Caracas" => "America/Caracas", "La Paz" => "America/La_Paz", "Santiago" => "America/Santiago", "Newfoundland" => "America/St_Johns", "Brasilia" => "America/Sao_Paulo", "Buenos Aires" => "America/Argentina/Buenos_Aires", "Georgetown" => "America/Guyana", "Greenland" => "America/Godthab", "Mid-Atlantic" => "Atlantic/South_Georgia", "Azores" => "Atlantic/Azores", "Cape Verde Is." => "Atlantic/Cape_Verde", "Dublin" => "Europe/Dublin", "Edinburgh" => "Europe/London", "Lisbon" => "Europe/Lisbon", "London" => "Europe/London", "Casablanca" => "Africa/Casablanca", "Monrovia" => "Africa/Monrovia", "UTC" => "Etc/UTC", "Belgrade" => "Europe/Belgrade", "Bratislava" => "Europe/Bratislava", "Budapest" => "Europe/Budapest", "Ljubljana" => "Europe/Ljubljana", "Prague" => "Europe/Prague", "Sarajevo" => "Europe/Sarajevo", "Skopje" => "Europe/Skopje", "Warsaw" => "Europe/Warsaw", "Zagreb" => "Europe/Zagreb", "Brussels" => "Europe/Brussels", "Copenhagen" => "Europe/Copenhagen", "Madrid" => "Europe/Madrid", "Paris" => "Europe/Paris", "Amsterdam" => "Europe/Amsterdam", "Berlin" => "Europe/Berlin", "Bern" => "Europe/Berlin", "Rome" => "Europe/Rome", "Stockholm" => "Europe/Stockholm", "Vienna" => "Europe/Vienna", "West Central Africa" => "Africa/Algiers", "Bucharest" => "Europe/Bucharest", "Cairo" => "Africa/Cairo", "Helsinki" => "Europe/Helsinki", "Kyiv" => "Europe/Kiev", "Riga" => "Europe/Riga", "Sofia" => "Europe/Sofia", "Tallinn" => "Europe/Tallinn", "Vilnius" => "Europe/Vilnius", "Athens" => "Europe/Athens", "Istanbul" => "Europe/Istanbul", "Minsk" => "Europe/Minsk", "Jerusalem" => "Asia/Jerusalem", "Harare" => "Africa/Harare", "Pretoria" => "Africa/Johannesburg", "Moscow" => "Europe/Moscow", "St. Petersburg" => "Europe/Moscow", "Volgograd" => "Europe/Moscow", "Kuwait" => "Asia/Kuwait", "Riyadh" => "Asia/Riyadh", "Nairobi" => "Africa/Nairobi", "Baghdad" => "Asia/Baghdad", "Tehran" => "Asia/Tehran", "Abu Dhabi" => "Asia/Muscat", "Muscat" => "Asia/Muscat", "Baku" => "Asia/Baku", "Tbilisi" => "Asia/Tbilisi", "Yerevan" => "Asia/Yerevan", "Kabul" => "Asia/Kabul", "Ekaterinburg" => "Asia/Yekaterinburg", "Islamabad" => "Asia/Karachi", "Karachi" => "Asia/Karachi", "Tashkent" => "Asia/Tashkent", "Chennai" => "Asia/Kolkata", "Kolkata" => "Asia/Kolkata", "Mumbai" => "Asia/Kolkata", "New Delhi" => "Asia/Kolkata", "Kathmandu" => "Asia/Kathmandu", "Astana" => "Asia/Dhaka", "Dhaka" => "Asia/Dhaka", "Sri Jayawardenepura" => "Asia/Colombo", "Almaty" => "Asia/Almaty", "Novosibirsk" => "Asia/Novosibirsk", "Rangoon" => "Asia/Rangoon", "Bangkok" => "Asia/Bangkok", "Hanoi" => "Asia/Bangkok", "Jakarta" => "Asia/Jakarta", "Krasnoyarsk" => "Asia/Krasnoyarsk", "Beijing" => "Asia/Shanghai", "Chongqing" => "Asia/Chongqing", "Hong Kong" => "Asia/Hong_Kong", "Urumqi" => "Asia/Urumqi", "Kuala Lumpur" => "Asia/Kuala_Lumpur", "Singapore" => "Asia/Singapore", "Taipei" => "Asia/Taipei", "Perth" => "Australia/Perth", "Irkutsk" => "Asia/Irkutsk", "Ulaan Bataar" => "Asia/Ulaanbaatar", "Seoul" => "Asia/Seoul", "Osaka" => "Asia/Tokyo", "Sapporo" => "Asia/Tokyo", "Tokyo" => "Asia/Tokyo", "Yakutsk" => "Asia/Yakutsk", "Darwin" => "Australia/Darwin", "Adelaide" => "Australia/Adelaide", "Canberra" => "Australia/Melbourne", "Melbourne" => "Australia/Melbourne", "Sydney" => "Australia/Sydney", "Brisbane" => "Australia/Brisbane", "Hobart" => "Australia/Hobart", "Vladivostok" => "Asia/Vladivostok", "Guam" => "Pacific/Guam", "Port Moresby" => "Pacific/Port_Moresby", "Magadan" => "Asia/Magadan", "Solomon Is." => "Asia/Magadan", "New Caledonia" => "Pacific/Noumea", "Fiji" => "Pacific/Fiji", "Kamchatka" => "Asia/Kamchatka", "Marshall Is." => "Pacific/Majuro", "Auckland" => "Pacific/Auckland", "Wellington" => "Pacific/Auckland", "Nuku'alofa" => "Pacific/Tongatapu", "Tokelau Is." => "Pacific/Fakaofo", "Samoa" => "Pacific/Apia" }.each { |name, zone| name.freeze; zone.freeze } MAPPING.freeze UTC_OFFSET_WITH_COLON = '%s%02d:%02d' UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '') # Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset) # and turns this into an +HH:MM formatted string. Example: # # TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00" def self.seconds_to_utc_offset(seconds, colon = true) format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON sign = (seconds < 0 ? '-' : '+') hours = seconds.abs / 3600 minutes = (seconds.abs % 3600) / 60 format % [sign, hours, minutes] end include Comparable attr_reader :name attr_reader :tzinfo # Create a new TimeZone object with the given name and offset. The # offset is the number of seconds that this time zone is offset from UTC # (GMT). Seconds were chosen as the offset unit because that is the unit that # Ruby uses to represent time zone offsets (see Time#utc_offset). def initialize(name, utc_offset = nil, tzinfo = nil) self.class.send(:require_tzinfo) @name = name @utc_offset = utc_offset @tzinfo = tzinfo || TimeZone.find_tzinfo(name) @current_period = nil end def utc_offset if @utc_offset @utc_offset else @current_period ||= tzinfo.try(:current_period) @current_period.try(:utc_offset) end end # Returns the offset of this time zone as a formatted string, of the # format "+HH:MM". def formatted_offset(colon=true, alternate_utc_string = nil) utc_offset == 0 && alternate_utc_string || self.class.seconds_to_utc_offset(utc_offset, colon) end # Compare this time zone to the parameter. The two are compared first on # their offsets, and then by name. def <=>(zone) result = (utc_offset <=> zone.utc_offset) result = (name <=> zone.name) if result == 0 result end # Compare #name and TZInfo identifier to a supplied regexp, returning true # if a match is found. def =~(re) return true if name =~ re || MAPPING[name] =~ re end # Returns a textual representation of this time zone. def to_s "(GMT#{formatted_offset}) #{name}" end # Method for creating new ActiveSupport::TimeWithZone instance in time zone of +self+ from given values. Example: # # Time.zone = "Hawaii" # => "Hawaii" # Time.zone.local(2007, 2, 1, 15, 30, 45) # => Thu, 01 Feb 2007 15:30:45 HST -10:00 def local(*args) time = Time.utc_time(*args) ActiveSupport::TimeWithZone.new(nil, self, time) end # Method for creating new ActiveSupport::TimeWithZone instance in time zone of +self+ from number of seconds since the Unix epoch. Example: # # Time.zone = "Hawaii" # => "Hawaii" # Time.utc(2000).to_f # => 946684800.0 # Time.zone.at(946684800.0) # => Fri, 31 Dec 1999 14:00:00 HST -10:00 def at(secs) utc = Time.at(secs).utc rescue DateTime.civil(1970).since(secs) utc.in_time_zone(self) end # Method for creating new ActiveSupport::TimeWithZone instance in time zone of +self+ from parsed string. Example: # # Time.zone = "Hawaii" # => "Hawaii" # Time.zone.parse('1999-12-31 14:00:00') # => Fri, 31 Dec 1999 14:00:00 HST -10:00 # # If upper components are missing from the string, they are supplied from TimeZone#now: # # Time.zone.now # => Fri, 31 Dec 1999 14:00:00 HST -10:00 # Time.zone.parse('22:30:00') # => Fri, 31 Dec 1999 22:30:00 HST -10:00 def parse(str, now=now) parts = Date._parse(str, false) return if parts.empty? time = Time.utc( parts.fetch(:year, now.year), parts.fetch(:mon, now.month), parts.fetch(:mday, now.day), parts.fetch(:hour, 0), parts.fetch(:min, 0), parts.fetch(:sec, 0), parts.fetch(:sec_fraction, 0) * 1000000 ) if parts[:offset] TimeWithZone.new(time - parts[:offset], self) else TimeWithZone.new(nil, self, time) end end # Returns an ActiveSupport::TimeWithZone instance representing the current time # in the time zone represented by +self+. Example: # # Time.zone = 'Hawaii' # => "Hawaii" # Time.zone.now # => Wed, 23 Jan 2008 20:24:27 HST -10:00 def now Time.now.utc.in_time_zone(self) end # Return the current date in this time zone. def today tzinfo.now.to_date end # Adjust the given time to the simultaneous time in the time zone represented by +self+. Returns a # Time.utc() instance -- if you want an ActiveSupport::TimeWithZone instance, use Time#in_time_zone() instead. def utc_to_local(time) tzinfo.utc_to_local(time) end # Adjust the given time to the simultaneous time in UTC. Returns a Time.utc() instance. def local_to_utc(time, dst=true) tzinfo.local_to_utc(time, dst) end # Available so that TimeZone instances respond like TZInfo::Timezone instances def period_for_utc(time) tzinfo.period_for_utc(time) end # Available so that TimeZone instances respond like TZInfo::Timezone instances def period_for_local(time, dst=true) tzinfo.period_for_local(time, dst) end def self.find_tzinfo(name) TZInfo::TimezoneProxy.new(MAPPING[name] || name) end class << self alias_method :create, :new # Return a TimeZone instance with the given name, or +nil+ if no # such TimeZone instance exists. (This exists to support the use of # this class with the +composed_of+ macro.) def new(name) self[name] end # Return an array of all TimeZone objects. There are multiple # TimeZone objects per time zone, in many cases, to make it easier # for users to find their own time zone. def all @zones ||= zones_map.values.sort end def zones_map @zones_map ||= begin new_zones_names = MAPPING.keys - lazy_zones_map.keys new_zones = Hash[new_zones_names.map { |place| [place, create(place)] }] lazy_zones_map.merge(new_zones) end end # Locate a specific time zone object. If the argument is a string, it # is interpreted to mean the name of the timezone to locate. If it is a # numeric value it is either the hour offset, or the second offset, of the # timezone to find. (The first one with that offset will be returned.) # Returns +nil+ if no such time zone is known to the system. def [](arg) case arg when String begin lazy_zones_map[arg] ||= lookup(arg).tap { |tz| tz.utc_offset } rescue TZInfo::InvalidTimezoneIdentifier nil end when Numeric, ActiveSupport::Duration arg *= 3600 if arg.abs <= 13 all.find { |z| z.utc_offset == arg.to_i } else raise ArgumentError, "invalid argument to TimeZone[]: #{arg.inspect}" end end # A convenience method for returning a collection of TimeZone objects # for time zones in the USA. def us_zones @us_zones ||= all.find_all { |z| z.name =~ /US|Arizona|Indiana|Hawaii|Alaska/ } end protected def require_tzinfo require 'tzinfo' unless defined?(::TZInfo) rescue LoadError $stderr.puts "You don't have tzinfo installed in your application. Please add it to your Gemfile and run bundle install" raise end private def lookup(name) (tzinfo = find_tzinfo(name)) && create(tzinfo.name.freeze) end def lazy_zones_map require_tzinfo @lazy_zones_map ||= Hash.new do |hash, place| hash[place] = create(place) if MAPPING.has_key?(place) end end end end end activesupport-3.2.16/lib/active_support/version.rb0000644000175000017500000000025612247654667021714 0ustar ondrejondrejmodule ActiveSupport module VERSION #:nodoc: MAJOR = 3 MINOR = 2 TINY = 16 PRE = nil STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.') end end activesupport-3.2.16/lib/active_support/deprecation/0000755000175000017500000000000012247654667022174 5ustar ondrejondrejactivesupport-3.2.16/lib/active_support/deprecation/proxy_wrappers.rb0000644000175000017500000000423512247654667025631 0ustar ondrejondrejrequire 'active_support/inflector/methods' module ActiveSupport module Deprecation class DeprecationProxy #:nodoc: def self.new(*args, &block) object = args.first return object unless object super end instance_methods.each { |m| undef_method m unless m =~ /^__|^object_id$/ } # Don't give a deprecation warning on inspect since test/unit and error # logs rely on it for diagnostics. def inspect target.inspect end private def method_missing(called, *args, &block) warn caller, called, args target.__send__(called, *args, &block) end end class DeprecatedObjectProxy < DeprecationProxy #:nodoc: def initialize(object, message) @object = object @message = message end private def target @object end def warn(callstack, called, args) ActiveSupport::Deprecation.warn(@message, callstack) end end # Stand-in for @request, @attributes, @params, etc. # which emits deprecation warnings on any method call (except +inspect+). class DeprecatedInstanceVariableProxy < DeprecationProxy #:nodoc: def initialize(instance, method, var = "@#{method}") @instance, @method, @var = instance, method, var end private def target @instance.__send__(@method) end def warn(callstack, called, args) ActiveSupport::Deprecation.warn("#{@var} is deprecated! Call #{@method}.#{called} instead of #{@var}.#{called}. Args: #{args.inspect}", callstack) end end class DeprecatedConstantProxy < DeprecationProxy #:nodoc:all def initialize(old_const, new_const) @old_const = old_const @new_const = new_const end def class target.class end private def target ActiveSupport::Inflector.constantize(@new_const.to_s) end def warn(callstack, called, args) ActiveSupport::Deprecation.warn("#{@old_const} is deprecated! Use #{@new_const} instead.", callstack) end end end end activesupport-3.2.16/lib/active_support/deprecation/method_wrappers.rb0000644000175000017500000000206012247654667025722 0ustar ondrejondrejrequire 'active_support/core_ext/module/deprecation' require 'active_support/core_ext/module/aliasing' require 'active_support/core_ext/array/extract_options' module ActiveSupport class << Deprecation # Declare that a method has been deprecated. def deprecate_methods(target_module, *method_names) options = method_names.extract_options! method_names += options.keys method_names.each do |method_name| target_module.alias_method_chain(method_name, :deprecation) do |target, punctuation| target_module.module_eval(<<-end_eval, __FILE__, __LINE__ + 1) def #{target}_with_deprecation#{punctuation}(*args, &block) ::ActiveSupport::Deprecation.warn( ::ActiveSupport::Deprecation.deprecated_method_warning( :#{method_name}, #{options[method_name].inspect}), caller ) send(:#{target}_without_deprecation#{punctuation}, *args, &block) end end_eval end end end end end activesupport-3.2.16/lib/active_support/deprecation/behaviors.rb0000644000175000017500000000273512247654667024512 0ustar ondrejondrejrequire "active_support/notifications" require "active_support/core_ext/array/wrap" module ActiveSupport module Deprecation class << self # Whether to print a backtrace along with the warning. attr_accessor :debug # Returns the set behavior or if one isn't set, defaults to +:stderr+ def behavior @behavior ||= [DEFAULT_BEHAVIORS[:stderr]] end # Sets the behavior to the specified value. Can be a single value or an array. # # Examples # # ActiveSupport::Deprecation.behavior = :stderr # ActiveSupport::Deprecation.behavior = [:stderr, :log] def behavior=(behavior) @behavior = Array.wrap(behavior).map { |b| DEFAULT_BEHAVIORS[b] || b } end end # Default warning behaviors per Rails.env. DEFAULT_BEHAVIORS = { :stderr => Proc.new { |message, callstack| $stderr.puts(message) $stderr.puts callstack.join("\n ") if debug }, :log => Proc.new { |message, callstack| logger = if defined?(Rails) && Rails.logger Rails.logger else require 'logger' Logger.new($stderr) end logger.warn message logger.debug callstack.join("\n ") if debug }, :notify => Proc.new { |message, callstack| ActiveSupport::Notifications.instrument("deprecation.rails", :message => message, :callstack => callstack) } } end end activesupport-3.2.16/lib/active_support/deprecation/reporting.rb0000644000175000017500000000427012247654667024535 0ustar ondrejondrejmodule ActiveSupport module Deprecation class << self attr_accessor :silenced # Outputs a deprecation warning to the output configured by ActiveSupport::Deprecation.behavior # # ActiveSupport::Deprecation.warn("something broke!") # # => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)" def warn(message = nil, callstack = caller) return if silenced deprecation_message(callstack, message).tap do |m| behavior.each { |b| b.call(m, callstack) } end end # Silence deprecation warnings within the block. def silence old_silenced, @silenced = @silenced, true yield ensure @silenced = old_silenced end def deprecated_method_warning(method_name, message = nil) warning = "#{method_name} is deprecated and will be removed from Rails #{deprecation_horizon}" case message when Symbol then "#{warning} (use #{message} instead)" when String then "#{warning} (#{message})" else warning end end private def deprecation_message(callstack, message = nil) message ||= "You are using deprecated behavior which will be removed from the next major or minor release." message += '.' unless message =~ /\.$/ "DEPRECATION WARNING: #{message} #{deprecation_caller_message(callstack)}" end def deprecation_caller_message(callstack) file, line, method = extract_callstack(callstack) if file if line && method "(called from #{method} at #{file}:#{line})" else "(called from #{file}:#{line})" end end end def extract_callstack(callstack) rails_gem_root = File.expand_path("../../../../..", __FILE__) + "/" offending_line = callstack.find { |line| !line.start_with?(rails_gem_root) } || callstack.first if offending_line if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/) md.captures else offending_line end end end end end end activesupport-3.2.16/lib/active_support/message_encryptor.rb0000644000175000017500000000617612247654667023767 0ustar ondrejondrejrequire 'openssl' require 'active_support/base64' module ActiveSupport # MessageEncryptor is a simple way to encrypt values which get stored somewhere # you don't trust. # # The cipher text and initialization vector are base64 encoded and returned to you. # # This can be used in situations similar to the MessageVerifier, but where you don't # want users to be able to determine the value of the payload. class MessageEncryptor module NullSerializer #:nodoc: def self.load(value) value end def self.dump(value) value end end class InvalidMessage < StandardError; end OpenSSLCipherError = OpenSSL::Cipher.const_defined?(:CipherError) ? OpenSSL::Cipher::CipherError : OpenSSL::CipherError def initialize(secret, options = {}) unless options.is_a?(Hash) ActiveSupport::Deprecation.warn "The second parameter should be an options hash. Use :cipher => 'algorithm' to specify the cipher algorithm." options = { :cipher => options } end @secret = secret @cipher = options[:cipher] || 'aes-256-cbc' @verifier = MessageVerifier.new(@secret, :serializer => NullSerializer) @serializer = options[:serializer] || Marshal end def encrypt(value) ActiveSupport::Deprecation.warn "MessageEncryptor#encrypt is deprecated as it is not safe without a signature. " \ "Please use MessageEncryptor#encrypt_and_sign instead." _encrypt(value) end def decrypt(value) ActiveSupport::Deprecation.warn "MessageEncryptor#decrypt is deprecated as it is not safe without a signature. " \ "Please use MessageEncryptor#decrypt_and_verify instead." _decrypt(value) end # Encrypt and sign a message. We need to sign the message in order to avoid padding attacks. # Reference: http://www.limited-entropy.com/padding-oracle-attacks def encrypt_and_sign(value) verifier.generate(_encrypt(value)) end # Decrypt and verify a message. We need to verify the message in order to avoid padding attacks. # Reference: http://www.limited-entropy.com/padding-oracle-attacks def decrypt_and_verify(value) _decrypt(verifier.verify(value)) end private def _encrypt(value) cipher = new_cipher # Rely on OpenSSL for the initialization vector iv = cipher.random_iv cipher.encrypt cipher.key = @secret cipher.iv = iv encrypted_data = cipher.update(@serializer.dump(value)) encrypted_data << cipher.final [encrypted_data, iv].map {|v| ::Base64.strict_encode64(v)}.join("--") end def _decrypt(encrypted_message) cipher = new_cipher encrypted_data, iv = encrypted_message.split("--").map {|v| ::Base64.decode64(v)} cipher.decrypt cipher.key = @secret cipher.iv = iv decrypted_data = cipher.update(encrypted_data) decrypted_data << cipher.final @serializer.load(decrypted_data) rescue OpenSSLCipherError, TypeError raise InvalidMessage end def new_cipher OpenSSL::Cipher::Cipher.new(@cipher) end def verifier @verifier end end end activesupport-3.2.16/metadata.yml0000644000175000017500000002625412247654667016376 0ustar ondrejondrej--- !ruby/object:Gem::Specification name: activesupport version: !ruby/object:Gem::Version version: 3.2.16 platform: ruby authors: - David Heinemeier Hansson autorequire: bindir: bin cert_chain: [] date: 2013-12-03 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: i18n requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '0.6' - - ">=" - !ruby/object:Gem::Version version: 0.6.4 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '0.6' - - ">=" - !ruby/object:Gem::Version version: 0.6.4 - !ruby/object:Gem::Dependency name: multi_json requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.0' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '1.0' description: A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. Rich support for multibyte strings, internationalization, time zones, and testing. email: david@loudthinking.com executables: [] extensions: [] extra_rdoc_files: [] files: - CHANGELOG.md - MIT-LICENSE - README.rdoc - lib/active_support/all.rb - lib/active_support/backtrace_cleaner.rb - lib/active_support/base64.rb - lib/active_support/basic_object.rb - lib/active_support/benchmarkable.rb - lib/active_support/buffered_logger.rb - lib/active_support/builder.rb - lib/active_support/cache/file_store.rb - lib/active_support/cache/mem_cache_store.rb - lib/active_support/cache/memory_store.rb - lib/active_support/cache/null_store.rb - lib/active_support/cache/strategy/local_cache.rb - lib/active_support/cache.rb - lib/active_support/callbacks.rb - lib/active_support/concern.rb - lib/active_support/configurable.rb - lib/active_support/core_ext/array/access.rb - lib/active_support/core_ext/array/conversions.rb - lib/active_support/core_ext/array/extract_options.rb - lib/active_support/core_ext/array/grouping.rb - lib/active_support/core_ext/array/prepend_and_append.rb - lib/active_support/core_ext/array/random_access.rb - lib/active_support/core_ext/array/uniq_by.rb - lib/active_support/core_ext/array/wrap.rb - lib/active_support/core_ext/array.rb - lib/active_support/core_ext/benchmark.rb - lib/active_support/core_ext/big_decimal/conversions.rb - lib/active_support/core_ext/big_decimal.rb - lib/active_support/core_ext/class/attribute.rb - lib/active_support/core_ext/class/attribute_accessors.rb - lib/active_support/core_ext/class/delegating_attributes.rb - lib/active_support/core_ext/class/subclasses.rb - lib/active_support/core_ext/class.rb - lib/active_support/core_ext/date/acts_like.rb - lib/active_support/core_ext/date/calculations.rb - lib/active_support/core_ext/date/conversions.rb - lib/active_support/core_ext/date/freeze.rb - lib/active_support/core_ext/date/zones.rb - lib/active_support/core_ext/date_time/acts_like.rb - lib/active_support/core_ext/date_time/calculations.rb - lib/active_support/core_ext/date_time/conversions.rb - lib/active_support/core_ext/date_time/zones.rb - lib/active_support/core_ext/enumerable.rb - lib/active_support/core_ext/exception.rb - lib/active_support/core_ext/file/atomic.rb - lib/active_support/core_ext/file/path.rb - lib/active_support/core_ext/file.rb - lib/active_support/core_ext/float/rounding.rb - lib/active_support/core_ext/float.rb - lib/active_support/core_ext/hash/conversions.rb - lib/active_support/core_ext/hash/deep_dup.rb - lib/active_support/core_ext/hash/deep_merge.rb - lib/active_support/core_ext/hash/diff.rb - lib/active_support/core_ext/hash/except.rb - lib/active_support/core_ext/hash/indifferent_access.rb - lib/active_support/core_ext/hash/keys.rb - lib/active_support/core_ext/hash/reverse_merge.rb - lib/active_support/core_ext/hash/slice.rb - lib/active_support/core_ext/hash.rb - lib/active_support/core_ext/integer/inflections.rb - lib/active_support/core_ext/integer/multiple.rb - lib/active_support/core_ext/integer/time.rb - lib/active_support/core_ext/integer.rb - lib/active_support/core_ext/io.rb - lib/active_support/core_ext/kernel/agnostics.rb - lib/active_support/core_ext/kernel/debugger.rb - lib/active_support/core_ext/kernel/reporting.rb - lib/active_support/core_ext/kernel/singleton_class.rb - lib/active_support/core_ext/kernel.rb - lib/active_support/core_ext/load_error.rb - lib/active_support/core_ext/logger.rb - lib/active_support/core_ext/module/aliasing.rb - lib/active_support/core_ext/module/anonymous.rb - lib/active_support/core_ext/module/attr_internal.rb - lib/active_support/core_ext/module/attribute_accessors.rb - lib/active_support/core_ext/module/delegation.rb - lib/active_support/core_ext/module/deprecation.rb - lib/active_support/core_ext/module/introspection.rb - lib/active_support/core_ext/module/method_names.rb - lib/active_support/core_ext/module/qualified_const.rb - lib/active_support/core_ext/module/reachable.rb - lib/active_support/core_ext/module/remove_method.rb - lib/active_support/core_ext/module/synchronization.rb - lib/active_support/core_ext/module.rb - lib/active_support/core_ext/name_error.rb - lib/active_support/core_ext/numeric/bytes.rb - lib/active_support/core_ext/numeric/time.rb - lib/active_support/core_ext/numeric.rb - lib/active_support/core_ext/object/acts_like.rb - lib/active_support/core_ext/object/blank.rb - lib/active_support/core_ext/object/conversions.rb - lib/active_support/core_ext/object/duplicable.rb - lib/active_support/core_ext/object/inclusion.rb - lib/active_support/core_ext/object/instance_variables.rb - lib/active_support/core_ext/object/to_json.rb - lib/active_support/core_ext/object/to_param.rb - lib/active_support/core_ext/object/to_query.rb - lib/active_support/core_ext/object/try.rb - lib/active_support/core_ext/object/with_options.rb - lib/active_support/core_ext/object.rb - lib/active_support/core_ext/proc.rb - lib/active_support/core_ext/process/daemon.rb - lib/active_support/core_ext/process.rb - lib/active_support/core_ext/range/blockless_step.rb - lib/active_support/core_ext/range/conversions.rb - lib/active_support/core_ext/range/cover.rb - lib/active_support/core_ext/range/include_range.rb - lib/active_support/core_ext/range/overlaps.rb - lib/active_support/core_ext/range.rb - lib/active_support/core_ext/regexp.rb - lib/active_support/core_ext/rexml.rb - lib/active_support/core_ext/string/access.rb - lib/active_support/core_ext/string/behavior.rb - lib/active_support/core_ext/string/conversions.rb - lib/active_support/core_ext/string/encoding.rb - lib/active_support/core_ext/string/exclude.rb - lib/active_support/core_ext/string/filters.rb - lib/active_support/core_ext/string/inflections.rb - lib/active_support/core_ext/string/inquiry.rb - lib/active_support/core_ext/string/interpolation.rb - lib/active_support/core_ext/string/multibyte.rb - lib/active_support/core_ext/string/output_safety.rb - lib/active_support/core_ext/string/starts_ends_with.rb - lib/active_support/core_ext/string/strip.rb - lib/active_support/core_ext/string/xchar.rb - lib/active_support/core_ext/string.rb - lib/active_support/core_ext/time/acts_like.rb - lib/active_support/core_ext/time/calculations.rb - lib/active_support/core_ext/time/conversions.rb - lib/active_support/core_ext/time/marshal.rb - lib/active_support/core_ext/time/publicize_conversion_methods.rb - lib/active_support/core_ext/time/zones.rb - lib/active_support/core_ext/uri.rb - lib/active_support/core_ext.rb - lib/active_support/dependencies/autoload.rb - lib/active_support/dependencies.rb - lib/active_support/deprecation/behaviors.rb - lib/active_support/deprecation/method_wrappers.rb - lib/active_support/deprecation/proxy_wrappers.rb - lib/active_support/deprecation/reporting.rb - lib/active_support/deprecation.rb - lib/active_support/descendants_tracker.rb - lib/active_support/duration.rb - lib/active_support/file_update_checker.rb - lib/active_support/file_watcher.rb - lib/active_support/gzip.rb - lib/active_support/hash_with_indifferent_access.rb - lib/active_support/i18n.rb - lib/active_support/i18n_railtie.rb - lib/active_support/inflections.rb - lib/active_support/inflector/inflections.rb - lib/active_support/inflector/methods.rb - lib/active_support/inflector/transliterate.rb - lib/active_support/inflector.rb - lib/active_support/json/decoding.rb - lib/active_support/json/encoding.rb - lib/active_support/json/variable.rb - lib/active_support/json.rb - lib/active_support/lazy_load_hooks.rb - lib/active_support/locale/en.yml - lib/active_support/log_subscriber/test_helper.rb - lib/active_support/log_subscriber.rb - lib/active_support/memoizable.rb - lib/active_support/message_encryptor.rb - lib/active_support/message_verifier.rb - lib/active_support/multibyte/chars.rb - lib/active_support/multibyte/exceptions.rb - lib/active_support/multibyte/unicode.rb - lib/active_support/multibyte/utils.rb - lib/active_support/multibyte.rb - lib/active_support/notifications/fanout.rb - lib/active_support/notifications/instrumenter.rb - lib/active_support/notifications.rb - lib/active_support/option_merger.rb - lib/active_support/ordered_hash.rb - lib/active_support/ordered_options.rb - lib/active_support/railtie.rb - lib/active_support/rescuable.rb - lib/active_support/ruby/shim.rb - lib/active_support/string_inquirer.rb - lib/active_support/tagged_logging.rb - lib/active_support/test_case.rb - lib/active_support/testing/assertions.rb - lib/active_support/testing/declarative.rb - lib/active_support/testing/deprecation.rb - lib/active_support/testing/isolation.rb - lib/active_support/testing/mochaing.rb - lib/active_support/testing/pending.rb - lib/active_support/testing/performance/jruby.rb - lib/active_support/testing/performance/rubinius.rb - lib/active_support/testing/performance/ruby/mri.rb - lib/active_support/testing/performance/ruby/yarv.rb - lib/active_support/testing/performance/ruby.rb - lib/active_support/testing/performance.rb - lib/active_support/testing/setup_and_teardown.rb - lib/active_support/time/autoload.rb - lib/active_support/time.rb - lib/active_support/time_with_zone.rb - lib/active_support/values/time_zone.rb - lib/active_support/values/unicode_tables.dat - lib/active_support/version.rb - lib/active_support/whiny_nil.rb - lib/active_support/xml_mini/jdom.rb - lib/active_support/xml_mini/libxml.rb - lib/active_support/xml_mini/libxmlsax.rb - lib/active_support/xml_mini/nokogiri.rb - lib/active_support/xml_mini/nokogirisax.rb - lib/active_support/xml_mini/rexml.rb - lib/active_support/xml_mini.rb - lib/active_support.rb homepage: http://www.rubyonrails.org licenses: - MIT metadata: {} post_install_message: rdoc_options: - "--encoding" - UTF-8 require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 1.8.7 required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.0.2 signing_key: specification_version: 4 summary: A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. test_files: [] activesupport-3.2.16/MIT-LICENSE0000644000175000017500000000206012247654667015514 0ustar ondrejondrejCopyright (c) 2005-2011 David Heinemeier Hansson 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.