Content-Type: multipart/related; start=<op.mhtml.1239280416337.9a1176527f40698d@10.0.0.2>; boundary=----------bmBzMKKIPG0lL1eoOrzfQF
Content-Location: http://www.digitalmars.com/d/2.0/dll.html
Subject: =?utf-8?Q?Writing=20Win32=20DLLs=20-=20D=20Programming=20Language=202.0=20-=20Digital=20Mars?=
MIME-Version: 1.0

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=dll.html
Content-Type: text/html; charset=utf-8; name=dll.html
Content-Id: <op.mhtml.1239280416337.9a1176527f40698d@10.0.0.2>
Content-Location: http://www.digitalmars.com/d/2.0/dll.html
Content-Transfer-Encoding: 8bit


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<!--
	Copyright (c) 1999-2009 by Digital Mars
	All Rights Reserved Written by Walter Bright
	http://www.digitalmars.com
  -->

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="keywords" content="D programming language" />
<meta name="description" content="D Programming Language" />
<title>Writing Win32 DLLs - D Programming Language 2.0 - Digital Mars</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
<link rel="shortcut icon" href="favicon.ico" />
</head>

<body>
<div id="heading">
	<a href="http://www.digitalmars.com/"><img src="dmlogo.gif" width="270" height="53" style="border-style:none" alt="www.digitalmars.com" align="left"></a>
	<p align="right">D Programming Language 2.0</p>
	<br>

	<div id="headingNav">
	<ul>	<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/DLLs" title="Read/write comments and feedback"><img src="wiki.png" border=0 alt="D Wiki"> Wiki</a></li>
	<li><a href="index.html" title="D Programming Language" class="dlink">&nbsp;<img src="d.png" border=0 alt="D Programming Language">&nbsp;</a></li>
	<li><a href="http://www.digitalmars.com/advancedsearch.html" title="Search Digital Mars web site"><img src="search.png" border=0 alt="Search">Search</a></li>
	<li><a href="http://www.digitalmars.com/d/download.html" title="download D"><img src="download.png" border=0 alt="Download">Downloads</a></li>
	<li><a href="http://www.digitalmars.com/" title="www.digitalmars.com"><img src="home.png" border=0 alt="digitalmars.com">Home</a></li>
	</ul>
	</div>

	<div id="lastupdate">Last update Wed Apr  1 14:37:06 2009
</div>
</div>

<!-- Generated by Ddoc from dll.dd -->



<div id="navigation">
  
<div class="navblock">
<form method="get" action="http://www.google.com/search">
<div id="searchbox">
<input id="q" name="q" size="10" value="Search" onFocus='if(this.value == "Search"){this.value="";}'>
<input type="hidden" id="domains" name="domains" value="www.digitalmars.com">
<input type="hidden" id="sitesearch" name="sitesearch" value="www.digitalmars.com/d/2.0">
<input type="hidden" id="sourceid" name="sourceid" value="google-search">
<input type="submit" id="submit" name="submit" value="Go">
</div>
</form>
<div id="toctop">
    <ul>	<li><a href="index.html" title="D Programming Language">D &rarr;</a></li>
	<li><a href="lex.html" title="D Language Specification">Language &rarr;</a></li>
	<li><a href="phobos/phobos.html" title="D Runtime Library">Phobos &rarr;</a></li>
	<li><a href="comparison.html" title="Language Comparisons">Comparisons &rarr;</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language 1.0">D 1.0 &rarr;</a></li>
    </ul>
</div>
</div>

  
    <div class="navblock">
	<ul>		<li><a href="overview.html" title="D language overview">Overview</a></li>

		<li><a href="windows.html" title="D implementation for 32 bit Windows systems">D for Win32</a></li>

		<li><a href="dll.html" title="Writing 32 bit Windows DLLs in D">Win32 DLLs in D</a></li>

		<li><a href="COM.html" title="Windows COM Programming">COM Programming</a></li>

		<li><a href="htomodule.html" title="converting C .h header files to D modules">C .h to D Modules</a></li>

		<li><a href="faq.html" title="Frequently Asked Questions">FAQ</a></li>

		<li><a href="const-faq.html" title="Frequently Asked Questions about const">const(FAQ)</a></li>

		<li><a href="dstyle.html" title="Recommended programming style conventions">Style Guide</a></li>

		<li><a href="wc.html" title="wc - the wordcount program">Example: wc</a></li>

		<li><a href="future.html" title="Future directions">Future</a></li>

		<li><a href="changelog.html" title="History of changes to D">D Change Log</a></li>

		<li><a href="features2.html" title="Language changes for D 2.0">2.0 Features</a></li>

		<li><a href="http://www.digitalmars.com/techtips/index.html" title="Programming tips">Tech Tips</a></li>

		<li><a href="rationale.html" title="Answers to questions about D design decisions">Rationale</a></li>

		<li><a href="warnings.html" title="Explanation of D compiler generated warning messages">Warnings</a></li>

		<li><a href="http://d.puremagic.com/issues/" title="D issue and bug tracking system">Issues &amp; Bugs</a></li>

	</ul>
    </div>

    <div class="navblock">
	<h2>Articles</h2>
	<ul>		<li><a href="hijack.html" title="Function Hijacking Mitigation">Hijacking</a></li>

		<li><a href="const3.html" title="Const and Immutable">Const</a></li>

		<li><a href="memory.html" title="Memory management techniques in D">Memory Management</a></li>

		<li><a href="exception-safe.html" title="Exception safe programming techniques">Exception Safety</a></li>

		<li><a href="templates-revisited.html" title="D takes a fresh look at template design">Templates Revisited</a></li>

		<li><a href="regular-expression.html" title="Programming with regular expressions">Regular Expressions</a></li>

		<li><a href="lazy-evaluation.html" title="Lazy evaluation of function arguments">Lazy Evaluation</a></li>

		<li><a href="variadic-function-templates.html" title="Variadic arguments to templates">Variadic Templates</a></li>

		<li><a href="tuple.html" title="What tuples are and how to use them">Tuples</a></li>

		<li><a href="mixin.html" title="String mixins compile string literals into D programs">Mixins</a></li>

		<li><a href="safed.html" title="SafeD - The Safe Subset of D">SafeD</a></li>

	</ul>
    </div>

    <div class="navblock">
	<h2>Tools</h2>
	<ul>		<li><a href="dmd-linux.html" title="dmd - the Digital Mars D compiler">DMD D Compiler (Linux)</a></li>

		<li><a href="dmd-osx.html" title="dmd - the Digital Mars D compiler">DMD D Compiler (Mac OSX)</a></li>

		<li><a href="dmd-windows.html" title="dmd - the Digital Mars D compiler">DMD D Compiler (Windows)</a></li>

		<li><a href="http://dgcc.sourceforge.net/" title="gdc - the Gnu D compiler">GDC D Compiler</a></li>

		<li><a href="http://www.digitalmars.com/ctg/optlink.html" title="Optlink - the Digital Mars Linker">Linker</a></li>

		<li><a href="http://www.digitalmars.com/ctg/trace.html" title="DMD's builtin code profiling tool">Profiler</a></li>

		<li><a href="code_coverage.html" title="DMD's builtin code coverage analysis tool">Code Coverage</a></li>

		<li><a href="rdmd.html" title="rdmd - run D programs as if they were scripts">DMD Script Shell</a></li>

		<li><a href="windbg.html" title="windbg - debugging Windows programs">Windows Debugger</a></li>

		<li><a href="htod.html" title="htod - mechanically convert C .h header files to D">C .h to D .d</a></li>

		<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport" title="Editors with support for D">Editors</a></li>

		<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?ReferenceForTools" title="Even more tools for D">More Tools</a></li>

	</ul>
    </div>

    <div class="navblock">
	<h2>Community</h2>
	<ul>		<li><a href="http://d.puremagic.com/conference2008/" title="D Programming Language Conference">D Conference</a></li>

		<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?FrontPage" title="Wiki for the D Programming Language">D Wiki</a></li>

		
		<li><a href="http://www.digitalmars.com/NewsGroup.html" title="How to connect to D newsgroups">News</a></li>

		<li><a href="http://www.digitalmars.com/webnews/newsgroups.php?search_txt=&group=digitalmars.D
" title="Forum for general D topics">D forum</a></li>

		<li><a href="http://www.digitalmars.com/webnews/newsgroups.php?search_txt=&group=digitalmars.D.announce
" title="Forum for D announcements">Announcements</a></li>

		<li><a href="http://www.digitalmars.com/webnews/newsgroups.php?search_txt=&group=digitalmars.D.learn
" title="Forum for learning D">Learn</a></li>

		<li><a href="http://www.digitalmars.com/webnews/newsgroups.php?search_txt=&group=digitalmars.D.debugger
" title="Forum for D debuggers">Debugging</a></li>

		<li><a href="http://www.digitalmars.com/d/dlinks.html" title="External D related links">D links</a></li>

	</ul>
    </div>

    <div class="navblock">
	<h2>Archives</h2>
	<ul>		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/index.html">digitalmars.D</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/dtl/index.html">digitalmars.D.dtl</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/announce/index.html">digitalmars.D.announce</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/dwt/index.html">digitalmars.D.dwt</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/learn/index.html">digitalmars.D.learn</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/bugs/index.html">digitalmars.D.bugs</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/digitalmars/D/debugger/index.html">digitalmars.D.debugger</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/D/gnu/index.html">D.gnu</a></li>
		<li><a href="http://www.digitalmars.com/d/archives/index.html">Old D</a></li>
	</ul>
    </div>

    <div class="navblock">
	<h2>Appendices</h2>
	<ul>		<li><a href="glossary.html" title="D acronyms and jargon explained">Glossary</a></li>

		<li><a href="ascii-table.html" title="Handy ascii chart">Ascii Table</a></li>

		<li><a href="acknowledgements.html" title="Thank-you to these people who have helped with D">Acknowledgements</a></li>

	</ul>
    </div>

    
<script src="http://www.gmodules.com/ig/ifr?url=http://www.google.com/ig/modules/translatemypage.xml&up_source_language=en&w=160&h=60&title=&border=&output=js"></script>


    

    <p><center><script src="http://slashdot.org/slashdot-it.js" type="text/javascript"></script></center></p>

</div>
<div id="content">
  <h1>        Writing Win32 DLLs in D</h1>
  
	<p>DLLs (Dynamic Link Libraries) are one of the foundations
	of system programming for Windows. The D programming
	language enables the creation of several different types of
	DLLs.
	</p>

	<p>For background information on what DLLs are and how they work
	Chapter 11 of Jeffrey Richter's book
	<a href="http://www.amazon.com/exec/obidos/ASIN/1572315482/classicempire">
	Advanced Windows</a> is indispensible.
	</p>

	<p>This guide will show how to create DLLs of various types with D.</p>

	<ul>
	<li><a href="#Cinterface">DLLs with a C interface</a></li>
	<li><a href="#com">DLLs that are COM servers</a></li>
	<li><a href="#Dcode">D code calling D code in DLLs</a></li>
	</ul>

<h2><a name="Cinterface">DLLs with a C Interface</a></h2>

	<p>A DLL presenting a C interface can connect to any other code
	in a language that supports calling C functions in a DLL.
	</p>

	<p>DLLs can be created in D in roughly the same way as in C.
	A <tt>DllMain()</tt>
	is required, looking like:
	</p>

<pre class="d_code"><span class="d_keyword">import</span> core.runtime;
<span class="d_keyword">import</span> std.c.windows.windows;
HINSTANCE g_hInst;

<span class="d_keyword">extern</span> (Windows)
BOOL <b>DllMain</b>(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
    <span class="d_keyword">switch</span> (ulReason)
    {
	<span class="d_keyword">case</span> DLL_PROCESS_ATTACH:
	    Runtime.initialize();
	    <span class="d_keyword">break</span>;

	<span class="d_keyword">case</span> DLL_PROCESS_DETACH:
	    Runtime.terminate();
	    <span class="d_keyword">break</span>;

	<span class="d_keyword">case</span> DLL_THREAD_ATTACH:
	<span class="d_keyword">case</span> DLL_THREAD_DETACH:
	    <span class="d_comment">// Multiple threads not supported yet
</span>	    <span class="d_keyword">return</span> <span class="d_keyword">false</span>;
    }
    g_hInst=hInstance;
    <span class="d_keyword">return</span> <span class="d_keyword">true</span>;
}
</pre>

	<p>Notes:</p>
	<ul>
	<li>The presence of <tt>DllMain()</tt> is recognized by the compiler
		causing it to emit a reference to
		<a href="http://www.digitalmars.com/ctg/acrtused.html">__acrtused_dll</a>
		and the <tt>phobos.lib</tt> runtime library.</li>
	</ul>

	Link with a .def
	(<a href="http://www.digitalmars.com/ctg/ctgDefFiles.html">Module Definition File</a>)
	along the lines of:

<pre class="moddeffile">LIBRARY         MYDLL
DESCRIPTION     'My DLL written in D'

EXETYPE		NT
CODE            PRELOAD DISCARDABLE
DATA            PRELOAD SINGLE

