Say "Hello" to the world in ASCII art Challenge: Produce the following output using as few chars as possible:

 _   _      _ _                             _     _ _
| | | | ___| | | ___    __      _____  _ __| | __| | |
| |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` | |
|  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |_|
|_| |_|\___|_|_|\___( )   \_/\_/ \___/|_|  |_|\__,_(_)
                    |/


Rules and restrictions:


You may not use FIGLet or any similar tools.  (Otherwise, figlet Hello, world! would be a trivial and pretty much unbeatable solution.)
Your program must consist entirely of printable ASCII characters &mdash; specifically, code points 9 (TAB), 10 (LF) and 32 &ndash; 126.  (If your language / OS requires CRLF line breaks, you may use those instead of plain LFs.)  Yes, this regrettably disqualifies any language that requires non-ASCII characters (or non-textual data) as part of its syntax.
The output must look exactly like the example above.  You may, however, include extra whitespace around the output if you want.  You may assume 8-character tab spacing (or your chosen platform's native default setting, if it has a consistent one).


Ps. To set the par, I came up with a 199-char Perl solution.  I won't post it yet, though, in case someone comes up with it independently.  (Also, it's kind of cheesy.)  Of course, this shouldn't discourage you from posting your own solution, even if it's longer.



Update: Now that han has beaten it by one char, here's my cheesy 199-char Perl solution:

use Compress'Zlib;say uncompress unpack u,'M&gt;-I]BT$*`S$,`^]YQ=R:0,&amp;_Z&lt;DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y&gt;6M=L\L%DMP&amp;DB0V.4GQL&amp;OOGB$4:%`4TT4!R8O-Z(^BTZWNV?&gt;F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'


It's very similar to D C's solution (and all the other zlib/gzip-based solutions in various languages), except that I used uuencoding instead of base64 for the compressed text and a few other minor golfing tricks.



Update 2: I think it's time to officially accept a winner.  The first place goes to konsolenfreddy's PHP code, since, however you count the chars, it is the shortest submitted so far.  In fact, combining it with the optimized DEFLATE stream from my 199-char Perl code yields an even shorter 176-char solution:

&lt;?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));


However, I do think that han deserves a special honorary mention for getting so close without using any pre-written decompression tools.  Congratulations to both of you, and a happy new year to everyone!
Perl 5.10 - 195 198 202 203 characters

Here's an entry that does not require any libraries beyond basic regexp matching.  The encoded string is 131 characters, and the code to decode and print it takes up 64 characters (assuming no newline at the end of the source).  The idea is to represent common 3-character strings by lower case letters.

s!!xfefxxf\t\t\tf efyx
no| cnocfxefxceyxm|xmn
nm|wtnwtgt/uvy \\| 'ym|w`o|
pepyy/o| _ogrr/ _opn (ml
l lbyly|by( )fiihyjm lb,y_
\t\tf |/!;s!\w!substr'(_)\___   \_/|_| |  V \ / _',-95+ord$&amp;,3!eg;say


The encoder is a lot longer and unfortunately not very readable right now.  The basic idea is to use dynamic programming to find the shortest encoding for each line, given a fixed set of string substitutions.  The string of substitutions on the last line was built by trial and error, and it is possible that another string of substitutions might lead to a shorter program than above.

One trick here is that some substitutions are shorter than 3 characters long: due to the way perl substr works, x is replaced by ' _' and y by '_'.  The latter is necessary because \w in the regex matches '_', which is then replaced by '(_)'.