From: Jean Privat Date: Thu, 18 Jun 2015 03:09:33 +0000 (-0400) Subject: Merge: Do not compile dead modules X-Git-Tag: v0.7.6~27 X-Git-Url: http://nitlanguage.org?hp=3cdbd1959e5d0eaf592ee668d509f8513b89f62d Merge: Do not compile dead modules Separate compilation implies that a module is compiled independently of its clients. This point ensure us that the recompilation of programs is fast since only modified modules need to be recompiled and that modules used by multiples clients need to be compiled only once. Unfortunately, currently an already compiled module need to still to be fully compiled in C on each compilation (avoiding doing it is a very complex matter). Fortunately, most of the compilation time is spend by the C compiler (especially when #1498) and this time is safely decimated by ccache. However, a thing that some modules are imported by programs (thus provide declarations, introductions, importations) but are only made of method definitions that will never be executed by the program. Such a module is called a *dead* module and our static analysis RTA can approximate them. So, now, the generation of C code for such a module is skipped (and its associated C compilation, obviously) This will benefit mostly small programs that imports standard and other libraries but only use a small portion of them. Eg: programs in `tests/` or in `examples/rossetacode`. For numbers, lets try with `time ./tests.sh ../examples/rosettacode/*.nit` to test the 32 (currently) programs. * before: 30s * after: 21s I hope that CI servers will like what we, human masters, do for them! Pull-Request: #1509 Reviewed-by: Alexis Laferrière Reviewed-by: Romain Chanoir --- diff --git a/contrib/nitiwiki/src/wiki_base.nit b/contrib/nitiwiki/src/wiki_base.nit index 09b499b..9cd3eb0 100644 --- a/contrib/nitiwiki/src/wiki_base.nit +++ b/contrib/nitiwiki/src/wiki_base.nit @@ -194,9 +194,6 @@ class Nitiwiki end var file = expand_path(config.root_dir, config.templates_dir, name) var tpl = new TemplateString.from_file(file) - if tpl.has_macro("ROOT_URL") then - tpl.replace("ROOT_URL", config.root_url) - end if tpl.has_macro("TITLE") then tpl.replace("TITLE", config.wiki_name) end @@ -553,8 +550,10 @@ class WikiArticle redef var src_full_path: nullable String = null redef fun src_path do + var src_full_path = self.src_full_path if src_full_path == null then return null - return src_full_path.substring_from(wiki.config.root_dir.length) + var res = wiki.config.root_dir.relpath(src_full_path) + return res end # The page markdown source content. diff --git a/contrib/nitiwiki/src/wiki_html.nit b/contrib/nitiwiki/src/wiki_html.nit index d5ccc7a..a937351 100644 --- a/contrib/nitiwiki/src/wiki_html.nit +++ b/contrib/nitiwiki/src/wiki_html.nit @@ -62,8 +62,8 @@ end redef class WikiEntry # Get a `` template link to `self` - fun tpl_link: Writable do - return "{title}" + fun tpl_link(context: WikiEntry): Writable do + return "{title}" end end @@ -113,7 +113,7 @@ redef class WikiSection end end - redef fun tpl_link do return index.tpl_link + redef fun tpl_link(context) do return index.tpl_link(context) # Render the section hierarchy as a html tree. # @@ -133,15 +133,15 @@ redef class WikiSection # # ~~~ fun tpl_tree(limit: Int): Template do - return tpl_tree_intern(limit, 1) + return tpl_tree_intern(limit, 1, self) end # Build the template tree for this section recursively. - protected fun tpl_tree_intern(limit, count: Int): Template do + protected fun tpl_tree_intern(limit, count: Int, context: WikiEntry): Template do var out = new Template var index = index out.add "
  • " - out.add tpl_link + out.add tpl_link(context) if (limit < 0 or count < limit) and (children.length > 1 or (children.length == 1)) then out.add "
      " @@ -149,10 +149,10 @@ redef class WikiSection if child == index then continue if child isa WikiArticle then out.add "
    • " - out.add child.tpl_link + out.add child.tpl_link(context) out.add "
    • " else if child isa WikiSection and not child.is_hidden then - out.add child.tpl_tree_intern(limit, count + 1) + out.add child.tpl_tree_intern(limit, count + 1, context) end end out.add "
    " @@ -182,9 +182,21 @@ redef class WikiArticle end + # Load a template and resolve page-related macros + fun load_template(template_file: String): TemplateString do + var tpl = wiki.load_template(template_file) + if tpl.has_macro("ROOT_URL") then + var root_dir = href.dirname.relpath("") + # Avoid issues if the macro is just followed by a `/` (as with url prefix) + if root_dir == "" then root_dir = "." + tpl.replace("ROOT_URL", root_dir) + end + return tpl + end + # Replace macros in the template by wiki data. private fun tpl_page: TemplateString do - var tpl = wiki.load_template(template_file) + var tpl = load_template(template_file) if tpl.has_macro("TOP_MENU") then tpl.replace("TOP_MENU", tpl_menu) end @@ -204,7 +216,7 @@ redef class WikiArticle fun tpl_header: Writable do var file = header_file if not wiki.has_template(file) then return "" - return wiki.load_template(file) + return load_template(file) end # Generate the HTML page for this article. @@ -262,7 +274,7 @@ redef class WikiArticle fun tpl_menu: Writable do var file = menu_file if not wiki.has_template(file) then return "" - var tpl = wiki.load_template(file) + var tpl = load_template(file) if tpl.has_macro("MENUS") then var items = new Template for child in wiki.root_section.children.values do @@ -273,7 +285,7 @@ redef class WikiArticle items.add " class=\"active\"" end items.add ">" - items.add child.tpl_link + items.add child.tpl_link(self) items.add "
  • " end tpl.replace("MENUS", items) @@ -285,7 +297,7 @@ redef class WikiArticle fun tpl_footer: Writable do var file = footer_file if not wiki.has_template(file) then return "" - var tpl = wiki.load_template(file) + var tpl = load_template(file) var time = new Tm.gmtime if tpl.has_macro("YEAR") then tpl.replace("YEAR", (time.year + 1900).to_s) @@ -424,7 +436,7 @@ class TplBreadcrumbs else if article.parent == entry and article.is_index then continue add "
  • " - add entry.tpl_link + add entry.tpl_link(article) add "
  • " end end diff --git a/contrib/nitiwiki/src/wiki_links.nit b/contrib/nitiwiki/src/wiki_links.nit index 43f354d..bdb27da 100644 --- a/contrib/nitiwiki/src/wiki_links.nit +++ b/contrib/nitiwiki/src/wiki_links.nit @@ -90,8 +90,21 @@ end redef class WikiEntry - # Url to `self` once generated. - fun url: String do return wiki.config.root_url.join_path(breadcrumbs.join("/")) + # Absolute url to `self` once generated. + # If you use this, the generated files will hard-code `root_url` + fun url: String do return wiki.config.root_url / href + + # Relative path to `self` from the target root_url + fun href: String do return breadcrumbs.join("/") + + # A relative `href` to `self` from the page `context`. + # + # Should be used to navigate between documents. + fun href_from(context: WikiEntry): String + do + var res = context.href.dirname.relpath(href) + return res + end redef fun render do super @@ -159,11 +172,11 @@ redef class WikiArticle # Checks if `self.name == "index"`. fun is_index: Bool do return name == "index" - redef fun url do + redef fun href do if parent == null then - return wiki.config.root_url.join_path("{name}.html") + return "{name}.html" else - return parent.url.join_path("{name}.html") + return parent.href.join_path("{name}.html") end end @@ -184,7 +197,7 @@ class WikiSectionIndex redef fun title do return section.title - redef fun url do return section.url + redef fun href do return section.href end # A MarkdownProcessor able to parse wiki links. @@ -235,7 +248,7 @@ private class NitiwikiDecorator end if target != null then if name == null then name = target.title - link = target.url + link = target.href_from(context) else var loc = context.src_path or else context.name wiki.message("Warning: unknown wikilink `{link}` (in {loc})", 0) diff --git a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res index 936a764..43bf159 100644 --- a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res +++ b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res @@ -5,6 +5,6 @@ url: http://localhost/ There is modified files: + pages - + /pages/index.md + + pages/index.md Use nitiwiki --render to render modified files diff --git a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res index 46cf17c..dfc19e5 100644 --- a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res +++ b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res @@ -1,20 +1,20 @@ Custom config for section sec2 Render section out -Warning: unknown wikilink `not found` (in /pages/index.md) -Warning: unknown wikilink `Not Found` (in /pages/index.md) -Warning: unknown wikilink `/not/found` (in /pages/index.md) -Warning: unknown wikilink `not/found` (in /pages/index.md) -Warning: unknown wikilink `not found` (in /pages/index.md) -Warning: unknown wikilink `not found` (in /pages/index.md) -Warning: unknown wikilink `not found` (in /pages/index.md) +Warning: unknown wikilink `not found` (in pages/index.md) +Warning: unknown wikilink `Not Found` (in pages/index.md) +Warning: unknown wikilink `/not/found` (in pages/index.md) +Warning: unknown wikilink `not/found` (in pages/index.md) +Warning: unknown wikilink `not found` (in pages/index.md) +Warning: unknown wikilink `not found` (in pages/index.md) +Warning: unknown wikilink `not found` (in pages/index.md) Render section out/sec1 Render section out/sec2 -Warning: unknown wikilink `not found` (in /pages/sec2/index.md) -Warning: unknown wikilink `Not Found` (in /pages/sec2/index.md) -Warning: unknown wikilink `/not/found` (in /pages/sec2/index.md) -Warning: unknown wikilink `not/found` (in /pages/sec2/index.md) -Warning: unknown wikilink `not found` (in /pages/sec2/index.md) -Warning: unknown wikilink `not found` (in /pages/sec2/index.md) -Warning: unknown wikilink `not found` (in /pages/sec2/index.md) +Warning: unknown wikilink `not found` (in pages/sec2/index.md) +Warning: unknown wikilink `Not Found` (in pages/sec2/index.md) +Warning: unknown wikilink `/not/found` (in pages/sec2/index.md) +Warning: unknown wikilink `not/found` (in pages/sec2/index.md) +Warning: unknown wikilink `not found` (in pages/sec2/index.md) +Warning: unknown wikilink `not found` (in pages/sec2/index.md) +Warning: unknown wikilink `not found` (in pages/sec2/index.md) Render section out/sec2/sub-sec21 Render section out/sec2/sub-sec22 diff --git a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res index 1f3ce1a..f03f5d4 100644 --- a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res +++ b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res @@ -5,17 +5,17 @@ url: http://localhost/ There is modified files: + pages - + /pages/contact.md - + /pages/index.md - + /pages/other_page.md + + pages/contact.md + + pages/index.md + + pages/other_page.md + pages/sec1 - + /pages/sec1/index.md + + pages/sec1/index.md + pages/sec2 - + /pages/sec2/index.md + + pages/sec2/index.md + pages/sec2/sub-sec21 - + /pages/sec2/sub-sec21/index.md + + pages/sec2/sub-sec21/index.md + pages/sec2/sub-sec22 - + /pages/sec2/sub-sec22/index.md - + /pages/sec2/sub-sec22/other.md + + pages/sec2/sub-sec22/index.md + + pages/sec2/sub-sec22/other.md Use nitiwiki --render to render modified files diff --git a/contrib/nitiwiki/tests/res/wiki3_nitiwiki_status.res b/contrib/nitiwiki/tests/res/wiki3_nitiwiki_status.res index 2451916..04cbacf 100644 --- a/contrib/nitiwiki/tests/res/wiki3_nitiwiki_status.res +++ b/contrib/nitiwiki/tests/res/wiki3_nitiwiki_status.res @@ -5,8 +5,8 @@ url: http://localhost/ There is modified files: + pages - + /pages/contact.mdwn - + /pages/index.mdwn - + /pages/other_page.mdwn + + pages/contact.mdwn + + pages/index.mdwn + + pages/other_page.mdwn Use nitiwiki --render to render modified files diff --git a/examples/callback_chimpanze.nit b/examples/callback_chimpanze.nit deleted file mode 100644 index caf3f2e..0000000 --- a/examples/callback_chimpanze.nit +++ /dev/null @@ -1,46 +0,0 @@ -# This file is part of NIT ( http://www.nitlanguage.org ). -# -# Copyright 2013 Matthieu Lucas -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This sample has been implemented to show you how simple is it to relay -# native callbacks from C to a Nit program. -module callback_chimpanze - -import callback_monkey - -class Chimpanze - super MonkeyActionCallable - - fun create - do - var monkey = new Monkey - print "Hum, I'm sleeping ..." - - # Invoking method which will take some time to compute, and - # will be back in woke_up method with information. - # - Callback method defined in MonkeyActionCallable Interface - monkey.woke_up_action(self, "Hey, I'm awake.") - end - - # Inherit callback method, defined by MonkeyActionCallable interface - # - Back of woke_up_action method - redef fun woke_up(sender:Monkey, message:Object) - do - print message - end -end - -var m = new Chimpanze -m.create diff --git a/examples/callback_monkey.nit b/examples/callback_monkey.nit deleted file mode 100644 index 434edd1..0000000 --- a/examples/callback_monkey.nit +++ /dev/null @@ -1,91 +0,0 @@ -# This file is part of NIT ( http://www.nitlanguage.org ). -# -# Copyright 2013 Matthieu Lucas -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This sample has been implemented to show you how simple is it to relay -# native callbacks from C to a Nit program. -module callback_monkey - -in "C header" `{ - #include - #include - - typedef struct { - int id; - int age; - } CMonkey; - - typedef struct { - MonkeyActionCallable toCall; - Object message; - } MonkeyAction; -`} - -in "C body" `{ - // Method which reproduce a callback answer - // Please note that a function pointer is only used to reproduce the callback - void cbMonkey(CMonkey *mkey, void callbackFunc(CMonkey*, MonkeyAction*), MonkeyAction *data) - { - sleep(2); - callbackFunc(mkey, data); - } - - // Back of background treatment, will be redirected to callback function - void nit_monkey_callback_func(CMonkey *mkey, MonkeyAction *data) - { - // To call a your method, the signature must be written like this: - // _... - MonkeyActionCallable_woke_up(data->toCall, mkey, data->message); - } -`} - -# Implementable interface to get callback in defined methods -interface MonkeyActionCallable - fun woke_up(sender:Monkey, message: Object) is abstract -end - -# Defining my object type Monkey, which is, in a low level, a pointer to a C struct (CMonkey) -extern class Monkey `{ CMonkey * `} - - new `{ - CMonkey *monkey = malloc(sizeof(CMonkey)); - monkey->age = 10; - monkey->id = 1; - return monkey; - `} - - # Object method which will get a callback in woke_up method, defined in MonkeyActionCallable interface - # Must be defined as Nit/C method because of C call inside - fun woke_up_action(toCall: MonkeyActionCallable, message: Object) is extern import MonkeyActionCallable.woke_up `{ - - // Allocating memory to keep reference of received parameters: - // - Object receiver - // - Message - MonkeyAction *data = malloc(sizeof(MonkeyAction)); - - // Incrementing reference counter to prevent from releasing - MonkeyActionCallable_incr_ref(toCall); - Object_incr_ref(message); - - data->toCall = toCall; - data->message = message; - - // Calling method which reproduce a callback by passing: - // - Receiver - // - Function pointer to object return method - // - Datas - cbMonkey(self, &nit_monkey_callback_func, data); - `} -end diff --git a/examples/draw_operation.nit b/examples/draw_operation.nit index 2db1595..a5ad1d5 100644 --- a/examples/draw_operation.nit +++ b/examples/draw_operation.nit @@ -17,6 +17,10 @@ # Draws an arithmetic operation to the terminal module draw_operation +`{ + #include +`} + redef enum Int fun n_chars: Int `{ int c; diff --git a/examples/rosettacode/arithmetic_mode.nit b/examples/rosettacode/arithmetic_mode.nit new file mode 100644 index 0000000..362372e --- /dev/null +++ b/examples/rosettacode/arithmetic_mode.nit @@ -0,0 +1,33 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Arithmetic mode +# SEE: +module arithmetic_mode + +# Computes the mode or the `array` values. +# +# FIXME: Only the first mode will be returned, should we return an array of modes? +fun mode(array: Array[Int]): nullable Int do + var seen = new HashMap[Int, Int] + for i in array do + if not seen.has_key(i) then seen[i] = 0 + seen[i] += 1 + end + var max_key = null + var max_val = 0 + for k, v in seen do + if v > max_val then + max_key = k + max_val = v + end + end + return max_key +end + +print mode([1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17]) or else "null" +print mode([1, 1, 2, 4, 4]) or else "null" +print mode([1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17]) or else "null" +print mode([1, 1, 2, 4, 4]) or else "null" diff --git a/examples/rosettacode/bottles_of_beer.nit b/examples/rosettacode/bottles_of_beer.nit new file mode 100644 index 0000000..06010f4 --- /dev/null +++ b/examples/rosettacode/bottles_of_beer.nit @@ -0,0 +1,15 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: 99 Bottles of Beer +# SEE: +module bottles_of_beer + +for i in [1..99].reverse_iterator do + print "{i} bottles of beer on the wall" + print "{i} bottles of beer" + print "Take one down, pass it around" + print "{i-1} bottles of beer on the wall\n" +end diff --git a/examples/rosettacode/caesar_cipher.nit b/examples/rosettacode/caesar_cipher.nit new file mode 100644 index 0000000..e6d6272 --- /dev/null +++ b/examples/rosettacode/caesar_cipher.nit @@ -0,0 +1,19 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Ceasar cipher +# SEE: +module caesar_cipher + +import crypto + +var key = 31 +var msg = "Batman's hood is called a \"cowl\" (old meaning)." +var cipher = msg.rot(key) + +print "Caesar cypher key: {key}" +print "plain text: {msg}" +print "cyphered: {cipher}" +print "uncyphered: {cipher.rot(-key)}" diff --git a/examples/rosettacode/catalan_numbers.nit b/examples/rosettacode/catalan_numbers.nit new file mode 100644 index 0000000..e6e4bad --- /dev/null +++ b/examples/rosettacode/catalan_numbers.nit @@ -0,0 +1,17 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain +# +# Task: Catalan numbers +# SEE: + +fun catalan_number(number: Int): Int do + var numerator = (2 * number).factorial + var denominator = (number + 1).factorial * number.factorial + return numerator/denominator +end + +for number in [0..10[ do + print "{number} = {catalan_number(number)}" +end diff --git a/examples/rosettacode/count_the_coins.nit b/examples/rosettacode/count_the_coins.nit new file mode 100644 index 0000000..9496939 --- /dev/null +++ b/examples/rosettacode/count_the_coins.nit @@ -0,0 +1,23 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Count_the_coins +# SEE: +module count_the_coins + +fun changes(amount: Int, coins: Array[Int]): Int +do + var cache = new Array[Int].filled_with(0, amount+1) + cache[0] = 1 + for coin in coins do + for j in [coin..amount] do + cache[j] += cache[j - coin] + end + end + return cache[amount] +end + +print changes(100, [1, 5, 10, 25]) +print changes(100000, [1, 5, 10, 25, 50, 100]) diff --git a/examples/rosettacode/factorial.nit b/examples/rosettacode/factorial.nit new file mode 100644 index 0000000..0b39727 --- /dev/null +++ b/examples/rosettacode/factorial.nit @@ -0,0 +1,20 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Factorial +# SEE: + +module factorial + +redef class Int + + fun fact: Int + do + if self < 1 then return 1 + return self * (self-1).fact + end +end +var n = gets.to_i +print n.fact \ No newline at end of file diff --git a/examples/rosettacode/first_letter_last_letter.nit b/examples/rosettacode/first_letter_last_letter.nit new file mode 100644 index 0000000..dcbcd24 --- /dev/null +++ b/examples/rosettacode/first_letter_last_letter.nit @@ -0,0 +1,46 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Last letter-first letter +# SEE: +module first_letter_last_letter + +fun search(words: String): Array[String] +do + var list = words.split("[ \n]".to_re) + var res = search_2(new Array[String], list) + return res +end + +fun search_2(state, remain: Array[String]): Array[String] +do + if remain.is_empty then return state + var last + var res = state + if state.is_empty then last = null else last = state.last.chars.last + for word in remain do + if last != null and word.chars.first != last then continue + var new_state = state + [word] + var new_remain = remain.clone + new_remain.remove(word) + var sub_res = search_2(new_state, new_remain) + if sub_res.length > res.length then + res = sub_res + end + end + return res +end + +var words = """audino bagon baltoy banette bidoof braviary +bronzor carracosta charmeleon cresselia croagunk darmanitan deino +emboar emolga exeggcute gabite girafarig gulpin haxorus heatmor +heatran ivysaur jellicent jumpluff kangaskhan kricketune landorus +ledyba loudred lumineon lunatone machamp magnezone mamoswine nosepass +petilil pidgeotto pikachu pinsir poliwrath poochyena porygon2 +porygonz registeel relicanth remoraid rufflet sableye scolipede +scrafty seaking sealeo silcoon simisear snivy snorlax spoink starly +tirtouga trapinch treecko tyrogue vigoroth vulpix wailord wartortle +whismur wingull yamask""" +print search(words).join("\n") diff --git a/examples/rosettacode/here_document.nit b/examples/rosettacode/here_document.nit new file mode 100644 index 0000000..f22a5be --- /dev/null +++ b/examples/rosettacode/here_document.nit @@ -0,0 +1,16 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Here_document +# SEE: +module here_document + +print """ +A here document (or "heredoc") is a way of specifying a text block, +preserving the line breaks, +indentation and other whitespace within the text. + +Nit borrows the triple-quoted string syntax from Python. +""" diff --git a/examples/rosettacode/letter_frequency.nit b/examples/rosettacode/letter_frequency.nit new file mode 100644 index 0000000..8b4233d --- /dev/null +++ b/examples/rosettacode/letter_frequency.nit @@ -0,0 +1,23 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Open a text file and count the occurrences of each letter. +# SEE: +# + +import counter + +var file = new FileReader.open("/etc/issue") +var counter = new Counter[Char] +while not file.eof do + var char = file.read_char + if char != null and char.is_letter then + counter.inc(char) + end +end + +for char, count in counter do + print "{char} => {count}" +end diff --git a/examples/rosettacode/median.nit b/examples/rosettacode/median.nit new file mode 100644 index 0000000..fd21ad7 --- /dev/null +++ b/examples/rosettacode/median.nit @@ -0,0 +1,22 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Median +# SEE: +module median + +# Computes the median or the `array` values. +fun median(array: Array[Float]): nullable Float do + if array.is_empty then return null + default_comparator.sort(array) + var mid = (array.length / 2).to_i + var rem = ((array.length - 1) / 2).to_i + return (array[mid] + array[rem]).to_f / 2.0 +end + +print median(new Array[Float]) or else "null" +print median([5.0, 3.0, 4.0]) or else "null" +print median([5.0, 4.0, 2.0, 3.0]) or else "null" +print median([3.0, 4.0, 1.0, -8.4, 7.2, 4.0, 1.0, 1.2]) or else "null" diff --git a/examples/rosettacode/perfect_numbers.nit b/examples/rosettacode/perfect_numbers.nit new file mode 100644 index 0000000..b280bd7 --- /dev/null +++ b/examples/rosettacode/perfect_numbers.nit @@ -0,0 +1,22 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Perfect numbers +# SEE: + +module perfect_numbers + + +fun isPerfect(x: Int): Bool +do + var sum: Int = 0 + for i in [1..(x-1)] do + if x%i == 0 then sum = sum+i + end + return sum == x +end + +var n = gets.to_i +print isPerfect(n) \ No newline at end of file diff --git a/examples/rosettacode/pernicious_numbers.nit b/examples/rosettacode/pernicious_numbers.nit new file mode 100644 index 0000000..308779b --- /dev/null +++ b/examples/rosettacode/pernicious_numbers.nit @@ -0,0 +1,22 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Pernicious numbers +# +# SEE: http://rosettacode.org/wiki/Pernicious_numbers + +var n_pernicious = 0 +var x = 0 +while n_pernicious < 25 do + if x.number_bits(1).is_prime then + print x + n_pernicious += 1 + end + x += 1 +end + +for i in [888888877..888888888[ do + if i.number_bits(1).is_prime then print i +end diff --git a/examples/rosettacode/pick_random.nit b/examples/rosettacode/pick_random.nit new file mode 100644 index 0000000..879de52 --- /dev/null +++ b/examples/rosettacode/pick_random.nit @@ -0,0 +1,11 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Pick random element +# +# SEE: http://rosettacode.org/wiki/Pick_random_element + +var array = [1,2,3,4,5,6,7,8,9,10] +print array.rand diff --git a/examples/rosettacode/semordnilap.nit b/examples/rosettacode/semordnilap.nit new file mode 100644 index 0000000..996fe1c --- /dev/null +++ b/examples/rosettacode/semordnilap.nit @@ -0,0 +1,38 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Simple Rosettacode task for the detection of semordnilaps in a text file +# +# SEE: http://rosettacode.org/wiki/Semordnilap +module semordnilap + +if args.is_empty then + print "Usage: ./semordnilap file" + exit(1) +end + +var filename = args[0] +var words = new HashSet[String] + +for i in filename.to_path.each_line do words.add i.trim + +var semordnilaps = new HashSet[String] +var pairs = new HashMap[String, String] + +for i in words do + var revi = i.reversed + if i != revi and words.has(revi) and not semordnilaps.has(i) then + semordnilaps.add i + semordnilaps.add revi + pairs[i] = revi + end +end + +print "Found {pairs.length} semordnilaps in {args[0]}" +var it = pairs.iterator +for i in [0 .. 5[ do + print "{it.key}: {it.item}" + it.next +end diff --git a/examples/rosettacode/symmetric_difference.nit b/examples/rosettacode/symmetric_difference.nit new file mode 100644 index 0000000..fdbe160 --- /dev/null +++ b/examples/rosettacode/symmetric_difference.nit @@ -0,0 +1,53 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Symmetric difference +# SEE: + +module symmetric_difference + +var a = ["John", "Serena", "Bob", "Mary", "Serena"] +var b = ["Jim", "Mary", "John", "Jim", "Bob"] + +print "Set A: {a.join(", ")}" +print "Set B: {b.join(", ")}" + +# Option 1: union of differences +var not_in_a = new ArraySet[String] +not_in_a.add_all(b) +for x in a do + not_in_a.remove_all(x) +end + +var not_in_b = new ArraySet[String] +not_in_b.add_all(a) +for x in b do + not_in_b.remove_all(x) +end + +var difference = not_in_a.clone +difference.add_all(not_in_b) + +print "Symmetric difference: {difference.join(", ")}" + +# Option 2: union minus intersection +var union = new ArraySet[String] +union.add_all(a) +union.add_all(b) + +var b1 = new ArraySet[String] +b1.add_all(b) + +var intersect +intersect = new ArraySet[String] +intersect.add_all(a) +intersect = intersect.intersection(b1) + +var difference2 = union.clone +for x in intersect do + difference2.remove_all(x) +end + +print "Symmetric difference: {difference2.join(", ")}" \ No newline at end of file diff --git a/examples/rosettacode/unixdict.txt b/examples/rosettacode/unixdict.txt new file mode 100644 index 0000000..c69eff8 --- /dev/null +++ b/examples/rosettacode/unixdict.txt @@ -0,0 +1,25104 @@ +10th +1st +2nd +3rd +4th +5th +6th +7th +8th +9th +a +a&m +a&p +a's +aaa +aaas +aarhus +aaron +aau +aba +ababa +aback +abacus +abalone +abandon +abase +abash +abate +abater +abbas +abbe +abbey +abbot +abbott +abbreviate +abc +abdicate +abdomen +abdominal +abduct +abe +abed +abel +abelian +abelson +aberdeen +abernathy +aberrant +aberrate +abet +abetted +abetting +abeyance +abeyant +abhorred +abhorrent +abide +abidjan +abigail +abject +ablate +ablaze +able +ablution +abner +abnormal +abo +aboard +abode +abolish +abolition +abominable +abominate +aboriginal +aborigine +aborning +abort +abound +about +above +aboveboard +aboveground +abovementioned +abrade +abraham +abram +abramson +abrasion +abrasive +abreact +abreast +abridge +abridgment +abroad +abrogate +abrupt +abscess +abscissa +abscissae +absence +absent +absentee +absenteeism +absentia +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent +abstract +abstracter +abstractor +abstruse +absurd +abuilding +abundant +abusable +abuse +abusive +abut +abutted +abutting +abysmal +abyss +abyssinia +ac +academe +academia +academic +academician +academy +acadia +acanthus +acapulco +accede +accelerate +accelerometer +accent +accentual +accentuate +accept +acceptant +acceptor +access +accessible +accession +accessory +accident +accidental +accipiter +acclaim +acclamation +acclimate +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish +accord +accordant +accordion +accost +account +accountant +accra +accredit +accreditate +accreditation +accretion +accrual +accrue +acculturate +accumulate +accuracy +accurate +accusation +accusative +accusatory +accuse +accustom +ace +acerbic +acerbity +acetate +acetic +acetone +acetylene +ache +achieve +achilles +aching +achromatic +acid +acidic +acidulous +ackerman +ackley +acknowledge +acknowledgeable +acm +acme +acolyte +acorn +acoustic +acquaint +acquaintance +acquiesce +acquiescent +acquire +acquisition +acquisitive +acquit +acquittal +acquitting +acre +acreage +acrid +acrimonious +acrimony +acrobacy +acrobat +acrobatic +acronym +acropolis +across +acrylate +acrylic +acs +act +actaeon +actinic +actinide +actinium +actinolite +actinometer +activate +activation +activism +acton +actor +actress +acts +actual +actuarial +actuate +acuity +acumen +acute +acyclic +ad +ada +adage +adagio +adair +adam +adamant +adams +adamson +adapt +adaptation +adaptive +add +added +addend +addenda +addendum +addict +addis +addison +addition +additional +additive +addle +address +addressee +addressograph +adduce +adelaide +adele +adelia +aden +adenine +adenoma +adenosine +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +adirondack +adjacent +adject +adjectival +adjective +adjoin +adjoint +adjourn +adjudge +adjudicate +adjunct +adjust +adjutant +adkins +adler +administer +administrable +administrate +administratrix +admiral +admiralty +admiration +admire +admissible +admission +admit +admittance +admitted +admitting +admix +admixture +admonish +admonition +ado +adobe +adolescent +adolph +adolphus +adonis +adopt +adoption +adoptive +adore +adorn +adposition +adrenal +adrenaline +adrian +adriatic +adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +adulthood +advance +advantage +advantageous +advent +adventitious +adventure +adventurous +adverb +adverbial +adversary +adverse +advert +advertise +advice +advisable +advise +advisee +advisor +advisory +advocacy +advocate +aegean +aegis +aeneas +aeneid +aeolian +aeolus +aerate +aerial +aerobacter +aerobic +aerodynamic +aerogene +aeronautic +aerosol +aerospace +aeschylus +aesthete +aesthetic +afar +affable +affair +affect +affectate +affectation +affectionate +afferent +affiance +affidavit +affiliate +affine +affinity +affirm +affirmation +affirmative +affix +afflict +affluence +affluent +afford +afforest +afforestation +affricate +affront +afghan +afghanistan +aficionado +afield +afire +aflame +afloat +afoot +aforementioned +aforesaid +aforethought +afoul +afraid +afresh +africa +afro +aft +aftereffect +afterglow +afterimage +afterlife +aftermath +afternoon +afterthought +afterward +afterword +again +against +agamemnon +agate +agatha +agave +age +agee +agenda +agent +agglomerate +agglutinate +agglutinin +aggravate +aggregate +aggression +aggressive +aggressor +aggrieve +aghast +agile +aging +agitate +agleam +agnes +agnew +agnomen +agnostic +ago +agone +agony +agouti +agrarian +agree +agreeable +agreed +agreeing +agribusiness +agricola +agricultural +agriculture +agrimony +ague +agway +ah +ahead +ahem +ahmadabad +ahmedabad +ahoy +aid +aida +aide +aides +aiken +ail +ailanthus +aile +aileen +aileron +aim +ain't +ainu +air +airborne +aircraft +airdrop +airedale +aires +airfare +airfield +airflow +airfoil +airframe +airlift +airline +airlock +airmail +airman +airmass +airmen +airpark +airplane +airport +airspace +airspeed +airstrip +airtight +airway +airy +aisle +aitken +ajar +ajax +ak +akers +akin +akron +al +ala +alabama +alabamian +alabaster +alacrity +alai +alameda +alamo +alan +alarm +alaska +alb +alba +albacore +albania +albanian +albany +albatross +albeit +alberich +albert +alberta +alberto +albrecht +albright +album +albumin +albuquerque +alcestis +alchemy +alcmena +alcoa +alcohol +alcoholic +alcoholism +alcott +alcove +aldebaran +aldehyde +alden +alder +alderman +aldermen +aldrich +aldrin +ale +alec +aleck +aleph +alert +alewife +alex +alexander +alexandra +alexandre +alexandria +alexei +alexis +alfalfa +alfonso +alfred +alfredo +alfresco +alga +algae +algaecide +algal +algebra +algebraic +algenib +alger +algeria +algerian +algiers +alginate +algol +algonquin +algorithm +algorithmic +alhambra +ali +alia +alias +alibi +alice +alicia +alien +alienate +alight +align +alike +alimony +aliphatic +aliquot +alison +alistair +alive +alizarin +alkali +alkaline +alkaloid +alkane +alkene +all +allah +allan +allay +allegate +allegation +allege +allegheny +allegiant +allegoric +allegory +allegra +allegro +allele +allemand +allen +allentown +allergic +allergy +alleviate +alley +alleyway +alliance +allied +alligator +allis +allison +alliterate +allocable +allocate +allot +allotropic +allotted +allotting +allow +allowance +alloy +allspice +allstate +allude +allure +allusion +allusive +alluvial +alluvium +ally +allyl +allyn +alma +almaden +almagest +almanac +almighty +almond +almost +aloe +aloft +aloha +alone +along +alongside +aloof +aloud +alp +alpenstock +alpert +alpha +alphabet +alphabetic +alphameric +alphanumeric +alpheratz +alphonse +alpine +alps +already +alsatian +also +alsop +altair +altar +alter +alterate +alteration +altercate +alterman +altern +alternate +althea +although +altimeter +altitude +alto +altogether +alton +altruism +altruist +alum +alumina +aluminate +alumna +alumnae +alumni +alumnus +alundum +alva +alvarez +alveolar +alveoli +alveolus +alvin +alway +always +alyssum +am +ama +amadeus +amalgam +amalgamate +amanita +amanuensis +amaranth +amarillo +amass +amateur +amateurish +amatory +amaze +amazon +ambassador +amber +ambiance +ambidextrous +ambient +ambiguity +ambiguous +ambition +ambitious +ambivalent +amble +ambling +ambrose +ambrosia +ambrosial +ambulant +ambulate +ambulatory +ambuscade +ambush +amelia +ameliorate +amen +amend +amende +amerada +america +american +americana +americanism +americium +ames +ameslan +amethyst +amethystine +amherst +ami +amicable +amid +amide +amidst +amigo +amino +aminobenzoic +amiss +amity +amman +ammerman +ammeter +ammo +ammonia +ammoniac +ammonium +ammunition +amnesia +amoco +amoeba +amoebae +amok +among +amongst +amoral +amorous +amorphous +amort +amos +amount +amp +amperage +ampere +ampersand +ampex +amphetamine +amphibian +amphibious +amphibole +amphibology +amphioxis +ample +amplifier +amplify +amplitude +amply +amputate +amputee +amra +amsterdam +amtrak +amulet +amuse +amy +amygdaloid +an +ana +anabaptist +anabel +anachronism +anachronistic +anaconda +anaerobic +anaglyph +anagram +anaheim +analeptic +analgesic +analogous +analogue +analogy +analyses +analysis +analyst +analytic +anamorphic +anaplasmosis +anarch +anarchic +anarchy +anastasia +anastigmat +anastigmatic +anastomosis +anastomotic +anathema +anatole +anatomic +anatomy +ancestor +ancestral +ancestry +anchor +anchorage +anchorite +anchoritism +anchovy +ancient +ancillary +and +andean +andersen +anderson +andes +andesine +andesite +andiron +andorra +andover +andre +andrea +andrei +andrew +andrews +andromache +andromeda +andy +anecdotal +anecdote +anemone +anent +anew +angel +angela +angeles +angelfish +angelic +angelica +angelina +angeline +angelo +anger +angie +angiosperm +angle +angles +anglican +anglicanism +angling +anglo +anglophobia +angola +angora +angry +angst +angstrom +anguish +angular +angus +anharmonic +anheuser +anhydride +anhydrite +anhydrous +ani +aniline +animadversion +animadvert +animal +animate +animism +animosity +anion +anionic +anise +aniseikonic +anisotropic +anisotropy +anita +ankara +ankle +ann +anna +annal +annale +annalen +annals +annapolis +anne +anneal +annette +annex +annie +annihilate +anniversary +annotate +announce +annoy +annoyance +annual +annuity +annul +annular +annuli +annulled +annulling +annulus +annum +annunciate +anode +anodic +anomalous +anomaly +anomie +anonymity +anonymous +anorexia +anorthic +anorthite +anorthosite +another +anselm +anselmo +ansi +answer +ant +antacid +antaeus +antagonism +antagonist +antagonistic +antarctic +antarctica +antares +ante +anteater +antebellum +antecedent +antedate +antelope +antenna +antennae +anterior +anteroom +anthem +anther +anthology +anthony +anthracite +anthracnose +anthropogenic +anthropology +anthropomorphic +anthropomorphism +anti +antic +anticipate +anticipatory +antietam +antigen +antigone +antigorite +antimony +antioch +antipasto +antipathy +antiperspirant +antiphonal +antipode +antipodean +antipodes +antiquarian +antiquary +antiquated +antique +antiquity +antisemite +antisemitic +antisemitism +antithetic +antler +antoine +antoinette +anton +antonio +antony +antonym +antwerp +anus +anvil +anxiety +anxious +any +anybody +anybody'd +anyhow +anyone +anyplace +anything +anyway +anywhere +aorta +apace +apache +apart +apartheid +apathetic +apathy +apatite +ape +aperiodic +aperture +apex +aphasia +aphasic +aphelion +aphid +aphorism +aphrodite +apices +apiece +aplomb +apocalypse +apocalyptic +apocrypha +apocryphal +apogee +apollo +apollonian +apologetic +apologia +apology +apostate +apostle +apostolic +apostrophe +apothecary +apothegm +apotheosis +appalachia +appall +appanage +apparatus +apparel +apparent +apparition +appeal +appear +appearance +appeasable +appease +appellant +appellate +append +appendage +appendices +appendix +apperception +appertain +appetite +appian +applaud +applause +apple +appleby +applejack +appleton +appliance +applicable +applicant +applicate +application +applied +applique +apply +appoint +appointe +appointee +apport +apportion +apposite +apposition +appraisal +appraise +appreciable +appreciate +apprehend +apprehension +apprehensive +apprentice +apprise +approach +approbation +appropriable +appropriate +approval +approve +approximable +approximant +approximate +apr +apricot +april +apron +apropos +aps +apse +apt +aptitude +aqua +aquarium +aquarius +aquatic +aqueduct +aqueous +aquila +aquinas +ar +arab +arabesque +arabia +arabic +araby +arachne +arachnid +arbiter +arbitrage +arbitrary +arbitrate +arboreal +arboretum +arbutus +arc +arcade +arcadia +arcana +arcane +arccos +arccosine +arch +archae +archaic +archaism +archangel +archbishop +archdiocese +archenemy +archer +archery +archetype +archetypical +archfool +archibald +archimedes +arching +archipelago +architect +architectonic +architectural +architecture +archival +archive +arcing +arclength +arcsin +arcsine +arctan +arctangent +arctic +arcturus +arden +ardency +ardent +arduous +are +area +areaway +areawide +aren't +arena +arenaceous +arequipa +ares +argentina +argillaceous +arginine +argive +argo +argon +argonaut +argonne +argot +argue +argument +argumentation +argumentative +argus +arhat +ariadne +arianism +arid +aries +arise +arisen +aristocracy +aristocrat +aristocratic +aristotelean +aristotelian +aristotle +arithmetic +arizona +ark +arkansan +arkansas +arlen +arlene +arlington +arm +armada +armadillo +armageddon +armament +armata +armature +armchair +armco +armenia +armenian +armful +armhole +armillaria +armistice +armload +armoire +armonk +armour +armpit +armstrong +army +arnold +aroma +aromatic +arose +around +arousal +arouse +arpa +arpeggio +arrack +arragon +arraign +arrange +arrangeable +array +arrear +arrest +arrhenius +arrival +arrive +arrogant +arrogate +arrow +arrowhead +arrowroot +arroyo +arsenal +arsenate +arsenic +arsenide +arsine +arson +art +artemis +artemisia +arterial +arteriole +arteriolosclerosis +arteriosclerosis +artery +artful +arthritis +arthur +artichoke +article +articulate +articulatory +artie +artifact +artifice +artificial +artillery +artisan +artistry +arturo +artwork +arty +aruba +arum +aryl +as +asbestos +ascend +ascendant +ascension +ascent +ascertain +ascetic +asceticism +ascomycetes +ascribe +ascription +aseptic +asexual +ash +ashame +ashamed +ashen +asher +asheville +ashland +ashley +ashman +ashmen +ashmolean +ashore +ashtray +ashy +asia +asiatic +aside +asilomar +asinine +ask +askance +askew +asleep +asocial +asparagine +asparagus +aspartic +aspect +aspen +asperity +aspersion +asphalt +aspheric +asphyxiate +aspidistra +aspirant +aspirate +aspire +aspirin +asplenium +ass +assai +assail +assailant +assam +assassin +assassinate +assault +assay +assemblage +assemble +assent +assert +assess +assessor +asset +assiduity +assiduous +assign +assignation +assignee +assimilable +assimilate +assist +assistant +associable +associate +assonant +assort +assuage +assume +assumption +assurance +assure +assyria +assyriology +astarte +astatine +aster +asteria +asterisk +asteroid +asteroidal +asthma +astigmat +astigmatic +astigmatism +astm +astonish +astor +astoria +astound +astraddle +astral +astray +astride +astringent +astrology +astronaut +astronautic +astronomer +astronomic +astronomy +astrophysical +astrophysicist +astrophysics +astute +asuncion +asunder +asylum +asymmetry +asymptote +asymptotic +asynchronous +asynchrony +at +at&t +atalanta +atavism +atavistic +atchison +ate +athabascan +atheism +atheist +athena +athenian +athens +athlete +athletic +athwart +atkins +atkinson +atlanta +atlantes +atlantic +atlantica +atlantis +atlas +atmosphere +atmospheric +atom +atomic +atonal +atone +atop +atreus +atrium +atrocious +atrocity +atrophic +atrophy +atropos +attach +attache +attack +attain +attainder +attempt +attend +attendant +attendee +attention +attentive +attenuate +attest +attestation +attic +attica +attire +attitude +attitudinal +attorney +attract +attribute +attribution +attributive +attrition +attune +atwater +atwood +atypic +auberge +aubrey +auburn +auckland +auction +auctioneer +audacious +audacity +audible +audience +audio +audiotape +audiovisual +audit +audition +auditor +auditorium +auditory +audrey +audubon +auerbach +aug +augean +augend +auger +augite +augment +augmentation +augur +august +augusta +augustan +augustine +augustus +auk +aunt +auntie +aura +aural +aurelius +aureomycin +auric +auriga +aurochs +aurora +auschwitz +auspices +auspicious +austenite +austere +austin +australia +australis +australite +austria +authentic +authenticate +author +authoritarian +authoritative +autism +autistic +auto +autobiography +autoclave +autocollimate +autocorrelate +autocracy +autocrat +autocratic +autograph +automat +automata +automate +automatic +automaton +automobile +automorphic +automorphism +automotive +autonomic +autonomous +autonomy +autopsy +autosuggestible +autotransformer +autumn +autumnal +auxiliary +avail +avalanche +avarice +avaricious +ave +avenge +aventine +avenue +aver +average +averred +averring +averse +aversion +avert +avertive +avery +avesta +aviary +aviate +aviatrix +avid +avionic +avis +aviv +avocado +avocate +avocation +avocet +avogadro +avoid +avoidance +avon +avow +avowal +avuncular +await +awake +awaken +award +aware +awash +away +awe +awesome +awful +awhile +awkward +awl +awn +awoke +awry +ax +axe +axes +axial +axiology +axiom +axiomatic +axis +axisymmetric +axle +axolotl +axon +aye +ayers +aylesbury +az +azalea +azerbaijan +azimuth +azimuthal +aztec +aztecan +azure +b +b's +babbitt +babble +babcock +babe +babel +baboon +baby +babyhood +babylon +babylonian +babysat +babysit +babysitter +babysitting +baccalaureate +baccarat +bacchus +bach +bachelor +bacilli +bacillus +back +backboard +backbone +backdrop +backfill +backgammon +background +backhand +backlash +backlog +backorder +backpack +backplane +backplate +backscatter +backside +backspace +backstage +backstitch +backstop +backtrack +backup +backward +backwater +backwood +backyard +bacon +bacteria +bacterial +bacterium +bad +bade +baden +badge +badinage +badland +badminton +baffin +baffle +bag +bagatelle +bagel +baggage +bagging +baggy +baghdad +bagley +bagpipe +bah +bahama +bahrein +bail +bailey +bailiff +bainite +baird +bait +bake +bakelite +bakersfield +bakery +bakhtiari +baklava +baku +balance +balboa +balcony +bald +baldpate +baldwin +baldy +bale +baleen +baleful +balfour +bali +balinese +balk +balkan +balky +ball +ballad +ballard +ballast +balled +ballerina +ballet +balletic +balletomane +ballfield +balloon +ballot +ballroom +ballyhoo +balm +balmy +balsa +balsam +baltic +baltimore +baltimorean +balustrade +balzac +bam +bamako +bamberger +bambi +bamboo +ban +banach +banal +banana +banbury +band +bandage +bandgap +bandit +bandpass +bandstand +bandstop +bandwagon +bandwidth +bandy +bane +baneberry +baneful +bang +bangkok +bangladesh +bangle +bangor +bangui +banish +banister +banjo +bank +bankrupt +bankruptcy +banks +banquet +banshee +bantam +banter +bantu +bantus +baptism +baptismal +baptist +baptiste +baptistery +bar +barb +barbados +barbara +barbarian +barbaric +barbarism +barbarous +barbecue +barbell +barber +barberry +barbital +barbiturate +barbour +barbudo +barcelona +barclay +bard +bare +barefaced +barefoot +barfly +bargain +barge +baritone +barium +bark +barkeep +barley +barlow +barn +barnabas +barnacle +barnard +barnes +barnet +barnett +barney +barnhard +barnstorm +barnyard +barometer +baron +baroness +baronet +baronial +barony +baroque +barr +barrack +barracuda +barrage +barre +barrel +barren +barrett +barrette +barricade +barrier +barrington +barrow +barry +barrymore +barstow +bart +bartend +bartender +barter +barth +bartholomew +bartlett +bartok +barton +barycentric +basal +basalt +base +baseball +baseband +baseboard +basel +baseline +baseman +basemen +baseplate +basepoint +bash +bashaw +bashful +basic +basidiomycetes +basil +basilar +basilisk +basin +basis +bask +basket +basketball +basophilic +bass +bassett +bassi +bassinet +basso +basswood +bastard +baste +bastion +bat +batavia +batch +batchelder +bate +bateau +bateman +bater +bates +bath +bathe +bathos +bathrobe +bathroom +bathtub +bathurst +batik +baton +bator +batt +battalion +battelle +batten +battery +battle +battlefield +battlefront +battleground +batwing +bauble +baud +baudelaire +bauer +bauhaus +bausch +bauxite +bavaria +bawd +bawdy +bawl +baxter +bay +bayberry +bayda +bayed +bayesian +baylor +bayonet +bayonne +bayou +bayport +bayreuth +bazaar +be +beach +beachcomb +beachhead +beacon +bead +beadle +beady +beak +beam +bean +bear +bearberry +beard +beardsley +bearish +beast +beastie +beat +beaten +beater +beatific +beatify +beatitude +beatnik +beatrice +beau +beaujolais +beaumont +beauregard +beauteous +beautiful +beautify +beauty +beaux +beaver +bebop +becalm +became +because +bechtel +beck +becker +becket +beckman +beckon +becky +becloud +become +bed +bedazzle +bedbug +bedevil +bedfast +bedford +bedim +bedimmed +bedimming +bedlam +bedpost +bedraggle +bedridden +bedrock +bedroom +bedside +bedspread +bedspring +bedstraw +bedtime +bee +beebe +beebread +beech +beecham +beechwood +beef +beefsteak +beefy +beehive +been +beep +beer +beet +beethoven +beetle +befall +befallen +befell +befit +befitting +befog +befogging +before +beforehand +befoul +befuddle +beg +began +beget +begetting +beggar +beggary +begging +begin +beginner +beginning +begonia +begotten +begrudge +beguile +begun +behalf +behave +behavioral +behead +beheld +behest +behind +behold +beige +beijing +being +beirut +bel +bela +belate +belch +belfast +belfry +belgian +belgium +belgrade +belie +belief +belies +believe +belittle +bell +bella +belladonna +bellamy +bellatrix +bellboy +belle +bellflower +bellhop +bellicose +belligerent +bellingham +bellini +bellman +bellmen +bellow +bellum +bellwether +belly +bellyache +bellyfull +belmont +beloit +belong +belove +below +belshazzar +belt +beltsville +belvedere +belvidere +belying +bema +bemadden +beman +bemoan +bemuse +ben +bench +benchmark +bend +bender +bendix +beneath +benedict +benedictine +benediction +benedikt +benefactor +benefice +beneficent +beneficial +beneficiary +benefit +benelux +benevolent +bengal +bengali +benight +benign +benjamin +bennett +bennington +benny +benson +bent +bentham +benthic +bentley +benton +benz +benzedrine +benzene +beograd +beowulf +beplaster +bequeath +bequest +berate +berea +bereave +bereft +berenices +beresford +beret +berg +bergamot +bergen +bergland +berglund +bergman +bergson +bergstrom +beribbon +beriberi +berkeley +berkelium +berkowitz +berkshire +berlin +berlioz +berlitz +berman +bermuda +bern +bernadine +bernard +bernardino +bernardo +berne +bernet +bernhard +bernice +bernie +berniece +bernini +bernoulli +bernstein +berra +berry +berserk +bert +berth +bertha +bertie +bertram +bertrand +berwick +beryl +beryllium +beseech +beset +besetting +beside +besiege +besmirch +besotted +bespeak +bespectacled +bespoke +bess +bessel +bessemer +bessie +best +bestial +bestir +bestirring +bestow +bestowal +bestseller +bestselling +bestubble +bet +beta +betatron +betel +betelgeuse +beth +bethel +bethesda +bethlehem +bethought +betide +betoken +betony +betray +betrayal +betrayer +betroth +betrothal +betsey +betsy +bette +bettor +betty +between +betwixt +bevel +beverage +beverly +bevy +bewail +beware +bewhisker +bewilder +bewitch +bey +beyond +bezel +bhoy +bhutan +bialystok +bianco +bias +biaxial +bib +bibb +bible +biblical +bibliography +bibliophile +bicameral +bicarbonate +bicentennial +bicep +biceps +bichromate +bicker +biconcave +biconnected +bicycle +bid +biddable +bidden +biddy +bide +bidiagonal +bidirectional +bien +biennial +biennium +bifocal +bifurcate +big +bigelow +biggs +bigot +bigotry +biharmonic +bijection +bijective +bijouterie +bike +bikini +bilabial +bilateral +bilayer +bile +bilge +bilharziasis +bilinear +bilingual +bilk +bill +billboard +billet +billfold +billiard +billie +billiken +billings +billion +billionth +billow +billy +biltmore +bimetallic +bimetallism +bimini +bimodal +bimolecular +bimonthly +bin +binary +binaural +bind +bindery +bindle +bindweed +bing +binge +bingham +binghamton +bingle +bini +binocular +binomial +binuclear +biochemic +biography +biology +biometrika +biometry +biopsy +biota +biotic +biotite +bipartisan +bipartite +biplane +bipolar +biracial +birch +bird +birdbath +birdie +birdlike +birdseed +birdwatch +birefringent +birgit +birmingham +birth +birthday +birthplace +birthright +biscuit +bisect +bisexual +bishop +bishopric +bismarck +bismark +bismuth +bison +bisque +bissau +bistable +bistate +bit +bitch +bite +bitnet +bitt +bitten +bittern +bitternut +bitterroot +bittersweet +bitumen +bituminous +bitwise +bivalve +bivariate +bivouac +biz +bizarre +bizet +blab +black +blackball +blackberry +blackbird +blackboard +blackbody +blackburn +blacken +blackfeet +blackjack +blackmail +blackman +blackout +blacksmith +blackstone +blackwell +bladder +bladdernut +bladderwort +blade +blaine +blair +blake +blame +blameworthy +blanc +blanch +blanchard +blanche +bland +blandish +blank +blanket +blare +blaspheme +blasphemous +blasphemy +blast +blastula +blat +blatant +blather +blatz +blaze +blazon +bleach +bleak +bleary +bleat +bled +bleed +bleeker +blemish +blend +blenheim +bless +blest +blew +blight +blimp +blind +blindfold +blink +blinn +blip +bliss +blissful +blister +blithe +blitz +blizzard +bloat +blob +bloc +bloch +block +blockade +blockage +blockhouse +blocky +bloke +blomberg +blomquist +blond +blonde +blood +bloodbath +bloodhound +bloodline +bloodroot +bloodshed +bloodshot +bloodstain +bloodstone +bloodstream +bloody +bloom +bloomfield +bloomington +bloop +blossom +blot +blotch +blouse +blow +blowback +blowfish +blown +blowup +blubber +bludgeon +blue +blueback +blueberry +bluebill +bluebird +bluebonnet +bluebook +bluebush +bluefish +bluegill +bluegrass +bluejacket +blueprint +bluestocking +bluet +bluff +bluish +blum +blumenthal +blunder +blunt +blur +blurb +blurry +blurt +blush +bluster +blustery +blutwurst +blvd +blythe +bmw +boa +boar +board +boardinghouse +boast +boastful +boat +boathouse +boatload +boatman +boatmen +boatswain +boatyard +bob +bobbie +bobbin +bobble +bobby +bobcat +bobolink +boca +bock +bocklogged +bode +bodhisattva +bodice +bodied +bodleian +body +bodybuild +bodybuilder +bodybuilding +bodyguard +boeing +boeotia +boeotian +bog +bogey +bogeymen +bogging +boggle +boggy +bogota +bogus +bogy +bohemia +bohr +boil +bois +boise +boisterous +bold +boldface +bole +boletus +bolivar +bolivia +bolo +bologna +bolometer +bolshevik +bolshevism +bolshevist +bolshoi +bolster +bolt +bolton +boltzmann +bomb +bombard +bombast +bombastic +bombay +bombproof +bon +bona +bonanza +bonaparte +bonaventure +bond +bondage +bondholder +bondsman +bondsmen +bone +bonfire +bong +bongo +boniface +bonito +bonn +bonnet +bonneville +bonnie +bonus +bony +bonze +boo +booby +boogie +book +bookbind +bookcase +bookend +bookie +bookish +bookkeep +booklet +bookmobile +bookplate +bookseller +bookshelf +bookshelves +bookstore +booky +boolean +boom +boomerang +boon +boone +boor +boorish +boost +boot +bootes +booth +bootleg +bootlegged +bootlegger +bootlegging +bootstrap +bootstrapped +bootstrapping +booty +booze +bop +borate +borax +bordeaux +bordello +borden +border +borderland +borderline +bore +borealis +boreas +boredom +borg +boric +boris +born +borne +borneo +boron +borosilicate +borough +borroughs +borrow +bosch +bose +bosom +boson +bosonic +boss +boston +bostonian +boswell +botanic +botanist +botany +botch +botfly +both +bothersome +botswana +bottle +bottleneck +bottom +bottommost +botulin +botulism +boucher +bouffant +bough +bought +boulder +boule +boulevard +bounce +bouncy +bound +boundary +bounty +bouquet +bourbaki +bourbon +bourgeois +bourgeoisie +bourn +boustrophedon +bout +boutique +bovine +bow +bowditch +bowdoin +bowel +bowen +bowfin +bowie +bowl +bowline +bowman +bowmen +bowstring +box +boxcar +boxwood +boxy +boy +boyar +boyce +boycott +boyd +boyfriend +boyhood +boyish +boyle +boylston +bp +brace +bracelet +bracken +bracket +brackish +bract +brad +bradbury +bradford +bradley +bradshaw +brady +brae +brag +bragg +braggart +bragging +brahmaputra +brahms +brahmsian +braid +braille +brain +brainard +brainchild +brainchildren +brainstorm +brainwash +brainy +brake +brakeman +bramble +bran +branch +brand +brandeis +brandenburg +brandish +brandon +brandt +brandy +brandywine +braniff +brant +brash +brasilia +brass +brassiere +brassy +bratwurst +braun +bravado +brave +bravery +bravo +bravura +brawl +bray +brazen +brazier +brazil +brazilian +brazzaville +breach +bread +breadboard +breadfruit +breadroot +breadth +breadwinner +break +breakage +breakaway +breakdown +breakfast +breakoff +breakpoint +breakthrough +breakup +breakwater +bream +breast +breastplate +breastwork +breath +breathe +breathtaking +breathy +breccia +bred +breech +breeches +breed +breeze +breezy +bremen +bremsstrahlung +brenda +brendan +brennan +brenner +brent +brest +brethren +breton +brett +breve +brevet +brevity +brew +brewery +brewster +brian +briar +bribe +bribery +brice +brick +brickbat +bricklay +bricklayer +bricklaying +bridal +bride +bridegroom +bridesmaid +bridge +bridgeable +bridgehead +bridgeport +bridget +bridgetown +bridgewater +bridgework +bridle +brief +briefcase +brig +brigade +brigadier +brigantine +briggs +brigham +bright +brighten +brighton +brilliant +brillouin +brim +brimful +brimstone +brindisi +brindle +brine +bring +brink +brinkmanship +briny +brisbane +brisk +bristle +bristol +britain +britannic +britannica +britches +british +briton +brittany +britten +brittle +broach +broad +broadcast +broaden +broadloom +broadside +broadway +brocade +broccoli +brochure +brock +brockle +broglie +broil +broke +broken +brokerage +bromfield +bromide +bromine +bromley +bronchi +bronchial +bronchiolar +bronchiole +bronchitis +bronchus +bronco +brontosaurus +bronx +bronze +bronzy +brood +broody +brook +brooke +brookhaven +brookline +brooklyn +brookside +broom +broomcorn +broth +brothel +brother +brotherhood +brought +brouhaha +brow +browbeaten +brown +browne +brownell +brownian +brownie +brownish +browse +bruce +brucellosis +bruckner +bruegel +bruise +bruit +brumidi +brunch +brunette +brunhilde +bruno +brunswick +brunt +brush +brushfire +brushlike +brushwork +brushy +brusque +brussels +brutal +brute +bryan +bryant +bryce +bryn +bryophyta +bryophyte +bryozoa +bstj +btl +btu +bub +bubble +buchanan +bucharest +buchenwald +buchwald +buck +buckaroo +buckboard +bucket +bucketfull +buckeye +buckhorn +buckle +buckley +bucknell +buckshot +buckskin +buckthorn +buckwheat +bucolic +bud +budapest +budd +buddha +buddhism +buddhist +buddy +budge +budget +budgetary +budweiser +buena +buenos +buff +buffalo +buffet +bufflehead +buffoon +bug +bugaboo +bugeyed +bugging +buggy +bugle +buick +build +buildup +built +builtin +bujumbura +bulb +bulblet +bulgaria +bulge +bulk +bulkhead +bulky +bull +bulldog +bulldoze +bullet +bulletin +bullfinch +bullfrog +bullhead +bullhide +bullish +bullock +bullseye +bullwhack +bully +bullyboy +bulrush +bulwark +bum +bumble +bumblebee +bump +bumptious +bun +bunch +bundestag +bundle +bundoora +bundy +bungalow +bungle +bunk +bunkmate +bunny +bunsen +bunt +bunyan +buoy +buoyant +burbank +burch +burden +burdensome +burdock +bureau +bureaucracy +bureaucrat +bureaucratic +buret +burette +burg +burgeon +burgess +burgher +burglar +burglarproof +burglary +burgundian +burgundy +burial +buried +burke +burl +burlap +burlesque +burley +burlington +burly +burma +burmese +burn +burnett +burnham +burnish +burnout +burnside +burnt +burp +burr +burro +burroughs +burrow +bursitis +burst +bursty +burt +burton +burtt +burundi +bury +bus +busboy +busch +buses +bush +bushel +bushmaster +bushnell +bushwhack +bushy +business +businessman +businessmen +buss +bust +bustard +bustle +busy +but +butadiene +butane +butch +butchery +butene +buteo +butler +butt +butte +butterball +buttercup +butterfat +butterfield +butterfly +buttermilk +butternut +buttery +buttock +button +buttonhole +buttonweed +buttress +buttrick +butyl +butyrate +butyric +buxom +buxtehude +buxton +buy +buyer +buzz +buzzard +buzzer +buzzing +buzzsaw +buzzword +buzzy +by +bye +byers +bygone +bylaw +byline +bypass +bypath +byproduct +byrd +byrne +byroad +byron +byronic +bystander +byte +byway +byword +byzantine +byzantium +c +c's +ca +cab +cabal +cabana +cabaret +cabbage +cabdriver +cabin +cabinet +cabinetmake +cabinetry +cable +cabot +cacao +cachalot +cache +cackle +cacm +cacophonist +cacophony +cacti +cactus +cadaver +cadaverous +caddis +caddy +cadent +cadenza +cadet +cadillac +cadmium +cadre +cady +caesar +cafe +cafeteria +cage +cagey +cahill +cahoot +caiman +cain +caine +cairn +cairo +cajole +cake +cal +calais +calamitous +calamity +calamus +calcareous +calcify +calcine +calcite +calcium +calculable +calculate +calculi +calculus +calcutta +calder +caldera +caldwell +caleb +calendar +calendrical +calf +calfskin +calgary +calhoun +caliber +calibrate +calibre +calico +california +californium +caliper +caliph +caliphate +calisthenic +calkins +call +calla +callaghan +callahan +caller +calligraph +calligraphy +calliope +callisto +callous +callus +calm +caloric +calorie +calorimeter +calumet +calumniate +calumny +calvary +calve +calvert +calvin +calvinist +calypso +cam +camaraderie +camber +cambodia +cambrian +cambric +cambridge +camden +came +camel +camelback +camellia +camelopard +camelot +cameo +camera +cameraman +cameramen +cameron +cameroun +camilla +camille +camino +camouflage +camp +campaign +campanile +campbell +campfire +campground +campion +campsite +campus +can +can't +canaan +canada +canadian +canal +canary +canaveral +canberra +cancel +cancellate +cancelled +cancelling +cancer +cancerous +candace +candela +candelabra +candid +candidacy +candidate +candide +candle +candlelight +candlelit +candlestick +candlewick +candy +cane +canfield +canine +canis +canister +canker +cankerworm +canna +cannabis +cannel +cannery +cannibal +cannister +cannon +cannonball +cannot +canny +canoe +canoga +canon +canonic +canopy +canst +cant +cantabrigian +cantaloupe +canteen +canterbury +canterelle +canticle +cantilever +cantle +canto +canton +cantonese +cantor +canvas +canvasback +canvass +canyon +cap +capacious +capacitance +capacitate +capacitive +capacitor +capacity +cape +capella +caper +capetown +capillary +capistrano +capita +capital +capitol +capitoline +capitulate +capo +caprice +capricious +capricorn +capsize +capstan +capstone +capsule +captain +captaincy +caption +captious +captivate +captive +captor +capture +caputo +capybara +car +carabao +caracas +caramel +caravan +caraway +carbide +carbine +carbohydrate +carboloy +carbon +carbonaceous +carbonate +carbondale +carbone +carbonic +carbonium +carbonyl +carborundum +carboxy +carboxylic +carboy +carbuncle +carburetor +carcass +carcinogen +carcinogenic +carcinoma +card +cardamom +cardboard +cardiac +cardiff +cardinal +cardiod +cardioid +cardiology +cardiovascular +care +careen +career +carefree +careful +caress +caret +caretaker +careworn +carey +carfare +cargill +cargo +cargoes +carib +caribbean +caribou +caricature +carl +carla +carleton +carlin +carlisle +carlo +carload +carlson +carlton +carlyle +carmela +carmen +carmichael +carmine +carnage +carnal +carnation +carne +carnegie +carney +carnival +carob +carol +carolina +caroline +carolingian +carolinian +carolyn +carouse +carp +carpathia +carpenter +carpentry +carpet +carport +carr +carrageen +carrara +carrel +carriage +carrie +carrion +carroll +carrot +carruthers +carry +carryover +carson +cart +carte +cartel +cartesian +carthage +carthaginian +cartilage +cartilaginous +cartographer +cartographic +cartography +carton +cartoon +cartridge +cartwheel +caruso +carve +carven +caryatid +casanova +casbah +cascade +cascara +case +casebook +casein +casework +casey +cash +cashew +cashier +cashmere +casino +cask +casket +caspian +cassandra +casserole +cassette +cassiopeia +cassius +cassock +cast +castanet +caste +casteth +castigate +castillo +castle +castor +castro +casual +casualty +cat +catabolic +cataclysm +cataclysmic +catalina +catalogue +catalpa +catalysis +catalyst +catalytic +catapult +cataract +catastrophe +catastrophic +catatonia +catatonic +catawba +catbird +catcall +catch +catchup +catchword +catchy +catechism +categoric +category +catenate +cater +caterpillar +catfish +catharsis +cathedra +cathedral +catherine +catherwood +catheter +cathode +cathodic +catholic +catholicism +cathy +cation +cationic +catkin +catlike +catnip +catskill +catsup +cattail +cattle +cattleman +cattlemen +catv +caucasian +caucasus +cauchy +caucus +caught +cauldron +cauliflower +caulk +causal +causate +causation +cause +caustic +caution +cautionary +cautious +cavalcade +cavalier +cavalry +cave +caveat +caveman +cavemen +cavendish +cavern +cavernous +caviar +cavil +cavilling +caviness +cavitate +cavort +caw +cayenne +cayley +cayuga +cb +cbs +ccny +cdc +cease +cecil +cecilia +cecropia +cedar +cede +cedilla +cedric +ceil +celandine +celanese +celebes +celebrant +celebrate +celebrity +celerity +celery +celesta +celeste +celestial +celia +celibacy +cell +cellar +cellophane +cellular +celluloid +cellulose +celsius +celtic +cement +cemetery +cenozoic +censor +censorial +censorious +censure +census +cent +centaur +centenary +centennial +centerline +centerpiece +centigrade +centimeter +centipede +central +centrex +centric +centrifugal +centrifugate +centrifuge +centrist +centroid +centum +century +cepheus +ceq +ceramic +ceramium +cerberus +cereal +cerebellum +cerebral +cerebrate +ceremonial +ceremonious +ceremony +ceres +cereus +cerise +cerium +cern +certain +certainty +certificate +certified +certify +certiorari +certitude +cerulean +cervantes +cervix +cesare +cesium +cessation +cession +cessna +cetera +cetus +ceylon +cezanne +cf +chablis +chad +chadwick +chafe +chaff +chagrin +chain +chair +chairlady +chairman +chairmen +chairperson +chairwoman +chairwomen +chaise +chalcedony +chalcocite +chalet +chalice +chalk +chalkboard +chalkline +chalky +challenge +chalmers +chamber +chamberlain +chambermaid +chambers +chameleon +chamfer +chamois +chamomile +champ +champagne +champaign +champion +champlain +chance +chancel +chancellor +chancery +chancy +chandelier +chandler +chang +change +changeable +changeover +channel +chanson +chant +chantey +chantilly +chantry +chao +chaos +chaotic +chap +chaparral +chapel +chaperon +chaperone +chaplain +chaplaincy +chaplin +chapman +chapter +char +character +characteristic +charcoal +chard +charge +chargeable +chariot +charisma +charismatic +charitable +charity +charlemagne +charles +charleston +charley +charlie +charlotte +charlottesville +charm +charon +chart +charta +chartres +chartreuse +chartroom +charybdis +chase +chasm +chassis +chaste +chastise +chastity +chat +chateau +chateaux +chatham +chattanooga +chattel +chatty +chaucer +chauffeur +chauncey +chautauqua +chaw +cheap +cheat +cheater +check +checkbook +checkerberry +checkerboard +checklist +checkmate +checkout +checkpoint +checksum +checksummed +checksumming +checkup +cheek +cheekbone +cheeky +cheer +cheerful +cheerlead +cheerleader +cheery +cheese +cheesecake +cheesecloth +cheesy +cheetah +chef +chelate +chemic +chemise +chemisorb +chemisorption +chemist +chemistry +chemotherapy +chen +cheney +chenille +cherish +cherokee +cherry +chert +cherub +cherubim +cheryl +chesapeake +cheshire +chess +chest +chester +chesterton +chestnut +chevalier +chevrolet +chevron +chevy +chew +cheyenne +chi +chiang +chianti +chic +chicago +chicagoan +chicanery +chicano +chick +chickadee +chicken +chickweed +chicory +chide +chief +chiefdom +chieftain +chiffon +chigger +chignon +chilblain +child +childbear +childbirth +childhood +childish +childlike +children +chile +chilean +chili +chill +chilly +chime +chimera +chimeric +chimique +chimney +chimpanzee +chin +china +chinaman +chinamen +chinatown +chinch +chinchilla +chine +chinese +chink +chinook +chinquapin +chip +chipboard +chipmunk +chippendale +chiropractor +chirp +chisel +chisholm +chit +chiton +chivalrous +chivalry +chive +chlorate +chlordane +chloride +chlorinate +chlorine +chloroform +chlorophyll +chloroplast +chloroplatinate +chock +chocolate +choctaw +choice +choir +choirmaster +choke +chokeberry +cholera +cholesterol +cholinesterase +chomp +chomsky +choose +choosy +chop +chopin +choppy +choral +chorale +chord +chordal +chordata +chordate +chore +choreograph +choreography +chorine +chortle +chorus +chose +chosen +chou +chow +chowder +chris +christ +christen +christendom +christensen +christenson +christian +christiana +christianson +christie +christina +christine +christlike +christmas +christoffel +christoph +christopher +christy +chromate +chromatic +chromatin +chromatogram +chromatograph +chromatography +chrome +chromic +chromium +chromosome +chromosphere +chronic +chronicle +chronograph +chronography +chronology +chrysanthemum +chrysler +chrysolite +chub +chubby +chuck +chuckle +chuckwalla +chuff +chug +chugging +chum +chummy +chump +chungking +chunk +chunky +church +churchgo +churchgoer +churchgoing +churchill +churchillian +churchman +churchmen +churchwoman +churchwomen +churchyard +churn +chute +chutney +cia +cicada +cicero +ciceronian +cider +cigar +cigarette +cilia +ciliate +cinch +cincinnati +cinder +cinderella +cindy +cinema +cinematic +cinerama +cinnabar +cinnamon +cinquefoil +cipher +circa +circe +circle +circlet +circuit +circuitous +circuitry +circulant +circular +circulate +circulatory +circumcircle +circumcise +circumcision +circumference +circumferential +circumflex +circumlocution +circumpolar +circumscribe +circumscription +circumspect +circumsphere +circumstance +circumstantial +circumvent +circumvention +circus +cistern +cit +citadel +citation +cite +citizen +citizenry +citrate +citric +citroen +citron +citrus +city +cityscape +citywide +civet +civic +civil +civilian +clad +cladophora +claim +claimant +claire +clairvoyant +clam +clamber +clammy +clamorous +clamp +clamshell +clan +clandestine +clang +clank +clannish +clap +clapboard +clapeyron +clara +clare +claremont +clarence +clarendon +claret +clarify +clarinet +clarity +clark +clarke +clash +clasp +class +classic +classification +classificatory +classify +classmate +classroom +classy +clatter +clattery +claude +claudia +claudio +claus +clause +clausen +clausius +claustrophobia +claustrophobic +claw +clay +clayton +clean +cleanse +cleanup +clear +clearance +clearheaded +clearwater +cleat +cleavage +cleave +cleft +clement +clemson +clench +clergy +clergyman +clergymen +cleric +clerk +cleveland +clever +cliche +click +client +clientele +cliff +cliffhang +clifford +clifton +climactic +climate +climatic +climatology +climax +climb +clime +clinch +cling +clinging +clinic +clinician +clink +clint +clinton +clio +clip +clipboard +clique +clitoris +clive +cloak +cloakroom +clobber +clock +clockwatcher +clockwise +clockwork +clod +cloddish +clog +clogging +cloister +clomp +clone +clonic +close +closet +closeup +closure +clot +cloth +clothbound +clothe +clothesbrush +clotheshorse +clothesline +clothesman +clothesmen +clothier +clotho +cloture +cloud +cloudburst +cloudy +clout +clove +cloven +clown +cloy +club +clubhouse +clubroom +cluck +clue +cluj +clump +clumsy +clung +cluster +clutch +clutter +clyde +clytemnestra +co +coach +coachman +coachmen +coachwork +coadjutor +coagulable +coagulate +coal +coalesce +coalescent +coalition +coarse +coarsen +coast +coastal +coastline +coat +coates +coattail +coauthor +coax +coaxial +cobalt +cobb +cobble +cobblestone +cobol +cobra +cobweb +coca +cocaine +coccidiosis +cochineal +cochlea +cochran +cochrane +cock +cockatoo +cockcrow +cockeye +cockle +cocklebur +cockleshell +cockpit +cockroach +cocksure +cocktail +cocky +coco +cocoa +coconut +cocoon +cod +coda +coddington +coddle +code +codebreak +codeposit +codetermine +codeword +codfish +codicil +codify +codomain +codon +codpiece +cody +coed +coeditor +coeducation +coefficient +coequal +coerce +coercible +coercion +coercive +coexist +coexistent +coextensive +cofactor +coffee +coffeecup +coffeepot +coffer +coffey +coffin +coffman +cog +cogent +cogitate +cognac +cognate +cognition +cognitive +cognizable +cognizant +cohen +cohere +coherent +cohesion +cohesive +cohn +cohomology +cohort +cohosh +coiffure +coil +coin +coinage +coincide +coincident +coincidental +coke +col +cola +colander +colatitude +colby +cold +cole +coleman +coleridge +colette +coleus +colgate +colicky +coliform +coliseum +collaborate +collage +collagen +collapse +collapsible +collar +collarbone +collard +collate +collateral +colleague +collect +collectible +collector +college +collegial +collegian +collegiate +collet +collide +collie +collier +collimate +collinear +collins +collision +collocation +colloidal +colloq +colloquia +colloquial +colloquium +colloquy +collude +collusion +cologne +colombia +colombo +colon +colonel +colonial +colonist +colonnade +colony +colorado +colorate +coloratura +colorimeter +colossal +colosseum +colossi +colossus +colt +coltish +coltsfoot +columbia +columbine +columbus +column +columnar +colza +coma +comanche +comatose +comb +combat +combatant +combatted +combinate +combination +combinator +combinatorial +combinatoric +combine +combustible +combustion +come +comeback +comedian +comedy +comet +cometary +cometh +comfort +comic +cominform +comma +command +commandant +commandeer +commando +commemorate +commend +commendation +commendatory +commensurable +commensurate +comment +commentary +commentator +commerce +commercial +commingle +commiserate +commissariat +commissary +commission +commit +committable +committal +committed +committee +committeeman +committeemen +committeewoman +committeewomen +committing +commodious +commodity +commodore +common +commonality +commonplace +commonweal +commonwealth +commotion +communal +commune +communicable +communicant +communicate +communion +communique +commutate +commute +compact +compacter +compactify +compagnie +companion +companionway +company +comparative +comparator +compare +comparison +compartment +compass +compassion +compassionate +compatible +compatriot +compel +compellable +compelled +compelling +compendia +compendium +compensable +compensate +compensatory +compete +competent +competition +competitive +competitor +compilation +compile +complacent +complain +complainant +complaint +complaisant +compleat +complement +complementarity +complementary +complementation +complete +completion +complex +complexion +compliant +complicate +complicity +compliment +complimentary +compline +comply +component +componentry +comport +compose +composite +composition +compositor +compost +composure +compote +compound +comprehend +comprehensible +comprehension +comprehensive +compress +compressible +compression +compressive +compressor +comprise +compromise +compton +comptroller +compulsion +compulsive +compulsory +compunction +computation +compute +comrade +con +conakry +conant +concatenate +concave +conceal +concede +conceit +conceive +concentrate +concentric +concept +conception +conceptual +concern +concert +concerti +concertina +concertmaster +concerto +concession +concessionaire +conch +concierge +conciliate +conciliatory +concise +concision +conclave +conclude +conclusion +conclusive +concoct +concocter +concomitant +concord +concordant +concourse +concrete +concretion +concubine +concur +concurred +concurrent +concurring +concussion +condemn +condemnate +condemnatory +condensate +condense +condensible +condescend +condescension +condiment +condition +condolence +condominium +condone +conduce +conducive +conduct +conductance +conductor +conduit +cone +coneflower +conestoga +coney +confabulate +confect +confectionery +confederacy +confederate +confer +conferee +conference +conferrable +conferred +conferring +confess +confession +confessor +confidant +confidante +confide +confident +confidential +configuration +configure +confine +confirm +confirmation +confirmatory +confiscable +confiscate +confiscatory +conflagrate +conflagration +conflict +confluent +confocal +conform +conformal +conformance +conformation +confound +confrere +confront +confrontation +confucian +confucianism +confucius +confuse +confusion +confute +congeal +congener +congenial +congenital +congest +congestion +congestive +conglomerate +congo +congolese +congratulate +congratulatory +congregate +congress +congressional +congressman +congressmen +congresswoman +congresswomen +congruent +conic +conifer +coniferous +conjectural +conjecture +conjoin +conjoint +conjugacy +conjugal +conjugate +conjunct +conjuncture +conjure +conklin +conley +conn +connally +connect +connecticut +connector +conner +connie +connivance +connive +connoisseur +connors +connotation +connotative +connote +connubial +conquer +conqueror +conquest +conquistador +conrad +conrail +consanguine +consanguineous +conscience +conscientious +conscionable +conscious +conscript +conscription +consecrate +consecutive +consensus +consent +consequent +consequential +conservation +conservatism +conservative +conservator +conservatory +conserve +consider +considerate +consign +consignee +consignor +consist +consistent +consolation +console +consolidate +consonant +consonantal +consort +consortium +conspicuous +conspiracy +conspirator +conspiratorial +conspire +constance +constant +constantine +constantinople +constellate +consternate +constipate +constituent +constitute +constitution +constitutive +constrain +constraint +constrict +constrictor +construct +constructible +constructor +construe +consul +consular +consulate +consult +consultant +consultation +consultative +consume +consummate +consumption +consumptive +contact +contagion +contagious +contain +contaminant +contaminate +contemplate +contemporaneous +contemporary +contempt +contemptible +contemptuous +contend +content +contention +contentious +contest +contestant +context +contextual +contiguity +contiguous +continent +continental +contingent +continua +continual +continuant +continuation +continue +continued +continuity +continuo +continuous +continuum +contort +contour +contraband +contrabass +contraception +contraceptive +contract +contractor +contractual +contradict +contradictory +contradistinct +contradistinction +contradistinguish +contralateral +contralto +contraption +contrariety +contrariwise +contrary +contrast +contravariant +contravene +contravention +contretemps +contribute +contribution +contributor +contributory +contrite +contrition +contrivance +contrive +control +controllable +controlled +controller +controlling +controversial +controversy +controvertible +contumacy +contusion +conundrum +convair +convalesce +convalescent +convect +convene +convenient +convent +convention +converge +convergent +conversant +conversation +converse +conversion +convert +convertible +convex +convey +conveyance +conveyor +convict +convince +convivial +convocate +convocation +convoke +convolute +convolution +convolve +convoy +convulse +convulsion +convulsive +conway +cony +coo +cook +cookbook +cooke +cookery +cookie +cooky +cool +coolant +cooley +coolheaded +coolidge +coon +coop +cooperate +coordinate +coors +coot +cop +cope +copeland +copenhagen +copernican +copernicus +copious +coplanar +copolymer +copperas +copperfield +copperhead +coppery +copra +coprinus +coproduct +copter +copy +copybook +copyright +copywriter +coquette +coquina +coral +coralberry +coralline +corbel +corbett +corcoran +cord +cordage +cordial +cordite +cordon +corduroy +core +corey +coriander +corinth +corinthian +coriolanus +cork +corkscrew +cormorant +corn +cornbread +cornea +cornelia +cornelius +cornell +cornerstone +cornet +cornfield +cornflower +cornish +cornmeal +cornstarch +cornucopia +cornwall +corny +corollary +corona +coronado +coronary +coronate +coroner +coronet +coroutine +corp +corpora +corporal +corporate +corporeal +corps +corpse +corpsman +corpsmen +corpulent +corpus +corpuscular +corral +corralled +correct +corrector +correlate +correspond +correspondent +corridor +corrigenda +corrigendum +corrigible +corroborate +corroboree +corrode +corrodible +corrosion +corrosive +corrugate +corrupt +corruptible +corruption +corsage +corset +cortege +cortex +cortical +cortland +corundum +coruscate +corvallis +corvette +corvus +cos +cosec +coset +cosgrove +cosh +cosine +cosmetic +cosmic +cosmology +cosmopolitan +cosmos +cosponsor +cossack +cost +costa +costello +costume +cosy +cot +cotangent +cotillion +cotman +cotoneaster +cotta +cottage +cotton +cottonmouth +cottonseed +cottonwood +cottony +cottrell +cotty +cotyledon +couch +cougar +cough +could +couldn't +coulomb +coulter +council +councilman +councilmen +councilwoman +councilwomen +counsel +counselor +count +countdown +countenance +counteract +counterargument +counterattack +counterbalance +counterclockwise +counterexample +counterfeit +counterflow +counterintuitive +counterman +countermen +counterpart +counterpoint +counterpoise +counterproductive +counterproposal +countersink +countersunk +countervail +countrify +country +countryman +countrymen +countryside +countrywide +county +countywide +coup +coupe +couple +coupon +courage +courageous +courier +course +court +courteous +courtesan +courtesy +courthouse +courtier +courtney +courtroom +courtyard +couscous +cousin +couturier +covalent +covariant +covariate +covary +cove +coven +covenant +coventry +cover +coverage +coverall +coverlet +covert +covet +covetous +cow +cowan +coward +cowardice +cowbell +cowbird +cowboy +cowgirl +cowhand +cowherd +cowhide +cowl +cowlick +cowman +cowmen +coworker +cowpea +cowpoke +cowpony +cowpox +cowpunch +cowry +cowslip +cox +coxcomb +coy +coyote +coypu +cozen +cozy +cpa +cpu +crab +crabapple +crabmeat +crack +crackle +crackpot +cradle +craft +craftsman +craftsmen +craftspeople +craftsperson +crafty +crag +craggy +craig +cram +cramer +cramp +cranberry +crandall +crane +cranelike +cranford +crania +cranium +crank +crankcase +crankshaft +cranky +cranny +cranston +crap +crappie +crash +crass +crate +crater +cravat +crave +craven +craw +crawford +crawl +crawlspace +crayfish +crayon +craze +crazy +creak +creaky +cream +creamery +creamy +crease +create +creating +creature +creche +credent +credential +credenza +credible +credit +creditor +credo +credulity +credulous +creed +creedal +creek +creekside +creep +creepy +cremate +crematory +creole +creon +creosote +crepe +crept +crescendo +crescent +cress +crest +crestfallen +crestview +cretaceous +cretan +crete +cretin +cretinous +crevice +crew +crewcut +crewel +crewman +crewmen +crib +cricket +cried +crime +crimea +criminal +crimp +crimson +cringe +crinkle +cripple +crises +crisis +crisp +crispin +criss +crisscross +criteria +criterion +critic +critique +critter +croak +croatia +crochet +crock +crockery +crockett +crocodile +crocodilian +crocus +croft +croix +cromwell +cromwellian +crone +crony +crook +croon +crop +croquet +crosby +cross +crossarm +crossbar +crossbill +crossbow +crosscut +crosshatch +crosslink +crossover +crosspoint +crossroad +crosstalk +crosswalk +crossway +crosswise +crossword +crosswort +crotch +crotchety +crouch +croupier +crow +crowbait +crowberry +crowd +crowfoot +crowley +crown +croydon +crt +crucial +crucible +crucifix +crucifixion +crucify +crud +cruddy +crude +cruel +cruelty +cruickshank +cruise +crumb +crumble +crummy +crump +crumple +crunch +crupper +crusade +crush +crusoe +crust +crusty +crutch +crux +cruz +cry +cryogenic +cryostat +crypt +cryptanalysis +cryptanalyst +cryptanalytic +cryptanalyze +cryptic +cryptogram +cryptographer +cryptography +cryptology +crystal +crystalline +crystallite +crystallographer +crystallography +csnet +ct +cub +cuba +cubbyhole +cube +cubic +cuckoo +cucumber +cud +cuddle +cuddly +cudgel +cue +cuff +cufflink +cuisine +culbertson +culinary +cull +culminate +culpa +culpable +culprit +cult +cultivable +cultivate +cultural +culture +culver +culvert +cumberland +cumbersome +cumin +cummings +cummins +cumulate +cumulus +cunard +cunning +cunningham +cuny +cup +cupboard +cupful +cupid +cupidity +cupric +cuprous +cur +curate +curb +curbside +curd +curdle +cure +curfew +curia +curie +curio +curiosity +curious +curium +curl +curlew +curlicue +curran +currant +current +curricula +curricular +curriculum +curry +curse +cursive +cursor +cursory +curt +curtail +curtain +curtis +curtsey +curvaceous +curvature +curve +curvilinear +cushing +cushion +cushman +cusp +custer +custodial +custodian +custody +custom +customary +customhouse +cut +cutaneous +cutback +cute +cutesy +cutlass +cutler +cutlet +cutoff +cutout +cutover +cutset +cutthroat +cuttlebone +cuttlefish +cutworm +cyanamid +cyanate +cyanic +cyanide +cybernetic +cybernetics +cycad +cyclades +cycle +cyclic +cyclist +cyclone +cyclopean +cyclops +cyclorama +cyclotomic +cyclotron +cygnus +cylinder +cylindric +cynic +cynthia +cypress +cyprian +cypriot +cyprus +cyril +cyrillic +cyrus +cyst +cysteine +cytochemistry +cytology +cytolysis +cytoplasm +cytosine +cz +czar +czarina +czech +czechoslovakia +czerniak +d +d'art +d'etat +d'oeuvre +d's +dab +dabble +dacca +dachshund +dactyl +dactylic +dad +dada +dadaism +dadaist +daddy +dade +daedalus +daffodil +daffy +dagger +dahl +dahlia +dahomey +dailey +daimler +dainty +dairy +dairylea +dairyman +dairymen +dais +daisy +dakar +dakota +dale +daley +dalhousie +dallas +dally +dalton +daly +dalzell +dam +damage +damascus +damask +dame +damn +damnation +damon +damp +dampen +damsel +dan +dana +danbury +dance +dandelion +dandy +dane +dang +danger +dangerous +dangle +daniel +danielson +danish +dank +danny +dante +danube +danubian +danzig +daphne +dapper +dapple +dar +dare +daredevil +darius +dark +darken +darkle +darlene +darling +darn +darpa +darrell +darry +dart +dartmouth +darwin +darwinian +dash +dashboard +dastard +data +database +date +dateline +dater +datsun +datum +daub +daugherty +daughter +daunt +dauphin +dauphine +dave +davenport +david +davidson +davies +davis +davison +davit +davy +dawn +dawson +day +daybed +daybreak +daydream +daylight +daytime +dayton +daytona +daze +dazzle +dc +de +deacon +deaconess +deactivate +dead +deaden +deadhead +deadline +deadlock +deadwood +deaf +deafen +deal +deallocate +dealt +dean +deane +deanna +dear +dearborn +dearie +dearth +death +deathbed +deathward +debacle +debar +debarring +debase +debate +debater +debauch +debauchery +debbie +debby +debenture +debilitate +debility +debit +debonair +deborah +debra +debrief +debris +debt +debtor +debug +debugged +debugger +debugging +debunk +debussy +debut +debutante +dec +decade +decadent +decaffeinate +decal +decant +decathlon +decatur +decay +decca +decease +decedent +deceit +deceitful +deceive +decelerate +december +decennial +decent +deception +deceptive +decertify +decibel +decide +deciduous +decile +decimal +decimate +decipher +decision +decisional +decisionmake +decisive +deck +decker +declaim +declamation +declamatory +declaration +declarative +declarator +declaratory +declare +declassify +declination +decline +declivity +decode +decolletage +decollimate +decolonize +decommission +decompile +decomposable +decompose +decomposition +decompress +decompression +decontrol +decontrolled +decontrolling +deconvolution +deconvolve +decor +decorate +decorous +decorticate +decorum +decouple +decoy +decrease +decree +decreeing +decrement +decry +decrypt +decryption +dedicate +deduce +deducible +deduct +deductible +dee +deed +deem +deemphasize +deep +deepen +deer +deere +deerskin +deerstalker +deface +default +defeat +defecate +defect +defector +defend +defendant +defensible +defensive +defer +deferent +deferrable +deferral +deferred +deferring +defiant +deficient +deficit +define +definite +definition +definitive +deflate +deflater +deflect +deflector +defocus +deforest +deforestation +deform +deformation +defraud +defray +defrock +defrost +deft +defunct +defuse +defy +degas +degassing +degeneracy +degenerate +degradation +degrade +degrease +degree +degum +degumming +dehumidify +dehydrate +deify +deign +deity +deja +deject +del +delaney +delano +delaware +delay +delectable +delectate +delegable +delegate +delete +deleterious +deletion +delft +delhi +delia +deliberate +delicacy +delicate +delicatessen +delicious +delicti +delight +delightful +delilah +delimit +delimitation +delineament +delineate +delinquent +deliquesce +deliquescent +delirious +delirium +deliver +deliverance +delivery +dell +della +delmarva +delouse +delphi +delphic +delphine +delphinium +delphinus +delta +deltoid +delude +deluge +delusion +delusive +deluxe +delve +demagnify +demagogue +demand +demarcate +demark +demean +demented +dementia +demerit +demigod +demijohn +demiscible +demise +demit +demitted +demitting +demo +democracy +democrat +democratic +demodulate +demography +demolish +demolition +demon +demoniac +demonic +demonstrable +demonstrate +demote +demountable +dempsey +demultiplex +demur +demure +demurred +demurrer +demurring +demystify +den +denature +dendrite +dendritic +deneb +denebola +deniable +denial +denigrate +denizen +denmark +dennis +denny +denominate +denotation +denotative +denote +denouement +denounce +dense +densitometer +dent +dental +dentistry +denton +denture +denudation +denude +denumerable +denunciate +denunciation +denver +deny +deodorant +deoxyribonucleic +deoxyribose +depart +department +departure +depend +dependent +depict +deplete +depletion +deplore +deploy +deport +deportation +deportee +depose +deposit +depositary +deposition +depositor +depository +depot +deprave +deprecate +deprecatory +depreciable +depreciate +depredate +depress +depressant +depressible +depression +depressive +depressor +deprivation +deprive +depth +deputation +depute +deputy +derail +derange +derate +derby +derbyshire +dereference +deregulate +deregulatory +derek +derelict +deride +derision +derisive +derivate +derive +derogate +derogatory +derrick +derriere +dervish +des +descant +descartes +descend +descendant +descendent +descent +describe +description +descriptive +descriptor +desecrate +desecrater +desegregate +desert +deserve +desicate +desiderata +desideratum +design +designate +desire +desirous +desist +desk +desmond +desolate +desolater +desorption +despair +desperado +desperate +despicable +despise +despite +despoil +despond +despondent +despot +despotic +dessert +dessicate +destabilize +destinate +destine +destiny +destitute +destroy +destruct +destructor +desuetude +desultory +detach +detail +detain +detect +detector +detent +detente +detention +deter +detergent +deteriorate +determinant +determinate +determine +deterred +deterrent +deterring +detest +detestation +detonable +detonate +detour +detoxify +detract +detractor +detriment +detroit +deuce +deus +deuterate +deuterium +deuteron +devastate +develop +deviant +deviate +device +devil +devilish +devious +devise +devisee +devoid +devolution +devolve +devon +devonshire +devote +devotee +devotion +devour +devout +dew +dewar +dewdrop +dewey +dewitt +dewy +dexter +dexterity +dextrose +dextrous +dey +dhabi +dharma +diabase +diabetes +diabetic +diabolic +diachronic +diacritic +diacritical +diadem +diagnosable +diagnose +diagnoses +diagnosis +diagnostic +diagnostician +diagonal +diagram +diagrammatic +dial +dialect +dialectic +dialogue +dialup +dialysis +diamagnetic +diamagnetism +diameter +diamond +diana +diane +dianne +diaper +diaphanous +diaphragm +diary +diathermy +diathesis +diatom +diatomaceous +diatomic +diatonic +diatribe +dibble +dice +dichloride +dichondra +dichotomize +dichotomous +dichotomy +dick +dickcissel +dickens +dickerson +dickey +dickinson +dickson +dicotyledon +dicta +dictate +dictatorial +diction +dictionary +dictum +did +didactic +diddle +didn't +dido +die +diebold +died +diego +diehard +dieldrin +dielectric +diem +diesel +diet +dietary +dietetic +diethylstilbestrol +dietician +dietrich +diety +dietz +diffeomorphic +diffeomorphism +differ +different +differentiable +differential +differentiate +difficult +difficulty +diffident +diffract +diffractometer +diffuse +diffusible +diffusion +diffusive +difluoride +dig +digest +digestible +digestion +digestive +digging +digit +digital +digitalis +digitate +dignify +dignitary +dignity +digram +digress +digression +dihedral +dilapidate +dilatation +dilate +dilatory +dilemma +dilettante +diligent +dill +dillon +dilogarithm +diluent +dilute +dilution +dim +dime +dimension +dimethyl +diminish +diminution +diminutive +dimple +din +dinah +dine +ding +dinghy +dingo +dingy +dinnertime +dinnerware +dinosaur +dint +diocesan +diocese +diode +dionysian +dionysus +diophantine +diopter +diorama +diorite +dioxide +dip +diphtheria +diphthong +diploid +diploidy +diploma +diplomacy +diplomat +diplomatic +dipole +dirac +dire +direct +director +directorate +directorial +directory +directrices +directrix +dirge +dirichlet +dirt +dirty +dis +disaccharide +disambiguate +disastrous +disburse +disc +discern +discernible +disciple +disciplinarian +disciplinary +discipline +disco +discoid +discomfit +discordant +discovery +discreet +discrepant +discrete +discretion +discretionary +discriminable +discriminant +discriminate +discriminatory +discus +discuss +discussant +discussion +disdain +disdainful +disembowel +disgruntle +disgustful +dish +dishes +dishevel +dishwasher +dishwater +disjunct +disk +dismal +dismissal +disney +disneyland +disparage +disparate +dispel +dispelled +dispelling +dispensable +dispensary +dispensate +dispense +dispersal +disperse +dispersible +dispersion +dispersive +disposable +disposal +disputant +dispute +disquietude +disquisition +disrupt +disruption +disruptive +dissemble +disseminate +dissension +dissertation +dissident +dissipate +dissociable +dissociate +dissonant +dissuade +distaff +distal +distant +distillate +distillery +distinct +distinguish +distort +distortion +distraught +distribution +distributive +distributor +district +disturb +disturbance +disulfide +disyllable +ditch +dither +ditto +ditty +ditzel +diurnal +diva +divalent +divan +dive +diverge +divergent +diverse +diversify +diversion +diversionary +divert +divest +divestiture +divide +dividend +divination +divine +divisible +division +divisional +divisive +divisor +divorce +divorcee +divulge +dixie +dixieland +dixon +dizzy +djakarta +dna +dnieper +do +dobbin +dobbs +doberman +dobson +docile +dock +docket +dockside +dockyard +doctor +doctoral +doctorate +doctrinaire +doctrinal +doctrine +document +documentary +documentation +dod +dodd +dodecahedra +dodecahedral +dodecahedron +dodge +dodo +dodson +doe +doesn't +doff +dog +dogbane +dogberry +doge +dogfish +dogging +doggone +doghouse +dogleg +dogma +dogmatic +dogmatism +dogtooth +dogtrot +dogwood +doherty +dolan +dolce +doldrum +doldrums +dole +doleful +doll +dollar +dollop +dolly +dolomite +dolomitic +dolores +dolphin +dolt +doltish +domain +dome +domenico +domesday +domestic +domesticate +domicile +dominant +dominate +domineer +domingo +dominic +dominican +dominick +dominion +dominique +domino +don +don't +donahue +donald +donaldson +donate +done +doneck +donkey +donna +donnelly +donner +donnybrook +donor +donovan +doodle +dooley +doolittle +doom +doomsday +door +doorbell +doorkeep +doorkeeper +doorknob +doorman +doormen +doorstep +doorway +dopant +dope +doppler +dora +dorado +dorcas +dorchester +doreen +doria +doric +doris +dormant +dormitory +dorothea +dorothy +dorset +dortmund +dosage +dose +dosimeter +dossier +dostoevsky +dot +dote +double +doubleday +doubleheader +doublet +doubleton +doubloon +doubt +doubtful +douce +doug +dough +dougherty +doughnut +douglas +douglass +dour +douse +dove +dovekie +dovetail +dow +dowager +dowel +dowitcher +dowling +down +downbeat +downcast +downdraft +downey +downfall +downgrade +downhill +downing +downplay +downpour +downright +downriver +downs +downside +downslope +downspout +downstairs +downstate +downstream +downtown +downtrend +downtrodden +downturn +downward +downwind +dowry +doyle +doze +dozen +dr +drab +draco +draft +draftee +draftsman +draftsmen +draftsperson +drafty +drag +dragging +dragnet +dragon +dragonfly +dragonhead +dragoon +drain +drainage +drake +dram +drama +dramatic +dramatist +dramaturgy +drank +drape +drapery +drastic +draw +drawback +drawbridge +drawl +drawn +dread +dreadful +dreadnought +dream +dreamboat +dreamlike +dreamt +dreamy +dreary +dredge +dreg +drench +dress +dressmake +dressy +drew +drexel +dreyfuss +drib +dribble +dried +drier +drift +drill +drink +drip +drippy +driscoll +drive +driven +driveway +drizzle +drizzly +droll +dromedary +drone +drool +droop +droopy +drop +drophead +droplet +dropout +drosophila +dross +drought +drove +drown +drowse +drowsy +drub +drudge +drudgery +drug +drugging +drugstore +druid +drum +drumhead +drumlin +drummond +drunk +drunkard +drunken +drury +dry +dryad +dryden +du +dual +dualism +duane +dub +dubhe +dubious +dubitable +dublin +ducat +duchess +duck +duckling +duct +ductile +ductwork +dud +dudley +due +duel +duet +duff +duffel +duffy +dug +dugan +dugout +duke +dukedom +dulcet +dull +dully +dulse +duluth +duly +duma +dumb +dumbbell +dummy +dump +dumpty +dumpy +dun +dunbar +duncan +dunce +dune +dunedin +dung +dungeon +dunham +dunk +dunkirk +dunlap +dunlop +dunn +duopolist +duopoly +dupe +duplex +duplicable +duplicate +duplicity +dupont +duquesne +durable +durance +durango +duration +durer +duress +durham +during +durkee +durkin +durrell +durward +dusenberg +dusenbury +dusk +dusky +dusseldorf +dust +dustbin +dusty +dutch +dutchess +dutchman +dutchmen +dutiable +dutiful +dutton +duty +dwarf +dwarves +dwell +dwelt +dwight +dwindle +dwyer +dyad +dyadic +dye +dyeing +dyer +dying +dyke +dylan +dynamic +dynamism +dynamite +dynamo +dynast +dynastic +dynasty +dyne +dysentery +dyspeptic +dysplasia +dysprosium +dystrophy +e +e'er +e's +e.g +each +eagan +eager +eagle +ear +eardrum +earl +earmark +earn +earnest +earphone +earring +earsplitting +earth +earthen +earthenware +earthmen +earthmove +earthmover +earthmoving +earthquake +earthshaking +earthworm +earthy +earwig +ease +easel +east +eastbound +eastern +easternmost +eastland +eastman +eastward +eastwood +easy +easygoing +eat +eaten +eater +eaton +eave +eavesdrop +eavesdropped +eavesdropper +eavesdropping +ebb +eben +ebony +ebullient +eccentric +eccles +ecclesiastic +echelon +echidna +echinoderm +echo +echoes +eclat +eclectic +eclipse +ecliptic +eclogue +ecole +ecology +econometric +econometrica +economic +economist +economy +ecosystem +ecstasy +ecstatic +ectoderm +ectopic +ecuador +ecumenic +ecumenist +ed +eddie +eddy +edelweiss +edematous +eden +edgar +edge +edgerton +edgewise +edging +edgy +edible +edict +edifice +edify +edinburgh +edison +edit +edith +edition +editor +editorial +edmonds +edmondson +edmonton +edmund +edna +edt +eduardo +educable +educate +edward +edwardian +edwardine +edwards +edwin +edwina +eel +eelgrass +eeoc +eerie +eerily +efface +effaceable +effect +effectual +effectuate +effeminate +efferent +effete +efficacious +efficacy +efficient +effie +effloresce +efflorescent +effluent +effluvia +effluvium +effort +effusion +effusive +eft +egalitarian +egan +egg +egghead +eggplant +eggshell +ego +egocentric +egotism +egotist +egregious +egress +egret +egypt +egyptian +eh +ehrlich +eider +eidetic +eigenfunction +eigenspace +eigenstate +eigenvalue +eigenvector +eight +eighteen +eighteenth +eightfold +eighth +eightieth +eighty +eileen +einstein +einsteinian +einsteinium +eire +eisenhower +eisner +either +ejaculate +eject +ejector +eke +ekstrom +ektachrome +el +elaborate +elaine +elan +elapse +elastic +elastomer +elate +elba +elbow +elder +eldest +eldon +eleanor +eleazar +elect +elector +electoral +electorate +electra +electress +electret +electric +electrician +electrify +electro +electrocardiogram +electrocardiograph +electrode +electroencephalogram +electroencephalograph +electroencephalography +electrolysis +electrolyte +electrolytic +electron +electronic +electrophoresis +electrophorus +elegant +elegiac +elegy +element +elementary +elena +elephant +elephantine +elevate +eleven +eleventh +elfin +elgin +eli +elicit +elide +eligible +elijah +eliminate +elinor +eliot +elisabeth +elisha +elision +elite +elizabeth +elizabethan +elk +elkhart +ell +ella +ellen +elliot +elliott +ellipse +ellipsis +ellipsoid +ellipsoidal +ellipsometer +elliptic +ellis +ellison +ellsworth +ellwood +elm +elmer +elmhurst +elmira +elmsford +eloise +elongate +elope +eloquent +else +elsevier +elsewhere +elsie +elsinore +elton +eluate +elucidate +elude +elusive +elute +elution +elves +ely +elysee +elysian +em +emaciate +emanate +emancipate +emanuel +emasculate +embalm +embank +embarcadero +embargo +embargoes +embark +embarrass +embassy +embattle +embed +embeddable +embedded +embedder +embedding +embellish +ember +embezzle +emblazon +emblem +emblematic +embodiment +embody +embolden +emboss +embouchure +embower +embrace +embraceable +embrittle +embroider +embroidery +embroil +embryo +embryology +embryonic +emcee +emendable +emerald +emerge +emergent +emeriti +emeritus +emerson +emery +emigrant +emigrate +emil +emile +emilio +emily +eminent +emirate +emissary +emission +emissivity +emit +emittance +emitted +emitter +emitting +emma +emmanuel +emmett +emolument +emory +emotion +emotional +empathy +emperor +emphases +emphasis +emphatic +emphysema +emphysematous +empire +empiric +emplace +employ +employed +employee +employer +employing +emporium +empower +empress +empty +emulate +emulsify +emulsion +en +enable +enamel +encapsulate +encephalitis +enchantress +enclave +encomia +encomium +encore +encroach +encryption +encumber +encumbrance +encyclopedic +end +endemic +endgame +endicott +endoderm +endogamous +endogamy +endogenous +endomorphism +endorse +endosperm +endothelial +endothermic +endow +endpoint +endurance +endure +enemy +energetic +energy +enervate +enfant +enfield +enforceable +enforcible +eng +engage +engel +engine +engineer +england +englander +engle +englewood +english +englishman +englishmen +enhance +enid +enigma +enigmatic +enjoinder +enlargeable +enliven +enmity +enoch +enol +enormity +enormous +enos +enough +enquire +enquiry +enrico +enrollee +ensconce +ensemble +enstatite +entendre +enter +enterprise +entertain +enthalpy +enthrall +enthusiasm +enthusiast +enthusiastic +entice +entire +entirety +entity +entomology +entourage +entranceway +entrant +entrepreneur +entrepreneurial +entropy +entry +enumerable +enumerate +enunciable +enunciate +envelop +envelope +enviable +envious +environ +envoy +envy +enzymatic +enzyme +enzymology +eocene +eohippus +eosine +epa +epaulet +ephemeral +ephemerides +ephemeris +ephesian +ephesus +ephraim +epic +epicure +epicurean +epicycle +epicyclic +epidemic +epidemiology +epidermic +epidermis +epigenetic +epigram +epigrammatic +epigraph +epileptic +epilogue +epimorphism +epiphany +epiphyseal +epiphysis +episcopal +episcopalian +episcopate +episode +episodic +epistemology +epistle +epistolatory +epitaph +epitaxial +epitaxy +epithelial +epithelium +epithet +epitome +epoch +epochal +epoxy +epsilon +epsom +epstein +equable +equal +equanimity +equate +equatorial +equestrian +equidistant +equilateral +equilibrate +equilibria +equilibrium +equine +equinoctial +equinox +equip +equipoise +equipotent +equipped +equipping +equitable +equitation +equity +equivalent +equivocal +equivocate +era +eradicable +eradicate +erasable +erase +erasmus +erastus +erasure +erato +eratosthenes +erbium +erda +ere +erect +erg +ergative +ergodic +eric +erich +erickson +ericsson +erie +erik +erlenmeyer +ernest +ernestine +ernie +ernst +erode +erodible +eros +erosible +erosion +erosive +erotic +erotica +err +errancy +errand +errant +errantry +errata +erratic +erratum +errol +erroneous +error +ersatz +erskine +erudite +erudition +erupt +eruption +ervin +erwin +escadrille +escalate +escapade +escape +escapee +escheat +escherichia +eschew +escort +escritoire +escrow +escutcheon +eskimo +esmark +esophagi +esoteric +especial +espionage +esplanade +esposito +espousal +espouse +esprit +esquire +essay +essen +essence +essential +essex +est +establish +estate +esteem +estella +ester +estes +esther +estimable +estimate +estonia +estop +estoppal +estrange +estuarine +estuary +et +eta +etc +etch +eternal +eternity +ethan +ethane +ethanol +ethel +ether +ethereal +ethic +ethiopia +ethnic +ethnography +ethnology +ethology +ethos +ethyl +ethylene +etiology +etiquette +etruscan +etude +etymology +eucalyptus +eucharist +euclid +euclidean +eucre +eugene +eugenia +eugenic +eukaryote +euler +eulerian +eulogy +eumenides +eunice +euphemism +euphemist +euphorbia +euphoria +euphoric +euphrates +eurasia +eureka +euridyce +euripides +europa +europe +european +europium +eurydice +eutectic +euterpe +euthanasia +eva +evacuate +evade +evaluable +evaluate +evanescent +evangel +evangelic +evans +evanston +evansville +evaporate +evasion +evasive +eve +evelyn +even +evenhanded +evensong +event +eventful +eventide +eventual +eventuate +eveready +everett +everglades +evergreen +everhart +everlasting +every +everybody +everyday +everyman +everyone +everything +everywhere +evict +evident +evidential +evil +evildoer +evince +evocable +evocate +evocation +evoke +evolution +evolutionary +evolve +evzone +ewe +ewing +ex +exacerbate +exact +exacter +exaggerate +exalt +exaltation +exam +examination +examine +example +exasperate +exasperater +excavate +exceed +excel +excelled +excellent +excelling +excelsior +except +exception +exceptional +excerpt +excess +excessive +exchange +exchangeable +exchequer +excisable +excise +excision +excitation +excitatory +excite +exciton +exclaim +exclamation +exclamatory +exclude +exclusion +exclusionary +exclusive +excommunicate +excoriate +excrescent +excrete +excretion +excretory +excruciate +exculpate +exculpatory +excursion +excursus +excusable +excuse +execrable +execrate +execute +execution +executive +executor +executrix +exegesis +exegete +exemplar +exemplary +exemplify +exempt +exemption +exercisable +exercise +exert +exeter +exhale +exhaust +exhaustible +exhaustion +exhaustive +exhibit +exhibition +exhibitor +exhilarate +exhort +exhortation +exhumation +exhume +exigent +exile +exist +existent +existential +exit +exodus +exogamous +exogamy +exogenous +exonerate +exorbitant +exorcise +exorcism +exorcist +exoskeleton +exothermic +exotic +exotica +expand +expanse +expansible +expansion +expansive +expatiate +expect +expectant +expectation +expectorant +expectorate +expedient +expedite +expedition +expeditious +expel +expellable +expelled +expelling +expend +expenditure +expense +expensive +experience +experiential +experiment +experimentation +expert +expertise +expiable +expiate +expiration +expire +explain +explanation +explanatory +expletive +explicable +explicate +explicit +explode +exploit +exploitation +exploration +exploratory +explore +explosion +explosive +exponent +exponential +exponentiate +export +exportation +expose +exposit +exposition +expositor +expository +exposure +expound +express +expressible +expression +expressive +expressway +expropriate +expulsion +expunge +expurgate +exquisite +extant +extemporaneous +extempore +extend +extendible +extensible +extension +extensive +extensor +extent +extenuate +exterior +exterminate +external +extinct +extinguish +extirpate +extol +extolled +extoller +extolling +extort +extra +extracellular +extract +extractor +extracurricular +extraditable +extradite +extradition +extralegal +extralinguistic +extramarital +extramural +extraneous +extraordinary +extrapolate +extraterrestrial +extravagant +extravaganza +extrema +extremal +extreme +extremis +extremum +extricable +extricate +extrinsic +extroversion +extrovert +extrude +extrusion +extrusive +exuberant +exudate +exudation +exude +exult +exultant +exultation +exxon +eye +eyeball +eyebright +eyebrow +eyed +eyeful +eyeglass +eyelash +eyelet +eyelid +eyepiece +eyesight +eyesore +eyewitness +ezekiel +ezra +f +f's +faa +faber +fabian +fable +fabric +fabricate +fabulous +facade +face +faceplate +facet +facetious +facial +facile +facilitate +facsimile +fact +factious +facto +factor +factorial +factory +factual +facultative +faculty +fad +fade +fadeout +faery +fafnir +fag +fahey +fahrenheit +fail +failsafe +failsoft +failure +fain +faint +fair +fairchild +fairfax +fairfield +fairgoer +fairport +fairway +fairy +faith +faithful +fake +falcon +falconry +fall +fallacious +fallacy +fallen +fallible +falloff +fallout +fallow +falmouth +false +falsehood +falsify +falstaff +falter +fame +familial +familiar +familiarly +familism +family +famine +famish +famous +fan +fanatic +fanciful +fancy +fanfare +fanfold +fang +fangled +fanny +fanout +fantasia +fantasist +fantastic +fantasy +fantod +far +farad +faraday +farber +farce +farcical +fare +farewell +farfetched +fargo +farina +farkas +farley +farm +farmhouse +farmington +farmland +farnsworth +faro +farrell +farsighted +farther +farthest +fascicle +fasciculate +fascinate +fascism +fascist +fashion +fast +fasten +fastidious +fat +fatal +fate +fateful +father +fathom +fatigue +fatima +fatten +fatty +fatuous +faucet +faulkner +fault +faulty +faun +fauna +faust +faustian +faustus +fawn +fay +fayette +fayetteville +faze +fbi +fcc +fda +fe +fealty +fear +fearful +fearsome +feasible +feast +feat +feather +featherbed +featherbedding +featherbrain +feathertop +featherweight +feathery +feature +feb +febrile +february +fecund +fed +fedders +federal +federate +fedora +fee +feeble +feed +feedback +feel +feeney +feet +feign +feint +feldman +feldspar +felice +felicia +felicitous +felicity +feline +felix +fell +fellow +felon +felonious +felony +felsite +felt +female +feminine +feminism +feminist +femur +fence +fencepost +fend +fennel +fenton +fenugreek +ferber +ferdinand +ferguson +fermat +ferment +fermentation +fermi +fermion +fermium +fern +fernando +fernery +ferocious +ferocity +ferreira +ferrer +ferret +ferric +ferris +ferrite +ferroelectric +ferromagnet +ferromagnetic +ferromagnetism +ferrous +ferruginous +ferrule +ferry +fertile +fervent +fescue +fest +festival +festive +fetal +fetch +fete +fetid +fetish +fetter +fettle +fetus +feud +feudal +feudatory +fever +feverish +few +fiance +fiancee +fiasco +fiat +fib +fiberboard +fiberglas +fibonacci +fibration +fibrin +fibrosis +fibrous +fiche +fickle +fiction +fictitious +fictive +fiddle +fiddlestick +fide +fidelity +fidget +fiducial +fiduciary +fief +fiefdom +field +fields +fieldstone +fieldwork +fiend +fiendish +fierce +fiery +fiesta +fife +fifo +fifteen +fifteenth +fifth +fiftieth +fifty +fig +figaro +fight +figural +figurate +figure +figurine +filament +filamentary +filbert +filch +file +filet +filial +filibuster +filigree +filipino +fill +filled +filler +fillet +fillip +filly +film +filmdom +filmmake +filmstrip +filmy +filter +filth +filthy +filtrate +fin +final +finale +finance +financial +financier +finch +find +fine +finery +finesse +finessed +finessing +finger +fingernail +fingerprint +fingertip +finial +finicky +finish +finitary +finite +fink +finland +finley +finn +finnegan +finnish +finny +fir +fire +firearm +fireboat +firebreak +firebug +firecracker +firefly +firehouse +firelight +fireman +firemen +fireplace +firepower +fireproof +fireside +firestone +firewall +firewood +firework +firm +firmware +first +firsthand +fiscal +fischbein +fischer +fish +fisherman +fishermen +fishery +fishmonger +fishpond +fishy +fisk +fiske +fissile +fission +fissure +fist +fisticuff +fit +fitch +fitchburg +fitful +fitzgerald +fitzpatrick +fitzroy +five +fivefold +fix +fixate +fixture +fizeau +fizzle +fjord +fl +flabbergast +flabby +flack +flag +flagellate +flageolet +flagging +flagler +flagpole +flagrant +flagstaff +flagstone +flail +flair +flak +flake +flaky +flam +flamboyant +flame +flamingo +flammable +flanagan +flanders +flange +flank +flannel +flap +flare +flash +flashback +flashlight +flashy +flask +flat +flatbed +flathead +flatiron +flatland +flatten +flattery +flatulent +flatus +flatware +flatworm +flaunt +flautist +flaw +flax +flaxen +flaxseed +flea +fleabane +fleawort +fleck +fled +fledge +fledgling +flee +fleece +fleeing +fleet +fleming +flemish +flesh +fleshy +fletch +fletcher +flew +flex +flexible +flexural +flexure +flick +flier +flight +flimsy +flinch +fling +flint +flintlock +flinty +flip +flipflop +flippant +flirt +flirtation +flirtatious +flit +flo +float +floc +flocculate +flock +floe +flog +flogging +flood +floodgate +floodlight +floodlit +floor +floorboard +flop +floppy +flora +floral +florence +florentine +florican +florid +florida +floridian +florin +florist +flotation +flotilla +flounce +flounder +flour +flourish +floury +flout +flow +flowchart +flowerpot +flowery +flown +floyd +flu +flub +fluctuate +flue +fluency +fluent +fluff +fluffy +fluid +fluke +flung +flunk +fluoresce +fluorescein +fluorescent +fluoridate +fluoride +fluorine +fluorite +fluorocarbon +fluorspar +flurry +flush +fluster +flute +flutter +fluvial +flux +fly +flycatcher +flyer +flynn +flyway +fm +fmc +foal +foam +foamflower +foamy +fob +focal +foci +focus +focussed +fodder +foe +fog +fogarty +fogging +foggy +fogy +foible +foil +foist +fold +foldout +foley +foliage +foliate +folio +folk +folklore +folksong +folksy +follicle +follicular +follow +followeth +folly +fomalhaut +fond +fondle +fondly +font +fontaine +fontainebleau +food +foodstuff +fool +foolhardy +foolish +foolproof +foot +footage +football +footbridge +foote +footfall +foothill +footman +footmen +footnote +footpad +footpath +footprint +footstep +footstool +footwear +footwork +fop +foppish +for +forage +foray +forbade +forbear +forbearance +forbes +forbid +forbidden +forbidding +forbore +forborne +force +forceful +forcible +ford +fordham +fore +foregoing +foreign +forensic +forest +forestry +forever +forfeit +forfeiture +forfend +forgave +forge +forgery +forget +forgetful +forgettable +forgetting +forgive +forgiven +forgo +forgot +forgotten +fork +forklift +forlorn +form +formal +formaldehyde +formant +format +formate +formatted +formatting +formic +formica +formidable +formosa +formula +formulae +formulaic +formulate +forrest +forsake +forsaken +forsook +forswear +forsythe +fort +forte +fortescue +forth +forthcome +forthright +forthwith +fortieth +fortify +fortin +fortiori +fortitude +fortnight +fortran +fortress +fortuitous +fortunate +fortune +forty +forum +forward +forwent +foss +fossil +fossiliferous +foster +fosterite +fought +foul +foulmouth +found +foundation +foundling +foundry +fount +fountain +fountainhead +four +fourfold +fourier +foursome +foursquare +fourteen +fourteenth +fourth +fovea +fowl +fox +foxglove +foxhall +foxhole +foxhound +foxtail +foxy +foyer +fpc +fraction +fractionate +fractious +fracture +fragile +fragment +fragmentary +fragmentation +fragrant +frail +frailty +frambesia +frame +framework +fran +franc +franca +france +frances +franchise +francine +francis +franciscan +francisco +francium +franco +francoise +frangipani +frank +frankel +frankfort +frankfurt +frankfurter +franklin +frantic +franz +fraser +fraternal +fraternity +frau +fraud +fraudulent +fraught +fray +frayed +frazier +frazzle +freak +freakish +freckle +fred +freddie +freddy +frederic +frederick +fredericks +fredericksburg +fredericton +fredholm +fredrickson +free +freeboot +freed +freedman +freedmen +freedom +freehand +freehold +freeing +freeman +freemen +freeport +freer +freest +freestone +freethink +freetown +freeway +freewheel +freeze +freight +french +frenchman +frenchmen +frenetic +frenzy +freon +frequent +fresco +frescoes +fresh +freshen +freshman +freshmen +freshwater +fresnel +fresno +fret +freud +freudian +frey +freya +friable +friar +fricative +frick +friction +frictional +friday +fried +friedman +friedrich +friend +frieze +frigate +frigga +fright +frighten +frightful +frigid +frigidaire +frill +frilly +fringe +frisky +fritillary +fritter +fritz +frivolity +frivolous +frizzle +fro +frock +frog +frolic +from +front +frontage +frontal +frontier +frontiersman +frontiersmen +frost +frostbite +frostbitten +frosty +froth +frothy +frown +frowzy +froze +frozen +fructify +fructose +fruehauf +frugal +fruit +fruitful +fruition +frustrate +frustrater +frustum +fry +frye +ft +ftc +fuchs +fuchsia +fudge +fuel +fugal +fugitive +fugue +fuji +fujitsu +fulcrum +fulfill +full +fullback +fullerton +fully +fulminate +fulsome +fulton +fum +fumble +fume +fumigant +fumigate +fun +function +functionary +functor +functorial +fund +fundamental +fundraise +funeral +funereal +fungal +fungi +fungible +fungicide +fungoid +fungus +funk +funnel +funny +fur +furbish +furious +furl +furlong +furlough +furman +furnace +furnish +furniture +furrier +furrow +furry +further +furtherance +furthermore +furthermost +furthest +furtive +fury +furze +fuse +fuselage +fusible +fusiform +fusillade +fusion +fuss +fussy +fusty +futile +future +fuzz +fuzzy +g +g's +ga +gab +gabardine +gabble +gabbro +gaberones +gable +gabon +gabriel +gabrielle +gad +gadfly +gadget +gadgetry +gadolinium +gadwall +gaelic +gaff +gaffe +gag +gage +gagging +gaggle +gagwriter +gaiety +gail +gaillardia +gain +gaines +gainesville +gainful +gait +gaithersburg +gal +gala +galactic +galactose +galapagos +galatea +galatia +galaxy +galbreath +gale +galen +galena +galenite +galilee +gall +gallagher +gallant +gallantry +gallberry +gallery +galley +gallinule +gallium +gallivant +gallon +gallonage +gallop +galloway +gallows +gallstone +gallup +gallus +galois +galt +galvanic +galvanism +galvanometer +galveston +galway +gam +gambia +gambit +gamble +gambol +game +gamecock +gamesman +gamin +gamma +gamut +gander +gang +ganges +gangland +gangling +ganglion +gangplank +gangster +gangway +gannet +gannett +gantlet +gantry +ganymede +gao +gap +gape +gar +garage +garb +garbage +garble +garcia +garden +gardenia +gardner +garfield +gargantuan +gargle +garibaldi +garish +garland +garlic +garner +garnet +garrett +garrison +garrisonian +garrulous +garry +garter +garth +garvey +gary +gas +gascony +gaseous +gases +gash +gasify +gasket +gaslight +gasohol +gasoline +gasp +gaspee +gassy +gaston +gastrointestinal +gastronome +gastronomy +gate +gatekeep +gates +gateway +gather +gatlinburg +gator +gauche +gaucherie +gaudy +gauge +gaugeable +gauguin +gaul +gauleiter +gaulle +gaunt +gauntlet +gaur +gauss +gaussian +gauze +gave +gavel +gavin +gavotte +gawk +gawky +gay +gaylord +gaze +gazelle +gazette +ge +gear +gecko +gedanken +gee +geese +gegenschein +geiger +geigy +geisha +gel +gelable +gelatin +gelatine +gelatinous +geld +gem +geminate +gemini +gemlike +gemma +gemstone +gender +gene +genealogy +genera +general +generate +generic +generosity +generous +genesco +genesis +genetic +geneva +genevieve +genial +genie +genii +genital +genitive +genius +genoa +genotype +genre +gent +genteel +gentian +gentile +gentility +gentle +gentleman +gentlemen +gentry +genuine +genus +geocentric +geochemical +geochemistry +geochronology +geodesic +geodesy +geodetic +geoduck +geoffrey +geographer +geography +geology +geometer +geometrician +geophysical +geophysics +geopolitic +george +georgetown +georgia +gerald +geraldine +geranium +gerard +gerber +gerbil +gerhard +gerhardt +geriatric +germ +german +germane +germanic +germanium +germantown +germany +germicidal +germicide +germinal +germinate +gerontology +gerry +gershwin +gertrude +gerund +gerundial +gerundive +gestalt +gestapo +gesticulate +gesture +get +getaway +getty +gettysburg +geyser +ghana +ghastly +ghent +gherkin +ghetto +ghost +ghostlike +ghostly +ghoul +ghoulish +giacomo +giant +giantess +gibberish +gibbet +gibbon +gibbons +gibbous +gibbs +gibby +gibe +giblet +gibraltar +gibson +giddap +giddy +gideon +gifford +gift +gig +gigabit +gigabyte +gigacycle +gigahertz +gigaherz +gigantic +gigavolt +gigawatt +gigging +giggle +gil +gila +gilbert +gilbertson +gilchrist +gild +gilead +giles +gill +gillespie +gillette +gilligan +gilmore +gilt +gimbal +gimbel +gimmick +gimmickry +gimpy +gin +gina +ginger +gingham +gingko +ginkgo +ginmill +ginn +gino +ginsberg +ginsburg +ginseng +giovanni +giraffe +gird +girdle +girl +girlie +girlish +girth +gist +giuliano +giuseppe +give +giveaway +given +giveth +glacial +glaciate +glacier +glacis +glad +gladden +gladdy +glade +gladiator +gladiolus +gladstone +gladys +glamor +glamorous +glamour +glance +gland +glandular +glans +glare +glasgow +glass +glassine +glassware +glasswort +glassy +glaswegian +glaucoma +glaucous +glaze +gleam +glean +gleason +glee +gleeful +glen +glenda +glendale +glenn +glib +glidden +glide +glimmer +glimpse +glint +glissade +glisten +glitch +glitter +gloat +glob +global +globe +globular +globule +globulin +glom +glomerular +gloom +gloomy +gloria +gloriana +glorify +glorious +glory +gloss +glossary +glossed +glossolalia +glossy +glottal +glottis +gloucester +glove +glow +glucose +glue +glued +gluey +gluing +glum +glut +glutamate +glutamic +glutamine +glutinous +glutton +glyceride +glycerin +glycerinate +glycerine +glycerol +glycine +glycogen +glycol +glyph +gm +gmt +gnarl +gnash +gnat +gnaw +gneiss +gnome +gnomon +gnomonic +gnostic +gnp +gnu +go +goa +goad +goal +goat +goatherd +gob +gobble +gobbledygook +goblet +god +goddard +goddess +godfather +godfrey +godhead +godkin +godlike +godmother +godparent +godsend +godson +godwin +godwit +goer +goes +goethe +goff +gog +goggle +gogh +gogo +gold +goldberg +golden +goldeneye +goldenrod +goldenseal +goldfinch +goldfish +goldman +goldsmith +goldstein +goldstine +goldwater +goleta +golf +goliath +golly +gondola +gone +gong +goniometer +gonzales +gonzalez +goober +good +goodbye +goode +goodman +goodrich +goodwill +goodwin +goody +goodyear +goof +goofy +goose +gooseberry +gop +gopher +gordian +gordon +gore +goren +gorge +gorgeous +gorgon +gorham +gorilla +gorky +gorse +gorton +gory +gosh +goshawk +gosling +gospel +gossamer +gossip +got +gotham +gothic +gotten +gottfried +goucher +gouda +gouge +gould +gourd +gourmet +gout +govern +governance +governess +governor +gown +gpo +grab +grace +graceful +gracious +grackle +grad +gradate +grade +gradient +gradual +graduate +grady +graff +graft +graham +grail +grain +grainy +grammar +grammarian +grammatic +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +grecian +greece +greed +greedy +greek +green +greenbelt +greenberg +greenblatt +greenbriar +greene +greenery +greenfield +greengrocer +greenhouse +greenish +greenland +greensboro +greensward +greenware +greenwich +greenwood +greer +greet +greg +gregarious +gregg +gregory +gremlin +grenade +grendel +grenoble +gresham +greta +gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +griffith +grill +grille +grilled +grillwork +grim +grimace +grimaldi +grime +grimes +grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +grosset +grossman +grosvenor +grotesque +groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +grumman +grunt +gryphon +gsa +gu +guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +guardia +guardian +guatemala +gubernatorial +guelph +guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +guggenheim +guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +guildhall +guile +guilford +guillemot +guillotine +guilt +guilty +guinea +guise +guitar +gules +gulf +gull +gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +gunderson +gunfight +gunfire +gunflint +gunk +gunky +gunman +gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +gunther +gurgle +gurkha +guru +gus +gush +gusset +gust +gustafson +gustav +gustave +gustavus +gusto +gusty +gut +gutenberg +guthrie +gutsy +guttural +guy +guyana +guzzle +gwen +gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +gyrocompass +gyroscope +h +h's +ha +haag +haas +habeas +haberdashery +haberman +habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +hackett +hackle +hackmatack +hackney +hackneyed +hacksaw +had +hadamard +haddad +haddock +hades +hadley +hadn't +hadrian +hadron +hafnium +hagen +hager +haggard +haggle +hagstrom +hague +hahn +haifa +haiku +hail +hailstone +hailstorm +haines +hair +haircut +hairdo +hairpin +hairy +haiti +haitian +hal +halcyon +hale +haley +half +halfback +halfhearted +halfway +halibut +halide +halifax +halite +hall +hallelujah +halley +hallmark +hallow +halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +halpern +halsey +halstead +halt +halvah +halve +halverson +ham +hamal +hamburg +hamburger +hamilton +hamlet +hamlin +hammerhead +hammock +hammond +hamper +hampshire +hampton +hamster +han +hancock +hand +handbag +handbook +handclasp +handcuff +handel +handful +handgun +handhold +handicap +handicapped +handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +handwrite +handwritten +handy +handyman +handymen +haney +hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +hank +hankel +hanley +hanlon +hanna +hannah +hannibal +hanoi +hanover +hanoverian +hans +hansel +hansen +hansom +hanson +hanukkah +hap +haphazard +haploid +haploidy +haplology +happen +happenstance +happy +hapsburg +harangue +harass +harbin +harbinger +harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +hardin +harding +hardscrabble +hardtack +hardtop +hardware +hardwood +hardworking +hardy +hare +harelip +harem +hark +harlan +harlem +harley +harm +harmful +harmon +harmonic +harmonica +harmonious +harmony +harness +harold +harp +harpoon +harpsichord +harpy +harriet +harriman +harrington +harris +harrisburg +harrison +harrow +harry +harsh +harshen +hart +hartford +hartley +hartman +harvard +harvest +harvestman +harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +hastings +hasty +hat +hatch +hatchet +hatchway +hate +hateful +hater +hatfield +hath +hathaway +hatred +hatteras +hattie +hattiesburg +haugen +haughty +haul +haulage +haunch +haunt +hausdorff +havana +have +haven +haven't +havilland +havoc +haw +hawaii +hawaiian +hawk +hawkins +hawley +hawthorn +hawthorne +hay +hayden +haydn +hayes +hayfield +haynes +hays +haystack +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +he'd +he'll +head +headache +headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +healey +health +healthful +healthy +healy +heap +hear +heard +hearken +hearsay +hearse +hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +heathkit +heave +heaven +heavenward +heavy +heavyweight +hebe +hebephrenic +hebraic +hebrew +hecate +hecatomb +heck +heckle +heckman +hectic +hector +hecuba +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +hegelian +hegemony +heidelberg +heigh +height +heighten +heine +heinrich +heinz +heir +heiress +heisenberg +held +helen +helena +helene +helga +helical +helicopter +heliocentric +heliotrope +helium +helix +hell +hellbender +hellebore +hellenic +hellfire +hellgrammite +hellish +hello +helm +helmet +helmholtz +helmsman +helmsmen +helmut +help +helpful +helpmate +helsinki +helvetica +hem +hematite +hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +hempstead +hen +henbane +hence +henceforth +henchman +henchmen +henderson +hendrick +hendricks +hendrickson +henequen +henley +henpeck +henri +henrietta +henry +hepatica +hepatitis +hepburn +heptane +her +hera +heraclitus +herald +herb +herbert +herculean +hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +herkimer +herman +hermann +hermeneutic +hermes +hermetic +hermite +hermitian +hermosa +hernandez +hero +herodotus +heroes +heroic +heroin +heroine +heroism +heron +herpes +herpetology +herr +herringbone +herschel +herself +hershel +hershey +hertz +hertzog +hesitant +hesitate +hesitater +hesperus +hess +hesse +hessian +hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +hetman +hettie +hetty +heublein +heuristic +heusen +heuser +hew +hewett +hewitt +hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +hey +heyday +hi +hiatt +hiatus +hiawatha +hibachi +hibbard +hibernate +hibernia +hick +hickey +hickman +hickory +hicks +hid +hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +hieronymus +hifalutin +higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +highwaymen +hijack +hijinks +hike +hilarious +hilarity +hilbert +hildebrand +hill +hillbilly +hillcrest +hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +hilton +hilum +him +himalaya +himself +hind +hindmost +hindrance +hindsight +hindu +hinduism +hines +hinge +hinman +hint +hinterland +hip +hippo +hippocrates +hippocratic +hippodrome +hippopotamus +hippy +hipster +hiram +hire +hireling +hiroshi +hiroshima +hirsch +hirsute +his +hispanic +hiss +histamine +histidine +histochemic +histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +hitachi +hitch +hitchcock +hither +hitherto +hitler +hive +ho +hoagie +hoagland +hoagy +hoar +hoard +hoarfrost +hoarse +hob +hobart +hobbes +hobble +hobbs +hobby +hobbyhorse +hobgoblin +hobo +hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +hodges +hodgkin +hoe +hoff +hoffman +hog +hogan +hogging +hoi +hokan +holbrook +holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +holland +hollandaise +holler +hollerith +hollingsworth +hollister +hollow +holloway +hollowware +holly +hollyhock +hollywood +holm +holman +holmdel +holmes +holmium +holocaust +holocene +hologram +holography +holst +holstein +holster +holt +holyoke +holystone +hom +homage +home +homebound +homebuild +homebuilder +homebuilding +homecome +homecoming +homeland +homemade +homemake +homeomorph +homeomorphic +homeopath +homeostasis +homeown +homeowner +homeric +homesick +homestead +homeward +homework +homicidal +homicide +homily +homo +homogenate +homogeneity +homogeneous +homologous +homologue +homology +homomorphic +homomorphism +homonym +homophobia +homosexual +homotopy +homozygous +homunculus +honda +hondo +honduras +hone +honest +honesty +honey +honeybee +honeycomb +honeydew +honeymoon +honeysuckle +honeywell +hong +honk +honolulu +honoraria +honorarium +honorary +honoree +honorific +honshu +hooch +hood +hoodlum +hoof +hoofmark +hook +hookup +hookworm +hooligan +hoop +hoopla +hoosegow +hoosier +hoot +hoover +hooves +hop +hope +hopeful +hopkins +hopkinsian +hopple +hopscotch +horace +horatio +horde +horehound +horizon +horizontal +hormone +horn +hornbeam +hornblende +hornblower +hornet +hornmouth +horntail +hornwort +horny +horology +horoscope +horowitz +horrendous +horrible +horrid +horrify +horror +horse +horseback +horsedom +horseflesh +horsefly +horsehair +horseman +horsemen +horseplay +horsepower +horseshoe +horsetail +horsewoman +horsewomen +horticulture +horton +horus +hose +hosiery +hospice +hospitable +hospital +host +hostage +hostelry +hostess +hostile +hostler +hot +hotbed +hotbox +hotel +hotelman +hothead +hothouse +hotrod +hotshot +houdaille +houdini +hough +houghton +hound +hour +hourglass +house +houseboat +housebreak +housebroken +housefly +household +housekeep +housewares +housewife +housewives +housework +houston +hove +hovel +hover +how +howard +howdy +howe +howell +however +howl +howsoever +howsomever +hoy +hoyden +hoydenish +hoyt +hrothgar +hub +hubbard +hubbell +hubbub +hubby +huber +hubert +hubris +huck +huckleberry +huckster +huddle +hudson +hue +hued +huff +huffman +hug +huge +hugging +huggins +hugh +hughes +hugo +huh +hulk +hull +hum +human +humane +humanitarian +humanoid +humble +humboldt +humerus +humid +humidify +humidistat +humiliate +humility +hummel +hummingbird +hummock +humorous +hump +humpback +humphrey +humpty +humus +hun +hunch +hundred +hundredfold +hundredth +hung +hungarian +hungary +hungry +hunk +hunt +hunter +huntington +huntley +huntsville +hurd +hurdle +hurl +hurley +huron +hurrah +hurray +hurricane +hurry +hurst +hurt +hurtle +hurty +hurwitz +husband +husbandman +husbandmen +husbandry +hush +husky +hustle +huston +hut +hutch +hutchins +hutchinson +hutchison +huxley +huxtable +huzzah +hyacinth +hyades +hyaline +hyannis +hybrid +hyde +hydra +hydrangea +hydrant +hydrate +hydraulic +hydride +hydro +hydrocarbon +hydrochemistry +hydrochloric +hydrochloride +hydrodynamic +hydroelectric +hydrofluoric +hydrogen +hydrogenate +hydrology +hydrolysis +hydrometer +hydronium +hydrophilic +hydrophobia +hydrophobic +hydrosphere +hydrostatic +hydrothermal +hydrous +hydroxide +hydroxy +hydroxyl +hydroxylate +hyena +hygiene +hygrometer +hygroscopic +hying +hyman +hymen +hymn +hymnal +hyperbola +hyperbolic +hyperboloid +hyperboloidal +hypertensive +hyphen +hyphenate +hypnosis +hypnotic +hypoactive +hypochlorite +hypochlorous +hypocrisy +hypocrite +hypocritic +hypocritical +hypocycloid +hypodermic +hypophyseal +hypotenuse +hypothalamic +hypothalamus +hypotheses +hypothesis +hypothetic +hypothyroid +hysterectomy +hysteresis +hysteria +hysteric +hysteron +i +i'd +i'll +i'm +i's +i've +i.e +ia +iambic +ian +iberia +ibex +ibid +ibis +ibm +ibn +icarus +icc +ice +iceberg +icebox +iceland +icelandic +ichneumon +icicle +icky +icon +iconic +iconoclasm +iconoclast +icosahedra +icosahedral +icosahedron +icy +id +ida +idaho +idea +ideal +ideate +idempotent +identical +identify +identity +ideolect +ideologue +ideology +idiocy +idiom +idiomatic +idiosyncrasy +idiosyncratic +idiot +idiotic +idle +idol +idolatry +idyll +idyllic +ieee +if +iffy +ifni +igloo +igneous +ignite +ignition +ignoble +ignominious +ignoramus +ignorant +ignore +igor +ii +iii +ike +il +ileum +iliac +iliad +ill +illegal +illegible +illegitimacy +illegitimate +illicit +illimitable +illinois +illiteracy +illiterate +illogic +illume +illuminate +illumine +illusion +illusionary +illusive +illusory +illustrate +illustrious +ilona +ilyushin +image +imagen +imagery +imaginary +imaginate +imagine +imbalance +imbecile +imbibe +imbrium +imbroglio +imbrue +imbue +imitable +imitate +immaculate +immanent +immaterial +immature +immeasurable +immediacy +immediate +immemorial +immense +immerse +immersion +immigrant +immigrate +imminent +immiscible +immobile +immobility +immoderate +immodest +immodesty +immoral +immortal +immovable +immune +immunization +immunoelectrophoresis +immutable +imp +impact +impair +impale +impalpable +impart +impartation +impartial +impassable +impasse +impassion +impassive +impatient +impeach +impeccable +impedance +impede +impediment +impel +impelled +impeller +impelling +impend +impenetrable +imperate +imperative +imperceivable +imperceptible +imperfect +imperial +imperil +imperious +imperishable +impermeable +impermissible +impersonal +impersonate +impertinent +imperturbable +impervious +impetuous +impetus +impiety +impinge +impious +impish +implacable +implant +implantation +implausible +implement +implementation +implementer +implementor +implicant +implicate +implicit +implode +implore +implosion +impolite +impolitic +imponderable +import +important +importation +importunate +importune +impose +imposition +impossible +impost +imposture +impotent +impound +impoverish +impracticable +impractical +imprecate +imprecise +imprecision +impregnable +impregnate +impresario +impress +impressible +impression +impressive +imprimatur +imprint +imprison +improbable +impromptu +improper +impropriety +improve +improvident +improvisate +improvisation +improvise +imprudent +impudent +impugn +impulse +impulsive +impunity +impure +imputation +impute +in +inability +inaccessible +inaccuracy +inaccurate +inaction +inactivate +inactive +inadequacy +inadequate +inadmissible +inadvertent +inadvisable +inalienable +inalterable +inane +inanimate +inappeasable +inapplicable +inappreciable +inapproachable +inappropriate +inapt +inaptitude +inarticulate +inasmuch +inattention +inattentive +inaudible +inaugural +inaugurate +inauspicious +inboard +inborn +inbred +inbreed +inc +inca +incalculable +incandescent +incant +incantation +incapable +incapacitate +incapacity +incarcerate +incarnate +incaution +incautious +incendiary +incense +incentive +inception +inceptor +incessant +incest +incestuous +inch +incident +incidental +incinerate +incipient +incise +incisive +incite +inclement +inclination +incline +inclose +include +inclusion +inclusive +incoherent +incombustible +income +incommensurable +incommensurate +incommunicable +incommutable +incomparable +incompatible +incompetent +incomplete +incompletion +incomprehensible +incomprehension +incompressible +incomputable +inconceivable +inconclusive +incondensable +incongruity +incongruous +inconsequential +inconsiderable +inconsiderate +inconsistent +inconsolable +inconspicuous +inconstant +incontestable +incontrollable +incontrovertible +inconvenient +inconvertible +incorporable +incorporate +incorrect +incorrigible +incorruptible +increasable +increase +incredible +incredulity +incredulous +increment +incriminate +incubate +incubi +incubus +inculcate +inculpable +incumbent +incur +incurred +incurrer +incurring +incursion +indebted +indecent +indecipherable +indecision +indecisive +indecomposable +indeed +indefatigable +indefensible +indefinable +indefinite +indelible +indelicate +indemnify +indemnity +indent +indentation +indenture +independent +indescribable +indestructible +indeterminable +indeterminacy +indeterminate +index +india +indian +indiana +indianapolis +indicant +indicate +indices +indict +indicter +indies +indifferent +indigene +indigenous +indigent +indigestible +indigestion +indignant +indignation +indignity +indigo +indira +indirect +indiscernible +indiscoverable +indiscreet +indiscretion +indiscriminate +indispensable +indispose +indisposition +indisputable +indissoluble +indistinct +indistinguishable +indium +individual +individualism +individuate +indivisible +indochina +indochinese +indoctrinate +indoeuropean +indolent +indomitable +indonesia +indoor +indorse +indubitable +induce +inducible +induct +inductance +inductee +inductor +indulge +indulgent +industrial +industrialism +industrious +industry +indwell +indy +ineducable +ineffable +ineffective +ineffectual +inefficacy +inefficient +inelastic +inelegant +ineligible +ineluctable +inept +inequality +inequitable +inequity +inequivalent +ineradicable +inert +inertance +inertia +inertial +inescapable +inestimable +inevitable +inexact +inexcusable +inexhaustible +inexorable +inexpedient +inexpensive +inexperience +inexpert +inexpiable +inexplainable +inexplicable +inexplicit +inexpressible +inextinguishable +inextricable +infallible +infamous +infamy +infancy +infant +infantile +infantry +infantryman +infantrymen +infarct +infatuate +infeasible +infect +infectious +infelicitous +infelicity +infer +inference +inferential +inferior +infernal +inferno +inferred +inferring +infertile +infest +infestation +infidel +infield +infight +infighting +infiltrate +infima +infimum +infinite +infinitesimal +infinitive +infinitude +infinitum +infinity +infirm +infirmary +infix +inflame +inflammable +inflammation +inflammatory +inflate +inflater +inflationary +inflect +inflexible +inflict +inflicter +inflow +influence +influent +influential +influenza +influx +info +inform +informal +informant +informatica +information +informative +infra +infract +infrared +infrastructure +infrequent +infringe +infuriate +infuse +infusible +infusion +ingather +ingenious +ingenuity +ingenuous +ingersoll +ingest +ingestible +ingestion +inglorious +ingot +ingram +ingrate +ingratiate +ingratitude +ingredient +ingrown +inhabit +inhabitant +inhabitation +inhalation +inhale +inharmonious +inhere +inherent +inherit +inheritance +inheritor +inhibit +inhibition +inhibitor +inhibitory +inholding +inhomogeneity +inhomogeneous +inhospitable +inhuman +inhumane +inimical +inimitable +iniquitous +iniquity +initial +initiate +inject +injudicious +injun +injunct +injunction +injure +injurious +injury +injustice +ink +inkling +inlaid +inland +inlay +inlet +inman +inmate +inn +innards +innate +inner +innermost +innkeeper +innocent +innocuous +innovate +innuendo +innumerable +inoculate +inoffensive +inoperable +inoperative +inopportune +inordinate +inorganic +input +inputting +inquest +inquire +inquiry +inquisition +inquisitive +inquisitor +inroad +insane +insatiable +inscribe +inscription +inscrutable +insect +insecticide +insecure +inseminate +insensible +insensitive +inseparable +insert +inset +inshore +inside +insidious +insight +insightful +insignia +insignificant +insincere +insinuate +insipid +insist +insistent +insofar +insolent +insoluble +insolvable +insolvent +insomnia +insomniac +insouciant +inspect +inspector +inspiration +inspire +instable +install +installation +instalment +instance +instant +instantaneous +instantiate +instead +instep +instigate +instill +instillation +instinct +instinctual +institute +institution +instruct +instructor +instrument +instrumentation +insubordinate +insubstantial +insufferable +insufficient +insular +insulate +insulin +insult +insuperable +insupportable +insuppressible +insurance +insure +insurgent +insurmountable +insurrect +insurrection +intact +intake +intangible +integer +integrable +integral +integrand +integrate +integrity +integument +intellect +intellectual +intelligent +intelligentsia +intelligible +intemperance +intemperate +intend +intendant +intense +intensify +intensive +intent +intention +inter +intercalate +intercept +interception +interceptor +intercom +interdict +interest +interfere +interference +interferometer +interim +interior +interject +interlude +intermediary +intermit +intermittent +intern +internal +internecine +internescine +interpol +interpolant +interpolate +interpolatory +interpret +interpretation +interpretive +interregnum +interrogate +interrogatory +interrupt +interruptible +interruption +intersect +intersperse +interstice +interstitial +interval +intervene +intervenor +intervention +interviewee +intestate +intestinal +intestine +intimacy +intimal +intimate +intimater +intimidate +into +intolerable +intolerant +intonate +intone +intoxicant +intoxicate +intractable +intramolecular +intransigent +intransitive +intrepid +intricacy +intricate +intrigue +intrinsic +introduce +introduction +introductory +introit +introject +introspect +introversion +introvert +intrude +intrusion +intrusive +intuit +intuitable +intuition +intuitive +inundate +inure +invade +invalid +invalidate +invaluable +invariable +invariant +invasion +invasive +invective +inveigh +inveigle +invent +invention +inventive +inventor +inventory +inverness +inverse +inversion +invert +invertebrate +invertible +invest +investigate +investigatory +investor +inveterate +inviable +invidious +invigorate +invincible +inviolable +inviolate +invisible +invitation +invite +invitee +invocate +invoice +invoke +involuntary +involute +involution +involutorial +involutory +involve +invulnerable +inward +io +iodate +iodide +iodinate +iodine +ion +ionic +ionosphere +ionospheric +iota +iowa +ipecac +ipsilateral +ipso +iq +ir +ira +iran +iranian +iraq +irate +ire +ireland +irene +iridium +iris +irish +irishman +irishmen +irk +irksome +irma +iron +ironic +ironside +ironstone +ironwood +irony +iroquois +irradiate +irrational +irrawaddy +irreclaimable +irreconcilable +irrecoverable +irredeemable +irredentism +irredentist +irreducible +irrefutable +irregular +irrelevancy +irrelevant +irremediable +irremovable +irreparable +irreplaceable +irrepressible +irreproachable +irreproducible +irresistible +irresolute +irresolution +irresolvable +irrespective +irresponsible +irretrievable +irreverent +irreversible +irrevocable +irrigate +irritable +irritant +irritate +irruption +irs +irvin +irvine +irving +irwin +is +isaac +isaacson +isabel +isabella +isadore +isaiah +isentropic +isfahan +ising +isinglass +isis +islam +islamabad +islamic +island +isle +isn't +isochronal +isochronous +isocline +isolate +isolde +isomer +isomorph +isomorphic +isopleth +isotherm +isothermal +isotope +isotopic +isotropic +isotropy +israel +israeli +israelite +issuance +issuant +issue +istanbul +istvan +it +it&t +it'd +it'll +italian +italic +italy +itch +item +iterate +ithaca +itinerant +itinerary +ito +itself +itt +iv +ivan +ivanhoe +iverson +ivory +ivy +ix +izvestia +j +j's +jab +jablonsky +jack +jackanapes +jackass +jackboot +jackdaw +jacket +jackie +jackknife +jackman +jackpot +jackson +jacksonian +jacksonville +jacky +jacm +jacob +jacobean +jacobi +jacobian +jacobite +jacobs +jacobsen +jacobson +jacobus +jacqueline +jacques +jade +jaeger +jag +jagging +jaguar +jail +jaime +jakarta +jake +jalopy +jam +jamaica +jamboree +james +jamestown +jan +jane +janeiro +janet +jangle +janice +janissary +janitor +janitorial +janos +jansenist +january +janus +japan +japanese +jar +jargon +jarvin +jason +jasper +jaundice +jaunty +java +javelin +jaw +jawbone +jawbreak +jay +jazz +jazzy +jealous +jealousy +jean +jeannie +jed +jeep +jeff +jefferson +jeffersonian +jeffrey +jehovah +jejune +jejunum +jelly +jellyfish +jenkins +jennie +jennifer +jennings +jenny +jensen +jeopard +jeopardy +jeremiah +jeremy +jeres +jericho +jerk +jerky +jeroboam +jerome +jerry +jersey +jerusalem +jess +jesse +jessica +jessie +jest +jesuit +jesus +jet +jetliner +jettison +jew +jewel +jewell +jewelry +jewett +jewish +jibe +jiffy +jig +jigging +jiggle +jigsaw +jill +jilt +jim +jimenez +jimmie +jimmy +jingle +jinx +jitter +jitterbug +jitterbugger +jitterbugging +jittery +jive +jo +joan +joanna +joanne +joaquin +job +jobholder +jock +jockey +jockstrap +jocose +jocular +jocund +joe +joel +joey +jog +jogging +joggle +johann +johannes +johannesburg +johansen +johanson +john +johnny +johns +johnsen +johnson +johnston +johnstown +join +joint +joke +joliet +jolla +jolly +jolt +jon +jonas +jonathan +jones +jonquil +jordan +jorge +jorgensen +jorgenson +jose +josef +joseph +josephine +josephson +josephus +joshua +josiah +joss +jostle +jot +joule +jounce +journal +journalese +journey +journeyman +journeymen +joust +jovanovich +jove +jovial +jovian +jowl +jowly +joy +joyce +joyful +joyous +joyride +joystick +jr +juan +juanita +jubilant +jubilate +jubilee +judaism +judas +judd +jude +judge +judicable +judicatory +judicature +judicial +judiciary +judicious +judith +judo +judson +judy +jug +jugate +jugging +juggle +jugoslavia +juice +juicy +juju +jujube +juke +jukes +julep +jules +julia +julie +juliet +julio +julius +july +jumble +jumbo +jump +jumpy +junco +junction +junctor +juncture +june +juneau +jungle +junior +juniper +junk +junkerdom +junketeer +junky +juno +junta +jupiter +jura +jurassic +jure +juridic +jurisdiction +jurisprudent +jurisprudential +juror +jury +just +justice +justiciable +justify +justine +justinian +jut +jute +jutish +juvenile +juxtapose +juxtaposition +k +k's +kabuki +kabul +kaddish +kafka +kafkaesque +kahn +kaiser +kajar +kalamazoo +kale +kaleidescope +kaleidoscope +kalmia +kalmuk +kamchatka +kamikaze +kampala +kane +kangaroo +kankakee +kansas +kant +kaolin +kaolinite +kaplan +kapok +kappa +karachi +karamazov +karate +karen +karl +karma +karol +karp +karyatid +kaskaskia +kate +katharine +katherine +kathleen +kathy +katie +katmandu +katowice +katz +kauffman +kaufman +kava +kay +kayo +kazoo +keaton +keats +keddah +keel +keelson +keen +keenan +keep +keeshond +keg +keith +keller +kelley +kellogg +kelly +kelp +kelsey +kelvin +kemp +ken +kendall +kennan +kennecott +kennedy +kennel +kenneth +kenney +keno +kensington +kent +kenton +kentucky +kenya +kenyon +kepler +kept +kerchief +kermit +kern +kernel +kernighan +kerosene +kerr +kerry +kerygma +kessler +kestrel +ketch +ketchup +ketone +ketosis +kettering +kettle +kevin +key +keyboard +keyed +keyes +keyhole +keynes +keynesian +keynote +keypunch +keys +keystone +keyword +khaki +khan +khartoum +khmer +khrushchev +kibbutzim +kibitz +kick +kickback +kickoff +kid +kidde +kiddie +kidnap +kidnapped +kidnapping +kidney +kieffer +kiev +kiewit +kigali +kikuyu +kilgore +kill +killdeer +killjoy +kilo +kilohm +kim +kimball +kimberly +kimono +kin +kind +kindergarten +kindle +kindred +kinematic +kinesic +kinesthesis +kinetic +king +kingbird +kingdom +kingfisher +kinglet +kingpin +kingsbury +kingsley +kingston +kink +kinky +kinney +kinshasha +kiosk +kiowa +kipling +kirby +kirchner +kirchoff +kirk +kirkland +kirkpatrick +kirov +kiss +kissing +kit +kitakyushu +kitchen +kitchenette +kite +kitten +kittenish +kittle +kitty +kiva +kivu +kiwanis +kiwi +klan +klaus +klaxon +kleenex +klein +kline +klux +klystron +knack +knapp +knapsack +knauer +knead +knee +kneecap +kneel +knell +knelt +knew +knick +knickerbocker +knife +knifelike +knight +knightsbridge +knit +knives +knob +knobby +knock +knockdown +knockout +knoll +knot +knott +knotty +know +knoweth +knowhow +knowledge +knowledgeable +knowles +knowlton +known +knox +knoxville +knuckle +knuckleball +knudsen +knudson +knurl +knutsen +knutson +koala +kobayashi +koch +kochab +kodachrome +kodak +kodiak +koenig +koenigsberg +kohlrabi +koinonia +kola +kolkhoz +kombu +kong +konrad +koppers +koran +korea +kosher +kovacs +kowalewski +kowalski +kowloon +kraft +krakatoa +krakow +kramer +krause +kraut +krebs +kremlin +kresge +krieger +krishna +kristin +kronecker +krueger +kruger +kruse +krypton +ks +ku +kudo +kudzu +kuhn +kulak +kumquat +kurd +kurt +kuwait +kwashiorkor +ky +kyle +kyoto +l +l'oeil +l's +l'vov +la +lab +laban +label +labia +labial +labile +lability +laboratory +laborious +labour +labrador +labradorite +labyrinth +lac +lace +lacerate +lacerta +lacewing +lachesis +lack +lackadaisic +lackey +lackluster +laconic +lacquer +lacrosse +lactate +lactose +lacuna +lacunae +lacustrine +lacy +lad +laden +ladle +lady +ladyfern +ladylike +lafayette +lag +lager +lagging +lagoon +lagos +lagrange +lagrangian +laguerre +lahore +laid +laidlaw +lain +lair +laissez +laity +lake +lakehurst +lakeside +lam +lamar +lamarck +lamb +lambda +lambert +lame +lamellar +lament +lamentation +laminar +laminate +lamp +lampblack +lamplight +lampoon +lamprey +lana +lancashire +lancaster +lance +land +landau +landfill +landhold +landis +landlord +landmark +landowner +landscape +landslide +lane +lang +lange +langley +langmuir +language +languid +languish +lank +lanka +lanky +lansing +lantern +lanthanide +lanthanum +lao +laocoon +laos +laotian +lap +lapel +lapelled +lapidary +laplace +laplacian +lappet +lapse +laramie +larceny +larch +lard +laredo +lares +large +largemouth +largesse +lariat +lark +larkin +larkspur +larry +lars +larsen +larson +larva +larvae +larval +laryngeal +larynges +larynx +lascar +lascivious +lase +lash +lass +lasso +last +laszlo +latch +late +latent +later +latera +lateral +lateran +laterite +latex +lath +lathe +lathrop +latin +latinate +latitude +latitudinal +latitudinary +latrobe +latter +lattice +latus +latvia +laud +laudanum +laudatory +lauderdale +laue +laugh +laughingstock +laughlin +laughter +launch +launder +laundry +laura +laureate +laurel +lauren +laurence +laurent +laurentian +laurie +lausanne +lava +lavabo +lavatory +lavender +lavish +lavoisier +law +lawbreak +lawbreaker +lawbreaking +lawful +lawgive +lawgiver +lawgiving +lawmake +lawman +lawmen +lawn +lawrence +lawrencium +lawson +lawsuit +lawyer +lax +laxative +lay +layette +layman +laymen +layoff +layout +layton +layup +lazarus +laze +lazy +lazybones +lea +leach +leachate +lead +leaden +leadeth +leadsman +leadsmen +leaf +leaflet +leafy +league +leak +leakage +leaky +lean +leander +leap +leapfrog +leapt +lear +learn +lease +leasehold +leash +least +leather +leatherback +leatherneck +leatherwork +leathery +leave +leaven +leavenworth +lebanese +lebanon +lebensraum +lebesgue +lecher +lechery +lectern +lectionary +lecture +led +ledge +lee +leech +leeds +leek +leer +leery +leeuwenhoek +leeward +leeway +left +leftmost +leftover +leftward +lefty +leg +legacy +legal +legate +legatee +legato +legend +legendary +legendre +legerdemain +legging +leggy +leghorn +legible +legion +legislate +legislature +legitimacy +legitimate +legume +leguminous +lehigh +lehman +leigh +leighton +leila +leisure +leitmotif +leitmotiv +leland +lemma +lemming +lemon +lemonade +lemuel +len +lena +lend +length +lengthen +lengthwise +lengthy +lenient +lenin +leningrad +leninism +leninist +lennox +lenny +lenore +lens +lent +lenten +lenticular +lentil +leo +leon +leona +leonard +leonardo +leone +leonid +leonine +leopard +leopold +leper +lepidolite +leprosy +leroy +lesbian +lesion +leslie +lesotho +less +lessee +lessen +lesson +lessor +lest +lester +let +lethal +lethargic +lethargy +lethe +letitia +letterhead +letterman +lettermen +lettuce +leucine +leukemia +lev +levee +level +lever +leverage +levi +levin +levine +levis +levitate +leviticus +levitt +levity +levulose +levy +lew +lewd +lewis +lexical +lexicography +lexicon +lexington +leyden +liable +liaison +liar +libation +libel +libelous +liberal +liberate +liberia +libertarian +libertine +liberty +libidinous +libido +librarian +library +librate +librettist +libretto +libreville +libya +lice +licensable +licensee +licensor +licentious +lichen +lick +licorice +lid +lie +liechtenstein +lied +lien +lieu +lieutenant +life +lifeblood +lifeboat +lifeguard +lifelike +lifelong +lifespan +lifestyle +lifetime +lifo +lift +ligament +ligand +ligature +ligget +liggett +light +lighten +lightface +lighthearted +lighthouse +lightning +lightproof +lightweight +lignite +lignum +like +liken +likewise +lila +lilac +lilian +lillian +lilliputian +lilly +lilt +lily +lim +lima +limb +limbic +limbo +lime +limelight +limerick +limestone +limit +limitate +limitation +limousine +limp +limpet +limpid +limpkin +lin +lincoln +lind +linda +lindberg +lindbergh +linden +lindholm +lindquist +lindsay +lindsey +lindstrom +line +lineage +lineal +linear +linebacker +lineman +linemen +linen +lineprinter +lineup +linger +lingerie +lingo +lingua +lingual +linguist +liniment +link +linkage +linoleum +linotype +linseed +lint +linus +lion +lionel +lioness +lip +lipid +lippincott +lipread +lipschitz +lipscomb +lipstick +lipton +liquefaction +liquefy +liqueur +liquid +liquidate +liquidus +liquor +lisa +lisbon +lise +lisle +lisp +lissajous +list +listen +lit +litany +literacy +literal +literary +literate +literature +lithe +lithic +lithium +lithograph +lithography +lithology +lithosphere +lithospheric +lithuania +litigant +litigate +litigious +litmus +litterbug +little +littleneck +littleton +litton +littoral +liturgic +liturgy +live +liven +livermore +liverpool +liverpudlian +liverwort +livery +livestock +liveth +livid +livingston +livre +liz +lizard +lizzie +lloyd +lo +load +loaf +loam +loamy +loan +loath +loathe +loathsome +loaves +lob +lobar +lobby +lobe +loblolly +lobo +lobotomy +lobscouse +lobster +lobular +lobule +local +locale +locate +loci +lock +locke +lockhart +lockheed +lockian +locknut +lockout +locksmith +lockstep +lockup +lockwood +locomote +locomotion +locomotive +locomotor +locomotory +locoweed +locus +locust +locution +locutor +lodestone +lodge +lodgepole +lodowick +loeb +loess +loft +lofty +log +logan +logarithm +logarithmic +loge +loggerhead +logging +logic +logician +logistic +logjam +logo +loin +loincloth +loire +lois +loiter +loki +lola +loll +lollipop +lolly +lomb +lombard +lombardy +lome +london +lone +lonesome +long +longevity +longfellow +longhand +longhorn +longish +longitude +longitudinal +longleg +longstanding +longtime +longue +look +lookout +lookup +loom +loomis +loon +loop +loophole +loose +looseleaf +loosen +loosestrife +loot +lop +lope +lopez +lopseed +lopsided +loquacious +loquacity +loquat +lord +lordosis +lore +lorelei +loren +lorenz +loretta +lorinda +lorraine +los +losable +lose +loss +lossy +lost +lot +lotion +lotte +lottery +lottie +lotus +lou +loud +loudspeak +loudspeaker +loudspeaking +louis +louisa +louise +louisiana +louisville +lounge +lounsbury +lourdes +louse +lousewort +lousy +louver +louvre +love +lovebird +lovelace +loveland +lovelorn +low +lowboy +lowdown +lowe +lowell +lower +lowland +lowry +loy +loyal +loyalty +lozenge +lsi +ltd +ltv +lubbock +lubell +lubricant +lubricate +lubricious +lubricity +lucas +lucerne +lucia +lucian +lucid +lucifer +lucille +lucius +luck +lucky +lucrative +lucre +lucretia +lucretius +lucy +ludicrous +ludlow +ludwig +lufthansa +luftwaffe +lug +luge +luger +luggage +lugging +luis +luke +lukemia +lukewarm +lull +lullaby +lulu +lumbar +lumber +lumberman +lumbermen +lumen +luminance +luminary +luminescent +luminosity +luminous +lummox +lump +lumpish +lumpur +lumpy +lunacy +lunar +lunary +lunate +lunatic +lunch +luncheon +lunchroom +lunchtime +lund +lundberg +lundquist +lung +lunge +lupine +lura +lurch +lure +lurid +lurk +lusaka +luscious +lush +lust +lustful +lustrous +lusty +lutanist +lute +lutetium +luther +lutheran +lutz +lux +luxe +luxembourg +luxuriant +luxuriate +luxurious +luxury +luzon +lycopodium +lydia +lye +lying +lykes +lyle +lyman +lymph +lymphocyte +lymphoma +lynch +lynchburg +lynn +lynx +lyon +lyons +lyra +lyric +lyricism +lysenko +lysergic +lysine +m +m's +ma +mabel +mac +macabre +macaque +macarthur +macassar +macbeth +macdonald +macdougall +mace +macedon +macedonia +macgregor +mach +machiavelli +machination +machine +machinelike +machinery +machismo +macho +macintosh +mack +mackenzie +mackerel +mackey +mackinac +mackinaw +mackintosh +macmillan +macon +macrame +macro +macromolecular +macromolecule +macrophage +macroprocessor +macroscopic +macrostructure +mad +madagascar +madam +madame +madcap +madden +maddox +made +madeira +madeleine +madeline +madhouse +madison +madman +madmen +madonna +madras +madrid +madrigal +madsen +madstone +mae +maelstrom +maestro +mafia +magazine +magdalene +magenta +maggie +maggot +maggoty +magi +magic +magician +magisterial +magistrate +magma +magna +magnanimity +magnanimous +magnate +magnesia +magnesite +magnesium +magnet +magnetic +magnetite +magneto +magnetron +magnificent +magnify +magnitude +magnolia +magnum +magnuson +magog +magpie +magruder +mahayana +mahayanist +mahogany +mahoney +maid +maiden +maidenhair +maidservant +maier +mail +mailbox +mailman +mailmen +maim +main +maine +mainland +mainline +mainstay +mainstream +maintain +maintenance +maitre +majestic +majesty +major +make +makeshift +makeup +malabar +maladapt +maladaptive +maladjust +maladroit +malady +malagasy +malaise +malaprop +malaria +malarial +malawi +malay +malaysia +malcolm +malconduct +malcontent +malden +maldistribute +maldive +male +maledict +malefactor +malevolent +malfeasant +malformation +malformed +malfunction +mali +malice +malicious +malign +malignant +mall +mallard +malleable +mallet +mallory +mallow +malnourished +malnutrition +malocclusion +malone +maloney +malposed +malpractice +malraux +malt +malta +maltese +malton +maltose +maltreat +mambo +mamma +mammal +mammalian +mammoth +man +mana +manage +manageable +managerial +managua +manama +manatee +manchester +mandamus +mandarin +mandate +mandatory +mandrake +mandrel +mandrill +mane +maneuver +manfred +manganese +mange +mangel +mangle +manhattan +manhole +manhood +mania +maniac +maniacal +manic +manifest +manifestation +manifold +manikin +manila +manipulable +manipulate +manitoba +mankind +manley +mann +manna +mannequin +mannerism +manometer +manor +manpower +mans +manse +manservant +mansfield +mansion +manslaughter +mantel +mantic +mantis +mantissa +mantle +mantlepiece +mantrap +manual +manuel +manufacture +manumission +manumit +manumitted +manure +manuscript +manville +many +manzanita +mao +maori +map +maple +mar +marathon +maraud +marble +marc +marceau +marcel +marcello +march +marcia +marco +marcus +marcy +mardi +mare +margaret +margarine +margery +margin +marginal +marginalia +margo +marguerite +maria +marianne +marie +marietta +marigold +marijuana +marilyn +marimba +marin +marina +marinade +marinate +marine +marino +mario +marion +marionette +marital +maritime +marjoram +marjorie +marjory +mark +market +marketeer +marketplace +marketwise +markham +markov +markovian +marks +marksman +marksmen +marlboro +marlborough +marlene +marlin +marlowe +marmalade +marmot +maroon +marque +marquee +marquess +marquette +marquis +marriage +marriageable +married +marrietta +marriott +marrow +marrowbone +marry +mars +marseilles +marsh +marsha +marshal +marshall +marshland +marshmallow +marsupial +mart +marten +martensite +martha +martial +martian +martin +martinez +martingale +martini +martinique +martinson +marty +martyr +martyrdom +marvel +marvelous +marvin +marx +mary +maryland +mascara +masculine +maser +maseru +mash +mask +masochism +masochist +mason +masonic +masonite +masonry +masque +masquerade +mass +massachusetts +massacre +massage +masseur +massey +massif +massive +mast +masterful +mastermind +masterpiece +mastery +mastic +mastiff +mastodon +masturbate +mat +match +matchbook +matchmake +mate +mateo +mater +material +materiel +maternal +maternity +math +mathematic +mathematician +mathematik +mathews +mathewson +mathias +mathieu +matilda +matinal +matinee +matins +matisse +matriarch +matriarchal +matrices +matriculate +matrimonial +matrimony +matrix +matroid +matron +matson +matsumoto +matte +matthew +matthews +mattock +mattress +mattson +maturate +mature +maudlin +maul +maureen +maurice +mauricio +maurine +mauritania +mauritius +mausoleum +mauve +maverick +mavis +maw +mawkish +mawr +max +maxim +maxima +maximal +maximilian +maximum +maxine +maxwell +maxwellian +may +maya +mayapple +maybe +mayer +mayfair +mayflower +mayhem +maynard +mayo +mayonnaise +mayor +mayoral +mayst +mazda +maze +mazurka +mba +mbabane +mcadams +mcallister +mcbride +mccabe +mccall +mccallum +mccann +mccarthy +mccarty +mccauley +mcclain +mcclellan +mcclure +mccluskey +mcconnel +mcconnell +mccormick +mccoy +mccracken +mccullough +mcdaniel +mcdermott +mcdonald +mcdonnell +mcdougall +mcdowell +mcelroy +mcfadden +mcfarland +mcgee +mcgill +mcginnis +mcgovern +mcgowan +mcgrath +mcgraw +mcgregor +mcguire +mchugh +mcintosh +mcintyre +mckay +mckee +mckenna +mckenzie +mckeon +mckesson +mckinley +mckinney +mcknight +mclaughlin +mclean +mcleod +mcmahon +mcmillan +mcmullen +mcnally +mcnaughton +mcneil +mcnulty +mcpherson +md +me +mead +meadow +meadowland +meadowsweet +meager +meal +mealtime +mealy +mean +meander +meaningful +meant +meantime +meanwhile +measle +measure +meat +meaty +mecca +mechanic +mechanism +mechanist +mecum +medal +medallion +meddle +medea +medford +media +medial +median +mediate +medic +medicate +medici +medicinal +medicine +medico +mediocre +mediocrity +meditate +mediterranean +medium +medlar +medley +medusa +meek +meet +meetinghouse +meg +megabit +megabyte +megahertz +megalomania +megalomaniac +megaton +megavolt +megawatt +megaword +megohm +meier +meiosis +meistersinger +mekong +mel +melamine +melancholy +melanesia +melange +melanie +melanin +melanoma +melbourne +melcher +meld +melee +melinda +meliorate +melissa +mellon +mellow +melodic +melodious +melodrama +melodramatic +melody +melon +melpomene +melt +meltdown +meltwater +melville +melvin +member +membrane +memento +memo +memoir +memorabilia +memorable +memoranda +memorandum +memorial +memory +memphis +men +menace +menagerie +menarche +mend +mendacious +mendacity +mendel +mendelevium +mendelssohn +menelaus +menfolk +menhaden +menial +meningitis +meniscus +menlo +mennonite +menopause +menstruate +mensurable +mensuration +mental +mention +mentor +menu +menzies +mephistopheles +mercantile +mercator +mercedes +mercenary +mercer +merchandise +merchant +merciful +mercilessly +merck +mercurial +mercuric +mercury +mercy +mere +meredith +meretricious +merganser +merge +meridian +meridional +meringue +merit +meritorious +merle +merlin +mermaid +merriam +merrill +merrimack +merriment +merritt +merry +merrymake +mervin +mesa +mescal +mescaline +mesenteric +mesh +mesmeric +mesoderm +meson +mesopotamia +mesozoic +mesquite +mess +message +messenger +messiah +messieurs +messrs +messy +met +metabole +metabolic +metabolism +metabolite +metal +metallic +metalliferous +metallography +metalloid +metallurgic +metallurgist +metallurgy +metalwork +metamorphic +metamorphism +metamorphose +metamorphosis +metaphor +metaphoric +metcalf +mete +meteor +meteoric +meteorite +meteoritic +meteorology +meter +methacrylate +methane +methanol +methionine +method +methodic +methodism +methodist +methodology +methuen +methuselah +methyl +methylene +meticulous +metier +metric +metro +metronome +metropolis +metropolitan +mettle +mettlesome +metzler +mew +mexican +mexico +meyer +meyers +mezzanine +mezzo +mi +miami +miasma +miasmal +mica +mice +michael +michaelangelo +michel +michelangelo +michele +michelin +michelson +michigan +mickelson +mickey +micky +micro +microbial +microcosm +microfiche +micrography +microjoule +micron +micronesia +microscopy +mid +midas +midband +midday +middle +middlebury +middleman +middlemen +middlesex +middleton +middletown +middleweight +midge +midget +midland +midmorn +midnight +midpoint +midrange +midscale +midsection +midshipman +midshipmen +midspan +midst +midstream +midterm +midway +midweek +midwest +midwestern +midwife +midwinter +midwives +mien +miff +mig +might +mightn't +mighty +mignon +migrant +migrate +migratory +miguel +mike +mila +milan +milch +mild +mildew +mildred +mile +mileage +miles +milestone +milieu +militant +militarism +militarist +military +militate +militia +militiamen +milk +milkweed +milky +mill +millard +millenarian +millenia +millennia +millennium +miller +millet +millie +millikan +millinery +million +millionaire +millions +millionth +millipede +mills +millstone +milord +milt +milton +miltonic +milwaukee +mimeograph +mimesis +mimetic +mimi +mimic +mimicked +mimicking +min +minaret +mince +mincemeat +mind +mindanao +mindful +mine +minefield +mineral +mineralogy +minerva +minestrone +minesweeper +mingle +mini +miniature +minibike +minicomputer +minim +minima +minimal +minimax +minimum +minion +ministerial +ministry +mink +minneapolis +minnesota +minnie +minnow +minoan +minor +minos +minot +minsk +minsky +minstrel +minstrelsy +mint +minuend +minuet +minus +minuscule +minute +minuteman +minutemen +minutiae +miocene +mira +miracle +miraculous +mirage +miranda +mire +mirfak +miriam +mirror +mirth +misanthrope +misanthropic +miscegenation +miscellaneous +miscellany +mischievous +miscible +miscreant +miser +misery +misnomer +misogynist +misogyny +mispronunciation +miss +misshapen +missile +mission +missionary +mississippi +mississippian +missive +missoula +missouri +missy +mist +mistletoe +mistress +misty +mit +mitchell +mite +miterwort +mitigate +mitochondria +mitosis +mitral +mitre +mitt +mitten +mix +mixture +mixup +mizar +mn +mnemonic +mo +moan +moat +mob +mobcap +mobil +mobile +mobility +mobster +moccasin +mock +mockernut +mockery +mockingbird +mockup +modal +mode +model +modem +moderate +modern +modest +modesto +modesty +modicum +modify +modish +modular +modulate +module +moduli +modulo +modulus +modus +moe +moen +mogadiscio +mohammedan +mohawk +mohr +moiety +moines +moire +moiseyev +moist +moisten +moisture +molal +molar +molasses +mold +moldavia +moldboard +mole +molecular +molecule +molehill +molest +moliere +moline +moll +mollie +mollify +mollusk +molly +mollycoddle +moloch +molt +molten +moluccas +molybdate +molybdenite +molybdenum +moment +momenta +momentary +momentous +momentum +mommy +mona +monaco +monad +monadic +monarch +monarchic +monarchy +monash +monastery +monastic +monaural +monday +monel +monetarism +monetarist +monetary +money +moneymake +moneywort +mongolia +mongoose +monic +monica +monies +monitor +monitory +monk +monkey +monkeyflower +monkish +monmouth +monoceros +monochromatic +monochromator +monocotyledon +monocular +monogamous +monogamy +monoid +monolith +monologist +monologue +monomer +monomeric +monomial +monongahela +monopoly +monotonous +monotreme +monoxide +monroe +monrovia +monsanto +monsieur +monsoon +monster +monstrosity +monstrous +mont +montage +montague +montana +montclair +monte +montenegrin +monterey +monteverdi +montevideo +montgomery +month +monticello +montmartre +montpelier +montrachet +montreal +monty +monument +moo +mood +moody +moon +mooney +moonlight +moonlit +moor +moore +moorish +moose +moot +mop +moraine +moral +morale +moran +morass +moratorium +moravia +morbid +more +morel +moreland +moreover +moresby +morgan +morgen +morgue +moriarty +moribund +morley +mormon +morn +moroccan +morocco +moron +morose +morpheme +morphemic +morphine +morphism +morphology +morphophonemic +morrill +morris +morrison +morrissey +morristown +morrow +morse +morsel +mort +mortal +mortar +mortem +mortgage +mortgagee +mortgagor +mortician +mortify +mortise +morton +mosaic +moscow +moser +moses +moslem +mosque +mosquito +moss +mossy +most +mot +motel +motet +moth +mothball +mother +motherhood +motherland +motif +motion +motivate +motive +motley +motor +motorcycle +motorola +mottle +motto +mould +moulton +mound +mount +mountain +mountaineer +mountainous +mountainside +mourn +mournful +mouse +moustache +mousy +mouth +mouthful +mouthpiece +mouton +move +movie +mow +moyer +mozart +mph +mr +mrs +ms +mt +mu +much +mucilage +muck +mucosa +mucus +mud +mudd +muddle +muddlehead +muddy +mudguard +mudsling +mueller +muezzin +muff +muffin +muffle +mug +mugging +muggy +mugho +muir +mukden +mulatto +mulberry +mulch +mulct +mule +mulish +mull +mullah +mullein +mullen +mulligan +mulligatawny +mullion +multi +multifarious +multinomial +multiple +multiplet +multiplex +multiplexor +multipliable +multiplicand +multiplication +multiplicative +multiplicity +multiply +multitude +multitudinous +mum +mumble +mumford +mummy +munch +muncie +mundane +mung +munich +municipal +munificent +munition +munson +muon +muong +mural +murder +murderous +muriatic +muriel +murk +murky +murmur +murphy +murray +murre +muscat +muscle +muscovite +muscovy +muscular +musculature +muse +museum +mush +mushroom +mushy +music +musicale +musician +musicology +musk +muskegon +muskellunge +musket +muskmelon +muskox +muskoxen +muskrat +muslim +muslin +mussel +must +mustache +mustachio +mustang +mustard +mustn't +musty +mutagen +mutandis +mutant +mutate +mutatis +mute +mutilate +mutineer +mutiny +mutt +mutter +mutton +mutual +mutuel +muzak +muzo +muzzle +my +mycenae +mycenaean +mycobacteria +mycology +myel +myeline +myeloid +myers +mylar +mynah +mynheer +myocardial +myocardium +myofibril +myoglobin +myopia +myopic +myosin +myra +myriad +myron +myrrh +myrtle +myself +mysterious +mystery +mystic +mystify +mystique +myth +mythic +mythology +n +n's +naacp +nab +nabisco +nabla +nadia +nadine +nadir +nag +nagasaki +nagging +nagoya +nagy +naiad +nail +nair +nairobi +naive +naivete +nakayama +naked +name +nameable +nameplate +namesake +nan +nancy +nanette +nanking +nanometer +nanosecond +nantucket +naomi +nap +nape +napkin +naples +napoleon +napoleonic +narbonne +narcissism +narcissist +narcissus +narcosis +narcotic +narragansett +narrate +narrow +nary +nasa +nasal +nascent +nash +nashua +nashville +nassau +nasturtium +nasty +nat +natal +natalie +natchez +nate +nathan +nathaniel +nation +nationhood +nationwide +native +nato +natty +natural +nature +naturopath +naughty +nausea +nauseate +nauseum +nautical +nautilus +navajo +naval +nave +navel +navigable +navigate +navy +nay +nazarene +nazareth +nazi +nazism +nbc +nbs +nc +ncaa +ncar +nco +ncr +nd +ndjamena +ne +neal +neanderthal +neap +neapolitan +near +nearby +nearest +nearsighted +neat +neater +neath +nebraska +nebula +nebulae +nebular +nebulous +necessary +necessitate +necessity +neck +necklace +neckline +necktie +necromancer +necromancy +necromantic +necropsy +necrosis +necrotic +nectar +nectareous +nectarine +nectary +ned +nee +need +needful +needham +needle +needlepoint +needlework +needn't +needy +neff +negate +neglect +neglecter +negligee +negligent +negligible +negotiable +negotiate +negro +negroes +negroid +nehru +neil +neither +nell +nellie +nelsen +nelson +nemesis +neoclassic +neoconservative +neodymium +neolithic +neologism +neon +neonatal +neonate +neophyte +neoprene +nepal +nepenthe +nephew +neptune +neptunium +nereid +nero +nerve +nervous +ness +nest +nestle +nestor +net +nether +netherlands +netherworld +nettle +nettlesome +network +neumann +neural +neuralgia +neurasthenic +neuritis +neuroanatomic +neuroanatomy +neuroanotomy +neurology +neuromuscular +neuron +neuronal +neuropathology +neurophysiology +neuropsychiatric +neuroses +neurosis +neurotic +neuter +neutral +neutrino +neutron +neva +nevada +neve +never +nevertheless +nevins +new +newark +newbold +newborn +newcastle +newcomer +newel +newell +newfound +newfoundland +newline +newlywed +newman +newport +newsboy +newscast +newsletter +newsman +newsmen +newspaper +newspaperman +newspapermen +newsreel +newsstand +newsweek +newt +newton +newtonian +next +nguyen +nh +niacin +niagara +niamey +nib +nibble +nibelung +nibs +nicaragua +nice +nicety +niche +nicholas +nicholls +nichols +nicholson +nichrome +nick +nickel +nickname +nicodemus +nicosia +nicotinamide +nicotine +niece +nielsen +nielson +nietzsche +niger +nigeria +niggardly +nigger +niggle +nigh +night +nightcap +nightclub +nightdress +nightfall +nightgown +nighthawk +nightingale +nightmare +nightmarish +nightshirt +nighttime +nih +nihilism +nihilist +nikko +nikolai +nil +nile +nilpotent +nimble +nimbus +nimh +nina +nine +ninebark +ninefold +nineteen +nineteenth +ninetieth +ninety +nineveh +ninth +niobe +niobium +nip +nipple +nippon +nirvana +nit +nitpick +nitrate +nitric +nitride +nitrite +nitrogen +nitrogenous +nitroglycerine +nitrous +nitty +nixon +nj +nm +nne +nnw +no +noaa +noah +nob +nobel +nobelium +noble +nobleman +noblemen +noblesse +nobody +nobody'd +nocturnal +nocturne +nod +nodal +node +nodular +nodule +noel +noetherian +noise +noisemake +noisy +nolan +noll +nolo +nomad +nomadic +nomenclature +nominal +nominate +nominee +nomogram +nomograph +non +nonagenarian +nonce +nonchalant +nondescript +none +nonetheless +nonogenarian +nonsensic +nonsensical +noodle +nook +noon +noontime +noose +nor +nora +nordhoff +nordstrom +noreen +norfolk +norm +norma +normal +normalcy +norman +normandy +normative +norris +north +northampton +northbound +northeast +northeastern +northerly +northern +northernmost +northland +northrop +northrup +northumberland +northward +northwest +northwestern +norton +norwalk +norway +norwegian +norwich +nose +nosebag +nosebleed +nostalgia +nostalgic +nostradamus +nostrand +nostril +not +notary +notate +notch +note +notebook +noteworthy +nothing +notice +noticeable +notify +notion +notocord +notoriety +notorious +notre +nottingham +notwithstanding +nouakchott +noun +nourish +nouveau +nov +nova +novak +novel +novelty +november +novice +novitiate +novo +novosibirsk +now +nowaday +nowadays +nowhere +nowise +noxious +nozzle +nrc +nsf +ntis +nu +nuance +nubia +nubile +nucleant +nuclear +nucleate +nuclei +nucleic +nucleoli +nucleolus +nucleotide +nucleus +nuclide +nude +nudge +nugatory +nugget +nuisance +null +nullify +nullstellensatz +numb +numerable +numeral +numerate +numeric +numerische +numerology +numerous +numinous +numismatic +numismatist +nun +nuptial +nurse +nursery +nurture +nut +nutate +nutcrack +nuthatch +nutmeg +nutria +nutrient +nutrition +nutritious +nutritive +nutshell +nuzzle +nv +nw +ny +nyc +nylon +nymph +nymphomania +nymphomaniac +nyquist +nyu +o +o'brien +o'clock +o'connell +o'connor +o'dell +o'donnell +o'dwyer +o'er +o'hare +o'leary +o'neill +o's +o'shea +o'sullivan +oaf +oak +oaken +oakland +oakley +oakwood +oar +oases +oasis +oat +oath +oatmeal +obduracy +obdurate +obedient +obeisant +obelisk +oberlin +obese +obey +obfuscate +obfuscatory +obituary +object +objectify +objectivity +objector +objet +oblate +obligate +obligatory +oblige +oblique +obliterate +oblivion +oblivious +oblong +obnoxious +oboe +oboist +obscene +obscure +obsequious +obsequy +observant +observation +observatory +observe +obsess +obsession +obsessive +obsidian +obsolescent +obsolete +obstacle +obstetric +obstinacy +obstinate +obstruct +obstruent +obtain +obtrude +obtrusion +obtrusive +obverse +obviate +obvious +ocarina +occasion +occident +occidental +occipital +occlude +occlusion +occlusive +occult +occultate +occultation +occupant +occupation +occupy +occur +occurred +occurrent +occurring +ocean +oceania +oceanic +oceanographer +oceanography +oceanside +ocelot +oct +octagon +octagonal +octahedra +octahedral +octahedron +octal +octane +octant +octave +octavia +octennial +octet +octile +octillion +october +octogenarian +octopus +octoroon +ocular +odd +ode +odessa +odin +odious +odium +odometer +odorous +odysseus +odyssey +oedipal +oedipus +oersted +of +off +offal +offbeat +offenbach +offend +offensive +offer +offertory +offhand +office +officeholder +officemate +official +officialdom +officiate +officio +officious +offload +offprint +offsaddle +offset +offsetting +offshoot +offshore +offspring +offstage +oft +often +oftentimes +ogden +ogle +ogre +ogress +oh +ohio +ohm +ohmic +ohmmeter +oil +oilcloth +oilman +oilmen +oilseed +oily +oint +ointment +ok +okay +okinawa +oklahoma +olaf +olav +old +olden +oldenburg +oldsmobile +oldster +oldy +oleander +olefin +oleomargarine +olfactory +olga +oligarchic +oligarchy +oligoclase +oligopoly +olin +olive +oliver +olivetti +olivia +olivine +olsen +olson +olympia +olympic +omaha +oman +ombudsman +ombudsperson +omega +omelet +omen +omicron +ominous +omission +omit +omitted +omitting +omnibus +omnipotent +omnipresent +omniscient +on +once +oncology +oncoming +one +oneida +onerous +oneself +onetime +oneupmanship +ongoing +onion +onlook +onlooker +onlooking +only +onomatopoeia +onomatopoeic +onondaga +onrush +onrushing +onset +onslaught +ontario +onto +ontogeny +ontology +onus +onward +onyx +oocyte +oodles +ooze +opacity +opal +opalescent +opaque +opec +opel +open +opera +operable +operand +operant +operate +operatic +operetta +operon +ophiuchus +ophthalmic +ophthalmology +opiate +opine +opinion +opinionate +opium +opossum +oppenheimer +opponent +opportune +opposable +oppose +opposite +opposition +oppress +oppression +oppressive +oppressor +opprobrium +opt +optic +optima +optimal +optimism +optimist +optimistic +optimum +option +optoacoustic +optoelectronic +optoisolate +optometrist +optometry +opulent +opus +or +oracle +oracular +oral +orange +orangeroot +orangutan +orate +oratoric +oratorical +oratorio +oratory +orb +orbit +orbital +orchard +orchestra +orchestral +orchestrate +orchid +orchis +ordain +ordeal +order +orderly +ordinal +ordinance +ordinary +ordinate +ordnance +ore +oregano +oregon +oresteia +orestes +organ +organdy +organic +organismic +organometallic +orgasm +orgiastic +orgy +orient +oriental +orifice +origin +original +originate +orin +orinoco +oriole +orion +orkney +orlando +orleans +ornament +ornamentation +ornate +ornately +ornery +orographic +orography +orono +orphan +orphanage +orpheus +orphic +orr +ortega +orthant +orthicon +orthoclase +orthodontic +orthodontist +orthodox +orthodoxy +orthogonal +orthography +orthonormal +orthopedic +orthophosphate +orthorhombic +orville +orwell +orwellian +osaka +osborn +osborne +oscar +oscillate +oscillatory +oscilloscope +osgood +osha +oshkosh +osier +osiris +oslo +osmium +osmosis +osmotic +osprey +osseous +ossify +ostensible +ostentatious +osteology +osteopath +osteopathic +osteopathy +osteoporosis +ostracism +ostracod +ostrander +ostrich +oswald +othello +other +otherwise +otherworld +otherworldly +otiose +otis +ott +ottawa +otter +otto +ottoman +ouagadougou +ouch +ought +oughtn't +ounce +our +ourselves +oust +out +outermost +outlandish +outlawry +outrageous +ouvre +ouzel +ouzo +ova +oval +ovary +ovate +oven +ovenbird +over +overhang +overt +overture +ovid +oviform +ovum +ow +owe +owens +owing +owl +owly +own +ox +oxalate +oxalic +oxcart +oxen +oxeye +oxford +oxidant +oxidate +oxide +oxnard +oxonian +oxygen +oxygenate +oyster +ozark +ozone +p +p's +pa +pablo +pabst +pace +pacemake +pacesetting +pacific +pacifism +pacifist +pacify +pack +package +packard +packet +pact +pad +paddle +paddock +paddy +padlock +padre +paean +pagan +page +pageant +pageantry +paginate +pagoda +paid +pail +pain +paine +painful +painstaking +paint +paintbrush +pair +pairwise +pakistan +pakistani +pal +palace +palate +palatine +palazzi +palazzo +pale +paleolithic +paleozoic +palermo +palestine +palestinian +palette +palfrey +palindrome +palindromic +palisade +pall +palladia +palladian +palladium +pallet +palliate +pallid +palm +palmate +palmetto +palmolive +palmyra +palo +palomar +palpable +palsy +pam +pamela +pampa +pamper +pamphlet +pan +panacea +panama +pancake +pancho +pancreas +pancreatic +panda +pandanus +pandemic +pandemonium +pander +pandora +pane +panel +pang +panhandle +panic +panicked +panicky +panicle +panjandrum +panoply +panorama +panoramic +pansy +pant +pantheism +pantheist +pantheon +panther +pantomime +pantomimic +pantry +panty +paoli +pap +papa +papacy +papal +papaw +paper +paperback +paperbound +paperweight +paperwork +papery +papillary +papoose +pappas +pappy +paprika +papua +papyri +papyrus +par +parabola +parabolic +paraboloid +paraboloidal +parachute +parade +paradigm +paradigmatic +paradise +paradox +paradoxic +paraffin +paragon +paragonite +paragraph +paraguay +parakeet +paralinguistic +parallax +parallel +parallelepiped +parallelogram +paralysis +paramagnet +paramagnetic +paramedic +parameter +paramilitary +paramount +paramus +paranoia +paranoiac +paranoid +paranormal +parapet +paraphernalia +paraphrase +parapsychology +parasite +parasitic +parasol +parasympathetic +paratroop +paraxial +parboil +parcel +parch +pardon +pare +paregoric +parent +parentage +parental +parentheses +parenthesis +parenthetic +parenthood +pareto +pariah +parimutuel +paris +parish +parishioner +parisian +park +parke +parkinson +parkish +parkland +parks +parkway +parlance +parlay +parley +parliament +parliamentarian +parliamentary +parochial +parody +parole +parolee +parquet +parr +parrish +parrot +parry +parse +parsifal +parsimonious +parsimony +parsley +parsnip +parson +parsonage +parsons +part +partake +parthenon +partial +participant +participate +participle +particle +particular +particulate +partisan +partition +partner +partook +partridge +party +parvenu +pasadena +pascal +paschal +pasha +paso +pass +passage +passageway +passaic +passband +passe +passenger +passer +passerby +passion +passionate +passivate +passive +passover +passport +password +past +paste +pasteboard +pastel +pasteup +pasteur +pastiche +pastime +pastor +pastoral +pastry +pasture +pasty +pat +patagonia +patch +patchwork +patchy +pate +patent +patentee +pater +paternal +paternoster +paterson +path +pathetic +pathfind +pathogen +pathogenesis +pathogenic +pathology +pathos +pathway +patient +patina +patio +patriarch +patriarchal +patriarchy +patrice +patricia +patrician +patrick +patrimonial +patrimony +patriot +patriotic +patristic +patrol +patrolled +patrolling +patrolman +patrolmen +patron +patronage +patroness +patsy +pattern +patterson +patti +patton +patty +paucity +paul +paula +paulette +pauli +pauline +paulo +paulsen +paulson +paulus +paunch +paunchy +pauper +pause +pavanne +pave +pavilion +pavlov +paw +pawn +pawnshop +pawtucket +pax +pay +paycheck +payday +paymaster +payne +payoff +payroll +paz +pbs +pdp +pea +peabody +peace +peaceable +peaceful +peacemake +peacetime +peach +peachtree +peacock +peafowl +peak +peaky +peal +peale +peanut +pear +pearce +pearl +pearlite +pearlstone +pearson +peasant +peasanthood +pease +peat +pebble +pecan +peccary +peck +pecos +pectoral +pectoralis +peculate +peculiar +pecuniary +pedagogic +pedagogue +pedagogy +pedal +pedant +pedantic +pedantry +peddle +pedestal +pedestrian +pediatric +pediatrician +pedigree +pediment +pedro +pee +peed +peek +peel +peep +peephole +peepy +peer +peg +pegasus +pegboard +pegging +peggy +pejorative +peking +pelham +pelican +pellagra +pellet +pelt +peltry +pelvic +pelvis +pembroke +pemmican +pen +penal +penalty +penance +penates +pence +penchant +pencil +pend +pendant +pendulum +penelope +penetrable +penetrate +penguin +penh +penicillin +peninsula +penis +penitent +penitential +penitentiary +penman +penmen +penn +penna +pennant +pennsylvania +penny +pennyroyal +penrose +pensacola +pension +pensive +pent +pentagon +pentagonal +pentagram +pentane +pentecost +pentecostal +penthouse +penultimate +penumbra +penurious +penury +peony +people +peoria +pep +peppergrass +peppermint +pepperoni +peppery +peppy +pepsi +pepsico +peptide +per +perceive +percent +percentage +percentile +percept +perceptible +perception +perceptive +perceptual +perch +perchance +perchlorate +percival +percolate +percussion +percussive +percy +perdition +peregrine +peremptory +perennial +perez +perfect +perfecter +perfectible +perfidious +perfidy +perforate +perforce +perform +performance +perfume +perfumery +perfunctory +perfuse +perfusion +pergamon +perhaps +periclean +pericles +peridotite +perihelion +peril +perilla +perilous +perimeter +period +periodic +peripatetic +peripheral +periphery +periphrastic +periscope +perish +peritectic +periwinkle +perjure +perjury +perk +perkins +perky +perle +permalloy +permanent +permeable +permeate +permian +permissible +permission +permissive +permit +permitted +permitting +permutation +permute +pernicious +peroxide +perpendicular +perpetrate +perpetual +perpetuate +perpetuity +perplex +perquisite +perry +persecute +persecution +persecutory +perseus +perseverance +perseverant +persevere +pershing +persia +persian +persiflage +persimmon +persist +persistent +person +persona +personage +personal +personify +personnel +perspective +perspicacious +perspicuity +perspicuous +perspiration +perspire +persuade +persuasion +persuasive +pert +pertain +perth +pertinacious +pertinent +perturb +perturbate +perturbation +peru +perusal +peruse +peruvian +pervade +pervasion +pervasive +perverse +perversion +pervert +pessimal +pessimism +pessimist +pessimum +pest +peste +pesticide +pestilent +pestilential +pestle +pet +petal +pete +petersburg +petersen +peterson +petit +petite +petition +petrel +petri +petrifaction +petrify +petrochemical +petroglyph +petrol +petroleum +petrology +petticoat +petty +petulant +petunia +peugeot +pew +pewee +pewter +pfennig +pfizer +ph.d +phage +phagocyte +phalanger +phalanx +phalarope +phantasy +phantom +pharaoh +pharmaceutic +pharmacist +pharmacology +pharmacopoeia +pharmacy +phase +phd +pheasant +phelps +phenol +phenolic +phenomena +phenomenal +phenomenology +phenomenon +phenotype +phenyl +phenylalanine +phi +phil +philadelphia +philanthrope +philanthropic +philanthropy +philharmonic +philip +philippine +philistine +phillip +phillips +philodendron +philology +philosoph +philosopher +philosophic +philosophy +phipps +phloem +phlox +phobic +phoebe +phoenicia +phoenix +phon +phone +phoneme +phonemic +phonetic +phonic +phonograph +phonology +phonon +phony +phosgene +phosphate +phosphide +phosphine +phosphor +phosphoresce +phosphorescent +phosphoric +phosphorus +phosphorylate +photo +photogenic +photography +photolysis +photolytic +photometry +photon +phrase +phrasemake +phraseology +phthalate +phycomycetes +phyla +phyllis +phylogeny +physic +physician +physik +physiochemical +physiognomy +physiology +physiotherapist +physiotherapy +physique +phytoplankton +pi +pianissimo +pianist +piano +piazza +pica +picasso +picayune +piccadilly +piccolo +pick +pickaxe +pickerel +pickering +picket +pickett +pickford +pickle +pickman +pickoff +pickup +picky +picnic +picnicked +picnicker +picnicking +picofarad +picojoule +picosecond +pictorial +picture +picturesque +piddle +pidgin +pie +piece +piecemeal +piecewise +piedmont +pier +pierce +pierre +pierson +pietism +piety +piezoelectric +pig +pigeon +pigeonberry +pigeonfoot +pigeonhole +pigging +piggish +piggy +piggyback +pigment +pigmentation +pigpen +pigroot +pigskin +pigtail +pike +pilate +pile +pilewort +pilfer +pilferage +pilgrim +pilgrimage +pill +pillage +pillar +pillory +pillow +pillsbury +pilot +pimp +pimple +pin +pinafore +pinball +pinch +pincushion +pine +pineapple +pinehurst +ping +pinhead +pinhole +pinion +pink +pinkie +pinkish +pinnacle +pinnate +pinochle +pinpoint +pinscher +pinsky +pint +pintail +pinto +pinwheel +pinxter +pion +pioneer +piotr +pious +pip +pipe +pipeline +piper +pipette +pipsissewa +piquant +pique +piracy +piraeus +pirate +pirogue +pirouette +piscataway +pisces +piss +pistachio +pistol +pistole +piston +pit +pitch +pitchblende +pitchfork +pitchstone +piteous +pitfall +pith +pithy +pitiable +pitiful +pitilessly +pitman +pitney +pitt +pittsburgh +pittsfield +pittston +pituitary +pity +pius +pivot +pivotal +pixel +pixy +pizza +pizzeria +pizzicato +pl +placate +placater +place +placeable +placebo +placeholder +placenta +placental +placid +plagiarism +plagiarist +plagioclase +plague +plagued +plaguey +plaid +plain +plainfield +plaintiff +plaintive +plan +planar +planck +plane +planeload +planet +planetaria +planetarium +planetary +planetesimal +planetoid +plank +plankton +planoconcave +planoconvex +plant +plantain +plantation +plaque +plasm +plasma +plasmon +plaster +plastic +plastisol +plastron +plat +plate +plateau +platelet +platen +platform +platinum +platitude +platitudinous +plato +platonic +platonism +platonist +platoon +platte +platypus +plausible +play +playa +playback +playboy +playful +playground +playhouse +playmate +playoff +playroom +plaything +playtime +playwright +playwriting +plaza +plea +plead +pleasant +please +pleasure +pleat +plebeian +plebian +pledge +pleiades +pleistocene +plenary +plenipotentiary +plenitude +plentiful +plenty +plenum +plethora +pleura +pleural +plexiglas +pliable +pliancy +pliant +pliers +plight +pliny +pliocene +plod +plop +plot +plover +plowman +plowshare +pluck +plucky +plug +plugboard +pluggable +plugging +plum +plumage +plumb +plumbago +plumbate +plume +plummet +plump +plunder +plunge +plunk +pluperfect +plural +plus +plush +plushy +plutarch +pluto +pluton +plutonium +ply +plymouth +plyscore +plywood +pm +pneumatic +pneumococcus +pneumonia +po +poach +pobox +pocket +pocketbook +pocketful +pocono +pocus +pod +podge +podia +podium +poe +poem +poesy +poet +poetic +poetry +pogo +pogrom +poi +poignant +poincare +poinsettia +point +pointwise +poise +poison +poisonous +poisson +poke +pokerface +pol +poland +polar +polarimeter +polaris +polariscope +polariton +polarogram +polarograph +polarography +polaroid +polaron +pole +polecat +polemic +police +policeman +policemen +policy +polio +poliomyelitis +polis +polish +politburo +polite +politic +politician +politicking +politico +polity +polk +polka +polkadot +poll +pollard +pollen +pollinate +pollock +polloi +pollster +pollutant +pollute +pollution +pollux +polo +polonaise +polonium +polopony +polyglot +polygon +polygonal +polygynous +polyhedra +polyhedral +polyhedron +polyhymnia +polymer +polymerase +polymeric +polymorph +polymorphic +polynomial +polyphemus +polyphony +polyploidy +polypropylene +polysaccharide +polytechnic +polytope +polytypy +pomade +pomegranate +pomona +pomp +pompadour +pompano +pompeii +pompey +pompon +pomposity +pompous +ponce +ponchartrain +poncho +pond +ponder +ponderous +pong +pont +pontiac +pontiff +pontific +pontificate +pony +pooch +poodle +pooh +pool +poole +poop +poor +pop +popcorn +pope +popish +poplar +poplin +poppy +populace +popular +populate +populism +populist +populous +porcelain +porch +porcine +porcupine +pore +pork +pornographer +pornography +porosity +porous +porphyry +porpoise +porridge +port +portage +portal +porte +portend +portent +portentous +porterhouse +portfolio +portia +portico +portland +portmanteau +porto +portrait +portraiture +portray +portrayal +portsmouth +portugal +portuguese +portulaca +posable +pose +poseidon +poseur +posey +posh +posit +position +positive +positron +posner +posse +posseman +possemen +possess +possession +possessive +possessor +possible +possum +post +postage +postal +postcard +postcondition +postdoctoral +posterior +posteriori +posterity +postfix +postgraduate +posthumous +postlude +postman +postmark +postmaster +postmen +postmortem +postmultiply +postoperative +postorder +postpaid +postpone +postposition +postprocess +postprocessor +postscript +postulate +posture +postwar +posy +pot +potable +potash +potassium +potato +potatoes +potbelly +potboil +potent +potentate +potential +potentiometer +pothole +potion +potlatch +potomac +potpourri +pottery +potts +pouch +poughkeepsie +poultice +poultry +pounce +pound +pour +pout +poverty +pow +powder +powderpuff +powdery +powell +power +powerful +powerhouse +powers +poynting +ppm +pr +practicable +practical +practice +practise +practitioner +prado +praecox +pragmatic +pragmatism +pragmatist +prague +prairie +praise +praiseworthy +pram +prance +prank +praseodymium +pratt +pravda +pray +prayer +prayerful +preach +preachy +preamble +precambrian +precarious +precaution +precautionary +precede +precedent +precept +precess +precession +precinct +precious +precipice +precipitable +precipitate +precipitous +precis +precise +precision +preclude +precocious +precocity +precursor +predatory +predecessor +predicament +predicate +predict +predictor +predilect +predispose +predisposition +predominant +predominate +preeminent +preempt +preemption +preemptive +preemptor +preen +prefab +prefabricate +preface +prefatory +prefect +prefecture +prefer +preference +preferential +preferred +preferring +prefix +pregnant +prehistoric +prejudice +prejudicial +preliminary +prelude +premature +premeditate +premier +premiere +premise +premium +premonition +premonitory +prentice +preoccupy +prep +preparation +preparative +preparatory +prepare +preponderant +preponderate +preposition +preposterous +prerequisite +prerogative +presage +presbyterian +presbytery +prescott +prescribe +prescript +prescription +prescriptive +presence +present +presentation +presentational +preservation +preserve +preside +president +presidential +press +pressure +prestidigitate +prestige +prestigious +presto +preston +presume +presumed +presuming +presumption +presumptive +presumptuous +presuppose +presupposition +pretend +pretense +pretension +pretentious +pretext +pretoria +pretty +prevail +prevalent +prevent +prevention +preventive +preview +previous +prexy +prey +priam +price +prick +prickle +pride +priest +priestley +prig +priggish +prim +prima +primacy +primal +primary +primate +prime +primeval +primitive +primitivism +primordial +primp +primrose +prince +princess +princeton +principal +principia +principle +print +printmake +printout +prior +priori +priory +priscilla +prism +prismatic +prison +prissy +pristine +pritchard +privacy +private +privet +privilege +privy +prize +prizewinning +pro +probabilist +probate +probe +probity +problem +problematic +procaine +procedural +procedure +proceed +process +procession +processor +proclaim +proclamation +proclivity +procrastinate +procreate +procrustean +procrustes +procter +proctor +procure +procyon +prod +prodigal +prodigious +prodigy +produce +producible +product +productivity +prof +profane +profess +profession +professional +professor +professorial +proffer +proficient +profile +profit +profiteer +profligacy +profligate +profound +profundity +profuse +profusion +progenitor +progeny +prognosis +prognosticate +programmable +programmed +programmer +programming +progress +progression +progressive +prohibit +prohibition +prohibitive +prohibitory +project +projectile +projector +prokaryote +prokofieff +prolate +prolegomena +proletariat +proliferate +prolific +proline +prolix +prologue +prolong +prolongate +prolusion +prom +promenade +promethean +prometheus +promethium +prominent +promiscuity +promiscuous +promise +promote +promotion +prompt +promptitude +promulgate +prone +prong +pronoun +pronounce +pronounceable +pronto +pronunciation +proof +proofread +prop +propaganda +propagandist +propagate +propane +propel +propellant +propelled +propeller +propelling +propensity +proper +property +prophecy +prophesy +prophet +prophetic +prophylactic +propionate +propitiate +propitious +proponent +proportion +proportionate +propos +proposal +propose +proposition +propound +proprietary +proprietor +propriety +proprioception +proprioceptive +propulsion +propyl +propylene +prorate +prorogue +prosaic +proscenium +proscribe +proscription +prose +prosecute +prosecution +prosecutor +proserpine +prosodic +prosody +prosopopoeia +prospect +prospector +prospectus +prosper +prosperous +prostate +prostheses +prosthesis +prosthetic +prostitute +prostitution +prostrate +protactinium +protagonist +protean +protease +protect +protector +protectorate +protege +protein +proteolysis +proteolytic +protest +protestant +protestation +prothonotary +protocol +proton +protophyta +protoplasm +protoplasmic +prototype +prototypic +protozoa +protozoan +protract +protrude +protrusion +protrusive +protuberant +proud +proust +prove +proven +provenance +proverb +proverbial +provide +provident +providential +province +provincial +provision +provisional +proviso +provocateur +provocation +provocative +provoke +provost +prow +prowess +prowl +proximal +proximate +proximity +proxy +prudent +prudential +prune +prurient +prussia +pry +psalm +psalter +psaltery +pseudo +psi +psych +psyche +psychiatric +psychiatrist +psychiatry +psychic +psycho +psychoacoustic +psychoanalysis +psychoanalyst +psychoanalytic +psychobiology +psychology +psychometry +psychopath +psychopathic +psychophysic +psychophysiology +psychopomp +psychoses +psychosis +psychosomatic +psychotherapeutic +psychotherapist +psychotherapy +psychotic +psyllium +pta +ptarmigan +pterodactyl +ptolemaic +ptolemy +pub +puberty +pubescent +public +publication +publish +puc +puccini +puck +puckish +pudding +puddingstone +puddle +puddly +pueblo +puerile +puerto +puff +puffball +puffed +puffery +puffin +puffy +pug +pugh +pugnacious +puissant +puke +pulaski +pulitzer +pull +pullback +pulley +pullman +pullover +pulmonary +pulp +pulpit +pulsar +pulsate +pulse +pulverable +puma +pumice +pummel +pump +pumpkin +pumpkinseed +pun +punch +punctual +punctuate +puncture +pundit +punditry +pungent +punic +punish +punitive +punk +punky +punster +punt +puny +pup +pupal +pupate +pupil +puppet +puppeteer +puppy +puppyish +purcell +purchasable +purchase +purdue +pure +purgation +purgative +purgatory +purge +purify +purina +purine +puritan +puritanic +purl +purloin +purple +purport +purpose +purposeful +purposive +purr +purse +purslane +pursuant +pursue +pursuer +pursuit +purvey +purveyor +purview +pus +pusan +pusey +push +pushbutton +pushout +pushpin +pussy +pussycat +put +putative +putnam +putt +putty +puzzle +pvc +pygmalion +pygmy +pyhrric +pyknotic +pyle +pyongyang +pyracanth +pyramid +pyramidal +pyre +pyrex +pyridine +pyrimidine +pyrite +pyroelectric +pyrolyse +pyrolysis +pyrometer +pyrophosphate +pyrotechnic +pyroxene +pyroxenite +pyrrhic +pythagoras +pythagorean +python +q +q's +qatar +qed +qua +quack +quackery +quad +quadrangle +quadrangular +quadrant +quadratic +quadrature +quadrennial +quadric +quadriceps +quadrilateral +quadrille +quadrillion +quadripartite +quadrivium +quadruple +quadrupole +quaff +quagmire +quahog +quail +quaint +quake +quakeress +qualified +qualify +qualitative +quality +qualm +quandary +quanta +quantico +quantify +quantile +quantitative +quantity +quantum +quarantine +quark +quarrel +quarrelsome +quarry +quarryman +quarrymen +quart +quarterback +quartermaster +quartet +quartic +quartile +quartz +quartzite +quasar +quash +quasi +quasicontinuous +quasiorder +quasiparticle +quasiperiodic +quasistationary +quaternary +quatrain +quaver +quay +queasy +quebec +queen +queer +quell +quench +querulous +query +quest +question +questionnaire +quetzal +queue +quezon +quibble +quick +quicken +quickie +quicklime +quicksand +quicksilver +quickstep +quid +quiescent +quiet +quietus +quill +quillwort +quilt +quince +quinine +quinn +quint +quintessence +quintessential +quintet +quintic +quintillion +quintus +quip +quipping +quirinal +quirk +quirky +quirt +quit +quite +quito +quitting +quiver +quixote +quixotic +quiz +quizzes +quizzical +quo +quod +quonset +quorum +quota +quotation +quote +quotient +r +r&d +r's +rabat +rabbet +rabbi +rabbit +rabble +rabid +rabies +rabin +raccoon +race +racetrack +raceway +rachel +rachmaninoff +racial +rack +racket +racketeer +rackety +racy +radar +radcliffe +radial +radian +radiant +radiate +radical +radices +radii +radio +radioactive +radioastronomy +radiocarbon +radiochemical +radiochemistry +radiogram +radiography +radiology +radiometer +radiophysics +radiosonde +radiotelegraph +radiotelephone +radiotherapy +radish +radium +radius +radix +radon +rae +rafael +rafferty +raffia +raffish +raffle +raft +rag +rage +ragging +ragout +ragweed +raid +rail +railbird +railhead +raillery +railroad +railway +rain +rainbow +raincoat +raindrop +rainfall +rainstorm +rainy +raise +raisin +raj +rajah +rake +rakish +raleigh +rally +ralph +ralston +ram +ramada +raman +ramble +ramify +ramo +ramp +rampage +rampant +rampart +ramrod +ramsey +ran +ranch +rancho +rancid +rancorous +rand +randall +randolph +random +randy +rang +range +rangeland +rangoon +rangy +ranier +rank +rankin +rankine +rankle +ransack +ransom +rant +raoul +rap +rapacious +rape +raphael +rapid +rapier +rapport +rapprochement +rapt +rapture +rare +rarefy +raritan +rasa +rascal +rash +rasmussen +rasp +raspberry +raster +rastus +rat +rata +rate +ratepayer +rater +rather +ratify +ratio +ratiocinate +rationale +rattail +rattle +rattlesnake +ratty +raucous +raul +ravage +rave +ravel +raven +ravenous +ravine +ravish +raw +rawboned +rawhide +rawlinson +ray +rayleigh +raymond +raytheon +raze +razor +razorback +razzle +rca +rd +re +reach +reactant +reactionary +read +readout +ready +reagan +real +realisable +realm +realtor +realty +ream +reap +rear +reason +reave +reb +rebecca +rebel +rebelled +rebelling +rebellion +rebellious +rebuke +rebut +rebuttal +rebutted +rebutting +recalcitrant +recappable +receipt +receive +recent +receptacle +reception +receptive +receptor +recess +recession +recessive +recherche +recife +recipe +recipient +reciprocal +reciprocate +reciprocity +recital +recitative +reck +reckon +reclamation +recline +recluse +recombinant +recompense +reconcile +recondite +reconnaissance +recovery +recriminate +recriminatory +recruit +rectangle +rectangular +rectifier +rectify +rectilinear +rectitude +rector +rectory +recumbent +recuperate +recur +recurred +recurrent +recurring +recursion +recusant +recuse +red +redact +redactor +redbird +redbud +redcoat +redden +reddish +redemption +redemptive +redhead +redmond +redneck +redound +redpoll +redshank +redstart +redstone +redtop +reduce +reducible +redundant +redwood +reed +reedbuck +reedy +reef +reek +reel +reese +reeve +reeves +refection +refectory +refer +referable +referee +refereeing +referenda +referendum +referent +referential +referral +referred +referring +refinery +reflect +reflectance +reflector +reflexive +reformatory +refract +refractometer +refractory +refrain +refrigerate +refuge +refugee +refusal +refutation +refute +regal +regale +regalia +regard +regatta +regent +regime +regimen +regiment +regimentation +regina +reginald +region +regional +regis +registrable +registrant +registrar +registration +registry +regress +regression +regressive +regret +regretful +regrettable +regretted +regretting +regular +regulate +regulatory +regulus +regurgitate +rehabilitate +rehearsal +rehearse +reich +reid +reign +reilly +reimbursable +reimburse +rein +reindeer +reinforce +reinhold +reinstate +reject +rejecter +rejoice +rejoinder +rejuvenate +relate +relaxation +relayed +releasable +relevant +reliant +relic +relict +relief +relieve +religion +religiosity +religious +relinquish +reliquary +relish +reluctant +remainder +reman +remand +remark +rembrandt +remediable +remedial +remedy +remember +remembrance +remington +reminisce +reminiscent +remiss +remission +remit +remittance +remitted +remitting +remnant +remonstrate +remorse +remorseful +remote +removal +remunerate +remus +rena +renaissance +renal +renault +rend +render +rendezvous +rendition +rene +renegotiable +renewal +renoir +renounce +renovate +renown +rensselaer +rent +rental +renunciate +rep +repairman +repairmen +reparation +repartee +repeal +repeat +repeater +repel +repelled +repellent +repelling +repent +repentant +repertoire +repertory +repetition +repetitious +repetitive +replaceable +replenish +replete +replica +replicate +report +reportorial +repository +reprehensible +representative +repression +repressive +reprieve +reprimand +reprisal +reprise +reproach +reptile +reptilian +republic +republican +repudiate +repugnant +repulsion +repulsive +reputation +repute +request +require +requisite +requisition +requited +reredos +rerouted +rerouting +rescind +rescue +resemblant +resemble +resent +resentful +reserpine +reservation +reserve +reservoir +reside +resident +residential +residual +residuary +residue +residuum +resign +resignation +resilient +resin +resiny +resist +resistant +resistible +resistive +resistor +resolute +resolution +resolve +resonant +resonate +resorcinol +resort +resourceful +respect +respecter +respectful +respiration +respirator +respiratory +respire +respite +resplendent +respond +respondent +response +responsible +responsive +rest +restaurant +restaurateur +restful +restitution +restive +restoration +restorative +restrain +restraint +restrict +restroom +result +resultant +resume +resuming +resumption +resurgent +resurrect +resuscitate +ret +retail +retain +retaliate +retaliatory +retard +retardant +retardation +retch +retention +retentive +reticent +reticulate +reticulum +retina +retinal +retinue +retire +retiree +retort +retract +retribution +retrieval +retrieve +retroactive +retrofit +retrofitted +retrofitting +retrograde +retrogress +retrogression +retrogressive +retrorocket +retrospect +retrovision +return +reub +reuben +reuters +rev +reveal +revel +revelation +revelatory +revelry +revenge +revenue +rever +reverberate +revere +reverend +reverent +reverie +reversal +reverse +reversible +reversion +revert +revertive +revery +revet +revile +revisable +revisal +revise +revision +revisionary +revival +revive +revocable +revoke +revolt +revolution +revolutionary +revolve +revulsion +revved +revving +reward +rex +reykjavik +reynolds +rhapsodic +rhapsody +rhea +rhenish +rhenium +rheology +rheostat +rhesus +rhetoric +rhetorician +rheum +rheumatic +rheumatism +rhine +rhinestone +rhino +rhinoceros +rho +rhoda +rhode +rhodes +rhodesia +rhodium +rhododendron +rhodolite +rhodonite +rhombi +rhombic +rhombohedral +rhombus +rhubarb +rhyme +rhythm +rhythmic +ri +rib +ribald +ribbon +riboflavin +ribonucleic +ribose +ribosome +rica +rice +rich +richard +richards +richardson +richfield +richmond +richter +rick +rickets +rickettsia +rickety +rickshaw +rico +ricochet +rid +riddance +ridden +riddle +ride +ridge +ridgepole +ridgway +ridicule +ridiculous +riemann +riemannian +riffle +rifle +rifleman +riflemen +rift +rig +riga +rigel +rigging +riggs +right +righteous +rightful +rightmost +rightward +rigid +rigorous +riley +rill +rilly +rim +rime +rimy +rinehart +ring +ringlet +ringmaster +ringside +rink +rinse +rio +riordan +riot +riotous +rip +riparian +ripe +ripen +ripley +ripoff +ripple +rise +risen +risible +risk +risky +ritchie +rite +ritter +ritual +ritz +rival +rivalry +riven +river +riverbank +riverfront +riverine +riverside +rivet +riviera +rivulet +riyadh +rna +roach +road +roadbed +roadblock +roadhouse +roadside +roadster +roadway +roam +roar +roast +rob +robbery +robbin +robbins +robe +robert +roberta +roberto +roberts +robertson +robin +robinson +robot +robotic +robotics +robust +rocco +rochester +rock +rockabye +rockaway +rockbound +rockefeller +rocket +rockford +rockies +rockland +rockwell +rocky +rococo +rod +rode +rodent +rodeo +rodgers +rodney +rodriguez +roe +roebuck +roentgen +roger +rogers +rogue +roil +roister +roland +role +roll +rollback +rollick +rollins +roman +romance +romania +romano +romantic +rome +romeo +romp +romulus +ron +ronald +rondo +ronnie +rood +roof +rooftop +rooftree +rook +rookie +rooky +room +roomful +roommate +roomy +roosevelt +rooseveltian +roost +root +rope +rosa +rosalie +rosary +rose +rosebud +rosebush +roseland +rosemary +rosen +rosenberg +rosenblum +rosenthal +rosenzweig +rosetta +rosette +ross +roster +rostrum +rosy +rot +rotarian +rotary +rotate +rotc +rote +rotenone +roth +rothschild +rotogravure +rotor +rototill +rotten +rotund +rotunda +rouge +rough +roughcast +roughen +roughish +roughneck +roughshod +roulette +round +roundabout +roundhead +roundhouse +roundoff +roundtable +roundup +roundworm +rouse +rousseau +roustabout +rout +route +routine +rove +row +rowboat +rowdy +rowe +rowena +rowland +rowley +roxbury +roy +royal +royalty +royce +rpm +rsvp +ruanda +rub +rubbery +rubbish +rubble +rubdown +rube +ruben +rubicund +rubidium +rubin +rubric +ruby +ruckus +rudder +ruddy +rude +rudiment +rudimentary +rudolf +rudolph +rudy +rudyard +rue +rueful +ruff +ruffian +ruffle +rufous +rufus +rug +ruin +ruination +ruinous +rule +rum +rumania +rumble +rumen +rumford +ruminant +ruminate +rummage +rummy +rump +rumple +rumpus +run +runabout +runaway +rundown +rune +rung +runge +runic +runneth +runnymede +runoff +runt +runty +runway +runyon +rupee +rupture +rural +ruse +rush +rushmore +rusk +russ +russell +russet +russia +russo +russula +rust +rustic +rustle +rustproof +rusty +rut +rutabaga +rutgers +ruth +ruthenium +rutherford +ruthless +rutile +rutland +rutledge +rutty +rwanda +ryan +rydberg +ryder +rye +s +s's +sa +sabbath +sabbatical +sabina +sabine +sable +sabotage +sabra +sac +saccade +saccharine +sachem +sachs +sack +sacral +sacrament +sacramento +sacred +sacrifice +sacrificial +sacrilege +sacrilegious +sacrosanct +sad +sadden +saddle +saddlebag +sadie +sadism +sadist +sadler +safari +safe +safeguard +safekeeping +safety +saffron +sag +saga +sagacious +sagacity +sage +sagebrush +sagging +saginaw +sagittal +sagittarius +sago +saguaro +sahara +said +saigon +sail +sailboat +sailfish +sailor +saint +sainthood +sake +sal +salaam +salacious +salad +salamander +salami +salaried +salary +sale +salem +salerno +salesgirl +salesian +saleslady +salesman +salesmen +salesperson +salient +salina +saline +salisbury +salish +saliva +salivary +salivate +salk +salle +sallow +sally +salmon +salmonberry +salmonella +salon +saloon +saloonkeep +saloonkeeper +salsify +salt +saltbush +saltwater +salty +salubrious +salutary +salutation +salute +salvador +salvage +salvageable +salvation +salvatore +salve +salvo +sam +samarium +samba +same +sammy +samoa +samovar +sample +sampson +samson +samuel +samuelson +san +sana +sanatoria +sanatorium +sanborn +sanchez +sancho +sanctify +sanctimonious +sanction +sanctity +sanctuary +sand +sandal +sandalwood +sandbag +sandblast +sandburg +sanderling +sanders +sanderson +sandhill +sandia +sandman +sandpaper +sandpile +sandpiper +sandra +sandstone +sandusky +sandwich +sandy +sane +sanford +sang +sangaree +sanguinary +sanguine +sanguineous +sanhedrin +sanicle +sanitarium +sanitary +sanitate +sank +sans +sanskrit +santa +santayana +santiago +santo +sao +sap +sapiens +sapient +sapling +saponify +sapphire +sappy +sapsucker +sara +saracen +sarah +saran +sarasota +saratoga +sarcasm +sarcastic +sarcoma +sarcophagus +sardine +sardonic +sargent +sari +sarsaparilla +sarsparilla +sash +sashay +saskatchewan +saskatoon +sassafras +sat +satan +satanic +satellite +satiable +satiate +satiety +satin +satire +satiric +satisfaction +satisfactory +satisfy +saturable +saturate +saturater +saturday +saturn +saturnalia +saturnine +satyr +sauce +saucepan +saucy +saud +saudi +sauerkraut +saul +sault +saunders +sausage +saute +sauterne +savage +savagery +savannah +savant +save +saviour +savonarola +savoy +savoyard +savvy +saw +sawbelly +sawdust +sawfish +sawfly +sawmill +sawtimber +sawtooth +sawyer +sax +saxifrage +saxon +saxony +saxophone +say +sc +scab +scabbard +scabious +scabrous +scaffold +scala +scalar +scald +scale +scallop +scalp +scam +scamp +scan +scandal +scandalous +scandinavia +scandium +scant +scanty +scapegoat +scapula +scapular +scar +scarborough +scarce +scare +scarecrow +scarf +scarface +scarify +scarlatti +scarlet +scarsdale +scarves +scary +scat +scathe +scatterbrain +scattergun +scaup +scavenge +scenario +scene +scenery +scenic +scent +sceptic +schaefer +schafer +schantz +schedule +schelling +schema +schemata +schematic +scheme +schenectady +scherzo +schiller +schism +schist +schizoid +schizomycetes +schizophrenia +schizophrenic +schlesinger +schlieren +schlitz +schloss +schmidt +schmitt +schnabel +schnapps +schneider +schoenberg +schofield +scholar +scholastic +school +schoolbook +schoolboy +schoolgirl +schoolgirlish +schoolhouse +schoolmarm +schoolmaster +schoolmate +schoolroom +schoolteacher +schoolwork +schooner +schottky +schroeder +schroedinger +schubert +schultz +schulz +schumacher +schumann +schuster +schuyler +schuylkill +schwab +schwartz +schweitzer +sci +sciatica +science +scientific +scientist +scimitar +scintillate +scion +scissor +sclerosis +sclerotic +scm +scoff +scold +scoop +scoot +scope +scopic +scops +scorch +score +scoreboard +scorecard +scoria +scorn +scornful +scorpio +scorpion +scot +scotch +scotia +scotland +scotsman +scotsmen +scott +scottish +scottsdale +scotty +scoundrel +scour +scourge +scout +scowl +scrabble +scraggly +scram +scramble +scranton +scrap +scrapbook +scrape +scratch +scratchy +scrawl +scrawny +scream +screech +screechy +screed +screen +screenplay +screw +screwball +screwbean +screwdriver +screwworm +scribble +scribe +scribners +scrim +scrimmage +scripps +script +scription +scriptural +scripture +scriven +scroll +scrooge +scrotum +scrounge +scrub +scrumptious +scruple +scrupulosity +scrupulous +scrutable +scrutiny +scuba +scud +scuff +scuffle +scull +sculpin +sculpt +sculptor +sculptural +sculpture +scum +scurrilous +scurry +scurvy +scuttle +scutum +scylla +scythe +scythia +sd +se +sea +seaboard +seacoast +seafare +seafood +seagram +seagull +seahorse +seal +sealant +seam +seaman +seamen +seamstress +seamy +sean +seance +seaport +seaquake +sear +search +searchlight +sears +seashore +seaside +season +seasonal +seat +seater +seattle +seaward +seaweed +sebastian +sec +secant +secede +secession +seclude +seclusion +second +secondary +secondhand +secrecy +secret +secretarial +secretariat +secretary +secrete +secretion +secretive +sect +sectarian +section +sector +sectoral +secular +secure +sedan +sedate +sedentary +seder +sedge +sediment +sedimentary +sedimentation +sedition +seditious +seduce +seduction +seductive +sedulous +see +seeable +seed +seedbed +seedling +seedy +seeing +seek +seem +seen +seep +seepage +seersucker +seethe +seethed +seething +segment +segmentation +segovia +segregant +segregate +segundo +seidel +seismic +seismograph +seismography +seismology +seize +seizure +seldom +select +selectman +selectmen +selector +selectric +selena +selenate +selenite +selenium +self +selfadjoint +selfish +selfridge +selkirk +sell +seller +sellout +selma +seltzer +selves +selwyn +semantic +semaphore +semblance +semester +semi +seminal +seminar +seminarian +seminary +seminole +semiramis +semite +semitic +semper +sen +senate +senatorial +send +seneca +senegal +senile +senior +senor +senora +senorita +sensate +sense +sensible +sensitive +sensor +sensorimotor +sensory +sensual +sensuous +sent +sentence +sentential +sentient +sentiment +sentinel +sentry +seoul +sepal +separable +separate +sepia +sepoy +sept +septa +septate +september +septennial +septic +septillion +septuagenarian +septum +sepuchral +sepulchral +seq +sequel +sequent +sequential +sequester +sequestration +sequin +sequitur +sequoia +sera +seraglio +serape +seraphim +serbia +serenade +serendipitous +serendipity +serene +serf +serfdom +serge +sergeant +sergei +serial +seriate +seriatim +series +serif +serine +serious +sermon +serology +serpens +serpent +serpentine +serum +servant +serve +service +serviceable +serviceberry +serviceman +servicemen +serviette +servile +servitor +servitude +servo +servomechanism +sesame +session +set +setback +seth +seton +setscrew +settle +setup +seven +sevenfold +seventeen +seventeenth +seventh +seventieth +seventy +sever +several +severalfold +severalty +severe +severn +seville +sew +sewage +seward +sewerage +sewn +sex +sextans +sextet +sextillion +sexton +sextuple +sextuplet +sexual +sexy +seymour +sforzando +shabby +shack +shackle +shad +shadbush +shade +shadflower +shadow +shadowy +shady +shafer +shaffer +shaft +shag +shagbark +shagging +shaggy +shah +shake +shakeable +shakedown +shaken +shakespeare +shakespearean +shakespearian +shako +shaky +shale +shall +shallot +shallow +shalom +sham +shamble +shame +shameface +shamefaced +shameful +shampoo +shamrock +shan't +shanghai +shank +shannon +shantung +shanty +shape +shapiro +shard +share +sharecrop +shareholder +shareown +shari +shark +sharon +sharp +sharpe +sharpen +sharpshoot +shasta +shatter +shatterproof +shattuck +shave +shaven +shaw +shawl +shawnee +shay +she +she'd +she'll +shea +sheaf +shear +shearer +sheath +sheathe +sheave +shed +shedir +sheehan +sheen +sheep +sheepskin +sheer +sheet +sheffield +sheik +sheila +shelby +sheldon +shelf +shell +shelley +shelter +shelton +shelve +shenandoah +shenanigan +shepard +shepherd +sheppard +sheraton +sherbet +sheridan +sheriff +sherlock +sherman +sherrill +sherry +sherwin +sherwood +shibboleth +shied +shield +shields +shift +shifty +shill +shiloh +shim +shimmy +shin +shinbone +shine +shingle +shinto +shiny +ship +shipboard +shipbuild +shipbuilding +shiplap +shipley +shipman +shipmate +shipmen +shipshape +shipwreck +shipyard +shire +shirk +shirley +shirt +shirtmake +shish +shitepoke +shiv +shiver +shivery +shmuel +shoal +shock +shockley +shod +shoddy +shoe +shoehorn +shoelace +shoemake +shoestring +shoji +shone +shoo +shoofly +shook +shoot +shop +shopkeep +shopworn +shore +shoreline +short +shortage +shortcoming +shortcut +shorten +shortfall +shorthand +shortish +shortsighted +shortstop +shot +shotbush +shotgun +should +shoulder +shouldn't +shout +shove +shovel +show +showboat +showcase +showdown +showman +showmen +shown +showpiece +showplace +showroom +showy +shrank +shrapnel +shred +shreveport +shrew +shrewd +shrewish +shriek +shrift +shrike +shrill +shrilly +shrimp +shrine +shrink +shrinkage +shrive +shrivel +shroud +shrove +shrub +shrubbery +shrug +shrugging +shrunk +shrunken +shu +shuck +shudder +shuddery +shuffle +shuffleboard +shulman +shun +shunt +shut +shutdown +shutoff +shutout +shuttle +shuttlecock +shy +shylock +sial +siam +siamese +sian +sib +siberia +sibilant +sibley +sibling +sibyl +sic +sicilian +sicily +sick +sicken +sickish +sickle +sicklewort +sickroom +side +sidearm +sideband +sideboard +sidecar +sidelight +sideline +sidelong +sideman +sidemen +sidereal +siderite +sidesaddle +sideshow +sidestep +sidestepping +sidetrack +sidewalk +sidewall +sideway +sidewinder +sidewise +sidle +sidney +siege +siegel +siegfried +sieglinda +siegmund +siemens +siena +sienna +sierra +siesta +sieve +sift +sigh +sight +sightsee +sightseeing +sightseer +sigma +sigmund +sign +signal +signature +signboard +signet +significant +signify +signor +signora +signpost +sikorsky +silage +silane +silas +silent +silhouette +silica +silicate +siliceous +silicic +silicide +silicon +silicone +silk +silken +silkworm +silky +sill +silly +silo +silt +siltation +siltstone +silty +silver +silverman +silversmith +silverware +silvery +sima +similar +simile +similitude +simmer +simmons +simon +simons +simonson +simper +simple +simplectic +simpleminded +simpleton +simplex +simplicial +simplicity +simplify +simplistic +simply +simpson +sims +simulate +simulcast +simultaneity +simultaneous +sin +sinai +since +sincere +sinclair +sine +sinew +sinewy +sinful +sing +singable +singapore +singe +single +singlehanded +singlet +singleton +singsong +singular +sinh +sinister +sinistral +sink +sinkhole +sinter +sinuous +sinus +sinusoid +sinusoidal +sioux +sip +sir +sire +siren +sirius +sis +sisal +siskin +sister +sistine +sisyphean +sisyphus +sit +site +situ +situate +situs +siva +six +sixfold +sixgun +sixteen +sixteenth +sixth +sixtieth +sixty +size +sizzle +skat +skate +skater +skeet +skeletal +skeleton +skeptic +sketch +sketchbook +sketchpad +sketchy +skew +ski +skid +skiddy +skied +skiff +skill +skillet +skillful +skim +skimp +skimpy +skin +skindive +skinny +skip +skipjack +skippy +skirmish +skirt +skit +skittle +skopje +skulk +skull +skullcap +skullduggery +skunk +sky +skye +skyhook +skyjack +skylark +skylight +skyline +skyrocket +skyscrape +skyward +skywave +skyway +slab +slack +slacken +sladang +slag +slain +slake +slam +slander +slanderous +slang +slant +slap +slapstick +slash +slat +slate +slater +slaughter +slaughterhouse +slav +slave +slavery +slavic +slavish +slavonic +slay +sled +sledge +sledgehammer +sleek +sleep +sleepwalk +sleepy +sleet +sleety +sleeve +sleigh +sleight +slender +slept +sleuth +slew +slice +slick +slid +slide +slight +slim +slime +slimy +sling +slingshot +slip +slippage +slippery +slit +slither +sliver +slivery +sloan +sloane +slob +slocum +sloe +slog +slogan +sloganeer +slogging +sloop +slop +slope +sloppy +slosh +slot +sloth +slothful +slouch +slough +slovakia +sloven +slovenia +slow +slowdown +sludge +slug +slugging +sluggish +sluice +slum +slumber +slump +slung +slur +slurp +slurry +slut +sly +smack +small +smaller +smalley +smallish +smallpox +smalltime +smart +smash +smatter +smattering +smear +smell +smelt +smile +smirk +smith +smithereens +smithfield +smithson +smithsonian +smithy +smitten +smog +smoke +smokehouse +smokescreen +smokestack +smoky +smolder +smooch +smooth +smoothbore +smother +smucker +smudge +smudgy +smug +smuggle +smut +smutty +smyrna +smythe +snack +snafu +snag +snagging +snail +snake +snakebird +snakelike +snakeroot +snap +snapback +snapdragon +snappish +snappy +snapshot +snare +snark +snarl +snatch +snazzy +sneak +sneaky +sneer +sneeze +snell +snick +snider +sniff +sniffle +sniffly +snifter +snigger +snip +snipe +snippet +snippy +snivel +snob +snobbery +snobbish +snook +snoop +snoopy +snore +snorkel +snort +snotty +snout +snow +snowball +snowfall +snowflake +snowmobile +snowshoe +snowstorm +snowy +snub +snuff +snuffer +snuffle +snuffly +snug +snuggle +snuggly +snyaptic +snyder +so +soak +soap +soapstone +soapsud +soapy +soar +sob +sober +sobriety +sobriquet +soc +soccer +sociable +social +societal +societe +society +socioeconomic +sociology +sociometry +sock +socket +sockeye +socrates +socratic +sod +soda +sodden +sodium +sofa +soffit +sofia +soft +softball +soften +software +softwood +soggy +soignee +soil +soiree +sojourn +sol +solace +solar +sold +solder +soldier +soldiery +sole +solecism +solemn +solemnity +solenoid +solicit +solicitation +solicitor +solicitous +solicitude +solid +solidarity +solidify +solidus +soliloquy +solipsism +solitaire +solitary +soliton +solitude +solo +solomon +solon +solstice +soluble +solute +solution +solvate +solve +solvent +soma +somal +somali +somatic +somber +sombre +some +somebody +somebody'll +someday +somehow +someone +someone'll +someplace +somers +somersault +somerset +somerville +something +sometime +somewhat +somewhere +sommelier +sommerfeld +somnolent +son +sonant +sonar +sonata +song +songbag +songbook +songful +sonic +sonnet +sonny +sonogram +sonoma +sonora +sonority +sonorous +sony +soon +soot +sooth +soothe +soothsay +soothsayer +sop +sophia +sophie +sophism +sophisticate +sophistry +sophoclean +sophocles +sophomore +sophomoric +soprano +sora +sorb +sorcery +sordid +sore +sorensen +sorenson +sorghum +sorority +sorption +sorrel +sorrow +sorrowful +sorry +sort +sortie +sou +souffle +sough +sought +soul +soulful +sound +soundproof +soup +sour +sourberry +source +sourdough +sourwood +sousa +soutane +south +southampton +southbound +southeast +southeastern +southern +southernmost +southey +southland +southpaw +southward +southwest +southwestern +souvenir +sovereign +sovereignty +soviet +sovkhoz +sow +sowbelly +sown +soy +soya +soybean +spa +space +spacecraft +spacesuit +spacetime +spacious +spade +spaghetti +spain +spalding +span +spandrel +spangle +spaniard +spaniel +spanish +spar +spare +sparge +spark +sparkle +sparkman +sparky +sparling +sparrow +sparse +sparta +spartan +spasm +spastic +spat +spate +spatial +spatlum +spatterdock +spatula +spaulding +spavin +spawn +spay +spayed +speak +speakeasy +spear +spearhead +spearmint +spec +special +specie +species +specific +specify +specimen +specious +speck +speckle +spectacle +spectacular +spectator +spector +spectra +spectral +spectrogram +spectrograph +spectrography +spectrometer +spectrophotometer +spectroscope +spectroscopic +spectroscopy +spectrum +specular +speculate +sped +speech +speed +speedboat +speedometer +speedup +speedwell +speedy +spell +spellbound +spencer +spencerian +spend +spent +sperm +spermatophyte +sperry +spew +sphagnum +sphalerite +sphere +spheric +spheroid +spheroidal +spherule +sphinx +spica +spice +spicebush +spicy +spider +spiderwort +spidery +spiegel +spigot +spike +spikenard +spiky +spill +spilt +spin +spinach +spinal +spindle +spine +spinnaker +spinneret +spinodal +spinoff +spinster +spiny +spiral +spire +spirit +spiritual +spiro +spit +spite +spiteful +spitfire +spittle +spitz +splash +splashy +splat +splay +splayed +spleen +spleenwort +splendid +splenetic +splice +spline +splint +splintery +split +splotch +splotchy +splurge +splutter +spoil +spoilage +spokane +spoke +spoken +spokesman +spokesmen +spokesperson +sponge +spongy +sponsor +spontaneity +spontaneous +spoof +spook +spooky +spool +spoon +spoonful +sporadic +spore +sport +sportsman +sportsmen +sportswear +sportswrite +sportswriter +sportswriting +sporty +spot +spotlight +spotty +spouse +spout +sprague +sprain +sprang +sprawl +spray +spread +spree +sprig +sprightly +spring +springboard +springe +springfield +springtail +springtime +springy +sprinkle +sprint +sprite +sprocket +sproul +sprout +spruce +sprue +sprung +spud +spume +spumoni +spun +spunk +spur +spurge +spurious +spurn +spurt +sputnik +sputter +spy +spyglass +squabble +squad +squadron +squalid +squall +squamous +squander +square +squash +squashberry +squashy +squat +squatted +squatter +squatting +squaw +squawbush +squawk +squawroot +squeak +squeaky +squeal +squeamish +squeegee +squeeze +squelch +squibb +squid +squill +squint +squire +squirehood +squirm +squirmy +squirrel +squirt +squishy +sri +sse +sst +ssw +st +stab +stabile +stable +stableman +stablemen +staccato +stack +stacy +stadia +stadium +staff +stafford +stag +stage +stagecoach +stagestruck +stagnant +stagnate +stagy +stahl +staid +stain +stair +staircase +stairway +stairwell +stake +stalactite +stale +stalemate +staley +stalin +stalk +stall +stallion +stalwart +stamen +stamford +stamina +staminate +stammer +stamp +stampede +stan +stance +stanch +stanchion +stand +standard +standby +standeth +standish +standoff +standpoint +standstill +stanford +stanhope +stank +stanley +stannic +stannous +stanton +stanza +staph +staphylococcus +staple +stapleton +star +starboard +starch +starchy +stardom +stare +starfish +stargaze +stark +starkey +starlet +starlight +starling +starr +start +startle +startup +starvation +starve +stash +stasis +state +staten +stater +stateroom +statesman +statesmanlike +statesmen +statewide +static +stationarity +stationary +stationery +stationmaster +statistician +statler +stator +statuary +statue +statuette +stature +status +statute +statutory +stauffer +staunch +staunton +stave +stay +stayed +stead +steadfast +steady +steak +steal +stealth +stealthy +steam +steamboat +steamy +stearate +stearic +stearns +steed +steel +steele +steelmake +steely +steen +steep +steepen +steeple +steeplebush +steeplechase +steer +steeve +stefan +stegosaurus +stein +steinberg +steiner +stella +stellar +stem +stench +stencil +stenographer +stenography +stenotype +step +stepchild +stephanie +stephanotis +stephen +stephens +stephenson +stepmother +steppe +steprelation +stepson +stepwise +steradian +stereo +stereography +stereoscopy +sterile +sterling +stern +sternal +sternberg +sterno +sternum +steroid +stethoscope +stetson +steuben +steve +stevedore +steven +stevens +stevenson +stew +steward +stewardess +stewart +stick +stickle +stickleback +stickpin +sticktight +sticky +stiff +stiffen +stifle +stigma +stigmata +stile +stiletto +still +stillbirth +stillwater +stilt +stimulant +stimulate +stimulatory +stimuli +stimulus +sting +stingy +stink +stinkpot +stinky +stint +stipend +stipple +stipulate +stir +stirling +stirrup +stitch +stochastic +stock +stockade +stockbroker +stockholder +stockholm +stockpile +stockroom +stockton +stocky +stodgy +stoic +stoichiometry +stoke +stokes +stole +stolen +stolid +stomach +stomp +stone +stonecrop +stonehenge +stonewall +stoneware +stonewort +stony +stood +stooge +stool +stoop +stop +stopband +stopcock +stopgap +stopover +stoppage +stopwatch +storage +store +storehouse +storekeep +storeroom +storey +stork +storm +stormbound +stormy +story +storyboard +storyteller +stout +stove +stow +stowage +stowaway +strabismic +strabismus +straddle +strafe +straggle +straight +straightaway +straighten +straightforward +straightway +strain +strait +strand +strange +strangle +strangulate +strap +strata +stratagem +strategic +strategist +strategy +stratford +stratify +stratosphere +stratospheric +stratton +stratum +strauss +straw +strawberry +strawflower +stray +streak +stream +streamline +streamside +street +streetcar +strength +strengthen +strenuous +streptococcus +streptomycin +stress +stressful +stretch +strewn +striate +stricken +strickland +strict +stricter +stricture +stride +strident +strife +strike +strikebreak +string +stringent +stringy +strip +stripe +striptease +stripy +strive +striven +strobe +stroboscopic +strode +stroke +stroll +strom +stromberg +strong +stronghold +strongroom +strontium +strop +strophe +strove +struck +structural +structure +struggle +strum +strung +strut +strychnine +stu +stuart +stub +stubble +stubborn +stubby +stucco +stuck +stud +studebaker +student +studio +studious +study +stuff +stuffy +stultify +stumble +stump +stumpage +stumpy +stun +stung +stunk +stunt +stupefaction +stupefy +stupendous +stupid +stupor +sturbridge +sturdy +sturgeon +sturm +stutter +stuttgart +stuyvesant +stygian +style +styli +stylish +stylites +stylus +stymie +styrene +styrofoam +styx +suave +sub +subject +subjectivity +subjunctive +sublimate +subliminal +submersible +submit +submittal +submitted +submitting +subpoena +subrogation +subservient +subsidiary +subsidy +subsist +subsistent +substantial +substantiate +substantive +substituent +substitute +substitution +substitutionary +substrate +subsume +subsumed +subsuming +subterfuge +subterranean +subtle +subtlety +subtly +subtracter +subtrahend +suburb +suburbia +subversive +subvert +succeed +success +successful +succession +successive +successor +succinct +succubus +succumb +such +suck +suckling +sucrose +suction +sud +sudan +sudanese +sudden +suds +sue +suey +suez +suffer +suffice +sufficient +suffix +suffocate +suffolk +suffrage +suffragette +suffuse +sugar +suggest +suggestible +suggestion +suggestive +suicidal +suicide +suit +suitcase +suite +suitor +sulfa +sulfanilamide +sulfate +sulfide +sulfite +sulfonamide +sulfur +sulfuric +sulfurous +sulk +sulky +sullen +sullivan +sully +sulphur +sultan +sultanate +sultry +sum +sumac +sumatra +sumeria +sumerian +summand +summarily +summary +summate +summation +summers +summertime +summit +summitry +summon +sumner +sumptuous +sumter +sun +sunbeam +sunbonnet +sunburn +sunburnt +sunday +sunder +sundew +sundial +sundown +sundry +sunfish +sunflower +sung +sunglasses +sunk +sunken +sunlight +sunlit +sunny +sunnyvale +sunrise +sunscreen +sunset +sunshade +sunshine +sunshiny +sunspot +suntan +suntanned +suntanning +suny +sup +super +superannuate +superb +superbly +supercilious +superficial +superfluity +superfluous +superintendent +superior +superlative +superlunary +supernatant +supernovae +superposable +supersede +superstition +superstitious +supervene +supervisory +supine +supplant +supple +supplementary +supplicate +supply +support +supposable +suppose +supposition +suppress +suppressible +suppression +suppressor +supra +supranational +supremacy +supreme +supremum +surcease +surcharge +sure +surety +surf +surface +surfactant +surfeit +surge +surgeon +surgery +surgical +surjection +surjective +surmise +surmount +surname +surpass +surplus +surprise +surreal +surrender +surreptitious +surrey +surrogate +surround +surtax +surtout +surveillant +survey +surveyor +survival +survive +survivor +sus +susan +susanne +susceptance +susceptible +sushi +susie +suspect +suspend +suspense +suspension +suspensor +suspicion +suspicious +sussex +sustain +sustenance +sutherland +sutton +suture +suzanne +suzerain +suzerainty +suzuki +svelte +sw +swab +swabby +swag +swage +swahili +swain +swallow +swallowtail +swam +swami +swamp +swampy +swan +swank +swanky +swanlike +swanson +swap +swarm +swart +swarthmore +swarthout +swarthy +swastika +swat +swatch +swath +swathe +sway +swaziland +swear +sweat +sweatband +sweater +sweatshirt +sweaty +swede +sweden +swedish +sweeney +sweep +sweepstake +sweet +sweeten +sweetheart +sweetish +swell +swelt +swelter +swenson +swept +swerve +swift +swig +swigging +swim +swimsuit +swindle +swine +swing +swingable +swingy +swipe +swirl +swirly +swish +swishy +swiss +switch +switchblade +switchboard +switchgear +switchman +switzer +switzerland +swivel +swizzle +swollen +swoop +sword +swordfish +swordplay +swordtail +swore +sworn +swum +swung +sybarite +sybil +sycamore +sycophant +sycophantic +sydney +syenite +sykes +syllabi +syllabic +syllabify +syllable +syllabus +syllogism +syllogistic +sylow +sylvan +sylvania +sylvester +sylvia +symbiosis +symbiotic +symbol +symbolic +symmetry +sympathetic +sympathy +symphonic +symphony +symplectic +symposia +symposium +symptom +symptomatic +synagogue +synapse +synapses +synaptic +synchronism +synchronous +synchrony +synchrotron +syncopate +syndic +syndicate +syndrome +synergism +synergistic +synergy +synge +synod +synonym +synonymous +synonymy +synopses +synopsis +synoptic +syntactic +syntax +syntheses +synthesis +synthetic +syracuse +syria +syringa +syringe +syrinx +syrup +syrupy +system +systematic +systemic +systemization +systemwide +syzygy +szilard +t +t's +ta +tab +tabernacle +table +tableau +tableaux +tablecloth +tableland +tablespoon +tablespoonful +tablet +tabloid +taboo +tabu +tabula +tabular +tabulate +tachinid +tachistoscope +tachometer +tacit +tacitus +tack +tackle +tacky +tacoma +tact +tactful +tactic +tactician +tactile +tactual +tad +tadpole +taffeta +taffy +taft +tag +tagging +tahiti +tahoe +tail +tailgate +tailor +tailspin +tailwind +taint +taipei +taiwan +take +taken +takeoff +takeover +taketh +talc +talcum +tale +talent +talisman +talismanic +talk +talkative +talkie +talky +tall +tallahassee +tallow +tally +tallyho +talmud +talon +talus +tam +tamale +tamarack +tamarind +tambourine +tame +tammany +tamp +tampa +tampon +tan +tanager +tanaka +tananarive +tandem +tang +tangent +tangential +tangerine +tangible +tangle +tango +tangy +tanh +tank +tannin +tansy +tantalum +tantalus +tantamount +tantrum +tanya +tanzania +tao +taoist +taos +tap +tapa +tape +taper +tapestry +tapeworm +tapir +tapis +tappa +tappet +tar +tara +tarantara +tarantula +tarbell +tardy +target +tariff +tarnish +tarpaper +tarpaulin +tarpon +tarry +tarrytown +tart +tartar +tartary +tarzan +task +taskmaster +tasmania +tass +tassel +taste +tasteful +tasting +tasty +tat +tate +tater +tattle +tattler +tattletale +tattoo +tatty +tau +taught +taunt +taurus +taut +tautology +tavern +taverna +tawdry +tawny +tax +taxation +taxi +taxicab +taxied +taxiway +taxonomic +taxonomy +taxpayer +taxpaying +taylor +tea +teacart +teach +teacup +teahouse +teakettle +teakwood +teal +team +teammate +teamster +teamwork +teapot +tear +teardrop +tearful +tease +teasel +teaspoon +teaspoonful +teat +tech +technetium +technic +technician +technion +technique +technocrat +technocratic +technology +tectonic +tecum +ted +teddy +tedious +tedium +tee +teeing +teem +teen +teenage +teensy +teet +teeter +teeth +teethe +teethed +teething +teetotal +teflon +tegucigalpa +teheran +tehran +tektite +tektronix +tel +telecommunicate +teleconference +teledyne +telefunken +telegram +telegraph +telegraphy +telekinesis +telemeter +teleology +teleost +telepathic +telepathy +telephone +telephonic +telephony +telephotography +teleprinter +teleprocessing +teleprompter +telescope +telescopic +telethon +teletype +teletypesetting +teletypewrite +televise +television +telex +tell +teller +telltale +tellurium +temerity +temper +tempera +temperance +temperate +temperature +tempest +tempestuous +template +temple +templeton +tempo +temporal +temporary +tempt +temptation +temptress +ten +tenable +tenacious +tenacity +tenant +tend +tendency +tenderfoot +tenderloin +tendon +tenebrous +tenement +tenet +tenfold +tenneco +tennessee +tenney +tennis +tennyson +tenon +tenor +tense +tensile +tension +tensional +tensor +tenspot +tent +tentacle +tentative +tenterhooks +tenth +tenuous +tenure +tepee +tepid +teratogenic +teratology +terbium +tercel +teresa +term +terminable +terminal +terminate +termini +terminology +terminus +termite +tern +ternary +terpsichore +terpsichorean +terra +terrace +terrain +terramycin +terrapin +terre +terrestrial +terrible +terrier +terrific +terrify +territorial +territory +terror +terry +terse +tertiary +tess +tessellate +test +testament +testamentary +testate +testbed +testes +testicle +testicular +testify +testimonial +testimony +testy +tetanus +tete +tether +tetrachloride +tetrafluoride +tetrafluouride +tetragonal +tetrahedra +tetrahedral +tetrahedron +tetravalent +teutonic +texaco +texan +texas +text +textbook +textile +textron +textual +textural +texture +thai +thailand +thalia +thallium +thallophyte +than +thank +thankful +thanksgiving +that +that'd +that'll +thatch +thaw +thayer +the +thea +theatric +thebes +thee +theft +their +theism +theist +thelma +them +thematic +theme +themselves +then +thence +thenceforth +theocracy +theodore +theodosian +theologian +theology +theorem +theoretic +theoretician +theorist +theory +therapeutic +therapist +therapy +there +there'd +there'll +thereabouts +thereafter +thereat +thereby +therefor +therefore +therefrom +therein +thereof +thereon +theresa +thereto +theretofore +thereunder +thereupon +therewith +thermal +thermionic +thermistor +thermo +thermofax +thermostat +thesaurus +these +theses +theseus +thesis +thespian +theta +thetis +they +they'd +they'll +they're +they've +thiamin +thick +thicken +thicket +thickish +thief +thieves +thieving +thigh +thimble +thimbu +thin +thine +thing +think +thinnish +thiocyanate +thiouracil +third +thirst +thirsty +thirteen +thirteenth +thirtieth +thirty +this +this'll +thistle +thistledown +thither +thomas +thomistic +thompson +thomson +thong +thor +thoreau +thoriate +thorium +thorn +thornton +thorny +thorough +thoroughbred +thoroughfare +thoroughgoing +thorpe +thorstein +those +thou +though +thought +thoughtful +thousand +thousandfold +thousandth +thrall +thrash +thread +threadbare +threat +threaten +three +threefold +threesome +threonine +thresh +threshold +threw +thrice +thrift +thrifty +thrill +thrips +thrive +throat +throaty +throb +throes +thrombosis +throne +throng +throttle +through +throughout +throughput +throw +throwaway +throwback +thrown +thrum +thrush +thrust +thruway +thuban +thud +thug +thuggee +thule +thulium +thumb +thumbnail +thump +thunder +thunderbird +thunderbolt +thunderclap +thunderflower +thunderous +thundershower +thunderstorm +thurman +thursday +thus +thwack +thwart +thy +thyme +thymine +thymus +thyratron +thyroglobulin +thyroid +thyroidal +thyronine +thyrotoxic +thyroxine +ti +tiber +tibet +tibetan +tibia +tic +tick +ticket +tickle +ticklish +tid +tidal +tidbit +tide +tideland +tidewater +tidy +tie +tied +tientsin +tier +tiffany +tift +tiger +tight +tighten +tigress +tigris +til +tilde +tile +till +tilt +tilth +tim +timber +timberland +timbre +time +timeout +timepiece +timeshare +timetable +timeworn +timex +timid +timon +timothy +tin +tina +tincture +tinder +tine +tinfoil +tinge +tingle +tinker +tinkle +tinsel +tint +tintype +tiny +tioga +tip +tipoff +tipperary +tipple +tippy +tipsy +tiptoe +tirade +tirana +tire +tiresome +tissue +tit +titan +titanate +titanic +titanium +tithe +titian +titillate +title +titmouse +titrate +titular +titus +tn +tnt +to +toad +toady +toast +toastmaster +tobacco +tobago +toby +toccata +today +today'll +todd +toddle +toe +toefl +toenail +toffee +tofu +tog +together +togging +toggle +togo +togs +toil +toilet +toiletry +toilsome +tokamak +token +tokyo +told +toledo +tolerable +tolerant +tolerate +toll +tollgate +tollhouse +tolstoy +toluene +tom +tomato +tomatoes +tomb +tombstone +tome +tomlinson +tommie +tommy +tomograph +tomography +tomorrow +tompkins +ton +tonal +tone +tong +tongue +toni +tonic +tonight +tonk +tonnage +tonsil +tonsillitis +tony +too +toodle +took +tool +toolkit +toolmake +toolsmith +toot +tooth +toothbrush +toothpaste +toothpick +tootle +top +topaz +topcoat +topeka +topgallant +topic +topmost +topnotch +topocentric +topography +topologize +topology +topple +topsoil +topsy +tor +torah +torch +tore +tori +torn +tornado +toroid +toroidal +toronto +torpedo +torpid +torpor +torque +torr +torrance +torrent +torrid +torsion +torso +tort +tortoise +tortoiseshell +tortuous +torture +torus +tory +toshiba +toss +tot +total +totalitarian +tote +totem +totemic +touch +touchdown +touchstone +touchy +tough +tour +tournament +tousle +tout +tow +toward +towboat +towel +tower +towhead +towhee +town +townhouse +townsend +townsman +townsmen +toxic +toxicology +toxin +toy +toyota +trace +traceable +tracery +trachea +track +trackage +tract +tractor +tracy +trade +trademark +tradeoff +tradesman +tradesmen +tradition +traffic +trafficked +trafficking +trag +tragedian +tragedy +tragic +tragicomic +trail +trailblaze +trailhead +trailside +train +trainee +trainman +trainmen +traipse +trait +traitor +traitorous +trajectory +tram +trammel +tramp +trample +tramway +trance +tranquil +tranquillity +transact +transalpine +transatlantic +transceiver +transcend +transcendent +transcendental +transconductance +transcontinental +transcribe +transcript +transcription +transducer +transduction +transect +transept +transfer +transferable +transferee +transference +transferor +transferral +transferred +transferring +transfinite +transfix +transform +transformation +transfusable +transfuse +transfusion +transgress +transgression +transgressor +transient +transistor +transit +transite +transition +transitive +transitory +translate +transliterate +translucent +transmissible +transmission +transmit +transmittable +transmittal +transmittance +transmitted +transmitter +transmitting +transmogrify +transmutation +transmute +transoceanic +transom +transpacific +transparent +transpiration +transpire +transplant +transplantation +transpond +transport +transportation +transposable +transpose +transposition +transship +transshipped +transshipping +transversal +transverse +transvestite +transylvania +trap +trapezium +trapezoid +trapezoidal +trash +trashy +trastevere +trauma +traumatic +travail +travel +travelogue +traversable +traversal +traverse +travertine +travesty +travis +trawl +tray +treacherous +treachery +tread +treadle +treadmill +treason +treasonous +treasure +treasury +treat +treatise +treaty +treble +tree +treetop +trefoil +trek +trellis +tremble +tremendous +tremor +tremulous +trench +trenchant +trencherman +trenchermen +trend +trendy +trenton +trepidation +trespass +tress +trestle +trevelyan +triable +triac +triad +trial +triangle +triangular +triangulate +triangulum +trianon +triassic +triatomic +tribal +tribe +tribesman +tribesmen +tribulate +tribunal +tribune +tributary +tribute +triceratops +trichinella +trichloroacetic +trichloroethane +trichrome +trick +trickery +trickle +trickster +tricky +trident +tridiagonal +tried +triennial +trifle +trifluoride +trifluouride +trig +trigonal +trigonometry +trigram +trihedral +trill +trillion +trillionth +trilobite +trilogy +trim +trimer +trimester +trinidad +trinitarian +trinity +trinket +trio +triode +trioxide +trip +tripartite +tripe +triphenylphosphine +triple +triplet +triplett +triplex +triplicate +tripod +tripoli +triptych +trisodium +tristan +tristate +trisyllable +trite +tritium +triton +triumph +triumphal +triumphant +triune +trivalent +trivia +trivial +trivium +trod +trodden +troglodyte +troika +trojan +troll +trolley +trollop +trombone +trompe +troop +trophic +trophy +tropic +tropopause +troposphere +tropospheric +trot +troubador +trouble +troubleshoot +troublesome +trough +trounce +troupe +trouser +trout +troutman +troy +truancy +truant +truce +truck +truculent +trudge +trudy +true +truism +truly +truman +trumbull +trump +trumpery +trumpet +truncate +trundle +trunk +truss +trust +trustee +trustful +trustworthy +truth +truthful +trw +try +trypsin +trytophan +tsar +tsarina +tsunami +ttl +tty +tub +tuba +tube +tuberculin +tuberculosis +tubular +tubule +tuck +tucker +tucson +tudor +tuesday +tuff +tuft +tug +tugging +tuition +tulane +tularemia +tulip +tulle +tulsa +tum +tumble +tumbrel +tumult +tumultuous +tun +tuna +tundra +tune +tuneful +tung +tungstate +tungsten +tunic +tunis +tunisia +tunnel +tupelo +tuple +turban +turbid +turbidity +turbinate +turbine +turbofan +turbojet +turbulent +turf +turgid +turin +turing +turk +turkey +turkish +turmoil +turn +turnabout +turnaround +turnery +turnip +turnkey +turnoff +turnout +turnover +turnpike +turnstone +turntable +turpentine +turpitude +turquoise +turret +turtle +turtleback +turtleneck +turvy +tuscaloosa +tuscan +tuscany +tuscarora +tusk +tuskegee +tussle +tutelage +tutor +tutorial +tuttle +tutu +tuxedo +tv +tva +twa +twaddle +twain +tweak +tweed +tweedy +tweeze +twelfth +twelve +twentieth +twenty +twice +twiddle +twig +twigging +twilight +twill +twin +twine +twinge +twinkle +twirl +twirly +twist +twisty +twit +twitch +twitchy +two +twofold +twombly +twosome +twx +tx +tyburn +tycoon +tying +tyler +tyndall +type +typeface +typescript +typeset +typesetter +typesetting +typewrite +typewritten +typhoid +typhon +typhoon +typhus +typic +typify +typo +typographer +typography +typology +tyrannic +tyrannicide +tyrannosaurus +tyranny +tyrant +tyrosine +tyson +u +u's +u.s +u.s.a +ubiquitous +ubiquity +ucla +uganda +ugh +ugly +uhf +uk +ukraine +ukrainian +ulan +ulcer +ulcerate +ullman +ulster +ulterior +ultimate +ultimatum +ultra +ulysses +umber +umbilical +umbilici +umbilicus +umbra +umbrage +umbrella +umlaut +umpire +un +unanimity +unanimous +unary +unbeknownst +unbidden +unchristian +uncle +uncouth +unction +under +underclassman +underclassmen +underling +undulate +unesco +uniaxial +unicorn +unidimensional +unidirectional +uniform +unify +unilateral +unimodal +unimodular +uninominal +union +uniplex +unipolar +uniprocessor +unique +uniroyal +unisex +unison +unit +unital +unitarian +unitary +unite +unity +univac +univalent +univariate +universal +universe +unix +unkempt +unruly +until +unwieldy +up +upbeat +upbraid +upbring +upcome +update +updraft +upend +upgrade +upheaval +upheld +uphill +uphold +upholster +upholstery +upkeep +upland +uplift +upon +upper +upperclassman +upperclassmen +uppercut +uppermost +upraise +upright +uprise +upriver +uproar +uproarious +uproot +upset +upsetting +upshot +upside +upsilon +upslope +upstair +upstand +upstart +upstate +upstater +upstream +upsurge +upswing +uptake +upton +uptown +uptrend +upturn +upward +upwind +uracil +urania +uranium +uranus +uranyl +urban +urbana +urbane +urbanite +urchin +urea +uremia +urethane +urethra +urge +urgency +urgent +urging +uri +urinal +urinary +urine +uris +urn +ursa +ursula +ursuline +uruguay +us +usa +usable +usaf +usage +usc +usc&gs +usda +use +useful +usgs +usher +usia +usn +usps +ussr +usual +usurer +usurious +usurp +usurpation +usury +ut +utah +utensil +uterine +uterus +utica +utile +utilitarian +utility +utmost +utopia +utopian +utrecht +utter +utterance +uttermost +v +v's +va +vacant +vacate +vacationland +vaccinate +vaccine +vacillate +vacua +vacuo +vacuolate +vacuole +vacuous +vacuum +vade +vaduz +vagabond +vagary +vagina +vaginal +vagrant +vague +vail +vain +vainglorious +vale +valediction +valedictorian +valedictory +valent +valentine +valerie +valery +valet +valeur +valhalla +valiant +valid +validate +valine +valkyrie +valletta +valley +valois +valparaiso +valuate +value +valve +vamp +vampire +van +vanadium +vance +vancouver +vandal +vandenberg +vanderbilt +vanderpoel +vane +vanguard +vanilla +vanish +vanity +vanquish +vantage +vapid +vaporous +variable +variac +varian +variant +variate +variegate +variety +various +varistor +varitype +varnish +varsity +vary +vascular +vase +vasectomy +vasquez +vassal +vassar +vast +vat +vatican +vaudeville +vaudois +vaughan +vaughn +vault +vaunt +veal +vector +vectorial +veda +vee +veer +veery +vega +vegetable +vegetarian +vegetate +vehement +vehicle +vehicular +veil +vein +velar +velasquez +veldt +vella +vellum +velocity +velours +velvet +velvety +venal +vend +vendetta +vendible +vendor +veneer +venerable +venerate +venereal +venetian +veneto +venezuela +vengeance +vengeful +venial +venice +venison +venom +venomous +venous +vent +ventilate +ventricle +venture +venturesome +venturi +venus +venusian +vera +veracious +veracity +veranda +verandah +verb +verbal +verbatim +verbena +verbiage +verbose +verbosity +verdant +verde +verdi +verdict +verge +veridic +verify +verisimilitude +veritable +verity +verlag +vermeil +vermiculite +vermilion +vermin +vermont +vermouth +verna +vernacular +vernal +verne +vernier +vernon +verona +veronica +versa +versailles +versatec +versatile +verse +version +versus +vertebra +vertebrae +vertebral +vertebrate +vertex +vertical +vertices +vertigo +verve +very +vesicular +vesper +vessel +vest +vestal +vestibule +vestige +vestigial +vestry +vet +vetch +veteran +veterinarian +veterinary +veto +vex +vexation +vexatious +vhf +vi +via +viaduct +vial +vibrant +vibrate +vibrato +viburnum +vicar +vicarious +vice +viceroy +vichy +vicinal +vicinity +vicious +vicissitude +vicksburg +vicky +victim +victor +victoria +victorian +victorious +victory +victrola +victual +vida +vide +video +videotape +vie +vienna +viennese +vientiane +viet +vietnam +vietnamese +view +viewpoint +viewport +vigil +vigilant +vigilante +vigilantism +vignette +vigorous +vii +viii +viking +vile +vilify +villa +village +villain +villainous +villein +vincent +vindicate +vindictive +vine +vinegar +vineyard +vinson +vintage +vintner +vinyl +viola +violate +violent +violet +violin +virgil +virgin +virginal +virginia +virginian +virgo +virgule +virile +virtual +virtue +virtuosi +virtuosity +virtuoso +virtuous +virulent +virus +vis +visa +visage +viscera +visceral +viscoelastic +viscometer +viscosity +viscount +viscous +vise +vishnu +visible +visigoth +vision +visionary +visit +visitation +visitor +visor +vista +visual +vita +vitae +vital +vitamin +vitiate +vito +vitreous +vitrify +vitriol +vitriolic +vitro +viva +vivace +vivacious +vivacity +vivaldi +vivian +vivid +vivify +vivo +vixen +viz +vladimir +vladivostok +vocable +vocabularian +vocabulary +vocal +vocalic +vocate +vociferous +vogel +vogue +voice +voiceband +void +volatile +volcanic +volcanism +volcano +volition +volkswagen +volley +volleyball +volstead +volt +volta +voltage +voltaic +voltaire +volterra +voltmeter +voluble +volume +volumetric +voluminous +voluntarism +voluntary +volunteer +voluptuous +volvo +vomit +von +voodoo +voracious +voracity +vortex +vortices +vorticity +voss +votary +vote +votive +vouch +vouchsafe +vought +vow +vowel +voyage +vreeland +vt +vulcan +vulgar +vulnerable +vulpine +vulture +vying +w +w's +wa +waals +wabash +wac +wack +wacke +wacky +waco +wad +waddle +wade +wadi +wadsworth +wafer +waffle +wag +wage +wagging +waggle +wagner +wagoneer +wah +wahl +wail +wainscot +wainwright +waist +waistcoat +waistline +wait +waite +waitress +waive +wake +wakefield +wakeful +waken +wakerobin +wakeup +walcott +walden +waldo +waldorf +waldron +wale +walgreen +walk +walkie +walkout +walkover +walkway +wall +wallaby +wallace +wallboard +waller +wallet +wallis +wallop +wallow +wallpaper +walls +wally +walnut +walpole +walrus +walsh +walt +walter +walters +waltham +walton +waltz +waltzing +wan +wand +wander +wane +wang +wangle +want +wanton +wapato +wapiti +wappinger +war +warble +ward +warden +wardrobe +wardroom +ware +warehouse +warehouseman +warfare +warhead +waring +warlike +warm +warmhearted +warmish +warmonger +warmth +warmup +warn +warp +warplane +warrant +warranty +warren +warrior +warsaw +wart +wartime +warty +warwick +wary +was +wash +washbasin +washboard +washbowl +washburn +washington +washout +washy +wasn't +wasp +waspish +wasserman +wast +wastage +waste +wastebasket +wasteful +wasteland +wastewater +wastrel +watanabe +watch +watchband +watchdog +watchful +watchmake +watchman +watchmen +watchword +water +waterbury +watercourse +waterfall +waterfront +watergate +waterhouse +waterline +waterloo +waterman +watermelon +waterproof +waters +watershed +waterside +watertown +waterway +watery +watkins +watson +watt +wattage +wattle +watts +wave +waveform +wavefront +waveguide +wavelength +wavelet +wavenumber +wavy +wax +waxen +waxwork +waxy +way +waybill +waylaid +waylay +wayne +wayside +wayward +we +we'd +we'll +we're +we've +weak +weaken +weal +wealth +wealthy +wean +weapon +weaponry +wear +wearied +wearisome +weary +weasel +weather +weatherbeaten +weatherproof +weatherstrip +weatherstripping +weave +web +webb +weber +webster +weco +wed +wedge +wedlock +wednesday +wee +weed +weedy +week +weekday +weekend +weeks +weep +wehr +wei +weierstrass +weigh +weight +weighty +weinberg +weinstein +weir +weird +weiss +welch +welcome +weld +weldon +welfare +well +wellbeing +weller +welles +wellesley +wellington +wells +welsh +welt +wendell +wendy +went +wept +were +weren't +werner +wert +werther +wesley +wesleyan +west +westbound +westchester +westerly +western +westernmost +westfield +westinghouse +westminster +weston +westward +wet +wetland +weyerhauser +whack +whale +whalen +wham +wharf +wharton +wharves +what +what'd +what're +whatever +whatley +whatnot +whatsoever +wheat +wheatstone +whee +wheedle +wheel +wheelbase +wheelchair +wheelhouse +wheeze +wheezy +whelan +whelk +wheller +whelm +whelp +when +whence +whenever +where +where'd +where're +whereabout +whereas +whereby +wherefore +wherein +whereof +whereon +wheresoever +whereupon +wherever +wherewith +wherewithal +whet +whether +which +whichever +whiff +whig +while +whim +whimper +whimsey +whimsic +whine +whinny +whip +whiplash +whippany +whippet +whipple +whipsaw +whir +whirl +whirligig +whirlpool +whirlwind +whish +whisk +whisper +whistle +whistleable +whit +whitaker +whitcomb +white +whiteface +whitehall +whitehead +whitehorse +whiten +whitetail +whitewash +whither +whitlock +whitman +whitney +whittaker +whittier +whittle +whiz +whizzing +who +who'd +who'll +who've +whoa +whoever +whole +wholehearted +wholesale +wholesome +wholly +whom +whomever +whomsoever +whoop +whoosh +whop +whore +whose +whosoever +whup +why +wi +wichita +wick +wicket +wide +widen +widespread +widgeon +widget +widow +widowhood +width +widthwise +wield +wiener +wier +wife +wig +wigging +wiggins +wiggle +wiggly +wightman +wigmake +wigwam +wilbur +wilcox +wild +wildcat +wildcatter +wilderness +wildfire +wildlife +wile +wiley +wilfred +wilful +wilhelm +wilhelmina +wilkes +wilkie +wilkins +wilkinson +will +willa +willard +willful +william +williams +williamsburg +williamson +willie +willis +willoughby +willow +willowy +wills +wilma +wilmington +wilshire +wilson +wilsonian +wilt +wily +win +wince +winch +winchester +wind +windbag +windbreak +windfall +windmill +window +windowpane +windowsill +windshield +windsor +windstorm +windsurf +windup +windward +windy +wine +winemake +winemaster +winery +wineskin +winfield +wing +wingback +wingman +wingmen +wingspan +wingtip +winifred +wink +winkle +winnetka +winnie +winnipeg +winnipesaukee +winnow +wino +winslow +winsome +winston +winter +winters +wintertime +winthrop +wintry +winy +wipe +wire +wireman +wiremen +wiretap +wiretapper +wiretapping +wiry +wisconsin +wisdom +wise +wiseacre +wisecrack +wisenheimer +wish +wishbone +wishful +wishy +wisp +wispy +wistful +wit +witch +witchcraft +with +withal +withdraw +withdrawal +withdrawn +withdrew +withe +wither +withheld +withhold +within +without +withstand +withstood +withy +witness +witt +witty +wive +wizard +wobble +woe +woebegone +woeful +wok +woke +wolcott +wold +wolf +wolfe +wolff +wolfgang +wolfish +wolve +wolves +woman +womanhood +womb +wombat +women +won +won't +wonder +wonderful +wonderland +wondrous +wong +wont +woo +wood +woodard +woodbury +woodcarver +woodcock +woodcut +wooden +woodgrain +woodhen +woodland +woodlawn +woodlot +woodpeck +woodrow +woodruff +woods +woodshed +woodside +woodward +woodwind +woodwork +woody +woodyard +wool +woolgather +woolworth +wooster +wop +worcester +word +wordsworth +wordy +wore +work +workaday +workbench +workbook +workday +workforce +workhorse +workload +workman +workmanlike +workmen +workout +workpiece +workplace +worksheet +workshop +workspace +workstation +worktable +world +worldwide +worm +wormy +worn +worrisome +worry +worse +worsen +worship +worshipful +worst +worth +worthington +worthwhile +worthy +wotan +would +wouldn't +wound +wove +woven +wow +wrack +wraith +wrangle +wrap +wrapup +wrath +wrathful +wreak +wreath +wreathe +wreck +wreckage +wrench +wrest +wrestle +wretch +wriggle +wright +wrigley +wring +wrinkle +wrist +wristband +wristwatch +writ +write +writeup +writhe +written +wrong +wrongdo +wrongdoer +wrongdoing +wrongful +wronskian +wrote +wrought +wry +wu +wuhan +wv +wy +wyandotte +wyatt +wyeth +wylie +wyman +wyner +wynn +wyoming +x +x's +xavier +xenon +xenophobia +xerography +xerox +xerxes +xi +xylem +xylene +xylophone +y +y's +yacht +yachtsman +yachtsmen +yah +yak +yakima +yale +yalta +yam +yamaha +yang +yank +yankee +yankton +yaounde +yap +yapping +yaqui +yard +yardage +yardstick +yarmouth +yarmulke +yarn +yarrow +yates +yaw +yawl +yawn +ye +yea +yeager +yeah +year +yearbook +yearn +yeast +yeasty +yeats +yell +yellow +yellowish +yellowknife +yellowstone +yelp +yemen +yen +yeoman +yeomanry +yerkes +yeshiva +yesterday +yesteryear +yet +yiddish +yield +yin +yip +yipping +ymca +yodel +yoder +yoga +yoghurt +yogi +yogurt +yoke +yokel +yokohama +yokuts +yolk +yon +yond +yonkers +yore +york +yorktown +yosemite +yost +you +you'd +you'll +you're +you've +young +youngish +youngster +youngstown +your +yourself +yourselves +youth +youthful +yow +ypsilanti +ytterbium +yttrium +yucatan +yucca +yuck +yugoslav +yugoslavia +yuh +yuki +yukon +yule +yves +yvette +ywca +z +z's +zachary +zag +zagging +zagreb +zaire +zambia +zan +zanzibar +zap +zazen +zeal +zealand +zealot +zealous +zebra +zeiss +zellerbach +zen +zenith +zero +zeroes +zeroth +zest +zesty +zeta +zeus +ziegler +zig +zigging +zigzag +zigzagging +zilch +zimmerman +zinc +zing +zion +zionism +zip +zippy +zircon +zirconium +zloty +zodiac +zodiacal +zoe +zomba +zombie +zone +zoo +zoology +zoom +zorn +zoroaster +zoroastrian +zounds +zucchini +zurich +zygote diff --git a/examples/rosettacode/visualize_a_tree.nit b/examples/rosettacode/visualize_a_tree.nit new file mode 100644 index 0000000..f0fa7aa --- /dev/null +++ b/examples/rosettacode/visualize_a_tree.nit @@ -0,0 +1,22 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain + +# Task: Visualize a tree +# SEE: +module visualize_a_tree + +# The library `ordered_tree` offers basic visualization services for trees. +import ordered_tree + +var tree = new OrderedTree[String] +tree.add(null, "a") +tree.add("a", "ab") +tree.add("ab", "abc") +tree.add("a", "ac") +tree.add("ac", "acd") +tree.add(null, "b") +tree.add("b", "bc") + +tree.write_to(stdout) diff --git a/examples/rosettacode/zigzag_matrix.nit b/examples/rosettacode/zigzag_matrix.nit new file mode 100644 index 0000000..f671392 --- /dev/null +++ b/examples/rosettacode/zigzag_matrix.nit @@ -0,0 +1,76 @@ +#!/usr/bin/env nit +# +# This file is part of NIT ( http://www.nitlanguage.org ). +# This program is public domain +# +# Task: Zig-zag matrix +# SEE: + +fun zig_zag(number: Int): Array[Array[Int]] do + var first_number = 0 + var last_number = number * number - 1 + # x: line position + # y: column position + var x = 0 + var y = 0 + # true: top-right + # false: bottom-left + var trajectory = true + # first array: column + # second array: line + var array = new Array[Array[Int]] + for i in [0..number[ do array.add(new Array[Int].filled_with(0, number)) + + while first_number <= last_number do + array[y][x] = first_number + array[number - y - 1][number - x - 1] = last_number + + first_number += 1 + last_number -= 1 + + if x == 0 and y == 0 then + x += 1 + trajectory = false + else + if y == 0 and trajectory then + trajectory = false + x += 1 + continue + end + if y == 0 and not trajectory then + x -= 1 + y += 1 + continue + end + if x == 0 and not trajectory then + trajectory = true + y += 1 + continue + end + if x == 0 and trajectory then + x += 1 + y -= 1 + continue + end + if trajectory then + x += 1 + y -= 1 + else + x -= 1 + y += 1 + end + end + end + return array +end + +var number = 10 +var number_length_max = (number * number - 1).to_s.length +for line in zig_zag(number) do + for element in line do + printn element + var blank = number_length_max - element.to_s.length + 1 + for x in blank.times do printn " " + end + print "" +end diff --git a/lib/buffered_ropes.nit b/lib/buffered_ropes.nit index 2afd1b9..06b2415 100644 --- a/lib/buffered_ropes.nit +++ b/lib/buffered_ropes.nit @@ -87,7 +87,8 @@ end # Leaf of a `Rope`, used as a buffered area for speedy concatenation. private class Leaf - super RopeString + super String + super Rope var buf: ManualBuffer var bns: NativeString is noinit diff --git a/lib/standard/collection/sorter.nit b/lib/standard/collection/sorter.nit index ca16460..9157995 100644 --- a/lib/standard/collection/sorter.nit +++ b/lib/standard/collection/sorter.nit @@ -25,10 +25,12 @@ interface Comparator type COMPARED: nullable Object # Compare `a` and `b`. + # # Returns: - # -1 if a < b - # 0 if a = b - # 1 if a > b + # + # * -1 if a < b + # * 0 if a = b + # * 1 if a > b fun compare(a: COMPARED, b: COMPARED): Int is abstract # Is `seq` sorted? diff --git a/lib/standard/file.nit b/lib/standard/file.nit index 3bc2fcd..0c6aed7 100644 --- a/lib/standard/file.nit +++ b/lib/standard/file.nit @@ -77,9 +77,10 @@ abstract class FileStream # If the buf_size is <= 0, its value will be 512 by default # # The mode is any of the buffer_mode enumeration in `Sys`: - # - buffer_mode_full - # - buffer_mode_line - # - buffer_mode_none + # + # * `buffer_mode_full` + # * `buffer_mode_line` + # * `buffer_mode_none` fun set_buffering_mode(buf_size, mode: Int) do if buf_size <= 0 then buf_size = 512 if _file.set_buffering_type(buf_size, mode) != 0 then diff --git a/lib/standard/math.nit b/lib/standard/math.nit index 8b5fecb..fb6bb05 100644 --- a/lib/standard/math.nit +++ b/lib/standard/math.nit @@ -4,14 +4,14 @@ # # This file is free software, which comes along with NIT. This software is # distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. You can modify it is you want, provided this header # is kept unaltered, and a notification of the changes is added. # You are allowed to redistribute it and sell it, alone or is a part of # another product. # Mathematical operations -module math +module math is ldflags "-lm" import kernel import collection @@ -29,21 +29,33 @@ redef class Int # assert 0x10.bin_and(0x01) == 0 fun bin_and(i: Int): Int is extern "kernel_Int_Int_binand_0" + # Alias of `bin_and` + fun &(i: Int): Int do return bin_and(i) + # Returns the result of a binary OR operation on `self` and `i` # # assert 0x10.bin_or(0x01) == 0x11 fun bin_or(i: Int): Int is extern "kernel_Int_Int_binor_0" + # Alias of `bin_or` + fun |(i: Int): Int do return bin_or(i) + # Returns the result of a binary XOR operation on `self` and `i` # # assert 0x101.bin_xor(0x110) == 0x11 fun bin_xor(i: Int): Int is extern "kernel_Int_Int_binxor_0" + # Alias of `bin_xor` + fun ^(i: Int): Int do return bin_xor(i) + # Returns the 1's complement of `self` # # assert 0x2F.bin_not == -48 fun bin_not: Int is extern "kernel_Int_Int_binnot_0" + # Alias of `bin_not` + fun ~: Int do return bin_not + # Returns the square root of `self` # # assert 16.sqrt == 4 @@ -84,6 +96,24 @@ redef class Int # assert not 13.is_even fun is_odd: Bool do return not is_even + # Is self a prime number ? + # + # assert 3.is_prime + # assert not 1.is_prime + # assert not 12.is_prime + fun is_prime: Bool + do + if self == 2 then + return true + else if self <= 1 or self.is_even then + return false + end + for i in [3..self.sqrt[ do + if self % i == 0 then return false + end + return true + end + # Returns the `self` raised to the power of `e`. # # assert 2 ** 3 == 8 @@ -113,6 +143,40 @@ redef class Int end end +redef class Byte + # Returns the result of a binary AND operation on `self` and `i` + # + # assert 0x10.bin_and(0x01) == 0 + fun bin_and(i: Byte): Byte `{ return self & i; `} + + # Alias of `bin_and` + fun &(i: Byte): Byte do return bin_and(i) + + # Returns the result of a binary OR operation on `self` and `i` + # + # assert 0x10.bin_or(0x01) == 0x11 + fun bin_or(i: Byte): Byte `{ return self | i; `} + + # Alias of `bin_or` + fun |(i: Byte): Byte do return bin_or(i) + + # Returns the result of a binary XOR operation on `self` and `i` + # + # assert 0x101.bin_xor(0x110) == 0x11 + fun bin_xor(i: Byte): Byte `{ return self ^ i; `} + + # Alias of `bin_xor` + fun ^(i: Byte): Byte do return bin_xor(i) + + # Returns the 1's complement of `self` + # + # assert 0x2F.bin_not == -48 + fun bin_not: Byte `{ return ~self; `} + + # Alias of `bin_not` + fun ~: Byte do return bin_not +end + redef class Float # Returns the non-negative square root of `self`. diff --git a/lib/standard/text/ropes.nit b/lib/standard/text/ropes.nit index 4de14cc..4f6a0be 100644 --- a/lib/standard/text/ropes.nit +++ b/lib/standard/text/ropes.nit @@ -36,11 +36,13 @@ # # Example : # +# ~~~raw # Concat # / \ # Concat Concat # / \ / \ # "My" " Name" " is" " Simon." +# ~~~ # # Note that the above example is not representative of the actual implementation # of `Ropes`, since short leaves are merged to keep the rope at an acceptable @@ -63,16 +65,12 @@ private abstract class Rope super Text end -private abstract class RopeString +# Node that represents a concatenation between two `String` +private class Concat super Rope super String redef var chars is lazy do return new RopeChars(self) -end - -# Node that represents a concatenation between two `String` -private class Concat - super RopeString redef var length is noinit @@ -499,14 +497,14 @@ private class RopeReviter # the Rope traversal. var subs: IndexedIterator[String] - init(root: RopeString) is old_style_init do + init(root: Concat) is old_style_init do pos = root.length - 1 subs = new ReverseRopeSubstrings(root) ns = subs.item pns = ns.length - 1 end - init from(root: RopeString, pos: Int) do + init from(root: Concat, pos: Int) do self.pos = pos subs = new ReverseRopeSubstrings.from(root, pos) ns = subs.item @@ -546,7 +544,7 @@ private class RopeIter # Position (char) in the Rope (0-indexed) var pos: Int - init(root: RopeString) is old_style_init do + init(root: Concat) is old_style_init do subs = new RopeSubstrings(root) pns = 0 str = subs.item @@ -554,7 +552,7 @@ private class RopeIter pos = 0 end - init from(root: RopeString, pos: Int) do + init from(root: Concat, pos: Int) do subs = new RopeSubstrings.from(root, pos) pns = pos - subs.index self.pos = pos @@ -592,7 +590,7 @@ private class ReverseRopeSubstrings # Current leaf var str: String is noinit - init(root: RopeString) is old_style_init do + init(root: Concat) is old_style_init do var r = new RopeIterPiece(root, false, true, null) pos = root.length - 1 var lnod: String = root @@ -608,7 +606,7 @@ private class ReverseRopeSubstrings end end - init from(root: RopeString, pos: Int) do + init from(root: Concat, pos: Int) do var r = new RopeIterPiece(root, false, true, null) var rnod: String = root var off = pos @@ -714,7 +712,7 @@ private class RopeSubstrings # Current leaf var str: FlatString is noinit - init(root: RopeString) is old_style_init do + init(root: Concat) is old_style_init do var r = new RopeIterPiece(root, true, false, null) pos = 0 max = root.length - 1 @@ -732,7 +730,7 @@ private class RopeSubstrings end end - init from(root: RopeString, pos: Int) do + init from(root: Concat, pos: Int) do var r = new RopeIterPiece(root, true, false, null) max = root.length - 1 var rnod: String = root @@ -794,11 +792,11 @@ private class RopeSubstrings end end -# Implementation of a `StringCharView` for `RopeString` objects +# Implementation of a `StringCharView` for `Concat` objects private class RopeChars super StringCharView - redef type SELFTYPE: RopeString + redef type SELFTYPE: Concat redef fun [](i) do return target[i] diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index dbe6fc1..8fae169 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -1696,18 +1696,27 @@ abstract class AbstractCompilerVisitor # `mtype` is the expected return type, pass null if no specific type is expected. fun expr(nexpr: AExpr, mtype: nullable MType): RuntimeVariable do - if nexpr.mtype == null then + var old = self.current_node + self.current_node = nexpr + + var res = null + if nexpr.mtype != null then + res = nexpr.expr(self) + end + + if res == null then # Untyped expression. # Might mean dead code or invalid code. # so aborts add_abort("FATAL: bad expression executed.") # and return a placebo result to please the C compiler if mtype == null then mtype = compiler.mainmodule.object_type - return new_var(mtype) + res = new_var(mtype) + + self.current_node = old + return res end - var old = self.current_node - self.current_node = nexpr - var res = nexpr.expr(self).as(not null) + if mtype != null then mtype = self.anchor(mtype) res = self.autobox(res, mtype) @@ -3035,7 +3044,9 @@ redef class AIsaExpr redef fun expr(v) do var i = v.expr(self.n_expr, null) - return v.type_test(i, self.cast_type.as(not null), "isa") + var cast_type = self.cast_type + if cast_type == null then return null # no-no on broken node + return v.type_test(i, cast_type, "isa") end end diff --git a/src/compiler/coloring.nit b/src/compiler/coloring.nit index e2afc48..bff3243 100644 --- a/src/compiler/coloring.nit +++ b/src/compiler/coloring.nit @@ -439,16 +439,21 @@ end # No coloring order is garantied # # Example: -# buckets[A] = {x1, x2} -# buckets[B] = {x1, x3, x4} -# buckets[C] = {x2, x3} +# +# * buckets[A] = {x1, x2} +# * buckets[B] = {x1, x3, x4} +# * buckets[C] = {x2, x3} +# # Conflicts: -# x1: {x2, x3, x4} -# x2: {x1, x3} -# x3: {x1, x2, x4} -# x4: {x1, x3} +# +# * x1: {x2, x3, x4} +# * x2: {x1, x3} +# * x3: {x1, x2, x4} +# * x4: {x1, x3} +# # Possible colors: -# x1: 0, x2: 1, x3: 2, x4: 1 +# +# * x1: 0, x2: 1, x3: 2, x4: 1 class BucketsColorer[H: Object, E: Object] private var colors = new HashMap[E, Int] private var conflicts = new HashMap[E, Set[E]] diff --git a/src/interpreter/dynamic_loading_ffi/README.md b/src/interpreter/dynamic_loading_ffi/README.md new file mode 100644 index 0000000..3a07c84 --- /dev/null +++ b/src/interpreter/dynamic_loading_ffi/README.md @@ -0,0 +1,58 @@ +This group implement a partial support for the Nit FFI in the interpreter. +It compiles foreign code on demand into a dynamic library that is then loaded and executed. + +## Features + +This FFI implementation is a proof of concept, it implements the light FFI and only a subset of the full FFI. + +### From the light FFI: + +* Nested extern methods. +* Module level code blocks. +* Passage of primitive types. +* Extern classes and constructors. + +### From the full FFI: + +* Static Nit types in C. +* Public code block propagation. +* The `cflags` and `ldflags` annotations. + +### Missing features: (Still TODO) + +* Callback to Nit code. +* Support C++, Java and Objective-C. +* Reference pinning. +* Support the `pkgconfig` and `extra_java_files` annotations. + +## The shared library and its API + +The generated shared library hold the compiled foreign code of a single module. +It is generated a the first extern method invocation within the module. + +The shared library also implements a standard API to be used by the interpreter. +This API is compose of 2 main elements: + +* A single data structure to pass Nit instances and primitive data types: + + ~~~C + typedef union nit_call_arg { + long value_Int; + int value_Bool; + uint32_t value_Char; + uint8_t value_Byte; + double value_Float; + void* value_Pointer; + } nit_call_arg; + ~~~ + +* Standardized entrypoints, one per extern method in the module. + Their signature is composed of the number or arguments, + a preallocated array of the arguments and a preallocated structure for the return value. + + ~~~C + int (*nit_foreign_lib_entry)(int argc, nit_call_arg *args, nit_call_arg *ret); + ~~~ + + Each entrypoints unpack the arguments and call the FFI implementation method. + The return value is stored in the preallocated structure where the interpreter can retreive it. diff --git a/src/interpreter/dynamic_loading_ffi/dynamic_loading_ffi.nit b/src/interpreter/dynamic_loading_ffi/dynamic_loading_ffi.nit new file mode 100644 index 0000000..656e685 --- /dev/null +++ b/src/interpreter/dynamic_loading_ffi/dynamic_loading_ffi.nit @@ -0,0 +1,290 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Execute FFI code by creating and loading shared libraries +# +# Triggers the compilation of the library when needed. +module dynamic_loading_ffi is ldflags "-ldl" + +import naive_interpreter + +import on_demand_compiler +import ffi + +in "C Header" `{ + #include + #include + + // C structure behind `CallArg` + typedef union nit_call_arg { + long value_Int; + int value_Bool; + uint32_t value_Char; + uint8_t value_Byte; + double value_Float; + void* value_Pointer; + } nit_call_arg; + + // Signature shared by all entry points + typedef int (*nit_foreign_lib_entry)(int, nit_call_arg*, nit_call_arg*); +`} + +# Single cell in the list of arguments sent to foreign code (and received) +# +# Each cell can hold all primitive types and pointers to Nit class instances. +# +# Since this is a C pointer, it acts as both a single cell and an array. +private extern class CallArg `{ nit_call_arg* `} + + # Initialize an array of `CallArg` of `length` elements + new (length: Int) `{ return calloc(length, sizeof(nit_call_arg)); `} + + # Get the element at `index` after `self` + fun [](index: Int): CallArg `{ return self + index; `} + + # The `Int` held by this cell + fun int: Int `{ return self->value_Int; `} + + # The `Int` held by this cell + fun int=(value: Int) `{ self->value_Int = value; `} + + # The `Bool` held by this cell + fun bool: Bool `{ return self->value_Bool; `} + + # The `Bool` held by this cell + fun bool=(value: Bool) `{ self->value_Bool = value; `} + + # The `Char` held by this cell + fun char: Char `{ return self->value_Char; `} + + # The `Char` held by this cell + fun char=(value: Char) `{ self->value_Char = value; `} + + # The `Byte` held by this cell + fun byte: Byte `{ return self->value_Byte; `} + + # The `Byte` held by this cell + fun byte=(value: Byte) `{ self->value_Byte = value; `} + + # The `Float` held by this cell + fun float: Float `{ return self->value_Float; `} + + # The `Float` held by this cell + fun float=(value: Float) `{ self->value_Float = value; `} + + # The `Pointer` held by this cell + fun pointer: Pointer `{ return self->value_Pointer; `} + + # The `Pointer` held by this cell + fun pointer=(value: Pointer) `{ self->value_Pointer = value; `} + + # The `Instance` held by this cell + fun instance: Instance `{ return (Instance)self->value_Pointer; `} + + # The `Instance` held by this cell + fun instance=(value: Instance) `{ self->value_Pointer = value; `} + + # The `NativeString` held by this cell + fun native_string: NativeString `{ return (unsigned char*)self->value_Pointer; `} + + # Set the content of this cell according to `static_type` + # + # Opposite of `to_instance`. + fun from_static_type(value: Instance, static_type: MType) + do + if static_type.name == "Int" then + assert value isa PrimitiveInstance[Int] + self.int = value.val + else if static_type.name == "Bool" then + assert value isa PrimitiveInstance[Bool] + self.bool = value.val + else if static_type.name == "Char" then + assert value isa PrimitiveInstance[Char] + self.char = value.val + else if static_type.name == "Byte" then + assert value isa PrimitiveInstance[Byte] + self.byte = value.val + else if static_type.name == "Float" then + assert value isa PrimitiveInstance[Float] + self.float = value.val + else if static_type.name == "NativeString" then + assert value isa PrimitiveInstance[Buffer] + self.pointer = value.val.to_cstring + else if static_type isa MClassType and static_type.mclass.kind == extern_kind then + assert value isa PrimitiveInstance[Pointer] else print value.class_name + self.pointer = value.val + else + self.instance = value + end + end + + # Get the content of this cell as an `Instance` of the `static_type` + # + # Opposite of `from_static_type`. + fun to_instance(static_type: MType, v: NaiveInterpreter): Instance + do + var name = static_type.name + if name == "Int" then + return v.int_instance(self.int) + else if name == "Bool" then + return if self.bool then + v.true_instance + else v.false_instance + else if name == "Char" then + return v.char_instance(self.char) + else if name == "Byte" then + return v.byte_instance(self.byte) + else if name == "Float" then + return v.float_instance(self.float) + else if name == "NativeString" then + return v.native_string_instance(self.native_string.to_s) + else if static_type isa MClassType and static_type.mclass.kind == extern_kind then + # We tag it with the most precise known type + var instance = new PrimitiveInstance[Pointer](static_type, self.pointer) + v.init_instance_primitive instance + return instance + else + return self.instance + end + end +end + +# Handle to foreign code library +private extern class ForeignCodeLib + # Open and load the library at `path` + new dlopen(path: NativeString) `{ + return dlopen(path, RTLD_LOCAL | RTLD_NOW); + `} + + # Find the `ForeignCodeEntry` at `symbol_name` + fun dlsym(symbol_name: NativeString): ForeignCodeEntry `{ + return dlsym(self, symbol_name); + `} +end + +private fun dlerror: NativeString `{ return dlerror(); `} + +# Handle to an implementation function in a `ForeignCodeLib` +private extern class ForeignCodeEntry`{ nit_foreign_lib_entry `} + + # Invoke the implementation function by passing `args` and receive the return value + fun call(argc: Int, args, ret: CallArg): Bool `{ + return ((nit_foreign_lib_entry)self)(argc, args, ret); + `} +end + +redef class AMethPropdef + # Handle to the entrypoint of this method in the foreign code library + private var foreign_entry_cache: nullable ForeignCodeEntry = null + + redef fun call_extern(v, mpropdef, args, frame) + do + # Fallback the default error if this method is not supported + if not supported_by_dynamic_ffi then return super + + var entry = foreign_entry_cache + if entry == null then + # Get handle to foreign code lib + var amodule = v.modelbuilder.mmodule2node(mpropdef.mclassdef.mmodule) + assert amodule != null + + var lib = amodule.foreign_code_lib(v) + if lib == null then return v.error_instance + + # Get handle to implementation function + entry = lib.dlsym(mpropdef.foreign_lib_entry_cname.to_cstring) + if entry.address_is_null then + print mpropdef.foreign_lib_entry_cname + v.fatal "FFI Error: Cannot find method {mpropdef.name} in foreign code library." + return v.error_instance + end + + foreign_entry_cache = entry + end + + # Prepare to send args to foreign code lib + var is_init = mpropdef.mproperty.is_init + if is_init then args.shift + var native_args_length = args.length + + var native_args = new CallArg(args.length) + var a = 0 + if not is_init then + var arg = args[a] + var native_arg = native_args[a] + native_arg.from_static_type(arg, mpropdef.mclassdef.mclass.mclass_type) + a += 1 + end + for param in mpropdef.msignature.mparameters do + var arg = args[a] + var native_arg = native_args[a] + native_arg.from_static_type(arg, param.mtype) + a += 1 + end + + # Allocate memory for the return value + var native_return = new CallArg(1) + var error = entry.call(native_args_length, native_args, native_return) + + if error then + v.fatal "FFI Error: Native code library reported an error" + return null + end + + # Get the result + var return_mtype = mpropdef.msignature.return_mtype + if is_init then return_mtype = mpropdef.mclassdef.mclass.mclass_type + + var return_value + if return_mtype == null then + return_value = null + else + return_value = native_return.to_instance(return_mtype, v) + end + + native_args.free + native_return.free + + return return_value + end +end + +redef class AModule + + private var foreign_code_lib_cache: nullable ForeignCodeLib = null + + # Handle to the external library with FFI code + private fun foreign_code_lib(v: NaiveInterpreter): nullable ForeignCodeLib + do + var lib = foreign_code_lib_cache + if lib != null then return lib + + var mmodule = mmodule + assert mmodule != null + + var foreign_code_lib_path = v.foreign_code_lib_path(mmodule) + + # Compile lib + compile_foreign_lib v + + lib = new ForeignCodeLib.dlopen(foreign_code_lib_path.to_cstring) + if lib.address_is_null then + v.fatal "FFI Error: Cannot load foreign code library for {mmodule.name}: {dlerror.to_s}" + return null + end + + foreign_code_lib_cache = lib + return lib + end +end diff --git a/src/interpreter/dynamic_loading_ffi/on_demand_compiler.nit b/src/interpreter/dynamic_loading_ffi/on_demand_compiler.nit new file mode 100644 index 0000000..f9c8fb5 --- /dev/null +++ b/src/interpreter/dynamic_loading_ffi/on_demand_compiler.nit @@ -0,0 +1,366 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Compiles extern code within a module to a static library, as needed +module on_demand_compiler + +import modelbuilder +import c_tools +import nitni +import ffi +import naive_interpreter + +redef class AMethPropdef + # Does this method definition use the FFI and is it supported by the interpreter? + # + # * Must use the nested foreign code block of the FFI. + # * Must not have callbacks. + # * Must be implemented in C. + fun supported_by_dynamic_ffi: Bool + do + var n_extern_code_block = n_extern_code_block + if not (n_extern_calls == null and n_extern_code_block != null and + n_extern_code_block.is_c) then return false + + for mparam in mpropdef.msignature.mparameters do + var mtype = mparam.mtype + if not mtype.is_cprimitive then + return false + end + end + + return true + end +end + +redef class NaiveInterpreter + # Where to store generated C and extracted code + # + # TODO make customizable and delete when execution completes + private var compile_dir = "nit_compile" + + # Path of the compiled foreign code library + # + # TODO change the ".so" extension per platform. + fun foreign_code_lib_path(mmodule: MModule): String + do + return compile_dir / mmodule.c_name + ".so" + end + + # External compiler used to generate the foreign code library + private var c_compiler = "gcc" +end + +redef class AModule + + # Compile user FFI code and a standardized API into a `.so` file + # + # Returns `true` on success. + fun compile_foreign_lib(v: NaiveInterpreter): Bool + do + var mmodule = mmodule + assert mmodule != null + + var compile_dir = v.compile_dir + var foreign_code_lib_path = v.foreign_code_lib_path(mmodule) + + compile_dir.mkdir + + # Compile the common FFI part + ensure_compile_ffi_wrapper + for mclassdef in mmodule.mclassdefs do for mpropdef in mclassdef.mpropdefs do + var anode = v.modelbuilder.mpropdef2node(mpropdef) + if mpropdef isa MMethodDef and anode isa AMethPropdef and anode.supported_by_dynamic_ffi then + anode.compile_ffi_method(mmodule) + end + end + mmodule.finalize_ffi_wrapper(compile_dir, mmodule) + + # Compile the standard API and its implementation for the .so file + var ccu = compile_foreign_lib_api(compile_dir) + + var srcs = [for file in ccu.files do new ExternCFile(file, ""): ExternFile] + srcs.add_all mmodule.ffi_files + + if mmodule.pkgconfigs.not_empty then + fatal(v, "NOT YET IMPLEMENTED annotation `pkgconfig`") + return false + end + + var ldflags = mmodule.ldflags[""].join(" ") + # TODO pkgconfig + + # Compile each source file to an object file (or equivalent) + var object_files = new Array[String] + for f in srcs do + f.compile(v, mmodule, object_files) + end + + # Link everything in a shared library + # TODO customize the compiler + var cmd = "{v.c_compiler} -Wall -shared -Wl,-soname,{mmodule.name}.so -g -o {foreign_code_lib_path} {object_files.join(" ")} {ldflags}" + if sys.system(cmd) != 0 then + v.fatal "FFI Error: Failed to link native code using `{cmd}`" + return false + end + + return true + end + + # Compile the standard API of the `.so` file + # + # * The shared structure `nit_call_arg`. + # * Standardized implementation functions entrypoints that relay calls + # to the FFI implementation functions. + private fun compile_foreign_lib_api(compdir: String): CCompilationUnit + do + var mmodule = mmodule + assert mmodule != null + + # ready extern code compiler + var ecc = new CCompilationUnit + + ecc.body_decl.add """ + +#include +#include +#include + +// C structure behind `CallArg` from the interpreter +typedef union nit_call_arg { + long value_Int; + int value_Bool; + uint32_t value_Char; + uint8_t value_Byte; + double value_Float; + void* value_Pointer; +} nit_call_arg; + +""" + + # types + var used_types = collect_mtypes + for t in used_types do + if not t.is_cprimitive then + ecc.header_c_types.add "typedef void* {t.cname};\n" + end + end + + # TODO callbacks & casts + + for nclassdef in n_classdefs do for npropdef in nclassdef.n_propdefs do + if npropdef isa AMethPropdef and npropdef.supported_by_dynamic_ffi then + npropdef.mpropdef.compile_foreign_code_entry ecc + end + end + + ecc.write_as_foreign_lib_api(mmodule, compdir) + + return ecc + end + + # Collect all `MType` use in extern methods within this module + private fun collect_mtypes: Set[MType] + do + var used_types = new HashSet[MType] + + # collect callbacks + for nclassdef in n_classdefs do for npropdef in nclassdef.n_propdefs do + if npropdef isa AMethPropdef and npropdef.supported_by_dynamic_ffi then + var fcs = npropdef.foreign_callbacks + used_types.add_all fcs.types + end + end + + return used_types + end +end + +redef class CCompilationUnit + # Write this compilation unit as the API of a foreign code library + private fun write_as_foreign_lib_api(mmodule: MModule, compdir: String) + do + # The FFI expects the support header to end with `._nitni.h` + var base_name = mmodule.c_name + "._nitni" + var guard = mmodule.c_name.to_s.to_upper + "_API_H" + var header_comment = """ +/* + Public API to foreign code of the Nit module {{{mmodule.name}}} +*/ +""" + + # Header file + var h_file = base_name+".h" + var stream = new FileWriter.open(compdir/h_file) + stream.write header_comment + stream.write """ +#ifndef {{{guard}}} +#define {{{guard}}} +""" + compile_header_core stream + stream.write """ + +#endif +""" + stream.close + + # Body file + var c_file = base_name+".c" + stream = new FileWriter.open(compdir/c_file) + stream.write header_comment + stream.write """ +#include "{{{h_file}}}" +""" + compile_body_core stream + stream.close + + # Only the C files needs compiling + files.add compdir / c_file + end +end + +redef class MMethodDef + # Name of the entry point to the implementation function in the foreign lib + fun foreign_lib_entry_cname: String do return "entry__{cname}" + + # Compile the standardized entry point as part of the foreign lib API + private fun compile_foreign_code_entry(ecc: CCompilationUnit) + do + var msignature = msignature + if msignature == null then return + + # Return type + var return_mtype = msignature.return_mtype + if mproperty.is_init then return_mtype = mclassdef.mclass.mclass_type + + var c_return_type + if return_mtype != null then + c_return_type = return_mtype.cname_blind + else c_return_type = "void" + + var is_init = mproperty.is_init + + # Params + var params = new Array[String] + if not is_init then params.add mclassdef.mclass.mclass_type.cname_blind + for param in msignature.mparameters do params.add param.mtype.cname_blind + + # Declare the implementation function as extern + var impl_cname = mproperty.build_cname(mclassdef.mclass.mclass_type, + mclassdef.mmodule, "___impl", long_signature) + ecc.body_decl.add "extern {c_return_type} {impl_cname}({params.join(", ")});\n" + + # Declare the entry function + var foreign_lib_entry_cname = "int {foreign_lib_entry_cname}(int argc, nit_call_arg *argv, nit_call_arg *result)" + var fc = new CFunction(foreign_lib_entry_cname) + + # Check argument count on the library side + # + # This may detect inconsistencies between the interpreter and the generated code. + var expected_argc = msignature.arity + if not is_init then expected_argc += 1 + + fc.exprs.add """ + if (argc != {{{expected_argc}}}) { + printf("Invalid argument count in `{{{mproperty.full_name}}}`, expected %d, got %d.\\n", + argc, {{{expected_argc}}}); + return 1; + } +""" + + # Unpack and prepare args for the user code + var k = 0 + var args_for_call = new Array[String] + if not is_init then + var mtype = mclassdef.mclass.mclass_type + var arg_name = "arg___self" + + fc.decls.add " {mtype.cname_blind} {arg_name};\n" + fc.exprs.add " {arg_name} = argv[{k}].{mtype.call_arg_field};\n" + args_for_call.add arg_name + + k += 1 + end + for param in msignature.mparameters do + var mtype = param.mtype + var arg_name = "arg__"+param.name + + fc.decls.add " {mtype.cname_blind} {arg_name};\n" + fc.exprs.add " {arg_name} = argv[{k}].{mtype.call_arg_field};\n" + args_for_call.add arg_name + + k += 1 + end + + # Call implementation function + var args_compressed = args_for_call.join(", ") + var method_call = "{impl_cname}({args_compressed})" + if return_mtype != null then + fc.decls.add """ + {{{return_mtype.cname_blind}}} return_value; +""" + fc.exprs.add """ + return_value = {{{method_call}}}; + result->{{{return_mtype.call_arg_field}}} = return_value; +""" + else + fc.exprs.add " {method_call};\n" + end + + fc.exprs.add " return 0;\n" + + ecc.add_exported_function fc + end +end + +redef class MType + # The interpreter FFI use `void*` to represent intern data types + redef fun cname_blind do return "void*" + + # Field to store this type in the C structure `nit_call_arg` + private fun call_arg_field: String do return "value_Pointer" +end + +redef class MClassType + redef fun call_arg_field + do + if is_cprimitive and mclass.kind != extern_kind then + return "value_{name}" + else return super + end +end + +redef class ExternFile + # Compile this source file + private fun compile(v: NaiveInterpreter, mmodule: MModule, + object_files: Array[String]): Bool is abstract +end + +redef class ExternCFile + redef fun compile(v, mmodule, object_files) + do + var compile_dir = v.compile_dir + var cflags = mmodule.cflags[""].join(" ") + var obj = compile_dir / filename.basename(".c") + ".o" + + var cmd = "{v.c_compiler} -Wall -c -fPIC -I {compile_dir} -g -o {obj} {filename} {cflags}" + if sys.system(cmd) != 0 then + v.fatal "FFI Error: Failed to compile C code using `{cmd}`" + return false + end + + object_files.add obj + return true + end +end diff --git a/src/interpreter/interpreter.nit b/src/interpreter/interpreter.nit index 2063760..ed2d460 100644 --- a/src/interpreter/interpreter.nit +++ b/src/interpreter/interpreter.nit @@ -18,3 +18,4 @@ module interpreter import naive_interpreter import debugger import debugger_socket +import dynamic_loading_ffi diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index 53f2f41..e36de7a 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -800,13 +800,21 @@ redef class AMethPropdef if mpropdef.is_intern then fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}") else if mpropdef.is_extern then - fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}") + var res = call_extern(v, mpropdef, arguments, f) + if res != v.error_instance then return res else fatal(v, "NOT YET IMPLEMENTED {mpropdef}") end abort end + # Call this extern method + protected fun call_extern(v: NaiveInterpreter, mpropdef: MMethodDef, arguments: Array[Instance], f: Frame): nullable Instance + do + fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}") + return v.error_instance + end + # Interprets a intern or a shortcut extern method. # Returns the result for a function, `null` for a procedure, or `error_instance` if the method is unknown. private fun intern_call(v: NaiveInterpreter, mpropdef: MMethodDef, args: Array[Instance]): nullable Instance diff --git a/src/nitni/nitni_base.nit b/src/nitni/nitni_base.nit index 23c72d8..a64c3df 100644 --- a/src/nitni/nitni_base.nit +++ b/src/nitni/nitni_base.nit @@ -82,7 +82,7 @@ redef class MType # # type Object is_primitive? false # type Pointer is_primitive? true - fun is_cprimitive: Bool is abstract + fun is_cprimitive: Bool do return false end redef class MClassType @@ -127,7 +127,6 @@ end redef class MNullableType redef fun cname do return mangled_cname redef fun mangled_cname do return "nullable_{mtype.mangled_cname}" - redef fun is_cprimitive do return false end redef class MVirtualType diff --git a/src/rapid_type_analysis.nit b/src/rapid_type_analysis.nit index a89798f..05e2332 100644 --- a/src/rapid_type_analysis.nit +++ b/src/rapid_type_analysis.nit @@ -524,31 +524,42 @@ redef class ANode end end +redef class AExpr + # Make the `mtype` of the expression live + # Used by literals and instantiations + fun allocate_mtype(v: RapidTypeVisitor) + do + var mtype = self.mtype + if not mtype isa MClassType then return + v.add_type(self.mtype.as(MClassType)) + end +end + redef class AIntExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end redef class AByteExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end redef class AFloatExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end redef class ACharExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end @@ -597,7 +608,8 @@ end redef class ACrangeExpr redef fun accept_rapid_type_visitor(v) do - var mtype = self.mtype.as(MClassType) + var mtype = self.mtype + if not mtype isa MClassType then return v.add_type(mtype) v.add_callsite(init_callsite) end @@ -606,7 +618,8 @@ end redef class AOrangeExpr redef fun accept_rapid_type_visitor(v) do - var mtype = self.mtype.as(MClassType) + var mtype = self.mtype + if not mtype isa MClassType then return v.add_type(mtype) v.add_callsite(init_callsite) end @@ -615,28 +628,32 @@ end redef class ATrueExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end redef class AFalseExpr redef fun accept_rapid_type_visitor(v) do - v.add_type(self.mtype.as(MClassType)) + allocate_mtype(v) end end redef class AIsaExpr redef fun accept_rapid_type_visitor(v) do - v.add_cast_type(self.cast_type.as(not null)) + var cast_type = self.cast_type + if cast_type == null then return + v.add_cast_type(cast_type) end end redef class AAsCastExpr redef fun accept_rapid_type_visitor(v) do - v.add_cast_type(self.mtype.as(not null)) + var mtype = self.mtype + if mtype == null then return + v.add_cast_type(mtype) end end diff --git a/src/toolcontext.nit b/src/toolcontext.nit index 8196aeb..4468d91 100644 --- a/src/toolcontext.nit +++ b/src/toolcontext.nit @@ -574,16 +574,18 @@ end # # On some Linux systems `bash_completion` allow the program to control command line behaviour. # -# $ nitls [TAB][TAB] -# file1.nit file2.nit file3.nit +# ~~~sh +# $ nitls [TAB][TAB] +# file1.nit file2.nit file3.nit # -# $ nitls --[TAB][TAB] -# --bash-toolname --keep --path --tree -# --depends --log --project --verbose -# --disable-phase --log-dir --quiet --version -# --gen-bash-completion --no-color --recursive --warn -# --help --only-metamodel --source -# --ignore-visibility --only-parse --stop-on-first-error +# $ nitls --[TAB][TAB] +# --bash-toolname --keep --path --tree +# --depends --log --project --verbose +# --disable-phase --log-dir --quiet --version +# --gen-bash-completion --no-color --recursive --warn +# --help --only-metamodel --source +# --ignore-visibility --only-parse --stop-on-first-error +# ~~~ # # Generated file can be placed in system bash_completion directory `/etc/bash_completion.d/` # or source it in `~/.bash_completion`. diff --git a/tests/base_dead_code.nit b/tests/base_dead_code.nit new file mode 100644 index 0000000..25f6d9e --- /dev/null +++ b/tests/base_dead_code.nit @@ -0,0 +1,39 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +0.output +var x = null +for i in [0..2[ do + if x != null then + # This is dead code + x.output + x.first.output + x.as(String).output + x.as not null.output + true.output + false.output + 1.output + 1u8.output + '1'.output + "1".output + [1].output + [0..1].output + for j in x do j.output + x = x.as(String) + assert x isa String + end + #alt1#x = [1] + #alt2#x = 1 +end +1.output diff --git a/tests/error_annot_pkgconfig.nit b/tests/error_annot_pkgconfig.nit index 3a01e25..c8ef400 100644 --- a/tests/error_annot_pkgconfig.nit +++ b/tests/error_annot_pkgconfig.nit @@ -18,3 +18,6 @@ #alt1# module error_annot_pkgconfig_alt1 is pkgconfig("missing-lib") #alt2# module error_annot_pkgconfig_alt2 is pkgconfig("too many args", 123) #alt3# module error_annot_pkgconfig_alt3 is pkgconfig(1234) # not a string + +fun foo `{ `} +foo diff --git a/tests/exec.skip b/tests/exec.skip index 42fe68f..c0428ae 100644 --- a/tests/exec.skip +++ b/tests/exec.skip @@ -6,3 +6,4 @@ show_basedir langannot loops_infinite read_entire_file +letter_frequency diff --git a/tests/factorial.inputs b/tests/factorial.inputs new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/tests/factorial.inputs @@ -0,0 +1 @@ +5 diff --git a/tests/nitcg.skip b/tests/nitcg.skip index 0d0961d..c490ae2 100644 --- a/tests/nitcg.skip +++ b/tests/nitcg.skip @@ -1,14 +1,6 @@ -nitc -nitdoc -nitlight -neo_doxygen_descriptions -neo_doxygen_doc_module_class -neo_doxygen_dump -neo_doxygen_file_compound -neo_doxygen_graph_empty_project -neo_doxygen_member_resolve_introducer -neo_doxygen_namespace_members +^neo_doxygen test_docdown -nith -nitpretty -nitmetrics +test_neo +test_phase +test_parser +^nit diff --git a/tests/niti.skip b/tests/niti.skip index 61b016a..dbf3555 100644 --- a/tests/niti.skip +++ b/tests/niti.skip @@ -20,3 +20,9 @@ hamming_number hailstone nitls_args nituml_args +count_the_coins +semordnilap_args1 +mpi_simple +blink +input +first_letter_last_letter diff --git a/tests/nitvm.skip b/tests/nitvm.skip index 61b016a..dbf3555 100644 --- a/tests/nitvm.skip +++ b/tests/nitvm.skip @@ -20,3 +20,9 @@ hamming_number hailstone nitls_args nituml_args +count_the_coins +semordnilap_args1 +mpi_simple +blink +input +first_letter_last_letter diff --git a/tests/perfect_numbers.inputs b/tests/perfect_numbers.inputs new file mode 100644 index 0000000..62f9457 --- /dev/null +++ b/tests/perfect_numbers.inputs @@ -0,0 +1 @@ +6 \ No newline at end of file diff --git a/tests/sav/arithmetic_mode.res b/tests/sav/arithmetic_mode.res new file mode 100644 index 0000000..290a7d5 --- /dev/null +++ b/tests/sav/arithmetic_mode.res @@ -0,0 +1,4 @@ +6 +1 +6 +1 diff --git a/tests/sav/base_dead_code.res b/tests/sav/base_dead_code.res new file mode 100644 index 0000000..0d66ea1 --- /dev/null +++ b/tests/sav/base_dead_code.res @@ -0,0 +1,2 @@ +0 +1 diff --git a/tests/sav/base_dead_code_alt1.res b/tests/sav/base_dead_code_alt1.res new file mode 100644 index 0000000..a1a33da --- /dev/null +++ b/tests/sav/base_dead_code_alt1.res @@ -0,0 +1,6 @@ +alt/base_dead_code_alt1.nit:23,3: Warning: expression is not null, since it is a `Array[Int]`. +alt/base_dead_code_alt1.nit:34,10--21: Warning: expression is already a `String`. +Runtime error: Cast failed. Expected `String`, got `Array[Int]` (alt/base_dead_code_alt1.nit:22) +0 +1 +1 diff --git a/tests/sav/base_dead_code_alt2.res b/tests/sav/base_dead_code_alt2.res new file mode 100644 index 0000000..1537f14 --- /dev/null +++ b/tests/sav/base_dead_code_alt2.res @@ -0,0 +1,5 @@ +alt/base_dead_code_alt2.nit:21,5--9: Error: method `first` does not exists in `Int`. +alt/base_dead_code_alt2.nit:23,3: Warning: expression is not null, since it is a `Int`. +alt/base_dead_code_alt2.nit:32,3--24: Error: method `iterator` does not exists in `Int`. +alt/base_dead_code_alt2.nit:32,3--24: Type Error: `for` expects a type providing an `iterator` method, got `Int`. +alt/base_dead_code_alt2.nit:34,10--21: Warning: expression is already a `String`. diff --git a/tests/sav/bottles_of_beer.res b/tests/sav/bottles_of_beer.res new file mode 100644 index 0000000..d7b55b3 --- /dev/null +++ b/tests/sav/bottles_of_beer.res @@ -0,0 +1,495 @@ +99 bottles of beer on the wall +99 bottles of beer +Take one down, pass it around +98 bottles of beer on the wall + +98 bottles of beer on the wall +98 bottles of beer +Take one down, pass it around +97 bottles of beer on the wall + +97 bottles of beer on the wall +97 bottles of beer +Take one down, pass it around +96 bottles of beer on the wall + +96 bottles of beer on the wall +96 bottles of beer +Take one down, pass it around +95 bottles of beer on the wall + +95 bottles of beer on the wall +95 bottles of beer +Take one down, pass it around +94 bottles of beer on the wall + +94 bottles of beer on the wall +94 bottles of beer +Take one down, pass it around +93 bottles of beer on the wall + +93 bottles of beer on the wall +93 bottles of beer +Take one down, pass it around +92 bottles of beer on the wall + +92 bottles of beer on the wall +92 bottles of beer +Take one down, pass it around +91 bottles of beer on the wall + +91 bottles of beer on the wall +91 bottles of beer +Take one down, pass it around +90 bottles of beer on the wall + +90 bottles of beer on the wall +90 bottles of beer +Take one down, pass it around +89 bottles of beer on the wall + +89 bottles of beer on the wall +89 bottles of beer +Take one down, pass it around +88 bottles of beer on the wall + +88 bottles of beer on the wall +88 bottles of beer +Take one down, pass it around +87 bottles of beer on the wall + +87 bottles of beer on the wall +87 bottles of beer +Take one down, pass it around +86 bottles of beer on the wall + +86 bottles of beer on the wall +86 bottles of beer +Take one down, pass it around +85 bottles of beer on the wall + +85 bottles of beer on the wall +85 bottles of beer +Take one down, pass it around +84 bottles of beer on the wall + +84 bottles of beer on the wall +84 bottles of beer +Take one down, pass it around +83 bottles of beer on the wall + +83 bottles of beer on the wall +83 bottles of beer +Take one down, pass it around +82 bottles of beer on the wall + +82 bottles of beer on the wall +82 bottles of beer +Take one down, pass it around +81 bottles of beer on the wall + +81 bottles of beer on the wall +81 bottles of beer +Take one down, pass it around +80 bottles of beer on the wall + +80 bottles of beer on the wall +80 bottles of beer +Take one down, pass it around +79 bottles of beer on the wall + +79 bottles of beer on the wall +79 bottles of beer +Take one down, pass it around +78 bottles of beer on the wall + +78 bottles of beer on the wall +78 bottles of beer +Take one down, pass it around +77 bottles of beer on the wall + +77 bottles of beer on the wall +77 bottles of beer +Take one down, pass it around +76 bottles of beer on the wall + +76 bottles of beer on the wall +76 bottles of beer +Take one down, pass it around +75 bottles of beer on the wall + +75 bottles of beer on the wall +75 bottles of beer +Take one down, pass it around +74 bottles of beer on the wall + +74 bottles of beer on the wall +74 bottles of beer +Take one down, pass it around +73 bottles of beer on the wall + +73 bottles of beer on the wall +73 bottles of beer +Take one down, pass it around +72 bottles of beer on the wall + +72 bottles of beer on the wall +72 bottles of beer +Take one down, pass it around +71 bottles of beer on the wall + +71 bottles of beer on the wall +71 bottles of beer +Take one down, pass it around +70 bottles of beer on the wall + +70 bottles of beer on the wall +70 bottles of beer +Take one down, pass it around +69 bottles of beer on the wall + +69 bottles of beer on the wall +69 bottles of beer +Take one down, pass it around +68 bottles of beer on the wall + +68 bottles of beer on the wall +68 bottles of beer +Take one down, pass it around +67 bottles of beer on the wall + +67 bottles of beer on the wall +67 bottles of beer +Take one down, pass it around +66 bottles of beer on the wall + +66 bottles of beer on the wall +66 bottles of beer +Take one down, pass it around +65 bottles of beer on the wall + +65 bottles of beer on the wall +65 bottles of beer +Take one down, pass it around +64 bottles of beer on the wall + +64 bottles of beer on the wall +64 bottles of beer +Take one down, pass it around +63 bottles of beer on the wall + +63 bottles of beer on the wall +63 bottles of beer +Take one down, pass it around +62 bottles of beer on the wall + +62 bottles of beer on the wall +62 bottles of beer +Take one down, pass it around +61 bottles of beer on the wall + +61 bottles of beer on the wall +61 bottles of beer +Take one down, pass it around +60 bottles of beer on the wall + +60 bottles of beer on the wall +60 bottles of beer +Take one down, pass it around +59 bottles of beer on the wall + +59 bottles of beer on the wall +59 bottles of beer +Take one down, pass it around +58 bottles of beer on the wall + +58 bottles of beer on the wall +58 bottles of beer +Take one down, pass it around +57 bottles of beer on the wall + +57 bottles of beer on the wall +57 bottles of beer +Take one down, pass it around +56 bottles of beer on the wall + +56 bottles of beer on the wall +56 bottles of beer +Take one down, pass it around +55 bottles of beer on the wall + +55 bottles of beer on the wall +55 bottles of beer +Take one down, pass it around +54 bottles of beer on the wall + +54 bottles of beer on the wall +54 bottles of beer +Take one down, pass it around +53 bottles of beer on the wall + +53 bottles of beer on the wall +53 bottles of beer +Take one down, pass it around +52 bottles of beer on the wall + +52 bottles of beer on the wall +52 bottles of beer +Take one down, pass it around +51 bottles of beer on the wall + +51 bottles of beer on the wall +51 bottles of beer +Take one down, pass it around +50 bottles of beer on the wall + +50 bottles of beer on the wall +50 bottles of beer +Take one down, pass it around +49 bottles of beer on the wall + +49 bottles of beer on the wall +49 bottles of beer +Take one down, pass it around +48 bottles of beer on the wall + +48 bottles of beer on the wall +48 bottles of beer +Take one down, pass it around +47 bottles of beer on the wall + +47 bottles of beer on the wall +47 bottles of beer +Take one down, pass it around +46 bottles of beer on the wall + +46 bottles of beer on the wall +46 bottles of beer +Take one down, pass it around +45 bottles of beer on the wall + +45 bottles of beer on the wall +45 bottles of beer +Take one down, pass it around +44 bottles of beer on the wall + +44 bottles of beer on the wall +44 bottles of beer +Take one down, pass it around +43 bottles of beer on the wall + +43 bottles of beer on the wall +43 bottles of beer +Take one down, pass it around +42 bottles of beer on the wall + +42 bottles of beer on the wall +42 bottles of beer +Take one down, pass it around +41 bottles of beer on the wall + +41 bottles of beer on the wall +41 bottles of beer +Take one down, pass it around +40 bottles of beer on the wall + +40 bottles of beer on the wall +40 bottles of beer +Take one down, pass it around +39 bottles of beer on the wall + +39 bottles of beer on the wall +39 bottles of beer +Take one down, pass it around +38 bottles of beer on the wall + +38 bottles of beer on the wall +38 bottles of beer +Take one down, pass it around +37 bottles of beer on the wall + +37 bottles of beer on the wall +37 bottles of beer +Take one down, pass it around +36 bottles of beer on the wall + +36 bottles of beer on the wall +36 bottles of beer +Take one down, pass it around +35 bottles of beer on the wall + +35 bottles of beer on the wall +35 bottles of beer +Take one down, pass it around +34 bottles of beer on the wall + +34 bottles of beer on the wall +34 bottles of beer +Take one down, pass it around +33 bottles of beer on the wall + +33 bottles of beer on the wall +33 bottles of beer +Take one down, pass it around +32 bottles of beer on the wall + +32 bottles of beer on the wall +32 bottles of beer +Take one down, pass it around +31 bottles of beer on the wall + +31 bottles of beer on the wall +31 bottles of beer +Take one down, pass it around +30 bottles of beer on the wall + +30 bottles of beer on the wall +30 bottles of beer +Take one down, pass it around +29 bottles of beer on the wall + +29 bottles of beer on the wall +29 bottles of beer +Take one down, pass it around +28 bottles of beer on the wall + +28 bottles of beer on the wall +28 bottles of beer +Take one down, pass it around +27 bottles of beer on the wall + +27 bottles of beer on the wall +27 bottles of beer +Take one down, pass it around +26 bottles of beer on the wall + +26 bottles of beer on the wall +26 bottles of beer +Take one down, pass it around +25 bottles of beer on the wall + +25 bottles of beer on the wall +25 bottles of beer +Take one down, pass it around +24 bottles of beer on the wall + +24 bottles of beer on the wall +24 bottles of beer +Take one down, pass it around +23 bottles of beer on the wall + +23 bottles of beer on the wall +23 bottles of beer +Take one down, pass it around +22 bottles of beer on the wall + +22 bottles of beer on the wall +22 bottles of beer +Take one down, pass it around +21 bottles of beer on the wall + +21 bottles of beer on the wall +21 bottles of beer +Take one down, pass it around +20 bottles of beer on the wall + +20 bottles of beer on the wall +20 bottles of beer +Take one down, pass it around +19 bottles of beer on the wall + +19 bottles of beer on the wall +19 bottles of beer +Take one down, pass it around +18 bottles of beer on the wall + +18 bottles of beer on the wall +18 bottles of beer +Take one down, pass it around +17 bottles of beer on the wall + +17 bottles of beer on the wall +17 bottles of beer +Take one down, pass it around +16 bottles of beer on the wall + +16 bottles of beer on the wall +16 bottles of beer +Take one down, pass it around +15 bottles of beer on the wall + +15 bottles of beer on the wall +15 bottles of beer +Take one down, pass it around +14 bottles of beer on the wall + +14 bottles of beer on the wall +14 bottles of beer +Take one down, pass it around +13 bottles of beer on the wall + +13 bottles of beer on the wall +13 bottles of beer +Take one down, pass it around +12 bottles of beer on the wall + +12 bottles of beer on the wall +12 bottles of beer +Take one down, pass it around +11 bottles of beer on the wall + +11 bottles of beer on the wall +11 bottles of beer +Take one down, pass it around +10 bottles of beer on the wall + +10 bottles of beer on the wall +10 bottles of beer +Take one down, pass it around +9 bottles of beer on the wall + +9 bottles of beer on the wall +9 bottles of beer +Take one down, pass it around +8 bottles of beer on the wall + +8 bottles of beer on the wall +8 bottles of beer +Take one down, pass it around +7 bottles of beer on the wall + +7 bottles of beer on the wall +7 bottles of beer +Take one down, pass it around +6 bottles of beer on the wall + +6 bottles of beer on the wall +6 bottles of beer +Take one down, pass it around +5 bottles of beer on the wall + +5 bottles of beer on the wall +5 bottles of beer +Take one down, pass it around +4 bottles of beer on the wall + +4 bottles of beer on the wall +4 bottles of beer +Take one down, pass it around +3 bottles of beer on the wall + +3 bottles of beer on the wall +3 bottles of beer +Take one down, pass it around +2 bottles of beer on the wall + +2 bottles of beer on the wall +2 bottles of beer +Take one down, pass it around +1 bottles of beer on the wall + +1 bottles of beer on the wall +1 bottles of beer +Take one down, pass it around +0 bottles of beer on the wall + diff --git a/tests/sav/caesar_cipher.res b/tests/sav/caesar_cipher.res new file mode 100644 index 0000000..b8e2662 --- /dev/null +++ b/tests/sav/caesar_cipher.res @@ -0,0 +1,4 @@ +Caesar cypher key: 31 +plain text: Batman's hood is called a "cowl" (old meaning). +cyphered: Gfyrfs'x mtti nx hfqqji f "htbq" (tqi rjfsnsl). +uncyphered: Batman's hood is called a "cowl" (old meaning). diff --git a/tests/sav/callback_chimpanze.res b/tests/sav/callback_chimpanze.res deleted file mode 100644 index d677751..0000000 --- a/tests/sav/callback_chimpanze.res +++ /dev/null @@ -1,2 +0,0 @@ -Hum, I'm sleeping ... -Hey, I'm awake. diff --git a/tests/sav/catalan_numbers.res b/tests/sav/catalan_numbers.res new file mode 100644 index 0000000..e54bab4 --- /dev/null +++ b/tests/sav/catalan_numbers.res @@ -0,0 +1,10 @@ +0 = 1 +1 = 1 +2 = 2 +3 = 5 +4 = 14 +5 = 42 +6 = 132 +7 = 429 +8 = 1430 +9 = 4862 diff --git a/tests/sav/count_the_coins.res b/tests/sav/count_the_coins.res new file mode 100644 index 0000000..605ef7f --- /dev/null +++ b/tests/sav/count_the_coins.res @@ -0,0 +1,2 @@ +242 +13398445413854501 diff --git a/tests/sav/factorial.res b/tests/sav/factorial.res new file mode 100644 index 0000000..52bd8e4 --- /dev/null +++ b/tests/sav/factorial.res @@ -0,0 +1 @@ +120 diff --git a/tests/sav/first_letter_last_letter.res b/tests/sav/first_letter_last_letter.res new file mode 100644 index 0000000..4fef812 --- /dev/null +++ b/tests/sav/first_letter_last_letter.res @@ -0,0 +1,23 @@ +machamp +petilil +landorus +scrafty +yamask +kricketune +emboar +registeel +loudred +darmanitan +nosepass +simisear +relicanth +heatmor +rufflet +trapinch +haxorus +seaking +girafarig +gabite +exeggcute +emolga +audino diff --git a/tests/sav/here_document.res b/tests/sav/here_document.res new file mode 100644 index 0000000..a81dca1 --- /dev/null +++ b/tests/sav/here_document.res @@ -0,0 +1,6 @@ +A here document (or "heredoc") is a way of specifying a text block, +preserving the line breaks, +indentation and other whitespace within the text. + +Nit borrows the triple-quoted string syntax from Python. + diff --git a/tests/sav/median.res b/tests/sav/median.res new file mode 100644 index 0000000..c9c70e0 --- /dev/null +++ b/tests/sav/median.res @@ -0,0 +1,4 @@ +null +4.0 +3.5 +2.1 diff --git a/tests/sav/nitce/base_dead_code_alt1.res b/tests/sav/nitce/base_dead_code_alt1.res new file mode 100644 index 0000000..4248087 --- /dev/null +++ b/tests/sav/nitce/base_dead_code_alt1.res @@ -0,0 +1,6 @@ +alt/base_dead_code_alt1.nit:23,3: Warning: expression is not null, since it is a `Array[Int]`. +alt/base_dead_code_alt1.nit:34,10--21: Warning: expression is already a `String`. +Runtime error: Cast failed. Expected `String`, got `Array` (alt/base_dead_code_alt1.nit:22) +0 +1 +1 diff --git a/tests/sav/niti/ballz_android.res b/tests/sav/niti/ballz_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/ballz_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/complete_simple_android.res b/tests/sav/niti/complete_simple_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/complete_simple_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/dino_android.res b/tests/sav/niti/dino_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/dino_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/error_annot_pkgconfig_alt1.res b/tests/sav/niti/error_annot_pkgconfig_alt1.res deleted file mode 100644 index e69de29..0000000 diff --git a/tests/sav/niti/error_annot_pkgconfig_alt2.res b/tests/sav/niti/error_annot_pkgconfig_alt2.res deleted file mode 100644 index e69de29..0000000 diff --git a/tests/sav/niti/error_annot_pkgconfig_alt3.res b/tests/sav/niti/error_annot_pkgconfig_alt3.res deleted file mode 100644 index e69de29..0000000 diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args1.res b/tests/sav/niti/fixme/neo_doxygen_dump_args1.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args1.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args2.res b/tests/sav/niti/fixme/neo_doxygen_dump_args2.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args2.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args3.res b/tests/sav/niti/fixme/neo_doxygen_dump_args3.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args3.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args4.res b/tests/sav/niti/fixme/neo_doxygen_dump_args4.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args4.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args5.res b/tests/sav/niti/fixme/neo_doxygen_dump_args5.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args5.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args6.res b/tests/sav/niti/fixme/neo_doxygen_dump_args6.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args6.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args7.res b/tests/sav/niti/fixme/neo_doxygen_dump_args7.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args7.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args8.res b/tests/sav/niti/fixme/neo_doxygen_dump_args8.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args8.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/neo_doxygen_dump_args9.res b/tests/sav/niti/fixme/neo_doxygen_dump_args9.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/neo_doxygen_dump_args9.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/nitdoc_args4.res b/tests/sav/niti/fixme/nitdoc_args4.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/nitdoc_args4.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/nitiwiki_args1.res b/tests/sav/niti/fixme/nitiwiki_args1.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/nitiwiki_args1.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/nitiwiki_args2.res b/tests/sav/niti/fixme/nitiwiki_args2.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/nitiwiki_args2.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_binary.res b/tests/sav/niti/fixme/test_binary.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_binary.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_binary_alt1.res b/tests/sav/niti/fixme/test_binary_alt1.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_binary_alt1.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_binary_alt2.res b/tests/sav/niti/fixme/test_binary_alt2.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_binary_alt2.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_binary_alt3.res b/tests/sav/niti/fixme/test_binary_alt3.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_binary_alt3.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_c.res b/tests/sav/niti/fixme/test_c.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_c.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_jvm.res b/tests/sav/niti/fixme/test_jvm.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_jvm.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_jvm_alt1.res b/tests/sav/niti/fixme/test_jvm_alt1.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_jvm_alt1.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_jvm_alt2.res b/tests/sav/niti/fixme/test_jvm_alt2.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_jvm_alt2.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_jvm_alt3.res b/tests/sav/niti/fixme/test_jvm_alt3.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_jvm_alt3.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/fixme/test_jvm_alt4.res b/tests/sav/niti/fixme/test_jvm_alt4.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/niti/fixme/test_jvm_alt4.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/niti/moles_android.res b/tests/sav/niti/moles_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/moles_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/shoot_android.res b/tests/sav/niti/shoot_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/shoot_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/simple_android.res b/tests/sav/niti/simple_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/simple_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/niti/test_platform_android.res b/tests/sav/niti/test_platform_android.res new file mode 100644 index 0000000..123fbb3 --- /dev/null +++ b/tests/sav/niti/test_platform_android.res @@ -0,0 +1 @@ +../lib/android/platform.nit:18,20--37: Error: target platform `android` unknown. diff --git a/tests/sav/nitiwiki_args1.res b/tests/sav/nitiwiki_args1.res index 3f5641d..3ed880e 100644 --- a/tests/sav/nitiwiki_args1.res +++ b/tests/sav/nitiwiki_args1.res @@ -5,6 +5,6 @@ url: http://localhost/ There is modified files: + pages - + /pages/index.md + + pages/index.md Use nitiwiki --render to render modified files diff --git a/tests/sav/nitpick_args1.res b/tests/sav/nitpick_args1.res index 38f9166..b229364 100644 --- a/tests/sav/nitpick_args1.res +++ b/tests/sav/nitpick_args1.res @@ -1,7 +1,7 @@ ../lib/standard/bytes.nit:51,7--19: Documentation warning: Undocumented property `with_capacity` ../lib/standard/bytes.nit:164,6--13: Documentation warning: Undocumented property `to_bytes` ../lib/standard/stream.nit:425,6--17: Documentation warning: Undocumented property `buffer_reset` -../lib/standard/file.nit:444,6--19: Documentation warning: Undocumented property `read_all_bytes` +../lib/standard/file.nit:445,6--19: Documentation warning: Undocumented property `read_all_bytes` test_advice_repeated_types.nit:36,15--20: Warning: useless type repetition on redefined attribute `_a` test_advice_repeated_types.nit:37,18--20: Warning: useless type repetition on parameter `b1` for redefined method `b` test_advice_repeated_types.nit:38,18--20: Warning: useless type repetition on parameter `c1` for redefined method `c` diff --git a/tests/sav/perfect_numbers.res b/tests/sav/perfect_numbers.res new file mode 100644 index 0000000..27ba77d --- /dev/null +++ b/tests/sav/perfect_numbers.res @@ -0,0 +1 @@ +true diff --git a/tests/sav/pernicious_numbers.res b/tests/sav/pernicious_numbers.res new file mode 100644 index 0000000..aa4ba41 --- /dev/null +++ b/tests/sav/pernicious_numbers.res @@ -0,0 +1,31 @@ +3 +5 +6 +7 +9 +10 +11 +12 +13 +14 +17 +18 +19 +20 +21 +22 +24 +25 +26 +28 +31 +33 +34 +35 +36 +888888877 +888888878 +888888880 +888888883 +888888885 +888888886 diff --git a/tests/sav/pick_random.res b/tests/sav/pick_random.res new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/tests/sav/pick_random.res @@ -0,0 +1 @@ +9 diff --git a/tests/sav/semordnilap.res b/tests/sav/semordnilap.res new file mode 100644 index 0000000..36b477f --- /dev/null +++ b/tests/sav/semordnilap.res @@ -0,0 +1 @@ +Usage: ./semordnilap file diff --git a/tests/sav/semordnilap_args1.res b/tests/sav/semordnilap_args1.res new file mode 100644 index 0000000..b4613ba --- /dev/null +++ b/tests/sav/semordnilap_args1.res @@ -0,0 +1,6 @@ +Found 158 semordnilaps in ../examples/rosettacode/unixdict.txt +able: elba +abut: tuba +ac: ca +ah: ha +al: la diff --git a/tests/sav/symmetric_difference.res b/tests/sav/symmetric_difference.res new file mode 100644 index 0000000..f275766 --- /dev/null +++ b/tests/sav/symmetric_difference.res @@ -0,0 +1,4 @@ +Set A: John, Serena, Bob, Mary, Serena +Set B: Jim, Mary, John, Jim, Bob +Symmetric difference: Jim, Serena +Symmetric difference: Jim, Serena diff --git a/tests/sav/test_binariesop.res b/tests/sav/test_binariesop.res index d4bc55f..fc9141f 100644 --- a/tests/sav/test_binariesop.res +++ b/tests/sav/test_binariesop.res @@ -1,6 +1,22 @@ 5 5 0 +5 +5 +0 +0 +5 +5 0 5 5 +-1 +-1 +0x05 +0x05 +0x00 +0x05 +0x05 +0x00 +0xfa +0xfa diff --git a/tests/sav/test_string_long.res b/tests/sav/test_string_long.res index 21373ff..46d2ce4 100644 --- a/tests/sav/test_string_long.res +++ b/tests/sav/test_string_long.res @@ -1998,8003 +1998,3 @@ Bonjour ! Bonjour ! Bonjour ! Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! diff --git a/tests/sav/test_string_long_alt1.res b/tests/sav/test_string_long_alt1.res index 21373ff..46d2ce4 100644 --- a/tests/sav/test_string_long_alt1.res +++ b/tests/sav/test_string_long_alt1.res @@ -1998,8003 +1998,3 @@ Bonjour ! Bonjour ! Bonjour ! Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! -Bonjour ! diff --git a/tests/sav/visualize_a_tree.res b/tests/sav/visualize_a_tree.res new file mode 100644 index 0000000..ec6dc94 --- /dev/null +++ b/tests/sav/visualize_a_tree.res @@ -0,0 +1,7 @@ +a +|--ab +| `--abc +`--ac + `--acd +b +`--bc diff --git a/tests/sav/zigzag_matrix.res b/tests/sav/zigzag_matrix.res new file mode 100644 index 0000000..3264ff7 --- /dev/null +++ b/tests/sav/zigzag_matrix.res @@ -0,0 +1,10 @@ +0 1 5 6 14 15 27 28 44 45 +2 4 7 13 16 26 29 43 46 63 +3 8 12 17 25 30 42 47 62 64 +9 11 18 24 31 41 48 61 65 78 +10 19 23 32 40 49 60 66 77 79 +20 22 33 39 50 59 67 76 80 89 +21 34 38 51 58 68 75 81 88 90 +35 37 52 57 69 74 82 87 91 96 +36 53 56 70 73 83 86 92 95 97 +54 55 71 72 84 85 93 94 98 99 diff --git a/tests/search_tests_git.sh b/tests/search_tests_git.sh index 6568463..2cf05ab 100755 --- a/tests/search_tests_git.sh +++ b/tests/search_tests_git.sh @@ -30,7 +30,7 @@ err=0 moretests="base_compile.nit base_attr.nit base_gen.nit base_gen_reassign.nit" # Get the modified files -git diff --name-only $from..$to -- "../*.nit" "*.res" > git_search_tests.out +git diff --name-only $from..$to -- "../*.nit" "*.res" | grep -v zzz_test > git_search_tests.out # filter it trough ./search_tests.sh ./search_tests.sh $moretests `cat git_search_tests.out` 2> /dev/null | sort -u diff --git a/tests/semordnilap.args b/tests/semordnilap.args new file mode 100644 index 0000000..e2e2bb4 --- /dev/null +++ b/tests/semordnilap.args @@ -0,0 +1 @@ +../examples/rosettacode/unixdict.txt diff --git a/tests/test_binariesop.nit b/tests/test_binariesop.nit index 3e78914..3661e49 100644 --- a/tests/test_binariesop.nit +++ b/tests/test_binariesop.nit @@ -4,10 +4,32 @@ var b = 5 print a.bin_and(b) # 5 print a.bin_or(b) # 5 print a.bin_xor(b) # 0 +print a & b +print a | b +print a ^ b a = 0 b = 5 print a.bin_and(b) # 0 print a.bin_or(b) # 5 -print a.bin_xor(b) # 5 \ No newline at end of file +print a.bin_xor(b) # 5 +print a & b +print a | b +print a ^ b + +print a.bin_not +print ~a + +var c = 5u8 +var d = 5u8 + +print c.bin_and(d) # 0 +print c.bin_or(d) # 5 +print c.bin_xor(d) # 5 +print c & d +print c | d +print c ^ d + +print c.bin_not +print ~c diff --git a/tests/test_string_long.nit b/tests/test_string_long.nit index 55588e7..3eef039 100644 --- a/tests/test_string_long.nit +++ b/tests/test_string_long.nit @@ -24,7 +24,7 @@ var r2: Buffer = new FlatBuffer #alt1 r2 = new RopeBuffer var i = 0 -while i < 5000 do +while i < 1000 do var j = 0 while j < s.length do r.add(s.chars[j]) diff --git a/tests/tests.sh b/tests/tests.sh index 95c06f5..99ec314 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -37,6 +37,25 @@ shopt -u nullglob outdir="out" compdir="nit_compile" +# User CPU time limit (in seconds) +# Is used to avoid to CPU intensive test (infinite loops). See ulimit -t +usertimelimit=600 # 1 CPU minute + +# Real-time limit (in seconds) +# Is used to avoid waiting or sleeping tests. +# Require timeout or timelimit, or else is not used. +realtimelimit=300 # 5 min + +# User limit for write files (in kilo-bytes) +# Is used to avoid execution that loop and fill the hard drive. See ulimit -f +# Note that a test might require a lot of temporary disk space (eg. nitc+gcc) +filelimit=100000 # ~100MB + +# Limit (in bytes) for generated .res file. +# Larger ones are truncated and will fail tests +# Is used to avoid processing huge crappy res file (diff, xml, etc) +reslimit=100000 # ~100KB + usage() { e=`basename "$0"` @@ -70,6 +89,9 @@ saferun() *) stop=true esac done + ( + ulimit -f "$filelimit" + ulimit -t "$usertimelimit" if test -d "$1"; then find $1 | sort elif test -n "$TIME"; then @@ -78,6 +100,7 @@ saferun() if test -n "$a"; then echo 0 >> "$o"; else echo 0 > "$o"; fi $TIMEOUT "$@" fi + ) } # Output a timestamp attribute for XML, or an empty line @@ -95,9 +118,9 @@ timestamp() # Detect a working timeout if sh -c "timelimit echo" 1>/dev/null 2>&1; then - TIMEOUT="timelimit -t 600" + TIMEOUT="timelimit -t $realtimelimit" elif sh -c "timeout 1 echo" 1>/dev/null 2>&1; then - TIMEOUT="timeout 600s" + TIMEOUT="timeout ${realtimelimit}s" else echo "No timelimit or timeout command detected. Tests may hang :(" fi @@ -172,6 +195,15 @@ function process_result() OLD="" LIST="" FIRST="" + + # Truncate too big res file + size=$(wc -c < "$outdir/$pattern.res") + if test -n "$reslimit" -a "$size" -gt "$reslimit"; then + # The most portable way to truncate a file is with Perl + perl -e "truncate \"$outdir/$pattern.res\", $reslimit;" + echo "***TRUNCATED***" >> "$outdir/$pattern.res" + fi + echo >>$xml "" #for sav in "sav/$engine/fixme/$pattern.res" "sav/$engine/$pattern.res" "sav/fixme/$pattern.res" "sav/$pattern.res" "sav/$pattern.sav"; do for savdir in $savdirs; do diff --git a/tests/zzz_tests/zzz_test_filelimit.nit b/tests/zzz_tests/zzz_test_filelimit.nit new file mode 100644 index 0000000..02d7075 --- /dev/null +++ b/tests/zzz_tests/zzz_test_filelimit.nit @@ -0,0 +1,16 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +var f = new FileWriter.open("spam.out") +loop f.write("SPAM\n") diff --git a/tests/zzz_tests/zzz_test_realtimelimit.nit b/tests/zzz_tests/zzz_test_realtimelimit.nit new file mode 100644 index 0000000..f8b03dc --- /dev/null +++ b/tests/zzz_tests/zzz_test_realtimelimit.nit @@ -0,0 +1,15 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +system("sleep 1h") diff --git a/tests/zzz_tests/zzz_test_reslimit.nit b/tests/zzz_tests/zzz_test_reslimit.nit new file mode 100644 index 0000000..ce4682e --- /dev/null +++ b/tests/zzz_tests/zzz_test_reslimit.nit @@ -0,0 +1,15 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +loop print "SPAM" diff --git a/tests/zzz_tests/zzz_test_usertimelimit.nit b/tests/zzz_tests/zzz_test_usertimelimit.nit new file mode 100644 index 0000000..efe8d05 --- /dev/null +++ b/tests/zzz_tests/zzz_test_usertimelimit.nit @@ -0,0 +1,16 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +loop +end