EXPORTS
		DllGetClassObject       @2
		DllCanUnloadNow         @3
		DllRegisterServer       @4
		DllUnregisterServer     @5
</pre>


	<p>The functions in the EXPORTS list are for illustration.
	Replace them with the actual exported functions from MYDLL.
	Alternatively, use
	<a href="http://www.digitalmars.com/ctg/implib.html">implib</a>.
	Here's an example of a simple DLL with a function print()
	which prints a string:
	</p>

	<h4>mydll2.d:</h4>
<pre class="d_code"><span class="d_keyword">module</span> mydll;
<span class="d_keyword">export</span> <span class="d_keyword">void</span> dllprint() { printf(<span class="d_string">"hello dll world\n"</span>); }
</pre>

	<p>Note: We use <tt>printf</tt>s in these examples
	instead of <tt>writefln</tt>
	to make the examples as
	simple as possible.</p>

	<h4>mydll.def:</h4>

<pre class="moddeffile">LIBRARY "mydll.dll"
EXETYPE NT
SUBSYSTEM WINDOWS
CODE SHARED EXECUTE
DATA WRITE
</pre>


	<p>Put the code above that contains <tt>DllMain()</tt> into a file
	<tt>dll.d</tt>.
	Compile and link the dll with the following command:
	</p>

<pre class="console">C:&gt;dmd -ofmydll.dll mydll2.d dll.d mydll.def
C:&gt;implib/system mydll.lib mydll.dll
C:&gt;
</pre>

	<p>which will create mydll.dll and mydll.lib.
	Now for a program, test.d, which will use the dll:
	</p>

	<h4>test.d:</h4>
<pre class="d_code"><span class="d_keyword">import</span> mydll;

<span class="d_keyword">int</span> main()
{
   mydll.dllprint();
   <span class="d_keyword">return</span> 0;
}
</pre>

	<p>Create a clone of mydll2.d that doesn't have the function bodies:</p>

	<h4>mydll.d:</h4>
<pre class="d_code"><span class="d_keyword">export</span> <span class="d_keyword">void</span> dllprint();
</pre>

	Compile and link with the command:

<pre class="console">C:&gt;dmd test.d mydll.lib
C:&gt;
</pre>

	and run:
<pre class="console">C:&gt;test
hello dll world
C:&gt;
</pre>



<h3>Memory Allocation</h3>

	<p>D DLLs use garbage collected memory management. The question is what
	happens when pointers to allocated data cross DLL boundaries?
	If the DLL presents a C interface, one would assume the reason
	for that is to connect with code written in other languages.
	Those other languages will not know anything about D's memory
	management. Thus, the C interface will have to shield the
	DLL's callers from needing to know anything about it.
	</p>

	<p>There are many approaches to solving this problem:</p>

	<ul>

	<li>Do not return pointers to D gc allocated memory to the caller of
	the DLL. Instead, have the caller allocate a buffer, and have the DLL
	fill in that buffer.</li>

	<li>Retain a pointer to the data within the D DLL so the GC will not free
	it. Establish a protocol where the caller informs the D DLL when it is
	safe to free the data.</li>

	<li>Use operating system primitives like VirtualAlloc() to allocate
	memory to be transferred between DLLs.</li>

	<li>Use std.c.stdlib.malloc() (or another non-gc allocator) when
	allocating data to be returned to the caller. Export a function
	that will be used by the caller to free the data.</li>

	</ul>

<h2><a name="com">COM Programming</a></h2>

	Many Windows API interfaces are in terms of COM (Common Object Model)
	objects (also called OLE or ActiveX objects). A COM object is an object
	who's first field is a pointer to a vtbl[], and the first 3 entries
	in that vtbl[] are for QueryInterface(), AddRef(), and Release().
	<p>

	For understanding COM, Kraig Brockshmidt's
	<a href="http://www.amazon.com/exec/obidos/ASIN/1556158432/classicempire">
	Inside OLE</a>
	is an indispensible resource.
	<p>

	COM objects are analogous to D interfaces. Any COM object can be
	expressed as a D interface, and every D object with an interface X
	can be exposed as a COM object X.
	This means that D is compatible with COM objects implemented
	in other languages.
	<p>

	While not strictly necessary, the Phobos library provides an Object
	useful as a super class for all D COM objects, called ComObject.
	ComObject provides a default implementation for
	QueryInterface(), AddRef(), and Release().
	<p>

	Windows COM objects use the Windows calling convention, which is not
	the default for D, so COM functions need to have the attribute
	extern (Windows).

	So, to write a COM object:

<pre class="d_code"><span class="d_keyword">import</span> std.c.windows.com;

<span class="d_keyword">class</span> MyCOMobject : ComObject
{
    <span class="d_keyword">extern</span> (Windows):
	...
}
</pre>

	The sample code includes an example COM client program and server DLL.

<h2><a name="Dcode">D code calling D code in DLLs</a></h2>

	Having DLLs in D be able to talk to each other as if they
	were statically linked together is, of course, very desirable
	as code between applications can be shared, and different
	DLLs can be independently developed.
	<p>

	The underlying difficulty is what to do about garbage collection (gc).
	Each EXE and DLL will have their own gc instance. While
	these gc's can coexist without stepping on each other,
	it's redundant and inefficient to have multiple gc's running.
	The idea explored here is to pick one gc and have the DLLs
	redirect their gc's to use that one. The one gc used here will be
	the one in the EXE file, although it's also possible to make a
	separate DLL just for the gc.
	<p>

	The example will show both how to statically load a DLL, and
	to dynamically load/unload it.
	<p>

	Starting with the code for the DLL, mydll.d:
<pre class="d_code"><span class="d_comment">/*
 * MyDll demonstration of how to write D DLLs.
 */</span>

<span class="d_keyword">import</span> core.runtime;
<span class="d_keyword">import</span> std.c.stdio;
<span class="d_keyword">import</span> std.c.stdlib;
<span class="d_keyword">import</span> std.string;
<span class="d_keyword">import</span> std.c.windows.windows;

HINSTANCE   g_hInst;

<span class="d_keyword">extern</span> (C)
{
    <span class="d_keyword">void</span>  gc_setProxy(<span class="d_keyword">void</span>* p);
    <span class="d_keyword">void</span>  gc_clrProxy();
}

<span class="d_keyword">extern</span> (Windows)
    BOOL <b>DllMain</b>(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
    <span class="d_keyword">switch</span> (ulReason)
    {
        <span class="d_keyword">case</span> DLL_PROCESS_ATTACH:
	    printf(<span class="d_string">"DLL_PROCESS_ATTACH\n"</span>);
	    Runtime.initialize();
	    <span class="d_keyword">break</span>;

        <span class="d_keyword">case</span> DLL_PROCESS_DETACH:
	    printf(<span class="d_string">"DLL_PROCESS_DETACH\n"</span>);
	    Runtime.terminate();
	    <span class="d_keyword">break</span>;

        <span class="d_keyword">case</span> DLL_THREAD_ATTACH:
	    printf(<span class="d_string">"DLL_THREAD_ATTACH\n"</span>);
	    <span class="d_keyword">return</span> <span class="d_keyword">false</span>;

        <span class="d_keyword">case</span> DLL_THREAD_DETACH:
	    printf(<span class="d_string">"DLL_THREAD_DETACH\n"</span>);
	    <span class="d_keyword">return</span> <span class="d_keyword">false</span>;
    }
    g_hInst = hInstance;
    <span class="d_keyword">return</span> <span class="d_keyword">true</span>;
}

<span class="d_keyword">export</span> <span class="d_keyword">void</span> <b>MyDLL_Initialize</b>(<span class="d_keyword">void</span>* gc)
{
    printf(<span class="d_string">"MyDLL_Initialize()\n"</span>);
    gc_setProxy(gc);
}

<span class="d_keyword">export</span> <span class="d_keyword">void</span> <b>MyDLL_Terminate</b>()
{
    printf(<span class="d_string">"MyDLL_Terminate()\n"</span>);
    gc_clrProxy();
}

<b><span class="d_keyword">static</span> <span class="d_keyword">this</span></b>()
{
    printf(<span class="d_string">"static this for mydll\n"</span>);
}

<b><span class="d_keyword">static</span> ~<span class="d_keyword">this</span></b>()
{
    printf(<span class="d_string">"static ~this for mydll\n"</span>);
}

<span class="d_comment">/* --------------------------------------------------------- */</span>

<span class="d_keyword">class</span> <b>MyClass</b>
{
    <span class="d_keyword">char</span>[] <b>concat</b>(<span class="d_keyword">char</span>[] a, <span class="d_keyword">char</span>[] b)
    {
	<span class="d_keyword">return</span> a ~ <span class="d_string">" "</span> ~ b;
    }

    <span class="d_keyword">void</span> <b>free</b>(<span class="d_keyword">char</span>[] s)
    {
	<span class="d_keyword">delete</span> s;
    }
}

<span class="d_keyword">export</span> MyClass <b>getMyClass</b>()
{
    <span class="d_keyword">return</span> <span class="d_keyword">new</span> MyClass();
}
</pre>

	<dl>
	<dt><b>DllMain</b>
	<dd>This is the main entry point for any D DLL. It gets called
	by the C startup code
	(for DMC++, the source is <tt>\dm\src\win32\dllstart.c</tt>).
	The <b>printf</b>'s are placed there so one can trace how it gets
	called.
	Notice that the initialization and termination code seen in
	the earlier DllMain sample code is in this version as well.
	This is because the same DLL should be usable from both C and
	D programs, so the same initialization process should work
	for both.
	<p>

	<dt><b>MyDLL_Initialize</b>
	<dd>
	When the DLL is dynamically linked via <b>Runtime.loadLibrary</b>()
	the runtime makes sure that any initialization steps required
	by the D program are executed after the library is loaded.  If
	the library is statically linked, this routine is not called by
	the program, so to make sure the DLL is initialized properly we
	have to do some of the work ourselves.  And because the library
	is being statically linked, we need a function specific to this
	DLL to perform the initialization.
	This function takes one argument, a handle to the
	caller's gc. We'll see how that handle is obtained later.
	To pass this handle to the runtime and override the DLL's built-in
	gc we'll call <b>gc_setProxy</b>().
	The function is <b>export</b>ed as that is how a function is made
	visible outside of a DLL.
	<p>

	<dt><b>MyDLL_Terminate</b>
	<dd>Correspondingly, this function terminates the DLL, and is
	called prior to unloading it.
	It has only one job: informing the runtime that the DLL will
	no longer be using the caller's gc via <b>gc_clrProxy</b>().
	This is critical, as the DLL will be unmapped from memory,
	and if the gc continues to scan its data areas it will cause
	segment faults.
	<p>

	<dt><b>static this, static ~this</b>
	<dd>These are examples of the module's static constructor
	and destructor,
	here with a print in each to verify that they are running
	and when.
	<p>

	<dt><b>MyClass</b>
	<dd>This is an example of a class that can be exported from
	and used by the caller of a DLL. The <b>concat</b> member
	function allocates some gc memory, and <b>free</b> frees gc
	memory.
	<p>

	<dt><b>getMyClass</b>
	<dd>An exported factory that allocates an instance of <b>MyClass</b>
	and returns a reference to it.
	<p>

	</dl>

	To build the <tt>mydll.dll</tt> DLL:

	<ol>
	<li><b><tt>dmd -c mydll -g</tt></b>
	<br>Compiles <tt>mydll.d</tt> into <tt>mydll.obj</tt>.
	<b>-g</b> turns on debug info generation.
	</li>

	<li><b><tt>dmd mydll.obj mydll.def -g -L/map</tt></b>
	<br>Links <tt>mydll.obj</tt> into a DLL named <tt>mydll.dll</tt>.
	<tt>mydll.def</tt> is the
	<a href="http://www.digitalmars.com/ctg/ctgDefFiles.html">Module Definition File</a>,
	and has the contents:

<pre class="moddeffile">LIBRARY         MYDLL
DESCRIPTION     'MyDll demonstration DLL'
EXETYPE		NT
CODE            PRELOAD DISCARDABLE
DATA            PRELOAD SINGLE
</pre>

	<b>-g</b> turns on debug info generation, and
	<b>-L/map</b> generates a map file <tt>mydll.map</tt>.
	</li>

	<li><b><tt>implib /noi /system mydll.lib mydll.dll</tt></b>
	<br>Creates an
	<a href="http://www.digitalmars.com/ctg/implib.html">import library</a>
	<tt>mydll.lib</tt> suitable
	for linking in with an application that will be statically
	loading <tt>mydll.dll</tt>.
	</li>

	</ol>

	<p>Here's <tt>test.d</tt>, a sample application that makes use of
	<tt>mydll.dll</tt>. There are two versions, one statically binds to
	the DLL, and the other dynamically loads it.
	</p>

<pre class="d_code"><span class="d_keyword">import</span> core.runtime;
<span class="d_keyword">import</span> std.stdio;
<span class="d_keyword">import</span> std.gc;

<span class="d_keyword">import</span> mydll;

<span class="d_comment">//version=DYNAMIC_LOAD;
</span>
<span class="d_keyword">version</span> (DYNAMIC_LOAD)
{
    <span class="d_keyword">import</span> std.c.windows.windows;

    <span class="d_keyword">alias</span> MyClass <span class="d_keyword">function</span>() getMyClass_fp;

    <span class="d_keyword">int</span> main()
    {   HMODULE h;
        FARPROC fp;

        getMyClass_fp getMyClass;
        MyClass c;

        printf(<span class="d_string">"Start Dynamic Link...\n"</span>);

        h = <span class="d_keyword">cast</span>(HMODULE) Runtime.loadLibrary(<span class="d_string">"mydll.dll"</span>);
        <span class="d_keyword">if</span> (h <span class="d_keyword">is</span> <span class="d_keyword">null</span>)
        {
            printf(<span class="d_string">"error loading mydll.dll\n"</span>);
            <span class="d_keyword">return</span> 1;
        }

        fp = GetProcAddress(h, <span class="d_string">"D5mydll10getMyClassFZC5mydll7MyClass"</span>);
        <span class="d_keyword">if</span> (fp <span class="d_keyword">is</span> <span class="d_keyword">null</span>)
        {   printf(<span class="d_string">"error loading symbol getMyClass()\n"</span>);
            <span class="d_keyword">return</span> 1;
        }

        getMyClass = <span class="d_keyword">cast</span>(getMyClass_fp) fp;
        c = (*getMyClass)();
        foo(c);

        <span class="d_keyword">if</span> (!Runtime.unloadLibrary(h))
        {   printf(<span class="d_string">"error freeing mydll.dll\n"</span>);
            <span class="d_keyword">return</span> 1;
        }

        printf(<span class="d_string">"End...\n"</span>);
        <span class="d_keyword">return</span> 0;
    }
}
<span class="d_keyword">else</span>
{   <span class="d_comment">// static link the DLL
</span>    <span class="d_keyword">extern</span> (C)
    {
        <span class="d_keyword">void</span>* gc_getProxy();
    }

    <span class="d_keyword">int</span> main()
    {
	printf(<span class="d_string">"Start Static Link...\n"</span>);
	MyDLL_Initialize(gc_getProxy());
	foo(getMyClass());
	MyDLL_Terminate();
	printf(<span class="d_string">"End...\n"</span>);
	<span class="d_keyword">return</span> 0;
    }
}

<span class="d_keyword">void</span> foo(MyClass c)
{
    <span class="d_keyword">char</span>[] s;

    s = c.concat(<span class="d_string">"Hello"</span>, <span class="d_string">"world!"</span>);
    writefln(s);
    c.free(s);
    <span class="d_keyword">delete</span> c;
}
</pre>

	<p>Let's start with the statically linked version, which is simpler.
	It's compiled and linked with the command:
	</p>

<pre class="console">C:&gt;dmd test mydll.lib -g
</pre>

	<p>Note how it is linked with <tt>mydll.lib</tt>, the import library
	for <tt>mydll.dll</tt>.
	The code is straightforward, it initializes <tt>mydll.lib</tt> with
	a call to <b>MyDLL_Initialize</b>(), passing the handle
	to <tt>test.exe</tt>'s gc.
	Then, we can use the DLL and call its functions just as if
	it were part of <tt>test.exe</tt>. In <b>foo</b>(), gc memory
	is allocated and freed both by <tt>test.exe</tt> and <tt>mydll.dll</tt>.
	When we're done using the DLL, it is terminated with
	<b>MyDLL_Terminate</b>().
	</p>

	<p>Running it looks like this:</p>

<pre class="console">C:&gt;test
DLL_PROCESS_ATTACH
Start Static Link...
MyDLL_Initialize()
static this for mydll
Hello world!
MyDLL_Terminate()
static ~this for mydll
End...
C:&gt;
</pre>

	<p>The dynamically linked version is a little harder to set up.
	Compile and link it with the command:
	</p>

<pre class="console">C:&gt;dmd test -version=DYNAMIC_LOAD -g
</pre>
	<p>The import library <tt>mydll.lib</tt> is not needed.
	The DLL is loaded with a call to
	<b>Runtime.loadLibrary</b>(),
	and each exported function has to be retrieved via
	a call to
	<b>GetProcAddress</b>().
	An easy way to get the decorated name to pass to <b>GetProcAddress</b>()
	is to copy and paste it from the generated <tt>mydll.map</tt> file
	under the <b>Export</b> heading.
	Once this is done, we can use the member functions of the
	DLL classes as if they were part of <tt>test.exe</tt>.
	When done, release the DLL with
	<b>Runtime.unloadLibrary</b>().
	</p>

	<p>Running it looks like this:</p>

<pre class="console">C:&gt;test
Start Dynamic Link...
DLL_PROCESS_ATTACH
static this for mydll
Hello world!
static ~this for mydll
DLL_PROCESS_DETACH
End...
C:&gt;
</pre>


  
<br><br>
<br><br>
<!-- Google ad -->
<script type="text/javascript"><!--
/**/google_ad_client = "pub-5628673096434613";
/**/google_ad_width = 728;
/**/google_ad_height = 90;
/**/google_ad_format = "728x90_as";
/**/google_ad_channel ="3651639259";
/**/google_page_url = document.location;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</div>




<div id="copyright">

Copyright &copy; 1999-2009 by Digital Mars &reg;, All Rights Reserved
 |
Page generated by <a href="http://www.digitalmars.com/d/2.0/ddoc.html">Ddoc</a>. |
<a href="http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/DLLs" title="Read/write comments and feedback">Comments</a>
</div>

</body>
</html>


------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=style.css
Content-Type: text/css; charset=utf-8; name=style.css
Content-Location: http://www.digitalmars.com/d/2.0/style.css
Content-Transfer-Encoding: 8bit

body
{
	background: #F4F9FF;
	color: black;
}

body, td, th
{
	font-family: Verdana, sans-serif;
	font-size: 10pt;
}

h1, h2, h3, h4, h5, h6
{
	font-family: "Trebuchet MS", sans-serif;
}

h1
{
	font-size: 22pt;
	font-weight: normal;
	text-align: center;
	text-decoration: underline;
}

h3
{
	font-size: 15pt;
	font-weight: normal;
}

form
{
	margin: 0;
}

blockquote
{
	font-size: smaller;
	/*font-style: italic;*/
	margin-left: 0;
	margin-right: 0;
}
blockquote, .quote
{
	font-family: "courier new", courier, serif;
	font-family: "Georgia", courier, serif;
	background: #DEDEDE url("quote.gif") no-repeat top right;
	margin: 0.5em;
	padding: 0.5em;
	padding-left: 1em;
	padding-top: 1em;
}

caption
{
	padding: 0 0 10px;
	font: bold 120% Arial, sans-serif;
}

pre
{
	border: 2px solid #cccccc;
	background: #e7e7e7;
	padding: 1ex;
	margin-left: 3em;
	color: #000066;
	/*min-width: 600px;*/
}

dd
{
	padding: 1ex;
	margin-left: 3em;
	margin-bottom: 1em;
}


.d_decl { /* Big D declaration */
        font-family: "Bitstream Vera Sans Mono", "Courier New", monospace;
        font-size: 105%;
        font-weight: bold;
        text-align: left;
        padding: 2pt;
}

/* These are different kinds of <pre> sections */
.bnf {	/* grammar */
	background-color: #fefefe;
	color: #000066;
}

.ddoccode {
	background-color: #dedede;
	color: #000066;
}

.console { /* command line console */
	background-color: #f7f7f7;
	color: #181818;
}

.moddeffile { /* module definition file */
	background-color: #efeffe;
	color: #010199;
}

.scini { /* sc.ini configuration file */
	background-color: #feeffe;
	color: #111199;
}

.d_code { /* D code */
	background-color: #e7e7e8;
	color: #000066;
}

.d_code2 { /* D code */
	background-color: #e7e7e8;
	color: #000066;
	min-width: 10px;
	margin-left: 0em;
}

.ccode { /* C code */
	background-color: #eeddee;
	color: #000066;
}

.cppcode { /* C++ code */
	background-color: #efddef;
	color: #000066;
}

.cppcode2 { /* C++ code */
	background-color: #efddef;
	color: #000066;
	min-width: 10px;
	margin-left: 0em;
}

.PostingBody { /* newsgroup posting */
	border: 0;
	margin: 0;
	background-color: #ddeded;
	color: #000066;
	margin-left: 0em;
	min-width: 300px;
}
.PostingQuote { /* quote inside newsgroup posting */
	border: 1px solid #666666;
	font-size: 90%;
	background-color: #cceded;
	color: #000022;
	margin-left: 0em;
	min-width: 300px;
}


/* Elements of D source code text */
.d_comment { color: green; }
.d_string { color: red; }
.d_keyword { color: blue; }
.d_psymbol { text-decoration: underline; }
.d_param { font-style: italic; }


div#heading
{
	border-bottom: 2px solid black;
	padding-bottom: 1ex;
}
div#lastupdate
{
	clear: left;
	font-size: smaller;
	font-style: italic;
}

div#headingNav
{
	padding-bottom: 4px;
}
div#headingNav ul
{
	list-style: none;
	padding: 0;
	margin: 0;
	margin-bottom: 1px;
	padding-bottom: 2ex;
}
div#headingNav li
{
	display: block;
	float: right;
	padding-right: 1ex;
}
div#headingNav a
{
	text-decoration: none;
	display:block;
	background-color: #c6c8eb;
	color:black;
	border-top: 1px solid #dddddd;
	border-right: 1px solid #000000;
	border-bottom: 2px solid #000000;
	border-left: 1px solid #dddddd;
	padding: 3px 12px 3px 8px;
/*
	padding: 0;
	margin: 0;
	height:0;
*/
}
div#headingNav a:hover
{
	background-color: #ddddff;
	border-top: 1px solid #000000;
	border-left: 1px solid #000000;
}

div#searchbox
{
	padding-top: 3px;
	text-align:center;
}

div#toctop
{
	font-size: larger;
	text-align:center;
}

div#Posting
{
	border: 2px solid #cccccc;
	margin-bottom: 1em;
}
div#PostingHeading
{
	font-weight: bold;
	font-size: larger;
	background-color: #dddddd;
}
div#PostingHeading a
{
	text-decoration: none;
}
div#PostingFooting
{
	font-size: smaller;
	background-color: #dddddd;
}
div#PostingTOC
{
	font-size: smaller;
}
div#PostingTOC li
{
	margin-left: 1em;
	/*border-width: 1;*/
}

/* For table based layout */
td.toc
{
	background-color:#eeeeee;
	border-left: 1px solid black;
	border-right: 1px solid black;
}
.toc h2
{
	font-size: 120%;
	margin-bottom: 0px;
}
.toc ul
{
	list-style-type: none;
	margin-top: 0px;
	margin-left: 1ex;
	margin-right: 1ex;
	margin-bottom: 1ex;
	padding:0;
}

/* For CSS based layout */
div#navigation
{
	font-size: 0.8em;
	float: left;
	width: 15em;
	/*background-color:#eeeeee;*/
	/*border-right: 1px solid black;*/
	padding-top: 1em;
}
.navblock
{
	background-color:#c6c8eb;
	border: 1px solid black;
	margin-top: 0;
	margin-bottom: 1ex;
	padding-top: 3px;
	padding-left: 3px;
}
.navblock h2
{
	font-size: 120%;
	padding-top: 0px;
	margin-top: 0;
	margin-bottom: 0px;
}
div#navigation ul
{
	list-style-type: none;
	margin-top: 0px;
	margin-left: 1ex;
	margin-right: 1ex;
	margin-bottom: 1ex;
	padding:0;
}
div#navigation li
{
	margin:0;
	padding: 3px 0 3px 8px;
}
div#navigation a
{
	text-decoration: none;
	display:block;
	margin: 0;
	background-color: #c6c8eb;
	color: black;
	/*
	border-top: 1px solid #dddddd;
	border-right: 1px solid #333333;
	border-bottom: 1px solid #333333;
	border-left: 1px solid #dddddd;
	*/
}
div#navigation a:hover
{
	background-color: #ddddff;
}
/*
div#navigation a:active
{
	padding: 2px 13px 4px 7px;
	background-color: #444444;
	color: #eeeeee;
	border-top: 1px solid #333333;
	border-right: 1px solid #dddddd;
	border-bottom: 1px solid #dddddd;
	border-left: 1px solid #333333;
	height:0;
}
*/


div#content
{
	line-height: 1.4em;
	margin-left: 13em;
	margin-right: 1.5em;
	/*border-left: 1px solid black;*/
	padding-top: 1em;
	padding-left: 1em;
	text-align: justify;
}

div#content li
{
	padding-bottom: 0.5ex;
}

div#copyright
{
	clear:both;
	border-top: 2px solid black;
	font-size: smaller;
	margin-bottom: 2ex;
	margin-top: 1px;
	padding-top: 3px;
}


/* These are for the changelogs */
div#version
{
	border-top: 1px solid black;
	font-size: 0.9em;
	padding-top: 2ex;
}
div#version li
{
	padding-bottom: 0.3ex;
}
div#bugsfixed
{
}
div#whatsnew
{
}


/* These are for comparison.html */
table.comp { /* "comparison with D": table */
  background-color:#f0f0f0;
}
td.compNo {  /* comparison with D: "NO" */
  background-color:red;
  text-align:center;
}
td.compYes {  /* comparison with D: "YES" */
  background-color:#00FF00;
  text-align:center;
}


------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=print.css
Content-Type: text/css; charset=utf-8; name=print.css
Content-Location: http://www.digitalmars.com/d/2.0/print.css
Content-Transfer-Encoding: 8bit

body, td, th
{
	font-family: serif;
	font-size: 1em;
}

h1, h2, h3, h4, h5, h6
{
	font-family: Georgia, serif;
}

h3
{
	font-weight: bold;
}

#heading, #navigation
{
	display: none;
}

div#content
{
	margin-left: 1.5em;
}

div#copyright
{
	border: none;
}

#copyright-navigation
{
	display: none;
}
------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=favicon.ico
Content-Type: image/x-icon; name=favicon.ico
Content-Location: http://www.digitalmars.com/d/2.0/favicon.ico
Content-Transfer-Encoding: Base64

AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AmZmZmZmZ///5mZn/mZmf//+Z
n///mZn//5mf///5mf//mZ////mZn/+Zn////5mf/5mf////mZn/mZ////+Zmf+Z
n////5mZ/5mf////mZn/mZ////+Zn/+Zn///+Zmf/5mf///5mf//mZ///5mZ//mZ
mf+ZmZ//mZmZmZmZ//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=dmlogo.gif
Content-Type: image/gif; name=dmlogo.gif
Content-Location: http://www.digitalmars.com/d/2.0/dmlogo.gif
Content-Transfer-Encoding: Base64

R0lGODlhDgE1AOfpAAQCBISChERCRLzCvJSOlFROVOwOBOxCHPmqlPFiPPmadOTi
3OxaVOwqFOxCPKyqrCQiHPSCXPRxVPSCfMzMzPy2lOQuLPRWPPRybPymfOzy7PSg
lOsiHPWObPBSLGxtbBQSDPzTvCwyLPR7VPFaPPeqpOw2JPeyrOxyTPzDrPiahPr6
9OoeDPRqROwqJJyenPuylPRuZNTW1PSWbHV2dOxFLPzu5PSJbPm2pOw6LPqmjPim
pPRcNBwZHPBaTPRKPLS2tCQqJPSSfOwmLPTCvAwKDFxeXPeqnPRmTOxmVPR6dPSm
lOwmHPaOdPBSNDQ6NPze1ExOTOwWBPJiRPSifPN2VPRSTPfy9Pu6rPWihNze3IR+
hOxKLPeafOwyHPJ+ZPRcRPz6/O0yJKWmpNzW3Hx+fOzq7Pu+pPiujOxOTPSVjOwa
FIyMjExKTMTKxJSWlPRiVOwqHLSytCwmLPSKZO82LPienBwaFPmypOwmFHx6fPiG
dPQ6NB0eHO5KRPzMvPR+fGxmbFRWVPzLtDw2PPRqZLy+vPzm3OxKJNTS1HRydPSW
fGRmZPSKfPzaxMTCxOQeJCwqLDw6POw+JPR6TPR2ZPR2bAwGDExGTLSutCQiJPBu
XPm2nPFSRPamhHRudBQSFDQ0NOwfFPRqTKSipLy6vBQOFGRiZOkWDOxKNJyanFxa
XOTk5PSEZPzz7PzWxPR9XOxENPSOhPx6dPzu7PzOxPRCJPyynPWWdPRmXPimnO8m
JPR2XPSijPBiXOw2NCQeJPyWhPQiHPSKhAQGBISGhERGRPqulPRmPPReVO1GPOwy
LPaSbPBWLPBePPSupOc6JPq2rPR2TPiehPz+9OwuJPByZNra1Hx6dPm6pO8+LPqq
jPFeTPzGvA0ODPmunPN+dPeSdPBWNPNmRPBWTPX29Py+rPROLPeefPz+/Nza3Ozu
7O0uHPyinPSKdOw+NO9ORMTGxC0uLDw+PCUmJPS6nPRWRPSqhBUWFPJuTOwaDJSS
lFRSVOwuFKyurPSGXCH5BAEKAOsALAAAAAAOATUAAAj+ANcJHEiwoMGDCBMqXMiw
ocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2b
OHPq3Mmzp8+fQIMKHUq0qNGjSJMapDAm04unpF6Q8lcqUUIyD+QkNPPoRbEyNGgE
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
vMzbvM77vMcbEAA7

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=wiki.png
Content-Type: image/png; name=wiki.png
Content-Location: http://www.digitalmars.com/d/2.0/wiki.png
Content-Transfer-Encoding: Base64

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

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=d.png
Content-Type: image/png; name=d.png
Content-Location: http://www.digitalmars.com/d/2.0/d.png
Content-Transfer-Encoding: Base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAA
AAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kDCRUREeDJsGQAAARkSURBVFjD
xZdPSFxXFMZ/d/5ofQ5kUDtOtHUm0LFgQ0ghJkSThVAbQhpaSPpos6ndpavSQnQZ
2p2u2k2TXV0lMLqzkKRCXIiWaldSA9FAnGDsMB2HsZ3MVEff7cI55mY6zryEggce
774/977vfOc7556niOPlAM3DAZtPBuftyLE5kj0AQXQ0i1qpdDYnZ1ErMu6i4WmA
Q4k78cTCKwGYI9kTREfv4a/Ls708RHh2mKQCFKgEoIY4fGuYZK/M+Qf9fhP+FYBz
5KO3yX++aNdrP3q5k8O33IDZA3CS8GyetcEuCi0RvI/CbKwOEZ6R5zk2IoHS+AN4
D2AcOMX20hSoe/hjGYrcRbcCrVOs9SzZdbO1gChThBKGRuiP0DAa4FBCnt2JJxbk
+d8UR8xFTuNN30Ct1eGfk3sZitEAhD5EW2Ear0/HsxNVGZCPAAtddvDpAwrt66VJ
5+3IsfKJb+L7oQ1r5gGF9sfQ/wXOuzZbJ/pQHgsdCpXemwQ+49n3zXZ9+3p886ar
LBDP5cOVKMyiVqbj2Yn1+ObNJ/HNSxZtH30HAYA8KmUeN1BrR3EGm+36q6+UhpUY
KLc78cRCmMbr93GCOUjJsasfUjasHsUZLF/LFQBhoJaqp+PZiRG8D//LKKE+lAdg
keR1VwB+xddpMuCGBYAIDaPz6JYAhMR7OWxYTVLsN9fy7bfQKbaX1kvKf5nCEuBQ
QpNrApUVEBY6lEel+lAYLFyqGQLz48Mke91qYQTvQzP+eVTKTNl6nCOyVk0NDJPs
HSbZa+GL5diImKHZz/zoZfFezgBTaOdjdD7Bzls5NiI1AZhlN0Mxultyi1tuQlGH
f84sTAAiRIAHFNqraiCIjlqlfcHCF/NRDP1IsS8D0TMvoQkBcY+tE+Xrr1cDIF6/
hlo2rz+FJUp7Qa255vU56n57ft/pKKJiVUNwGzp3FeyLmfks92tnw/PYz6NbMhSj
GYrRyyjtqg7Mo1sqeWPedwMiAKFuVFrmDrLztgi1qgY0uonSRDELHdLoLV7SBHQ3
Kn0N3nillsxCh9y+W0TFcpCaQjtmBpjstWHNVAWgUBmTfrOYuC1efSjPFNqRs0Y3
/cJOi7nj/u8M5NiIDOG8LlWwG5UWJsZQFkAY/6RsbB63YnLLQILCQDcqXS5W0/sI
DaM1NbArwhfTqZadtYMXZSwgLqN0Nyr9NU6HeG+2ZzU1IFS6if0nPLs2jlamE+No
dQ19XDYi0/t901A2CtlA+lAhgJ/KUlAEt8QfVxZJxi6gm+YNBhQqc4btvarp0Phl
eXP6QlcsFCYoDNxFt+YgJSGYQjsXICxAxlCWDavDeP4U0Yny7+MEx1CWxPw03vTv
eEYqNaV7AJrt+qvf4lzR6Cah3xzLwpXCJHoxPyoWxj/5DuFv9mvnfOav1Vf8dbx0
2WG801El9B2V2zLvIwf1cxvWzHQ8O/GEBK5+TM7awYsJCgNyXY9zZBPP42pjswnJ
olZOEp5108BWBHAQ9i/9T/8Kje1VDQAAAABJRU5ErkJggg==

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=search.png
Content-Type: image/png; name=search.png
Content-Location: http://www.digitalmars.com/d/2.0/search.png
Content-Transfer-Encoding: Base64

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
s6RrtX8Cd4o1VvVoDKwAAAAASUVORK5CYII=

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=download.png
Content-Type: image/png; name=download.png
Content-Location: http://www.digitalmars.com/d/2.0/download.png
Content-Transfer-Encoding: Base64

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

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=home.png
Content-Type: image/png; name=home.png
Content-Location: http://www.digitalmars.com/d/2.0/home.png
Content-Transfer-Encoding: Base64

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
WhyioQAAAABJRU5ErkJggg==

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=ifr.js
Content-Type: text/javascript; charset=UTF-8; name=ifr.js
Content-Location: http://www.gmodules.com/ig/ifr?url=http://www.google.com/ig/modules/translatemypage.xml&up_source_language=en&w=160&h=60&title=&border=&output=js
Content-Transfer-Encoding: 8bit

/* Copyright 2007 and beyond, Google Inc.  To use gadgets on your own site, visit http://www.google.com/webmasters/gadgets.  To create your own gadgets, visit http://www.google.com/apis/gadgets */(function(){var c=document.bgColor;var r,g,b;if(c.length!=7){r=g=b=1;}else{c=c.substring(1,c.length);r=parseInt(c.substring(0,2),16)/255;g=parseInt(c.substring(2,4),16)/255;b=parseInt(c.substring(4,6),16)/255;}var bgcolor=((r+g+b)/3<0.5)?'ffffff':'0000cc';var c='color:#'+bgcolor+';';var blue='color:#0000cc;';var hover='color:#3366cc;';var visited='color:#551a8b;';var active='color:#ff0000;';var sz9='font-size:9px;';var sz12='font-size:12px;';var underline='text-decoration:underline;';var bold='font-weight:bold;';var misc='font-family:arial,sans-serif;'+'font-variant:normal;'+'font-style:normal;'+'word-spacing:normal;'+'letter-spacing:normal;'+'vertical-align:middle;'+'text-transform:none;'+'text-indent:0;'+'line-height:normal;'+'white-space:normal;';var css='<style>'+'.ig_tbl_img .ig_smbluetext{'+misc+blue+sz9+'}'+'.ig_tbl_img .ig_lgbluetext{'+misc+blue+sz12+'}'+'.ig_tbl_img .ig_smbluelink, .ig_tbl_img .ig_smbluelink:link{'+misc+blue+sz9+underline+'}'+'.ig_tbl_img .ig_lgbluelink, .ig_tbl_img .ig_lgbluelink:link{'+misc+blue+sz12+underline+'}'+'.ig_tbl_line .ig_smbluetext{'+misc+c+sz9+'}'+'.ig_tbl_line .ig_lgbluetext{'+misc+c+sz12+'}'+'.ig_tbl_line .ig_smbluelink, .ig_tbl_line .ig_smbluelink:link{'+misc+c+sz9+underline+'}'+'.ig_tbl_line .ig_lgbluelink, .ig_tbl_line .ig_lgbluelink:link{'+misc+c+sz12+underline+'}'+'.ig_smbluelink:hover{'+misc+hover+sz9+underline+'}'+'.ig_smbluelink:visited{'+misc+visited+sz9+underline+'}'+'.ig_smbluelink:active{'+misc+active+sz9+underline+'}'+'.ig_lgbluelink:hover{'+misc+hover+sz12+underline+'}'+'.ig_lgbluelink:visited{'+misc+visited+sz12+underline+'}'+'.ig_lgbluelink:active{'+misc+active+sz12+underline+'}'+'</style>';var html='\x3cstyle\x3e.ig_tbl_img table,.ig_tbl_img tr,.ig_tbl_img td,.ig_tbl_img a,.ig_tbl_img span,.ig_tbl_line table,.ig_tbl_line tr,.ig_tbl_line td,.ig_tbl_line a,.ig_tbl_line span,ig_reset{margin:0;padding:0;padding-left:0;padding-right:0;border:0;border-collapse:collapse;float:none;clear:none;width:auto;height:auto;background:transparent none;background-position:0%;font-family:arial,sans-serif;font-variant:normal;font-style:normal;word-spacing:normal;letter-spacing:normal;vertical-align:middle;text-transform:none;text-indent:0;line-height:1.0;white-space:normal;top:auto;bottom:auto;}\x3c/style\x3e\x3ctable class\x3d\x22ig_reset ig_tbl_line\x22width\x3d160\x3e\x3ctr\x3e\x3ctd colspan\x3d2 style\x3d\x22vertical-align:bottom;text-align:center;width:100%;\x22\x3e  \x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd style\x3d\x22height:2px;\x22\x3e \x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd colspan\x3d2\x3e\x3ciframe src\x3d\x22http://www.gmodules.com/ig/ifr?url\x3dhttp://www.google.com/ig/modules/translatemypage.xml\x26amp;up_source_language\x3den\x26amp;w\x3d160\x26amp;h\x3d60\x26amp;title\x3d\x26amp;border\x3d\x26amp;source\x3d__LOCATION__\x22 width\x3d160 height\x3d60 style\x3d\x22display:block;overflow:autohidden\x22 frameborder\x3d0 scrolling\x3d\x22no\x22\x3e\x3c/iframe\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd style\x3d\x22text-align:left\x22\x3e\x3c/td\x3e\x3ctd style\x3d\x22text-align:right;vertical-align:middle;height:18px\x22\x3e\x3cdiv id\x3d\x22right_1154496391\x22\x3e\x3ca target\x3d_top style\x3d\x22font-size:10px;color:#0000cc;text-decoration:underline;\x22 href\x3d\x22http://www.google.com/webmasters/gadgets.html\x22\x3e Gadgety\x3c/a\x3e\x3cspan style\x3d\x22font-size:10px;color:#0000cc;\x22\x3e od Google\x3c/span\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e';html=html.replace(/__LOCATION__/g, encodeURIComponent(location.href));document.write(css + html);})();   
------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=slashdot-it.js
Content-Type: application/javascript; name=slashdot-it.js
Content-Location: http://slashdot.org/slashdot-it.js
Content-Transfer-Encoding: Base64

KAogIGZ1bmN0aW9uKCkgewogICAgdmFyIHVybF9hdHRyICAgPSAndXJsPScgICAr
IGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cuc2xhc2hkb3RfdXJsICAgICAgICAg
fHwgd2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgdmFyIHN0eWxlX2F0dHIgPSAn
c3R5bGU9JyArIGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cuc2xhc2hkb3RfYmFk
Z2Vfc3R5bGUgfHwgJ2gwJyk7CiAgICB2YXIgdGl0bGVfYXR0ciA9ICd0aXRsZT0n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5zbGFzaGRvdF90aXRsZSAgICAg
ICB8fCBkb2N1bWVudC50aXRsZSk7CiAgICB2YXIgc3JjX3F1ZXJ5ICA9ICc/JyAr
IFtzdHlsZV9hdHRyLCB1cmxfYXR0ciwgdGl0bGVfYXR0cl0uam9pbignJicpOwoK
ICAgIHZhciBkeD0xMzAsIGR5PTI1OwogICAgaWYgKCAvXnN0eWxlPXYvLnRlc3Qo
c3R5bGVfYXR0cikgKSB7CiAgICAgIGR4PTUyOwogICAgICBkeT04MDsKICAgIH0K
ICAgIAogICAgdmFyIGlmcmFtZSA9ICc8aWZyYW1lIHNyYz0iaHR0cDovL3NsYXNo
ZG90Lm9yZy9zbGFzaGRvdC1pdC5wbCcrc3JjX3F1ZXJ5KyciJyArCiAgICAgICAg
ICAgICAgICAgICcgaGVpZ2h0PSInICsgZHkgKyAnIiB3aWR0aD0iJyArIGR4ICsg
JyIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPicKICAg
IGRvY3VtZW50LndyaXRlKGlmcmFtZSk7CiAgfQopKCkK

------------bmBzMKKIPG0lL1eoOrzfQF
Content-Disposition: inline; filename=show_ads.js
Content-Type: text/javascript; charset=UTF-8; name=show_ads.js
Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js
Content-Transfer-Encoding: Quoted-Printable

(function(){
var g=3Dfalse,i=3Dnull,k=3Dtrue,n=3D(new Date).getTime();var aa=3D{googl=
e_ad_channel:"channel",google_ad_host:"host",google_ad_host_channel:"h_c=
h",google_ad_host_tier_id:"ht_id",google_ad_region:"region",google_ad_se=
ction:"region",google_ad_type:"ad_type",google_adtest:"adtest",google_al=
low_expandable_ads:"ea",google_alternate_ad_url:"alternate_ad_url",googl=
e_alternate_color:"alt_color",google_bid:"bid",google_city:"gcs",google_=
color_bg:"color_bg",google_color_border:"color_border",google_color_line=
:"color_line",google_color_link:"color_link",google_color_text:"color_te=
xt",
google_color_url:"color_url",google_contents:"contents",google_country:"=
gl",google_cust_age:"cust_age",google_cust_ch:"cust_ch",google_cust_gend=
er:"cust_gender",google_cust_id:"cust_id",google_cust_interests:"cust_in=
terests",google_cust_job:"cust_job",google_cust_l:"cust_l",google_cust_l=
h:"cust_lh",google_cust_u_url:"cust_u_url",google_disable_video_autoplay=
:"disable_video_autoplay",google_ed:"ed",google_encoding:"oe",google_fee=
dback:"feedback_link",google_flash_version:"flash",google_font_face:"f",=

google_gl:"gl",google_hints:"hints",google_kw:"kw",google_kw_type:"kw_ty=
pe",google_language:"hl",google_page_url:"url",google_referrer_url:"ref"=
,google_region:"gr",google_reuse_colors:"reuse_colors",google_safe:"adsa=
fe",google_tag_info:"gut",google_targeting:"targeting",google_ui_feature=
s:"ui",google_ui_version:"uiv",google_video_doc_id:"video_doc_id",google=
_video_product_type:"video_product_type"},ba=3D{google_ad_format:"format=
",google_ad_output:"output",google_ad_callback:"callback",google_ad_over=
ride:"google_ad_override",
google_ad_slot:"slotname",google_analytics_uacct:"ga_wpids",google_corre=
lator:"correlator",google_cpa_choice:"cpa_choice",google_ctr_threshold:"=
ctr_t",google_image_size:"image_size",google_last_modified_time:"lmt",go=
ogle_max_num_ads:"num_ads",google_max_radlink_len:"max_radlink_len",goog=
le_num_radlinks:"num_radlinks",google_num_radlinks_per_unit:"num_radlink=
s_per_unit",google_only_ads_with_video:"only_ads_with_video",google_page=
_location:"loc",google_rl_dest_url:"rl_dest_url",google_rl_filtering:"rl=
_filtering",
google_rl_mode:"rl_mode",google_rt:"rt",google_skip:"skip"},ca=3D{google=
_only_pyv_ads:"pyv"};function o(a){return aa[a]||ba[a]||ca[a]||i};docume=
nt.URL&&(document.URL.indexOf("?google_debug")>0||document.URL.indexOf("=
&google_debug")>0);function p(){this.b=3Dthis.p();this.h=3Dg;if(!this.b)=
this.h=3Dthis.j()}p.prototype.f=3D"__gads=3D";p.prototype.c=3D"GoogleAdS=
ervingTest=3D";p.prototype.o=3Dfunction(){return this.b};p.prototype.set=
CookieInfo=3Dfunction(a){this.a=3Da._cookies_[0];if(this.a!=3Di){this.b=3D=
this.a._value_;this.q()}};p.prototype.l=3Dfunction(a){var b=3D(new Date)=
.valueOf(),c=3Dnew Date;c.setTime(b+a);return c};
p.prototype.k=3Dfunction(a){if(!(this.b!=3Di||!this.h)){var b=3D"script"=
,c=3Ddocument.domain,d=3D"http://partner.googleadservices.com/gampad/coo=
kie.js?callback=3D_GA_googleCookieHelper.setCookieInfo&client=3D"+q(a)+"=
&domain=3D"+q(c);document.write("<"+b+' src=3D"'+d+'"></'+b+">")}};p.pro=
totype.j=3Dfunction(){document.cookie=3Dthis.c+"Good";var a=3Dthis.g(thi=
s.c),b=3Da=3D=3D"Good";if(b){var c=3Dthis.l(-1);document.cookie=3Dthis.c=
+"; expires=3D"+c.toGMTString()}return b};p.prototype.p=3Dfunction(){var=
 a=3Dthis.g(this.f);return a};
p.prototype.g=3Dfunction(a){var b=3Ddocument.cookie,c=3Db.indexOf(a),d=3D=
i;if(c!=3D-1){var e=3Dc+a.length,f=3Db.indexOf(";",e);if(f=3D=3D-1)f=3Db=
.length;d=3Db.substring(e,f)}return d};p.prototype.q=3Dfunction(){if(!(t=
his.a=3D=3Di))if(!(this.b=3D=3Di)){var a=3Dnew Date;a.setTime(1000*this.=
a._expires_);var b=3Dthis.a._domain_,c=3Dthis.f+this.b+"; expires=3D"+a.=
toGMTString()+"; path=3D"+this.a._path_+"; domain=3D."+b;document.cookie=
=3Dc}};function r(a,b){var c;return a?(c=3DparseFloat(a))?c:b:b}
function da(a,b){if(a=3D=3D"true")return k;if(a=3D=3D"false")return g;re=
turn b}
function ea(){if(navigator.plugins&&navigator.mimeTypes.length){var a=3D=
navigator.plugins["Shockwave Flash"];if(a&&a.description)return a.descri=
ption.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")}else if(navigat=
or.userAgent&&navigator.userAgent.indexOf("Windows CE")>=3D0){var b=3D3,=
c=3D1;for(;c;)try{c=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash."=
+(b+1));b++}catch(d){c=3Di}return b.toString()}else if(fa()){var c=3Di;t=
ry{c=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(e){var=
 b=3D0;try{c=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
b=3D6;c.AllowScriptAccess=3D"always"}catch(f){if(b=3D=3D6)return b.toStr=
ing()}try{c=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(h=
){}}if(c!=3Di){var b=3Dc.GetVariable("$version").split(" ")[1];return b.=
replace(/,/g,".")}}return"0"};var u=3Dthis,x=3Dfunction(a){var b=3Dtypeo=
f a;if(b=3D=3D"object")if(a){if(a instanceof Array||!(a instanceof Objec=
t)&&Object.prototype.toString.call(a)=3D=3D"[object Array]")return"array=
";if(typeof a.call!=3D"undefined")return"function"}else return"null";els=
e if(b=3D=3D"function"&&typeof a.call=3D=3D"undefined")return"object";re=
turn b};var ga=3Dfunction(a){var b=3Dx(a);return b=3D=3D"array"||b=3D=3D=
"object"&&typeof a.length=3D=3D"number"};
var ha=3Dfunction(a){var b=3Dx(a);return b=3D=3D"object"||b=3D=3D"array"=
||b=3D=3D"function"},ia=3Dfunction(a){var b=3Dx(a);if(b=3D=3D"object"||b=
=3D=3D"array"){if(a.clone)return a.clone.call(a);var c=3Db=3D=3D"array"?=
[]:{};for(var d in a)c[d]=3Dia(a[d]);return c}return a},ja=3DDate.now||f=
unction(){return(new Date).getTime()};var ka=3Dfunction(a,b,c){if(a.forE=
ach)a.forEach(b,c);else if(Array.forEach)Array.forEach(a,b,c);else{var d=
=3Da.length,e=3Dtypeof a=3D=3D"string"?a.split(""):a,f=3D0;for(;f<d;f++)=
f in e&&b.call(c,e[f],f,a)}},la=3Dfunction(a){if(x(a)=3D=3D"array")retur=
n a.concat();else{var b=3D[],c=3D0,d=3Da.length;for(;c<d;c++)b[c]=3Da[c]=
;return b}};var y=3Dfunction(a,b){this.x=3Dtypeof a!=3D"undefined"?a:0;t=
his.y=3Dtypeof b!=3D"undefined"?b:0};y.prototype.clone=3Dfunction(){retu=
rn new y(this.x,this.y)};y.prototype.toString=3Dfunction(){return"("+thi=
s.x+", "+this.y+")"};var z=3Dfunction(a,b){this.width=3Da;this.height=3D=
b};z.prototype.clone=3Dfunction(){return new z(this.width,this.height)};=
z.prototype.toString=3Dfunction(){return"("+this.width+" x "+this.height=
+")"};z.prototype.ceil=3Dfunction(){this.width=3DMath.ceil(this.width);t=
his.height=3DMath.ceil(this.height);return this};z.prototype.floor=3Dfun=
ction(){this.width=3DMath.floor(this.width);this.height=3DMath.floor(thi=
s.height);return this};
z.prototype.round=3Dfunction(){this.width=3DMath.round(this.width);this.=
height=3DMath.round(this.height);return this};z.prototype.scale=3Dfuncti=
on(a){this.width*=3Da;this.height*=3Da;return this};var pa=3Dfunction(a,=
b,c){for(var d in a)b.call(c,a[d],d,a)};var qa=3Dfunction(a){return a.re=
place(/^[\s\xa0]+|[\s\xa0]+$/g,"")},wa=3Dfunction(a,b){if(b)return a.rep=
lace(ra,"&amp;").replace(sa,"&lt;").replace(ta,"&gt;").replace(ua,"&quot=
;");else{if(!va.test(a))return a;if(a.indexOf("&")!=3D-1)a=3Da.replace(r=
a,"&amp;");if(a.indexOf("<")!=3D-1)a=3Da.replace(sa,"&lt;");if(a.indexOf=
(">")!=3D-1)a=3Da.replace(ta,"&gt;");if(a.indexOf('"')!=3D-1)a=3Da.repla=
ce(ua,"&quot;");return a}},ra=3D/&/g,sa=3D/</g,ta=3D/>/g,ua=3D/\"/g,va=3D=
/[&<>\"]/,xa=3Dfunction(a,b){var c=3Db.length,d=3D0;for(;d<c;d++){var e=3D=

c=3D=3D1?b:b.charAt(d);if(a.charAt(0)=3D=3De&&a.charAt(a.length-1)=3D=3D=
e)return a.substring(1,a.length-1)}return a};
var za=3Dfunction(a,b){var c=3D0,d=3Dqa(String(a)).split("."),e=3Dqa(Str=
ing(b)).split("."),f=3DMath.max(d.length,e.length),h=3D0;for(;c=3D=3D0&&=
h<f;h++){var j=3Dd[h]||"",m=3De[h]||"",l=3Dnew RegExp("(\\d*)(\\D*)","g"=
),A=3Dnew RegExp("(\\d*)(\\D*)","g");do{var v=3Dl.exec(j)||["","",""],w=3D=
A.exec(m)||["","",""];if(v[0].length=3D=3D0&&w[0].length=3D=3D0)break;va=
r s=3Dv[1].length=3D=3D0?0:parseInt(v[1],10),G=3Dw[1].length=3D=3D0?0:pa=
rseInt(w[1],10);c=3Dya(s,G)||ya(v[2].length=3D=3D0,w[2].length=3D=3D0)||=
ya(v[2],w[2])}while(c=3D=3D0)}return c},ya=3Dfunction(a,b){if(a<
b)return-1;else if(a>b)return 1;return 0};ja();var B,Aa,C,Ba,Ca,Da,Ea,Fa=
,Ga,Ha=3Dfunction(){return u.navigator?u.navigator.userAgent:i};var Ia=3D=
function(){Da=3DCa=3DBa=3DC=3DAa=3DB=3Dg;var a;if(a=3DHa()){var b=3Du.na=
vigator;B=3Da.indexOf("Opera")=3D=3D0;Aa=3D!B&&a.indexOf("MSIE")!=3D-1;B=
a=3D(C=3D!B&&a.indexOf("WebKit")!=3D-1)&&a.indexOf("Mobile")!=3D-1;Da=3D=
(Ca=3D!B&&!C&&b.product=3D=3D"Gecko")&&b.vendor=3D=3D"Camino"}};Ia();
var D=3DB,E=3DAa,F=3DCa,H=3DC,Ja=3DBa,Ka=3Dfunction(){var a=3Du.navigato=
r;return a&&a.platform||""},La=3DKa(),Ma=3Dfunction(){Ea=3DLa.indexOf("M=
ac")!=3D-1;Fa=3DLa.indexOf("Win")!=3D-1;Ga=3DLa.indexOf("Linux")!=3D-1};=
Ma();var Na=3DEa,Oa=3DFa,Pa=3DGa,Qa=3Dfunction(){var a=3D"",b;if(D&&u.op=
era){var c=3Du.opera.version;a=3Dtypeof c=3D=3D"function"?c():c}else{if(=
F)b=3D/rv\:([^\);]+)(\)|;)/;else if(E)b=3D/MSIE\s+([^\);]+)(\)|;)/;else =
if(H)b=3D/WebKit\/(\S+)/;if(b){var d=3Db.exec(Ha());a=3Dd?d[1]:""}}retur=
n a},Ra=3DQa();
var Sa=3D{},I=3Dfunction(a){return Sa[a]||(Sa[a]=3Dza(Ra,a)>=3D0)};var J=
;var Ta=3Dfunction(a){return a?new K(L(a)):J||(J=3Dnew K)};
var Ua=3Dfunction(a){return typeof a=3D=3D"string"?document.getElementBy=
Id(a):a},Va=3DUa,Xa=3Dfunction(a,b){pa(b,function(c,d){if(d=3D=3D"style"=
)a.style.cssText=3Dc;else if(d=3D=3D"class")a.className=3Dc;else if(d=3D=
=3D"for")a.htmlFor=3Dc;else if(d in Wa)a.setAttribute(Wa[d],c);else a[d]=
=3Dc})},Wa=3D{cellpadding:"cellPadding",cellspacing:"cellSpacing",colspa=
n:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"wid=
th",usemap:"useMap",frameborder:"frameBorder",type:"type"},Ya=3Dfunction=
(a){var b=3Da||u||window,c=3Db.document;
if(H&&!I("500")&&!Ja){if(typeof b.innerHeight=3D=3D"undefined")b=3Dwindo=
w;var d=3Db.innerHeight,e=3Db.document.documentElement.scrollHeight;if(b=
=3D=3Db.top)if(e<d)d-=3D15;return new z(b.innerWidth,d)}var f=3DTa(c),h=3D=
f.e()&&(!D||D&&I("9.50"))?c.documentElement:c.body;return new z(h.client=
Width,h.clientHeight)},Za=3Dfunction(){var a=3DJ||(J=3Dnew K);return a.i=
.apply(a,arguments)},$a=3Dfunction(a,b){a.appendChild(b)},bb=3Dfunction(=
a){return a&&a.parentNode?a.parentNode.removeChild(a):i},eb=3Dfunction(a=
,b){var c=3Db.parentNode;c&&c.replaceChild(a,
b)};
var fb=3DH&&za(Ra,"521")<=3D0,gb=3Dfunction(a,b){if(typeof a.contains!=3D=
"undefined"&&!fb&&b.nodeType=3D=3D1)return a=3D=3Db||a.contains(b);if(ty=
peof a.compareDocumentPosition!=3D"undefined")return a=3D=3Db||Boolean(a=
.compareDocumentPosition(b)&16);for(;b&&a!=3Db;)b=3Db.parentNode;return =
b=3D=3Da},L=3Dfunction(a){return a.nodeType=3D=3D9?a:a.ownerDocument||a.=
document},hb=3Dfunction(a){if(a&&typeof a.length=3D=3D"number")if(ha(a))=
return typeof a.item=3D=3D"function"||typeof a.item=3D=3D"string";else i=
f(x(a)=3D=3D"function")return typeof a.item=3D=3D"function";return g},
K=3Dfunction(a){this.d=3Da||u.document||document};
K.prototype.i=3Dfunction(a,b){if(E&&b&&(b.name||b.type)){var c=3D["<",a]=
;b.name&&c.push(' name=3D"',wa(b.name),'"');if(b.type){c.push(' type=3D"=
',wa(b.type),'"');b=3Dia(b);delete b.type}c.push(">");a=3Dc.join("")}var=
 d=3Dthis.createElement(a);b&&Xa(d,b);if(arguments.length>2){function e(=
j){if(j)this.appendChild(d,typeof j=3D=3D"string"?this.createTextNode(j)=
:j)}var f=3D2;for(;f<arguments.length;f++){var h=3Darguments[f];ga(h)&&!=
(ha(h)&&h.nodeType>0)?ka(hb(h)?la(h):h,e,this):e.call(this,h)}}return d}=
;
K.prototype.createElement=3Dfunction(a){return this.d.createElement(a)};=
K.prototype.createTextNode=3Dfunction(a){return this.d.createTextNode(a)=
};K.prototype.e=3Dfunction(){var a=3Dthis.d;if(a.compatMode)return a.com=
patMode=3D=3D"CSS1Compat";if(H){var b=3Da.createElement("div");b.style.c=
ssText=3D"position:absolute;width:0;height:0;width:1";var c=3Db.style.wi=
dth=3D=3D"1px"?"BackCompat":"CSS1Compat";return(a.compatMode=3Dc)=3D=3D"=
CSS1Compat"}return g};
K.prototype.n=3Dfunction(){var a=3Dthis.d;return!H&&this.e()?a.documentE=
lement:a.body};K.prototype.m=3Dfunction(){var a=3Dthis.n();return new y(=
a.scrollLeft,a.scrollTop)};K.prototype.appendChild=3D$a;K.prototype.remo=
veNode=3Dbb;K.prototype.replaceNode=3Deb;K.prototype.contains=3Dgb;var i=
b,jb,kb,lb,mb,nb,ob=3Dfunction(){nb=3Dmb=3Dlb=3Dkb=3Djb=3Dib=3Dg;var a=3D=
Ha();if(!!a)if(a.indexOf("Firefox")!=3D-1)ib=3Dk;else if(a.indexOf("Cami=
no")!=3D-1)jb=3Dk;else if(a.indexOf("iPhone")!=3D-1||a.indexOf("iPod")!=3D=
-1)kb=3Dk;else if(a.indexOf("Android")!=3D-1)lb=3Dk;else if(a.indexOf("C=
hrome")!=3D-1)mb=3Dk;else if(a.indexOf("Safari")!=3D-1)nb=3Dk};ob();var =
pb=3Dfunction(a,b){var c=3DL(a);if(c.defaultView&&c.defaultView.getCompu=
tedStyle){var d=3Dc.defaultView.getComputedStyle(a,"");if(d)return d[b]}=
return i};var M=3Dfunction(a,b){return pb(a,b)||(a.currentStyle?a.curren=
tStyle[b]:i)||a.style[b]};
var qb=3Dfunction(a){var b;b=3Da?a.nodeType=3D=3D9?a:L(a):document;if(E&=
&!Ta(b).e())return b.body;return b.documentElement},rb=3Dfunction(a){var=
 b=3Da.getBoundingClientRect();if(E){var c=3Da.ownerDocument;b.left-=3Dc=
.documentElement.clientLeft+c.body.clientLeft;b.top-=3Dc.documentElement=
.clientTop+c.body.clientTop}return b},sb=3Dfunction(a){if(E)return a.off=
setParent;var b=3DL(a),c=3DM(a,"position"),d=3Dc=3D=3D"fixed"||c=3D=3D"a=
bsolute",e=3Da.parentNode;for(;e&&e!=3Db;e=3De.parentNode){c=3DM(e,"posi=
tion");d=3Dd&&c=3D=3D"static"&&e!=3Db.documentElement&&
e!=3Db.body;if(!d&&(e.scrollWidth>e.clientWidth||e.scrollHeight>e.client=
Height||c=3D=3D"fixed"||c=3D=3D"absolute"))return e}return i},tb=3Dfunct=
ion(a){var b,c=3DL(a),d=3DM(a,"position"),e=3DF&&c.getBoxObjectFor&&!a.g=
etBoundingClientRect&&d=3D=3D"absolute"&&(b=3Dc.getBoxObjectFor(a))&&(b.=
screenX<0||b.screenY<0),f=3Dnew y(0,0),h=3Dqb(c);if(a=3D=3Dh)return f;if=
(a.getBoundingClientRect){b=3Drb(a);var j=3DTa(c).m();f.x=3Db.left+j.x;f=
.y=3Db.top+j.y}else if(c.getBoxObjectFor&&!e){b=3Dc.getBoxObjectFor(a);v=
ar m=3Dc.getBoxObjectFor(h);f.x=3Db.screenX-
m.screenX;f.y=3Db.screenY-m.screenY}else{var l=3Da;do{f.x+=3Dl.offsetLef=
t;f.y+=3Dl.offsetTop;if(l!=3Da){f.x+=3Dl.clientLeft||0;f.y+=3Dl.clientTo=
p||0}if(H&&M(l,"position")=3D=3D"fixed"){f.x+=3Dc.body.scrollLeft;f.y+=3D=
c.body.scrollTop;break}l=3Dl.offsetParent}while(l&&l!=3Da);if(D||H&&d=3D=
=3D"absolute")f.y-=3Dc.body.offsetTop;l=3Da;for(;(l=3Dsb(l))&&l!=3Dc.bod=
y;){f.x-=3Dl.scrollLeft;if(!D||l.tagName!=3D"TR")f.y-=3Dl.scrollTop}}ret=
urn f};F&&I("1.9");
var ub=3Dfunction(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);e=
lse{var e=3Da.style[c],f=3Da.runtimeStyle[c];a.runtimeStyle[c]=3Da.curre=
ntStyle[c];a.style[c]=3Db;var h=3Da.style[d];a.style[c]=3De;a.runtimeSty=
le[c]=3Df;return h}},vb=3Dfunction(a){var b=3DL(a),c=3D"";if(b.createTex=
tRange){var d=3Db.body.createTextRange();d.moveToElementText(a);c=3Dd.qu=
eryCommandValue("FontName")}if(!c){c=3DM(a,"fontFamily");if(D&&Pa)c=3Dc.=
replace(/ \[[^\]]*\]/,"")}var e=3Dc.split(",");if(e.length>1)c=3De[0];re=
turn xa(c,"\"'")},wb=3Dfunction(a){var b=3D
a.match(/[^\d]+$/);return b&&b[0]||i},xb=3D{cm:1,"in":1,mm:1,pc:1,pt:1},=
yb=3D{em:1,ex:1},zb=3Dfunction(a){var b=3DM(a,"fontSize"),c=3Dwb(b);if(b=
&&"px"=3D=3Dc)return parseInt(b,10);if(E)if(c in xb)return ub(a,b,"left"=
,"pixelLeft");else if(a.parentNode&&c in yb)return ub(a.parentNode,b,"le=
ft","pixelLeft");var d=3DZa("span",{style:"visibility:hidden;position:ab=
solute;line-height:0;padding:0;margin:0;border:0;height:1em;"});$a(a,d);=
b=3Dd.offsetHeight;bb(d);return b};var N=3Ddocument,O=3Dnavigator,Q=3Dwi=
ndow;
function Ab(){var a=3DN.cookie,b=3DMath.round((new Date).getTime()/1000)=
,c=3DQ.google_analytics_domain_name,d=3Dtypeof c=3D=3D"undefined"?Bb("au=
to"):Bb(c),e=3Da.indexOf("__utma=3D"+d+".")>-1,f=3Da.indexOf("__utmb=3D"=
+d)>-1,h=3Da.indexOf("__utmc=3D"+d)>-1,j,m=3D{};if(e){j=3Da.split("__utm=
a=3D"+d+".")[1].split(";")[0].split(".");m.sid=3Df&&h?j[3]+"":Q&&Q.gaGlo=
bal&&Q.gaGlobal.sid?Q.gaGlobal.sid:b+"";m.vid=3Dj[0]+"."+j[1];m.from_coo=
kie=3Dk}else{m.sid=3DQ&&Q.gaGlobal&&Q.gaGlobal.sid?Q.gaGlobal.sid:b+"";m=
.vid=3DQ&&Q.gaGlobal&&Q.gaGlobal.vid?
Q.gaGlobal.vid:(Cb()^Db()&2147483647)+"."+b;m.from_cookie=3Dg}m.dh=3Dd;m=
.hid=3DQ&&Q.gaGlobal&&Q.gaGlobal.hid?Q.gaGlobal.hid:Cb();return Q.gaGlob=
al=3Dm}function Cb(){return Math.round(Math.random()*2147483647)}
function Db(){var a=3DN.cookie?N.cookie:"",b=3DQ.history.length,c,d,e=3D=
[O.appName,O.version,O.language?O.language:O.browserLanguage,O.platform,=
O.userAgent,O.javaEnabled()?1:0].join("");if(Q.screen)e+=3DQ.screen.widt=
h+"x"+Q.screen.height+Q.screen.colorDepth;else if(Q.java){d=3Djava.awt.T=
oolkit.getDefaultToolkit().getScreenSize();e+=3Dd.screen.width+"x"+d.scr=
een.height}e+=3Da;e+=3DN.referrer?N.referrer:"";c=3De.length;for(;b>0;)e=
+=3Db--^c++;return Eb(e)}
function Eb(a){var b=3D1,c=3D0,d,e;if(!(a=3D=3Dundefined||a=3D=3D"")){b=3D=
0;d=3Da.length-1;for(;d>=3D0;d--){e=3Da.charCodeAt(d);b=3D(b<<6&26843545=
5)+e+(e<<14);c=3Db&266338304;b=3Dc!=3D0?b^c>>21:b}}return b}function Bb(=
a){if(!a||a=3D=3D""||a=3D=3D"none")return 1;if("auto"=3D=3Da){a=3DN.doma=
in;if("www."=3D=3Da.substring(0,4))a=3Da.substring(4,a.length)}return Eb=
(a.toLowerCase())};var R=3D"";function Fb(a){if(a){if(R!=3D"")R+=3D",";R=
+=3Da}}var S=3Dg,Gb=3Dda("true",g);function Hb(a,b){var c=3D"script";S=3D=
Ib(a,b);var d=3D!Jb();S&&d&&b.write("<"+c+' src=3D"http://pagead2.google=
syndication.com/pagead/expansion_embed.js"></'+c+">");var e=3DKb(a,b,r("=
1",0.01)),f=3Dd||e;f&&fa()?b.write("<"+c+' src=3D"http://pagead2.googles=
yndication.com/pagead/render_ads.js"></'+c+">"):b.write("<"+c+">window.g=
oogle_render_ad();</"+c+">")}
function T(a){return a!=3Di?'"'+a+'"':'""'}function q(a){return typeof e=
ncodeURIComponent=3D=3D"function"?encodeURIComponent(a):escape(a)}functi=
on U(a,b){if(a&&b)window.google_ad_url+=3D"&"+a+"=3D"+b}function V(a){va=
r b=3Dwindow,c=3Do(a),d=3Db[a];U(c,d)}function W(a,b){b!=3Di&&U(a,q(b))}=
function X(a){var b=3Dwindow,c=3Do(a),d=3Db[a];W(c,d)}function Y(a,b){va=
r c=3Dwindow,d=3Do(a),e=3Dc[a];if(d&&e&&typeof e=3D=3D"object")e=3De[b%e=
.length];U(d,e)}
function Lb(a){var b=3Da.screen,c=3Dnavigator.javaEnabled(),d=3D-(new Da=
te).getTimezoneOffset();if(b){U("u_h",b.height);U("u_w",b.width);U("u_ah=
",b.availHeight);U("u_aw",b.availWidth);U("u_cd",b.colorDepth)}U("u_tz",=
d);U("u_his",history.length);U("u_java",c);navigator.plugins&&U("u_nplug=
",navigator.plugins.length);navigator.mimeTypes&&U("u_nmime",navigator.m=
imeTypes.length)}
function Mb(a){if(!!a.google_enable_first_party_cookie){if(a._GA_googleC=
ookieHelper=3D=3Di)a._GA_googleCookieHelper=3Dnew p;if(!a._google_cookie=
_fetched){a._google_cookie_fetched=3Dk;a._GA_googleCookieHelper.k(Nb(a.g=
oogle_ad_client))}}}function Nb(a){if(a){a=3Da.toLowerCase();if(a.substr=
ing(0,3)!=3D"ca-")a=3D"ca-"+a}return a}function Ob(a){if(a){a=3Da.toLowe=
rCase();if(a.substring(0,9)!=3D"dist-aff-")a=3D"dist-aff-"+a}return a}fu=
nction Pb(a){var b=3D"google_unique_id";if(a[b])++a[b];else a[b]=3D1;ret=
urn a[b]}
function Qb(){var a=3DE&&I("6")&&!I("8"),b=3DF&&I("1.8.1"),c=3DH&&I("525=
");if(Oa&&(a||b||c))return k;else if(Na&&(c||b))return k;else if(Pa&&b)r=
eturn k;return g}function Jb(){return typeof ExpandableAdSlotFactory=3D=3D=
"function"&&typeof ExpandableAdSlotFactory.createIframe=3D=3D"function"}=
function Ib(a,b){var c=3Da.google_allow_expandable_ads;if(c!=3Di&&c=3D=3D=
g||!b.body||a.google_ad_output!=3D"html"||Rb(a,b)||Sb(a)||Z(a.google_ad_=
format)||isNaN(a.google_ad_height)||isNaN(a.google_ad_width)||!Qb())retu=
rn g;return k}
function Tb(){var a=3DMath.random(),b=3Dr("0",0.03),c=3D2*b;if(a<b)retur=
n"30143019";if(a<c)return"30143020";return""}function Ub(){var a=3DMath.=
random(),b=3Dr("0",0.03),c=3D2*b;if(a<b)return"30143021";if(a<c)return"3=
0143022";return""}function Vb(){var a=3DMath.random(),b=3Dr("0.01",0);if=
(a<b)return"68120011";if(a<2*b)return"68120021";if(a<3*b)return"68120031=
";if(a<4*b)return"68120041";return""}
function Wb(a){a.google_allow_expandable_ads=3Dg;a.google_expandable_ifr=
ame=3Dg}
function Xb(a,b,c,d){var e=3DPb(a);c=3Dc.substring(0,1992);c=3Dc.replace=
(/%\w?$/,"");var f=3D"script";if((a.google_ad_output=3D=3D"js"||a.google=
_ad_output=3D=3D"json_html")&&(a.google_ad_request_done||a.google_radlin=
k_request_done))b.write("<"+f+' language=3D"JavaScript1.1" src=3D'+T($(c=
))+"></"+f+">");else if(a.google_ad_output=3D=3D"html")if(Yb(a)&&Jb()){v=
ar h=3Da.google_container_id||d||i;a["google_expandable_ad_slot"+e]=3DEx=
pandableAdSlotFactory.createIframe("google_ads_frame"+e,$(c),a.google_ad=
_width,a.google_ad_height,
h)}else{var j=3D'<iframe name=3D"google_ads_frame" width=3D'+T(a.google_=
ad_width)+" height=3D"+T(a.google_ad_height)+" frameborder=3D"+T(a.googl=
e_ad_frameborder)+" src=3D"+T($(c))+' marginwidth=3D"0" marginheight=3D"=
0" vspace=3D"0" hspace=3D"0" allowtransparency=3D"true" scrolling=3D"no"=
></iframe>';j=3DZb(a.google_ad_width,a.google_ad_height,j);a.google_cont=
ainer_id?$b(a.google_container_id,b,j):b.write(j)}else a.google_ad_outpu=
t=3D=3D"textlink"&&b.write("<"+f+' language=3D"JavaScript1.1" src=3D'+T(=
$(c))+"></"+f+">")}
function Yb(a){if(!S)return g;var b=3DR.indexOf("30143020")!=3D-1,c=3DR.=
indexOf("30143019")!=3D-1,d=3Da.google_expandable_iframe;return Gb&&!c||=
b||d}function ac(a){var b=3Dda("false",g);return b&&a.indexOf("30143021"=
)=3D=3D-1||a.indexOf("30143022")!=3D-1}
function Zb(a,b,c){var d=3Dac(R);if(S&&d){var e=3D"border:none;height:"+=
b+"px;margin:0;padding:0;position:relative;visibility:visible;width:"+a+=
"px";return'<ins style=3D"display:inline-table;'+e+'"><ins style=3D"disp=
lay:block;'+e+'">'+c+"</ins></ins>"}return c}function bc(a,b,c){if(!a)re=
turn g;if(!b)return k;return c}
function cc(a){for(var b in aa)a[b]=3Di;for(var b in ba)b=3D=3D"google_c=
orrelator"||(a[b]=3Di);for(var b in ca)a[b]=3Di;a.google_allow_expandabl=
e_ads=3Di;a.google_container_id=3Di;a.google_expandable_iframe=3Di;a.goo=
gle_tag_info=3Di}function Sb(a){if(a.google_ad_format)return a.google_ad=
_format.indexOf("_0ads")>0;return a.google_ad_output!=3D"html"&&a.google=
_num_radlinks>0}function Z(a){return a&&a.indexOf("_sdo")!=3D-1}
function dc(a,b){var c=3Di,d=3Dwindow,e=3Ddocument,f=3Dn,h=3Dd.google_ad=
_format,j=3Dec(d),m;if(d.google_cpa_choice!=3Dc){d.google_ad_url=3Dj+"/c=
pa/ads?";m=3Descape(Nb(d.google_ad_client));d.google_ad_region=3D"_googl=
e_cpa_region_";V("google_cpa_choice");if(typeof e.characterSet!=3D"undef=
ined")W("oe",e.characterSet);else typeof e.charset!=3D"undefined"&&W("oe=
",e.charset)}else if(Z(h)){d.google_ad_url=3Dj+"/pagead/sdo?";m=3Descape=
(Ob(d.google_ad_client))}else{d.google_ad_url=3Dj+"/pagead/ads?";m=3Desc=
ape(Nb(d.google_ad_client))}d.google_ad_url+=3D
"client=3D"+m;V("google_ad_host");V("google_ad_host_tier_id");var l=3Dd.=
google_num_slots_by_client,A=3Dd.google_num_slots_by_channel,v=3Dd.googl=
e_prev_ad_formats_by_region,w=3Dd.google_prev_ad_slotnames_by_region;if(=
d.google_ad_region=3D=3Dc&&d.google_ad_section!=3Dc)d.google_ad_region=3D=
d.google_ad_section;var s=3Dd.google_ad_region=3D=3Dc?"":d.google_ad_reg=
ion;if(Z(h)){d.google_num_sdo_slots=3Dd.google_num_sdo_slots?d.google_nu=
m_sdo_slots+1:1;if(d.google_num_sdo_slots>4)return g}else if(Sb(d)){d.go=
ogle_num_0ad_slots=3Dd.google_num_0ad_slots?
d.google_num_0ad_slots+1:1;if(d.google_num_0ad_slots>3)return g}else if(=
d.google_cpa_choice=3D=3Dc){d.google_num_ad_slots=3Dd.google_num_ad_slot=
s?d.google_num_ad_slots+1:1;if(d.google_num_slots_to_rotate){v[s]=3Dc;w[=
s]=3Dc;if(d.google_num_slot_to_show=3D=3Dc)d.google_num_slot_to_show=3Df=
%d.google_num_slots_to_rotate+1;if(d.google_num_slot_to_show!=3Dd.google=
_num_ad_slots)return g}else if(d.google_num_ad_slots>6&&s=3D=3D"")return=
 g}U("dt",n);V("google_language");d.google_country?V("google_country"):V=
("google_gl");V("google_region");
X("google_city");X("google_hints");V("google_safe");V("google_encoding")=
;V("google_last_modified_time");X("google_alternate_ad_url");V("google_a=
lternate_color");V("google_skip");V("google_targeting");var G=3Dd.google=
_ad_client;if(l[G])l[G]+=3D1;else{l[G]=3D1;l.length+=3D1}if(v[s])if(!Z(h=
)){W("prev_fmts",v[s].toLowerCase());l.length>1&&U("slot",l[G])}w[s]&&W(=
"prev_slotnames",w[s].toLowerCase());if(bc(h,d.google_ad_slot,d.google_o=
verride_format)){W("format",h.toLowerCase());Z(h)||(v[s]=3Dv[s]?v[s]+","=
+h:h)}else if(d.google_ad_slot)w[s]=3D
w[s]?w[s]+","+d.google_ad_slot:d.google_ad_slot;V("google_max_num_ads");=
U("output",d.google_ad_output);V("google_adtest");V("google_ad_callback"=
);V("google_ad_slot");X("google_correlator");d.google_new_domain_checked=
=3D=3D1&&d.google_new_domain_enabled=3D=3D0&&U("dblk",1);if(d.google_ad_=
channel){X("google_ad_channel");var ab=3D"",cb=3Dd.google_ad_channel.spl=
it(fc),ma=3D0;for(;ma<cb.length;ma++){var na=3Dcb[ma];if(A[na])ab+=3Dna+=
"+";else A[na]=3D1}W("pv_ch",ab)}if(d.google_ad_host_channel){X("google_=
ad_host_channel");
var nc=3Dgc(d.google_ad_host_channel,d.google_viewed_host_channels);W("p=
v_h_ch",nc)}d.google_enable_first_party_cookie&&W("cookie",d._GA_googleC=
ookieHelper.o());X("google_page_url");Y("google_color_bg",f);Y("google_c=
olor_text",f);Y("google_color_link",f);Y("google_color_url",f);Y("google=
_color_border",f);Y("google_color_line",f);d.google_reuse_colors?U("reus=
e_colors",1):U("reuse_colors",0);V("google_font_face");V("google_kw_type=
");X("google_kw");X("google_contents");V("google_num_radlinks");V("googl=
e_max_radlink_len");
V("google_rl_filtering");V("google_rl_mode");V("google_rt");X("google_rl=
_dest_url");V("google_num_radlinks_per_unit");V("google_ad_type");V("goo=
gle_image_size");V("google_ad_region");if(S)if(d.google_expandable_ifram=
e=3D=3D=3Dg)Wb(d);else if(m in{"ca-pub-2944451727872625":1,"ca-pub-94832=
66128490610":1,"ca-pub-1955924717845427":1,"ca-pub-6664249124335298":1})=
d.google_expandable_iframe=3Dk;else{if(!(d.google_expandable_iframe=3D=3D=
k)){var P=3DTb();Fb(P);if(P=3D=3D"30143019"||P=3D=3D""&&!Gb)Wb(d);if(!P)=
{P=3DUb();Fb(P)}}}else Wb(d);
W("eid",R);var db=3Dd.google_allow_expandable_ads;if(db!=3Di)db?U("ea","=
1"):U("ea","0");V("google_feedback");X("google_referrer_url");X("google_=
page_location");U("frm",d.google_iframing);V("google_bid");V("google_ctr=
_threshold");V("google_cust_age");V("google_cust_gender");V("google_cust=
_interests");V("google_cust_id");V("google_cust_job");V("google_cust_u_u=
rl");V("google_cust_l");V("google_cust_lh");V("google_cust_ch");V("googl=
e_ed");V("google_video_doc_id");V("google_video_product_type");X("google=
_ui_features");
X("google_ui_version");X("google_tag_info");X("google_only_ads_with_vide=
o");X("google_only_pyv_ads");X("google_disable_video_autoplay");if(a){W(=
"ff",vb(a));W("fs",zb(a));var t;if(b)if(typeof a.getBoundingClientRect=3D=
=3D"function"){t=3Da.getBoundingClientRect();t.x=3Dt.left;t.y=3Dt.top}el=
se{t=3D{};t.x=3D"-252738";t.y=3D"-252738"}else try{t=3Dtb(a)}catch(Ac){t=
=3D{};t.x=3D"-252738";t.y=3D"-252738"}var oa=3DYa();if(t&&oa){W("biw",oa=
.width);W("bih",oa.height);W("adx",t.x);W("ady",t.y)}}Ab();U("ga_vid",d.=
gaGlobal.vid);U("ga_sid",
d.gaGlobal.sid);U("ga_hid",d.gaGlobal.hid);U("ga_fc",d.gaGlobal.from_coo=
kie);X("google_analytics_uacct");V("google_ad_override");V("google_flash=
_version");Lb(d);return k}function gc(a,b){var c=3Da.split("|"),d=3D-1,e=
=3D[],f=3D0;for(;f<c.length;f++){var h=3Dc[f].split(fc);b[f]||(b[f]=3D{}=
);var j=3D"",m=3D0;for(;m<h.length;m++){var l=3Dh[m];if(!(l=3D=3D""))if(=
b[f][l])j+=3D"+"+l;else b[f][l]=3D1}j=3Dj.slice(1);e[f]=3Dj;if(j!=3D"")d=
=3Df}var A=3D"";if(d>-1){var f=3D0;for(;f<d;f++)A+=3De[f]+"|";A+=3De[d]}=
return A}
function hc(){var a=3Dwindow,b=3Ddocument;Mb(a);var c=3DVb();Fb(c);var d=
,e=3Dg,f=3Dg,h=3Dg;switch(c){case "68120031":h=3Dk;case "68120021":f=3Dk=
;case "68120041":e=3Dk}if(e){var j=3D"google_temp_span";d=3Da.google_con=
tainer_id&&Va(a.google_container_id)||Va(j);if(!d&&!a.google_container_i=
d){b.write("<span id=3D"+j+"></span>");d=3DVa(j)}}var m=3Ddc(f&&d,h);d&&=
d.id=3D=3Dj&&bb(d);if(!!m){Xb(a,b,a.google_ad_url);cc(a)}}function $(a){=
var b=3D(new Date).getTime()-n,c=3D"&dtd=3D"+(b<1000?b:"M");return a+c}f=
unction ic(){hc();return k}
function Rb(a,b){if(a.top.location=3D=3Db.location)return g;var c=3Db.do=
cumentElement;if(a.google_ad_width&&a.google_ad_height){var d=3D1,e=3D1;=
if(a.innerHeight){d=3Da.innerWidth;e=3Da.innerHeight}else if(c&&c.client=
Height){d=3Dc.clientWidth;e=3Dc.clientHeight}else if(b.body){d=3Db.body.=
clientWidth;e=3Db.body.clientHeight}if(e>2*a.google_ad_height||d>2*a.goo=
gle_ad_width)return g}return k}
function jc(a){var b=3Dwindow,c=3Di,d=3Db.onerror;b.onerror=3Da;if(b.goo=
gle_ad_frameborder=3D=3Dc)b.google_ad_frameborder=3D0;if(b.google_ad_out=
put=3D=3Dc)b.google_ad_output=3D"html";if(Z(b.google_ad_format)){var e=3D=
b.google_ad_format.match(/^(\d+)x(\d+)_.*/);if(e){b.google_ad_width=3Dpa=
rseInt(e[1],10);b.google_ad_height=3DparseInt(e[2],10);b.google_ad_outpu=
t=3D"html"}}if(b.google_ad_format=3D=3Dc&&b.google_ad_output=3D=3D"html"=
)b.google_ad_format=3Db.google_ad_width+"x"+b.google_ad_height;kc(b,docu=
ment);if(b.google_num_slots_by_channel=3D=3D
c)b.google_num_slots_by_channel=3D[];if(b.google_viewed_host_channels=3D=
=3Dc)b.google_viewed_host_channels=3D[];if(b.google_num_slots_by_client=3D=
=3Dc)b.google_num_slots_by_client=3D[];if(b.google_prev_ad_formats_by_re=
gion=3D=3Dc)b.google_prev_ad_formats_by_region=3D[];if(b.google_prev_ad_=
slotnames_by_region=3D=3Dc)b.google_prev_ad_slotnames_by_region=3D[];if(=
b.google_correlator=3D=3Dc)b.google_correlator=3Dn;if(b.google_adslot_lo=
aded=3D=3Dc)b.google_adslot_loaded=3D{};if(b.google_adContentsBySlot=3D=3D=
c)b.google_adContentsBySlot=3D{};if(b.google_flash_version=3D=3D
c)b.google_flash_version=3Dea();if(b.google_new_domain_checked=3D=3Dc)b.=
google_new_domain_checked=3D0;if(b.google_new_domain_enabled=3D=3Dc)b.go=
ogle_new_domain_enabled=3D0;b.onerror=3Dd}function lc(a){if(a in mc)retu=
rn mc[a];return mc[a]=3Dnavigator.userAgent.toLowerCase().indexOf(a)!=3D=
-1}var mc=3D{};function fa(){return lc("msie")&&!window.opera}
function oc(a){var b=3D{},c=3Da.split("?"),d=3Dc[c.length-1].split("&"),=
e=3D0;for(;e<d.length;e++){var f=3Dd[e].split("=3D");if(f[0])try{b[f[0].=
toLowerCase()]=3Df.length>1?window.decodeURIComponent?decodeURIComponent=
(f[1].replace(/\+/g," ")):unescape(f[1]):""}catch(h){}}return b}function=
 pc(){var a=3Dwindow,b=3Doc(document.URL);if(b.google_ad_override){a.goo=
gle_ad_override=3Db.google_ad_override;a.google_adtest=3D"on"}}function =
qc(a,b){for(var c in b)a["google_"+c]=3Db[c]}
function rc(a,b){if(!b)return a.location;return a.referrer}function sc(a=
,b){if(!b&&a.google_referrer_url=3D=3Di)return"0";else if(b&&a.google_re=
ferrer_url=3D=3Di)return"1";else if(!b&&a.google_referrer_url!=3Di)retur=
n"2";else if(b&&a.google_referrer_url!=3Di)return"3";return"4"}function =
tc(a,b,c,d){a.page_url=3Drc(c,d);a.page_location=3Di}function uc(a,b,c,d=
){a.page_url=3Db.google_page_url;a.page_location=3Drc(c,d)||"EMPTY"}
function vc(a,b){var c=3D{},d=3DRb(a,b);c.iframing=3Dsc(a,d);!!a.google_=
page_url?uc(c,a,b,d):tc(c,a,b,d);c.last_modified_time=3Db.location=3D=3D=
c.page_url?Date.parse(b.lastModified)/1000:i;c.referrer_url=3Dd?a.google=
_referrer_url:a.google_page_url&&a.google_referrer_url?a.google_referrer=
_url:b.referrer;return c}function wc(a){var b=3D{},c=3Da.URL.substring(a=
.URL.lastIndexOf("http"));b.iframing=3Di;b.page_url=3Dc;b.page_location=3D=
a.location;b.last_modified_time=3Di;b.referrer_url=3Dc;return b}
function kc(a,b){var c;c=3Da.google_page_url=3D=3Di&&xc[b.domain]?wc(b):=
vc(a,b);qc(a,c)}function $b(a,b,c){if(a){var d=3Db.getElementById(a);if(=
d&&c&&c.length!=3D""){d.style.visibility=3D"visible";d.innerHTML=3Dc}}}v=
ar xc=3D{};xc["ad.yieldmanager.com"]=3Dk;var fc=3D/[+, ]/;window.google_=
render_ad=3Dhc;var yc=3D{google:1,googlegroups:1,gmail:1,googlemail:1,go=
ogleimages:1,googleprint:1};function zc(a){var b=3Da.google_page_locatio=
n||a.google_page_url;if(!b)return g;b=3Db.toString();if(b.indexOf("http:=
//")=3D=3D0)b=3Db.substring(7,b.length);else if(b.indexOf("https://")=3D=
=3D0)b=3Db.substring(8,b.length);var c=3Db.indexOf("/");if(c=3D=3D-1)c=3D=
b.length;var d=3Db.substring(0,c),e=3Dd.split("."),f=3Dg;if(e.length>=3D=
3)f=3De[e.length-3]in yc;if(e.length>=3D2)f=3Df||e[e.length-2]in yc;retu=
rn f}
function Kb(a,b,c){if(zc(a)){a.google_new_domain_checked=3D1;return g}if=
(a.google_new_domain_checked=3D=3D0){var d=3DMath.random();if(d<=3Dc){va=
r e=3D"http://googleads.g.doubleclick.net/pagead/test_domain.js",f=3D"sc=
ript";b.write("<"+f+' src=3D"'+e+'"></'+f+">");a.google_new_domain_check=
ed=3D1;return k}}return g}function ec(a){var b=3D"http://googleads.g.dou=
bleclick.net",c=3D"http://pagead2.googlesyndication.com";if(!zc(a)&&a.go=
ogle_new_domain_enabled=3D=3D1)return b;return c};pc();jc(ic);Hb(window,=
document);
})()

------------bmBzMKKIPG0lL1eoOrzfQF--
