--- /dev/null
+[OPTIONS]
+BMROOT=d:\wx2\docs/latex/porting ; Assume that bitmaps are where the source is
+TITLE=wxWindows Porting Guide
+CONTENTS=Contents
+COMPRESS=HIGH
+
+[FILES]
+porting.rtf
+
+[CONFIG]
+CreateButton("Up", "&Up", "JumpId(`porting.hlp', `Contents')")
+BrowseButtons()
+
+[MAP]
+
+[BITMAPS]
+
--- /dev/null
+\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
+\newcommand{\indexit}[1]{#1\index{#1}}%
+\newcommand{\pipe}[0]{$\|$\ }%
+\definecolour{black}{0}{0}{0}%
+\definecolour{cyan}{0}{255}{255}%
+\definecolour{green}{0}{255}{0}%
+\definecolour{magenta}{255}{0}{255}%
+\definecolour{red}{255}{0}{0}%
+\definecolour{blue}{0}{0}{200}%
+\definecolour{yellow}{255}{255}{0}%
+\definecolour{white}{255}{255}{255}%
+\input psbox.tex
+\parskip=10pt
+\parindent=0pt
+\title{Guide to porting applications from wxWindows 1.xx to 2.0}
+\author{Julian Smart}
+\date{October 1997}
+\makeindex
+\begin{document}
+\maketitle
+\pagestyle{fancyplain}
+\bibliographystyle{plain}
+\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\pagenumbering{roman}
+\tableofcontents
+%
+\chapter{About this document}\label{about}
+\pagenumbering{arabic}%
+\setheader{{\it Porting guide}}{}{}{}{}{{\it Porting guide}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+This document gives guidelines and tips for porting applications from
+version 1.xx of wxWindows to version 2.0.
+
+The first section offers tips for writing 1.xx applications in a way to
+minimize porting time. The following sections detail the changes and
+how you can modify your application to be 2.0-compliant.
+
+You may be worrying that porting to 2.0 will be a lot of work,
+particularly if you have only recently started using 1.xx. In fact,
+the wxWindows 2.0 API has far more in common with 1.xx than it has differences.
+With backward compatibility mode on, much of the conversion can be
+done gradually. The main challenges are doing without the default
+panel item layout, and the lack of automatic labels in some controls.
+However, if you already use resource files (.wxr), or application-specific positioning,
+or constraints, then even this will be quite painless.
+
+So please don't be freaked out by the jump to 2.0! For one thing, 1.xx is still available
+and will be supported by the user community for some time. And when you have
+changed to 2.0, we hope that you will appreciate the benefits in terms
+of greater flexibility, better user interface aesthetics, improved C++ conformance,
+improved compilation speed, and many other enhancements. The revised architecture
+of 2.0 will ensure that wxWindows can continue to evolve for the forseeable
+future.
+
+{\it Please note that this document is a work in progress.}
+
+\chapter{Preparing for version 2.0}\label{preparing}
+
+Even before compiling with version 2.0, there's also a lot you can do right now to make porting
+relatively simple. Here are a few tips.
+
+\begin{itemize}
+\item {\bf Use constraints or .wxr resources} for layout, rather than the default layout scheme.
+Constraints should be the same in 2.0, and resources will be translated.
+\item {\bf Use separate wxMessage items} instead of labels for wxText, wxMultiText,
+wxChoice, wxComboBox. These labels will disappear in 2.0. Use separate
+wxMessages whether you're creating controls programmatically or using
+the dialog editor. The future dialog editor will be able to translate
+from old to new more accurately if labels are separated out.
+\item {\bf Parameterise functions that use wxDC} or derivatives, i.e. make the wxDC
+an argument to all functions that do drawing. Minimise the use of
+wxWindow::GetDC and definitely don't store wxDCs long-term
+because in 2.0, you can't use GetDC() and wxDCs are not persistent.
+You will use wxClientDC, wxPaintDC stack objects instead. Minimising
+the use of GetDC() will ensure that there are very few places you
+have to change drawing code for 2.0.
+\item {\bf Don't set GDI objects} (wxPen, wxBrush etc.) in windows or wxCanvasDCs before they're
+needed (e.g. in constructors) - do so within your drawing routine instead. In
+2.0, these settings will only take effect between the construction and destruction
+of temporary wxClient/PaintDC objects.
+\item {\bf Don't rely} on arguments to wxDC functions being floating point - they will
+be 32-bit integers in 2.0.
+\item {\bf Don't use the wxCanvas member functions} that duplicate wxDC functions, such as SetPen and DrawLine, since
+they are going.
+\item {\bf Using member callbacks} called from global callback functions will make the transition
+easier - see the FAQ
+for some notes on using member functions for callbacks. wxWindows 2.0 will banish global
+callback functions (and OnMenuCommand), and nearly all event handling will be done by functions taking a single event argument.
+So in future you will have code like:
+
+{\small\begin{verbatim}
+void MyFrame::OnOK(wxCommandEvent& event)
+{
+ ...
+}
+\end{verbatim}
+}%
+
+You may find that writing the extra code to call a member function isn't worth it at this stage,
+but the option is there.
+\item {\bf Use wxString wherever possible.} 2.0 will replace char * with wxString
+in most cases, and if you use wxString to receive strings returned from
+wxWindows functions (except when you need to save the pointer if deallocation is required), there should
+be no conversion problems later on.
+\item Be aware that under Windows, {\bf font sizes will change} to match standard Windows
+font sizes (for example, a 12-point font will appear bigger than before). Write your application
+to be flexible where fonts are concerned.
+Don't rely on fonts being similarly-sized across platforms, as they were (by chance) between
+Windows and X under wxWindows 1.66. Yes, this is not easy... but I think it's better to conform to the
+standards of each platform, and currently the size difference makes it difficult to
+conform to Windows UI standards. You may eventually wish to build in a global 'fudge-factor' to compensate
+for size differences. The old font sizing will still be available via wx\_setup.h, so do not panic...
+\item {\bf Consider dropping wxForm usage}: an alternative is to be found in utils/wxprop.
+wxPropertyFormView can be used in a wxForm-like way, except that you specify a pre-constructed panel
+or dialog; or you can use a wxPropertyListView to show attributes in a scrolling list - you don't even need
+to lay panel items out.
+
+Because wxForm uses a number of features to be dropped in wxWindows 2.0, it cannot be
+supported in the future, at least in its present state.
+\item {\bf When creating a wxListBox}, put the wxLB\_SINGLE, wxLB\_MULTIPLE, wxLB\_EXTENDED styles in the window style parameter, and put
+zero in the {\it multiple} parameter. The {\it multiple} parameter will be removed in 2.0.
+\item {\bf For MDI applications}, don't reply on MDI being run-time-switchable in the way that the
+MDI sample is. In wxWindows 2.0, MDI functionality is separated into distinct classes.
+\end{itemize}
+
+\chapter{The new event system}\label{eventsystem}
+
+The way that events are handled has been radically changed in wxWindows 2.0. Please
+read the topic `Event handling overview' in the wxWindows 2.0 manual for background
+on this.
+
+\section{Callbacks}
+
+Instead of callbacks for panel items, menu command events, control commands and other events are directed to
+the originating window, or an ancestor, or an event handler that has been plugged into the window
+or its ancestor. Event handlers always have one argument, a derivative of wxEvent.
+
+For menubar commands, the {\bf OnMenuCommand} member function will be replaced by a series of separate member functions,
+each of which responds to a particular command. You need to add these (non-virtual) functions to your
+frame class, add a DECLARE\_EVENT\_TABLE entry to the class, and then add an event table to
+your implementation file, as a BEGIN\_EVENT\_TABLE and END\_EVENT\_TABLE block. The
+individual event mapping macros will be of the form:
+
+\begin{verbatim}
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+ EVT_MENU(MYAPP_NEW, MyFrame::OnNew)
+ EVT_MENU(wxID_EXIT, MyFrame::OnExit)
+END_EVENT_TABLE()
+\end{verbatim}
+
+Control commands, such as button commands, can be routed to a derived button class,
+the parent window, or even the frame. Here, you use a function of the form EVT\_BUTTON(id, func).
+Similar macros exist for other control commands.
+
+\section{Other events}
+
+To intercept other events, you used to override virtual functions, such as OnSize. Now, while you can use
+the OnSize name for such event handlers (or any other name of your choice), it has only a single argument
+(wxSizeEvent) and must again be `mapped' using the EVT\_SIZE macro. The same goes for all other events,
+including OnClose (although in fact you can still use the old, virtual form of OnClose for the time being).
+
+\chapter{Class hierarchy}\label{classhierarchy}
+
+The class hierarchy has changed somewhat. wxToolBar and wxButtonBar
+classes have been split into several classes, and are derived from wxControl (which was
+called wxItem). wxPanel derives from wxWindow instead of from wxCanvas, which has
+disappeared in favour of wxScrolledWindow (since all windows are now effectively canvases
+which can be drawn into). The status bar has become a class in its own right, wxStatusBar.
+
+There are new MDI classes so that wxFrame does not have to be overloaded with this
+functionality.
+
+There are new device context classes, with wxPanelDC and wxCanvasDC disappearing.
+See \helpref{Device contexts and painting}{dc}.
+
+\chapter{GDI objects}\label{gdiobjects}
+
+These objects - instances of classes such as wxPen, wxBrush, wxBitmap (but not wxColour) -
+are now implemented with reference-counting. This makes assignment a very cheap operation,
+and also means that management of the resource is largely automatic. You now pass {\it references} to
+objects to functions such as wxDC::SetPen. The device context does not store a copy of the pen
+itself, but takes a copy of it (via reference counting), and the object's data gets freed up
+when the reference count goes to zero. The application does not have to worry so much about
+who the object belongs to: it can pass the reference, then destroy the object without
+leaving a dangling pointer inside the device context.
+
+For the purposes of code migration, you can use the old style of object management - maintaining
+pointers to GDI objects, and using the FindOrCreate... functions. However, it is preferable to
+keep this explicit management to a minimum, instead creating objects on the fly as needed, on the stack,
+unless this causes too much of an overhead in your application.
+
+At a minimum, you will have to make sure that calls to SetPen, SetBrush etc. work. Some compilers
+will do the conversion from pointer to reference automatically (via a constructor in the GDI
+class) but you cannot rely on this being true for all compilers. Also, where you pass NULL to these
+functions, you will need to either cast to the appropriate reference type, or instead
+use an identifier such as wxNullPen or wxNullBrush.
+
+\chapter{Dialogs and controls}\label{dialogscontrols}
+
+\wxheading{Labels}
+
+Most controls no longer have labels and values as they used to in 1.xx. Instead, labels
+should be created separately using wxStaticText (the new name for wxMessage). This will
+need some reworking of dialogs, unfortunately; programmatic dialog creation that doesn't
+use constraints will be especially hard-hit. Perhaps take this opportunity to make more
+use of dialog resources or constraints. Or consider using the wxPropertyListView class
+which can do away with dialog layout issues altogether by presenting a list of editable
+properties.
+
+\wxheading{Constructors}
+
+All window constructors have two main changes, apart from the label issue mentioned above.
+Windows now have integer identifiers; and position and size are now passed as wxPoint and
+wxSize objects. In addition, some windows have a wxValidator argument. wxWindows 2.0 may provide
+old-style constructors in WXWIN\_COMPATIBILITY mode for limited backward compatibility.
+
+\wxheading{Show versus ShowModal}
+
+If you have used or overridden the {\bf wxDialog::Show} function in the past, you may find
+that modal dialogs no longer work as expected. This is because the function for modal showing
+is now {\bf wxDialog:ShowModal}. This is part of a more fundamental change in which a
+control may tell the dialog that it caused the dismissal of a dialog, by
+calling {\bf wxDialog::EndModal} or {\bf wxWindow::SetReturnCode}. Using this
+information, {\bf ShowModal} now returns the id of the control that caused dismissal,
+giving greater feedback to the application than just TRUE or FALSE.
+
+If you overrode or called {\bf wxDialog::Show}, use {\bf ShowModal} and test for a returned identifier,
+commonly wxID\_OK or wxID\_CANCEL.
+
+\wxheading{wxItem}
+
+This is renamed wxControl.
+
+\wxheading{wxText, wxMultiText and wxTextWindow}
+
+These classes no longer exist and are replaced by the single class wxTextCtrl.
+Multi-line text items are created using the wxTE\_MULTILINE style.
+
+\wxheading{wxButton}
+
+Bitmap buttons are now a separate class, instead of being part of wxBitmap.
+
+\wxheading{wxMessage}
+
+Bitmap messages are now a separate class, wxStaticBitmap, and wxMessage
+is renamed wxStaticText.
+
+\wxheading{wxGroupBox}
+
+wxGroupBox is renamed wxStaticBox.
+
+\wxheading{wxForm}
+
+Note that wxForm is no longer supported in wxWindows 2.0. Consider using the wxPropertyForm class
+instead, which takes standard dialogs and panels and associates controls with property objects.
+You may also find that the new validation method, combined with dialog resources, is easier
+and more flexible than using wxForm.
+
+\chapter{Device contexts and painting}\label{dc}
+
+In wxWindows 2.0, device contexts are used for drawing into, as per 1.xx, but the way
+they are accessed and constructed is a bit different.
+
+You no longer use {\bf GetDC} to access device contexts for panels, dialogs and canvases.
+Instead, you create a temporary device context, which means that any window or control can be drawn
+into. The sort of device context you create depends on where your code is called from. If
+painting within an {\bf OnPaint} handler, you create a wxPaintDC. If not within an {\bf OnPaint} handler,
+you use a wxClientDC or wxWindowDC. You can still parameterise your drawing code so that it
+doesn't have to worry about what sort of device context to create - it uses the DC it is passed
+from other parts of the program.
+
+You {\bf must } create a wxPaintDC if you define an OnPaint handler, even if you do not
+actually use this device context, or painting will not work correctly under Windows.
+
+If you used device context functions with wxPoint or wxIntPoint before, please note
+that wxPoint now contains integer members, and there is a new class wxRealPoint. wxIntPoint
+no longer exists.
+
+\chapter{Miscellaneous}
+
+\section{Strings}
+
+wxString has replaced char* in the majority of cases. For passing strings into functions,
+this should not normally require you to change your code if the syntax is otherwise the
+same. This is because C++ will automatically convert a char* or const char* to a wxString by virtue
+of appropriate wxString constructors.
+
+However, when a wxString is returned from a function in wxWindows 2.0 where a char* was
+returned in wxWindows 1.xx, your application will need to be changed. Usually you can
+simplify your application's allocation and deallocation of memory for the returned string,
+and simply assign the result to a wxString object. For example, replace this:
+
+{\small\begin{verbatim}
+ char* s = wxFunctionThatReturnsString();
+ s = copystring(s); // Take a copy in case it's temporary
+ .... // Do something with it
+ delete[] s;
+\end{verbatim}
+}
+
+with this:
+
+{\small\begin{verbatim}
+ wxString s = wxFunctionThatReturnsString();
+ .... // Do something with it
+\end{verbatim}
+}
+
+To indicate an empty return value or a problem, a function may return either the
+empty string (``") or a null string. You can check for a null string with wxString::IsNull().
+
+\section{Use of const}
+
+The {\bf const} keyword is now used to denote constant functions that do not affect the
+object, and for function arguments to denote that the object passed cannot be changed.
+
+This should not affect your application except for where you are overriding virtual functions
+which now have a different signature. If functions are not being called which were previously,
+check whether there is a parameter mismatch (or function type mismatch) involving consts.
+
+Try to use the {\bf const} keyword in your own code where possible.
+
+\chapter{Backward compatibility}\label{compat}
+
+Some wxWindows 1.xx functionality has been left to ease the transition to 2.0. This functionality
+(usually) only works if you compile with WXWIN\_COMPATIBILITY set to 1.
+
+TODO
+
+OnMenuCommand, OnSize, OnActivate, OnPaint, others?? can all be prefixed with Old (e.g. OldOnMenuCommand)
+and will work as before. You are encouraged to convert your code to the new forms, but
+this will allow you to get your applications up and running a little more quickly.
+
+OnClose can be used as-is without an 'Old' prefix, but officially the OnCloseWindow event table handler should be
+used instead.
+
+\chapter{Quick reference}\label{quickreference}
+
+This section allows you to quickly find features that
+need to be converted.
+
+TODO
+
+\section{OnActivate}
+
+Rename to OldOnActivate, or replace arguments with one wxActivateEvent\& argument.
+
+\wxheading{See also}
+
+\helpref{Backward compatibility}{compat}
+
+\section{OnClose}
+
+This can either remain the same as before, or you can add an OnCloseWindow event
+handler using an EVT\_CLOSE event table entry.
+
+\wxheading{See also}
+
+\helpref{Backward compatibility}{compat}
+
+\section{OnMenuCommand}
+
+Rename to OldOnMenuCommand, or replace with a series of functions, one for
+each case of your old switch statement. Create an event table for your frame
+containing EVT\_MENU macros, and insert DECLARE\_EVENT\_TABLE() in your frame class.
+
+\wxheading{See also}
+
+\helpref{Backward compatibility}{compat}
+
+\section{OnSize}
+
+Rename to OldOnSize, or replace arguments with one wxSizeEvent\& argument.
+
+\wxheading{See also}
+
+\helpref{Backward compatibility}{compat}
+
+\section{wxDialog::Show}
+
+If you used {\bf Show} to show a modal dialog, or to override the standard
+modal dialog {\bf Show}, use {\bf ShowModal} instead.
+
+\wxheading{See also}
+
+\helpref{Dialogs and controls}{dialogscontrols}
+
+\end{document}
--- /dev/null
+;;; Tex2RTF initialisation file for 16-bit Winhelp
+runTwice = yes
+titleFontSize = 12
+authorFontSize = 10
+authorFontSize = 10
+chapterFontSize = 12
+sectionFontSize = 12
+subsectionFontSize = 12
+contentsDepth = 2
+headerRule = yes
+footerRule = yes
+useHeadingStyles = yes
+listItemIndent=40
+generateHPJ = yes
+htmlBrowseButtons = bitmap
+winHelpContents = yes
+winHelpVersion = 3 ; 3 for Windows 3.x, 4 for Windows 95
+winHelpTitle = "wxWindows Porting Guide"
+truncateFilenames = yes
+combineSubSections = yes
+\overview [2] {\rtfonly{See also }\settransparency{on}\sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}\settransparency{off}}
+\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
+\sethotspotcolour{on}\sethotspotunderline{on}}
+\docparam [2]{\parskip{0}{\it #1}\par\parskip{10}\indented{1cm}{#2}}
+\wxheading [1]{{\bf \fcol{blue}{#1}}}
+\const [0] {{\bf const}}
+\constfunc [3] {{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}}
+
--- /dev/null
+% LaTeX style file
+% Name: texhelp.sty
+% Author: Julian Smart
+%
+% Purpose
+% -------
+% Style file to enable the simultaneous preparation of printed LaTeX and on-line
+% hypertext manuals.
+% Use in conjunction with Tex2RTF (see Tex2RTF documentation).
+%
+% Note that if a non-ASCII character starts a newline and there should be a space
+% between the last word on the previous line and the first word on this line,
+% you need to use \rtfsp to generate a space in Windows Help. \rtfsp is ignored
+% in all other formats.
+%
+% Julian Smart
+% Artificial Intelligence Applications Institute
+%
+%
+% ============== C++/CLIPS Documentation Facilities ==============
+%
+% Each class definition should be typeset with e.g.
+%
+% \section{\class{Name}: Parent}
+%
+% followed by a description of the class.
+% Each member should follow:
+%
+% \membersection{wxName::Member}
+%
+% with a description of what this member does.
+% Then, one (or more if overloaded) member (function) in detail:
+%
+% \func{return type}{name}{args}
+% or
+% \member{type}{name}
+%
+% where args is a list of \param{type}{name}, ...
+
+% Function, e.g.
+% e.g. to typeset
+%
+% void DoIt(char *string);
+%
+% write:
+%
+% \func{void}{DoIt}{\param{char *}{string}}
+%
+
+\newcommand{\func}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\it #1} {\bf #2}\index{#2}}(#3)}
+
+% For function/type definition where the name is a pointer,
+% e.g. to typeset
+%
+% typedef void (*wxFunction)(wxObject&)
+%
+% write:
+%
+% \pfunc{typedef void}{wxFunction}{param{wxObject&}}
+
+\newcommand{\pfunc}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\it #1} ({\bf *#2})\index{#2}}(#3)}
+
+% Use an ordinary \section command for class name definitions.
+
+% This is used for a member, such as wxBitmap: GetDepth
+\newcommand{\membersection}[1]{\subsection*{#1}\index{#1}}
+
+% CLIPS function
+\newcommand{\clipsfunc}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\bf #1} ({\bf #2}\index{#2}}#3)}
+
+\newcommand{\clipssection}[1]{\chapter{#1}}
+
+% This is used for a CLIPS function name
+\newcommand{\functionsection}[1]{\subsection*{#1}}
+
+% Member: a type and a name
+\newcommand{\member}[2]{{\bf #1 \it #2}}
+
+% C++ Parameter: a type and a name (no intervening space)
+\newcommand{\param}[2]{{\it #1}{\bf #2}}
+
+% CLIPS Parameter: a type and a name (one intervening space)
+\newcommand{\cparam}[2]{{\bf #1} {\it #2}}
+
+% Class: puts in index
+\newcommand{\class}[1]{#1\index{#1}}
+
+% Void type
+\newcommand{\void}{{\it void}}
+
+% Typeset destructor
+\newcommand{\destruct}[1]{{$\sim$}#1}
+
+% Typeset insert/extract operators
+\newcommand{\cinsert}{$<<$}
+\newcommand{\cextract}{$>>$}
+
+
+% =================== Hypertext facilities ===================
+%
+% To insert hyperlinks (or references, in Latex), \label the sections
+% or membersections \label{ref-label} immediately after the section, on the same line,
+% and use \helpref{text-to-show}{ref-label} to make a reference.
+%
+
+% Type text with section reference
+\newcommand{\helpref}[2]{{\it #1} (p.\ \pageref{#2}) }
+
+% Type text with URL in verbatim mode
+\newcommand{\urlref}[2]{#1 (\verb$#2$)}
+
+% Don't typeset section number in LaTeX
+\newcommand{\helprefn}[2]{{\it #1}}
+
+% Like helpref, but popup text in WinHelp instead of hyperlinked
+\newcommand{\popref}[2]{{\it #1}}
+
+% Like footnote, but popup text.
+\newcommand{\footnotepopup}[2]{{\it #1}\footnote{#2}}
+
+% =================== On-line help specific macros ===================
+%
+
+% Global document font size/family, help only.
+\newcommand{\helpfontsize}[1]{}
+\newcommand{\helpfontfamily}[1]{}
+
+% Ignore in all on-line help
+\newcommand{\helpignore}[1]{#1}
+% Only print in all on-line help
+\newcommand{\helponly}[1]{}
+
+% Ignore in LaTeX
+\newcommand{\latexignore}[1]{}
+% Only print in LaTeX
+\newcommand{\latexonly}[1]{#1}
+
+% Ignore in linear RTF
+\newcommand{\rtfignore}[1]{#1}
+% Only print in linear RTF
+\newcommand{\rtfonly}[1]{}
+
+% Ignore in WinHelp RTF
+\newcommand{\winhelpignore}[1]{#1}
+% Only print in WinHelp RTF
+\newcommand{\winhelponly}[1]{}
+
+% Ignore in wxHelp
+\newcommand{\xlpignore}[1]{#1}
+% Only print in wxHelp
+\newcommand{\xlponly}[1]{}
+
+% Ignore in HTML
+\newcommand{\htmlignore}[1]{#1}
+% Only print in HTML
+\newcommand{\htmlonly}[1]{}
+
+% Input a file only for help system (binder thickness is not a limitation
+% in help systems!)
+\newcommand{\helpinput}[1]{}
+
+\newcommand{\rtfsp}{ } % Force a space in RTF, ignore in Latex
+
+% =================== Miscellaneous macros ===================
+%
+% Headings consistent with generated ones
+\newcommand{\myheading}[1]{\vspace*{25pt}
+\begin{flushleft}
+{\LARGE \bf #1}
+\end{flushleft}
+\vskip 20pt
+}
+
+% Heading with entry in contents page.
+\newcommand{\chapterheading}[1]{\myheading{#1}
+\addcontentsline{toc}{chapter}{#1}}
+
+\newcommand{\sectionheading}[1]{\myheading{#1}
+\addcontentsline{toc}{section}{#1}}
+
+% Glossary environment
+\newenvironment{helpglossary}{\newpage\chapterheading{Glossary}\begin{description}}{\end{description}}
+
+% Glossary entry
+\newcommand{\gloss}[1]{\item[#1]\index{#1}}
+
+% Image: EPS in Latex, BMP or MF (whatever's available) in RTF. Requires psbox.
+\newcommand{\image}[2]{\psboxto(#1){#2}}
+
+% Image, left aligned (HTML)
+\newcommand{\imager}[2]{\psboxto(#1){#2}}
+
+% Image, right aligned (HTML)
+\newcommand{\imagel}[2]{\psboxto(#1){#2}}
+
+% Imagemap: principally for HTML only. In Latex,
+% acts like \image.
+\newcommand{\imagemap}[3]{\psboxto(#1){#2}}
+
+% Headers and footers
+% \setheader{EvenPageLeft}{EvenPageCentre}{EvenPageRight}
+% {OddPageLeft}{OddPageCentre}{OddPageRight}
+\newcommand{\setheader}[6]{
+\lhead[\fancyplain{}{#1}]{\fancyplain{}{#4}}
+\chead[\fancyplain{}{#2}]{\fancyplain{}{#5}}
+\rhead[\fancyplain{}{#3}]{\fancyplain{}{#6}}
+}
+
+% \setfooter{EvenPageLeft}{EvenPageCentre}{EvenPageRight}
+% {OddPageLeft}{OddPageCentre}{OddPageRight}
+\newcommand{\setfooter}[6]{
+\lfoot[\fancyplain{#1}{#1}]{\fancyplain{#4}{#4}}
+\cfoot[\fancyplain{#2}{#2}]{\fancyplain{#5}{#5}}
+\rfoot[\fancyplain{#3}{#3}]{\fancyplain{#6}{#6}}
+}
+
+% Needed for telling RTF where margin paragraph should go
+% in mirrored margins mode.
+\newcommand{\marginpareven}[1]{\hspace*{0pt}\marginpar{#1}}
+\newcommand{\marginparodd}[1]{\hspace*{0pt}\marginpar{#1}}
+
+% Environment for two-column table popular in WinHelp and manuals.
+\newcommand{\twocolwidtha}[1]{\def\twocolwidthaval{#1}}
+\newcommand{\twocolwidthb}[1]{\def\twocolwidthbval{#1}}
+\newcommand{\twocolspacing}[1]{\def\twocolspacingval{#1}}
+
+\twocolwidtha{3cm}
+\twocolwidthb{8.5cm}
+\twocolspacing{2}
+
+\newcommand{\twocolitem}[2]{#1 & #2\\}
+\newcommand{\twocolitemruled}[2]{#1 & #2\\\hline}
+
+\newenvironment{twocollist}{\renewcommand{\arraystretch}{\twocolspacingval}\begin{tabular}{lp{\twocolwidthbval}}}%
+{\end{tabular}\renewcommand{\arraystretch}{1}}
+
+% Specifying table rows for RTF compatibility
+\newcommand{\row}[1]{#1\\}
+
+% Use for the last ruled row for correct RTF generation.
+\newcommand{\ruledrow}[1]{#1\\\hline}
+
+% Indentation environment. Arg1 is left margin size
+\newenvironment{indented}[1]{\begin{list}{}{\leftmargin=#1}\item[]}%
+{\end{list}}
+
+% Framed box of text, normal formatting.
+\newcommand{\normalbox}[1]{\fbox{\vbox{#1}}}
+% Double-framed box of text.
+\newcommand{\normalboxd}[1]{\fbox{\fbox{\vbox{#1}}}}
+
+% WITHDRAWN -- can't do in RTF, easily.
+% Framed box of text, horizontally centred. Ragged right within box.
+% \newcommand{\centeredbox}[2]{\begin{center}\fbox{\parbox{#1}{\raggedright#2}}\end{center}}
+% Double-framed box of text, horizontally centred. Ragged right within box.
+% \newcommand{\centeredboxd}[2]{\begin{center}\fbox{\fbox{\parbox{#1}{\raggedright#2}}}\end{center}}
+
+% toocomplex environment: simply prints the argument in LaTeX,
+% comes out verbatim in all generated formats.
+\newenvironment{toocomplex}{}{}
+
+% Colour: dummy commands since LaTeX doesn't support colour.
+% \definecolour{name}{red}{blue}{green}
+% \fcol{name}{text} ; Foreground
+% \bcol{name}{text} ; Background
+\newcommand{\definecolour}[4]{}
+\newcommand{\definecolor}[4]{}
+\newcommand{\fcol}[2]{#2}
+\newcommand{\bcol}[2]{#2}
+\newcommand{\sethotspotcolour}[1]{}
+\newcommand{\sethotspotunderline}[1]{}
+\newcommand{\settransparency}[1]{}
+\newcommand{\backslashraw}[0]{}
+\newcommand{\lbraceraw}[0]{}
+\newcommand{\rbraceraw}[0]{}
+\newcommand{\registered}[0]{(r)}
+\newcommand{\background}[1]{}
+\newcommand{\textcolour}[1]{}
+\newcommand{\overview}[2]{See \helpref{#1}{#2}.}
+\newcommand{\docparam}[2]{{\it #1}\begin{list}{}{\leftmargin=1cm}\item[]
+#2%
+\end{list}}
+\newcommand{\wxheading}[1]{{\bf #1}}
+\newcommand{\const}[0]{{\bf const}}
+\newcommand{\constfunc}[3]{{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}}
+
--- /dev/null
+\section{\class{wxActivateEvent}}\label{wxactivateevent}
+
+An activate event is sent when a window or application is being activated
+or deactivated.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process an activate event, use these event handler macros to direct input to a member
+function that takes a wxActivateEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_ACTIVATE(func)}}{Process a wxEVT\_ACTIVATE event.}
+\twocolitem{{\bf EVT\_ACTIVATE\_APP(func)}}{Process a wxEVT\_ACTIVATE\_APP event.}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+A top-level window (a dialog or frame) receives an activate event when is
+being activated or deactivated. This is indicated visually by the title
+bar changing colour, and a subwindow gaining the keyboard focus.
+
+An application is activated or deactivated when one of its frames becomes activated,
+or a frame becomes inactivate resulting in all application frames being inactive. (Windows only)
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnActivate}{wxwindowonactivate},\rtfsp
+\helpref{wxApp::OnActivate}{wxapponactivate},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxActivateEvent::wxActivateEvent}
+
+\func{}{wxActivateEvent}{\param{WXTYPE }{eventType = 0}, \param{int }{id = 0}}
+
+Constructor.
+
+\membersection{wxActivateEvent::m\_active}
+
+\member{bool}{m\_active}
+
+TRUE if the window or application was activated.
+
+\membersection{wxActivateEvent::GetActive}\label{wxactivateeventgetactive}
+
+\constfunc{bool}{GetActive}{\void}
+
+Returns TRUE if the application or window is being activated, FALSE otherwise.
+
--- /dev/null
+\section{\class{wxApp}}\label{wxapp}
+
+The {\bf wxApp} class represents the application itself. It is used
+to:
+
+\begin{itemize}\itemsep=0pt
+\item set and get application-wide properties;
+\item implement the windowing system message or event loop;
+\item initiate application processing via \helpref{wxApp::OnInit}{wxapponinit};
+\item allow default processing of events not handled by other
+objects in the application.
+\end{itemize}
+
+You should use the macro IMPLEMENT\_APP(appClass) in your application implementation
+file to tell wxWindows how to create an instance of your application class.
+
+Use DECLARE\_APP(appClass) in a header file if you want the wxGetApp function (which returns
+a reference to your application object) to be visible to other files.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxApp overview}{wxappoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxApp::wxApp}
+
+\func{void}{wxApp}{\param{int}{ language = wxLANGUAGE\_ENGLISH}}
+
+Constructor. Called implicitly with a definition of a wxApp object.
+
+The argument is a language identifier; this is an experimental
+feature and will be expanded and documented in future versions.
+
+TODO: completely rewrite the language stuff.
+
+\membersection{wxApp::\destruct{wxApp}}
+
+\func{void}{\destruct{wxApp}}{\void}
+
+Destructor. Will be called implicitly on program exit if the wxApp
+object is created on the stack.
+
+\membersection{wxApp::argc}\label{wxappargc}
+
+\member{int}{argc}
+
+Number of command line arguments (after environment-specific processing).
+
+\membersection{wxApp::argv}\label{wxappargv}
+
+\member{char **}{argv}
+
+Command line arguments (after environment-specific processing).
+
+\membersection{wxApp::CreateLogTarget}\label{wxappcreatelogtarget}
+
+\func{virtual wxLog*}{CreateLogTarget}{\void}
+
+Creates a wxLog class for the application to use for logging errors. The default
+implementation returns a new wxLogGui class.
+
+\wxheading{See also}
+
+\helpref{wxLog}{wxlog}
+
+\membersection{wxApp::Dispatch}\label{wxappdispatch}
+
+\func{void}{Dispatch}{\void}
+
+Dispatches the next event in the windowing system event queue.
+
+This can be used for programming event loops, e.g.
+
+\begin{verbatim}
+ while (app.Pending())
+ Dispatch();
+\end{verbatim}
+
+\wxheading{See also}
+
+\helpref{wxApp::Pending}{wxapppending}
+
+\membersection{wxApp::GetAppName}\label{wxappgetappname}
+
+\constfunc{wxString}{GetAppName}{\void}
+
+Returns the application name.
+
+\wxheading{Remarks}
+
+wxWindows sets this to a reasonable default before
+calling \helpref{wxApp::OnInit}{wxapponinit}, but the application can reset it at will.
+
+\membersection{wxApp::GetAuto3D}\label{wxappgetauto3d}
+
+\constfunc{bool}{GetAuto3D}{\void}
+
+Returns TRUE if 3D control mode is on, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxApp::SetAuto3D}{wxappsetauto3d}
+
+\membersection{wxApp::GetClassName}\label{wxappgetclassname}
+
+\constfunc{wxString}{GetClassName}{\void}
+
+Gets the class name of the application. The class name may be used in a platform specific
+manner to refer to the application.
+
+\wxheading{See also}
+
+\helpref{wxApp::SetClassName}{wxappsetclassname}
+
+\membersection{wxApp::GetExitOnDelete}\label{wxappgetexitondelete}
+
+\constfunc{bool}{GetExitOnDelete}{\void}
+
+Returns TRUE if the application will exit when the top-level window is deleted, FALSE
+otherwise.
+
+\wxheading{See also}
+
+\helpref{wxApp::SetExitOnDelete}{wxappsetexitondelete}
+
+\membersection{wxApp::GetPrintMode}\label{wxappgetprintmode}
+
+\constfunc{bool}{GetPrintMode}{\void}
+
+Returns the print mode: see \helpref{wxApp::SetPrintMode}{wxappsetprintmode}.
+
+\membersection{wxApp::GetTopWindow}\label{wxappgettopwindow}
+
+\constfunc{wxWindow *}{GetTopWindow}{\void}
+
+Returns a pointer to the top window.
+
+\wxheading{See also}
+
+\helpref{wxApp::SetTopWindow}{wxappsettopwindow}
+
+\membersection{wxApp::ExitMainLoop}\label{wxappexitmainloop}
+
+\func{void}{ExitMainLoop}{\void}
+
+Call this to explicitly exit the main message (event) loop.
+You should normally exit the main loop (and the application) by deleting
+the top window.
+
+\membersection{wxApp::Initialized}\label{wxappinitialized}
+
+\func{bool}{Initialized}{\void}
+
+Returns TRUE if the application has been initialized (i.e. if\rtfsp
+\helpref{wxApp::OnInit}{wxapponinit} has returned successfully). This can be useful for error
+message routines to determine which method of output is best for the
+current state of the program (some windowing systems may not like
+dialogs to pop up before the main loop has been entered).
+
+\membersection{wxApp::MainLoop}\label{wxappmainloop}
+
+\func{int}{MainLoop}{\void}
+
+Called by wxWindows on creation of the application. Override this if you wish
+to provide your own (environment-dependent) main loop.
+
+\wxheading{Return value}
+
+Returns 0 under X, and the wParam of the WM\_QUIT message under Windows.
+
+\membersection{wxApp::OnActivate}\label{wxapponactivate}
+
+\func{void}{OnActivate}{\param{wxActivateEvent\& }{event}}
+
+Provide this member function to know whether the application is being
+activated or deactivated (Windows only).
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnActivate}{wxwindowonactivate}, \helpref{wxActivateEvent}{wxactivateevent}
+
+\membersection{wxApp::OnExit}\label{wxapponexit}
+
+\func{int}{OnExit}{\void}
+
+Provide this member function for any processing which needs to be done as
+the application is about to exit.
+
+\membersection{wxApp::OnCharHook}\label{wxapponcharhook}
+
+\func{void}{OnCharHook}{\param{wxKeyEvent\&}{ event}}
+
+This event handler function is called (under Windows only) to allow the window to intercept keyboard events
+before they are processed by child windows.
+
+\wxheading{Parameters}
+
+\docparam{event}{The keypress event.}
+
+\wxheading{Remarks}
+
+Use the wxEVT\_CHAR\_HOOK macro in your event table.
+
+If you use this member, you can selectively consume keypress events by calling\rtfsp
+\helpref{wxEvent::Skip}{wxeventskip} for characters the application is not interested in.
+
+\wxheading{See also}
+
+\helpref{wxKeyEvent}{wxkeyevent}, \helpref{wxWindow::OnChar}{wxwindowonchar},\rtfsp
+\helpref{wxWindow::OnCharHook}{wxwindowoncharhook}, \helpref{wxDialog::OnCharHook}{wxdialogoncharhook}
+
+\membersection{wxApp::OnIdle}\label{wxapponidle}
+
+\func{void}{OnIdle}{\param{wxIdleEvent\& }{event}}
+
+Override this member function for any processing which needs to be done
+when the application is idle. You should call wxApp::OnIdle from your own function,
+since this forwards OnIdle events to windows and also performs garbage collection for
+windows whose destruction has been delayed.
+
+wxWindows' strategy for OnIdle processing is as follows. After pending user interface events for an
+application have all been processed, wxWindows sends an OnIdle event to the application object. wxApp::OnIdle itself
+sends an OnIdle event to each application window, allowing windows to do idle processing such as updating
+their appearance. If either wxApp::OnIdle or a window OnIdle function requested more time, by
+caling \helpref{wxIdleEvent::ReqestMore}{wxidleeventrequestmore}, wxWindows will send another OnIdle
+event to the application event. This will occur in a loop until either a user event is found to be
+pending, or OnIdle requests no more time. Then all pending user events are processed until the system
+goes idle again, when OnIdle is called, and so on.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnIdle}{wxwindowonidle}, \helpref{wxIdleEvent}{wxidleevent},\rtfsp
+\helpref{wxWindow::SendIdleEvents}{wxappsendidleevents}
+
+\membersection{wxApp::OnInit}\label{wxapponinit}
+
+\func{bool}{OnInit}{\void}
+
+This must be provided by the application, and will usually create the
+application's main window, calling \helpref{wxApp::SetTopWindow}{wxappsettopwindow}.
+
+Return TRUE to continue processing, FALSE to exit the application.
+
+\membersection{wxApp::Pending}\label{wxapppending}
+
+\func{bool}{Pending}{\void}
+
+Returns TRUE if unprocessed events are in the window system event queue
+(MS Windows and Motif).
+
+\wxheading{See also}
+
+\helpref{wxApp::Dispatch}{wxappdispatch}
+
+\membersection{wxApp::ProcessMessage}\label{wxappprocessmessage}
+
+\func{bool}{ProcessMessage}{\param{MSG *}{msg}}
+
+Windows-only function for processing a message. This function
+is called from the main message loop, checking for windows that
+may wish to process it. The function returns TRUE if the message
+was processed, FALSE otherwise. If you use wxWindows with another class
+library with its own message loop, you should make sure that this
+function is called to allow wxWindows to receive messages. For example,
+to allow co-existance with the Microsoft Foundation Classes, override
+the PreTranslateMessage function:
+
+\begin{verbatim}
+// Provide wxWindows message loop compatibility
+BOOL CTheApp::PreTranslateMessage(MSG *msg)
+{
+ if (wxTheApp && wxTheApp->ProcessMessage(msg))
+ return TRUE;
+ else
+ return CWinApp::PreTranslateMessage(msg);
+}
+\end{verbatim}
+
+\membersection{wxApp::SendIdleEvents}\label{wxappsendidleevents}
+
+\func{bool}{SendIdleEvents}{\void}
+
+Sends idle events to all top-level windows.
+
+\func{bool}{SendIdleEvents}{\param{wxWindow*}{ win}}
+
+Sends idle events to a window and its children.
+
+\wxheading{Remarks}
+
+These functions poll the top-level windows, and their children, for idle event processing.
+If TRUE is returned, more OnIdle processing is requested by one or more window.
+
+\wxheading{See also}
+
+\helpref{wxApp::OnIdle}{wxapponidle}, \helpref{wxWindow::OnIdle}{wxwindowonidle}, \helpref{wxIdleEvent}{wxidleevent}
+
+\membersection{wxApp::SetAppName}\label{wxappsetappname}
+
+\func{void}{SetAppName}{\param{const wxString\& }{name}}
+
+Sets the name of the application. The name may be used in dialogs
+(for example by the document/view framework). A default name is set by
+wxWindows.
+
+\wxheading{See also}
+
+\helpref{wxApp::GetAppName}{wxappgetappname}
+
+\membersection{wxApp::SetAuto3D}\label{wxappsetauto3d}
+
+\func{void}{SetAuto3D}{\param{const bool}{ auto3D}}
+
+Switches automatic 3D controls on or off.
+
+\wxheading{Parameters}
+
+\docparam{auto3D}{If TRUE, all controls will be created with 3D appearances unless
+overridden for a control or dialog. The default is TRUE}
+
+\wxheading{Remarks}
+
+This has an effect on Windows only.
+
+\wxheading{See also}
+
+\helpref{wxApp::GetAuto3D}{wxappgetauto3d}
+
+\membersection{wxApp::SetClassName}\label{wxappsetclassname}
+
+\func{void}{SetClassName}{\param{const wxString\& }{name}}
+
+Sets the class name of the application. This may be used in a platform specific
+manner to refer to the application.
+
+\wxheading{See also}
+
+\helpref{wxApp::GetClassName}{wxappgetclassname}
+
+\membersection{wxApp::SetExitOnDelete}\label{wxappsetexitondelete}
+
+\func{void}{SetExitOnDelete}{\param{bool}{ flag}}
+
+Allows the programmer to specify whether the application will exit when the
+top-level frame is deleted.
+
+\wxheading{Parameters}
+
+\docparam{flag}{If TRUE (the default), the application will exit when the top-level frame is
+deleted. If FALSE, the application will continue to run.}
+
+\wxheading{Remarks}
+
+Currently, setting this to FALSE only has an effect under Windows.
+
+\membersection{wxApp::SetPrintMode}\label{wxappsetprintmode}
+
+\func{void}{SetPrintMode}{\param{int}{ mode}}
+
+Sets the print mode determining what printing facilities will be
+used by the printing framework.
+
+\wxheading{Parameters}
+
+\docparam{mode}{This can be one of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxPRINT\_WINDOWS}}{Under Windows, use Windows printing (wxPrinterDC). This is the
+default under Windows.}
+\twocolitem{{\bf wxPRINT\_POSTSCRIPT}}{Use PostScript printing (wxPostScriptDC). This is the
+default for non-Windows platforms.}
+\end{twocollist}
+}%
+
+\membersection{wxApp::SetTopWindow}\label{wxappsettopwindow}
+
+\func{void}{SetTopWindow}{\param{wxWindow* }{window}}
+
+Sets the `top' window. You should normally call this from within \helpref{wxApp::OnInit}{wxapponinit} to
+let wxWindows know which is the main window.
+
+\wxheading{Parameters}
+
+\docparam{window}{The new top window.}
+
+\wxheading{See also}
+
+\helpref{wxApp::GetTopWindow}{wxappgettopwindow}, \helpref{wxApp::OnInit}{wxapponinit}
+
--- /dev/null
+\section{\class{wxBitmapButton}}\label{wxbitmapbutton}
+
+A bitmap button is a control that contains a bitmap.
+It may be placed on a \helpref{dialog box}{wxdialog} or \helpref{panel}{wxpanel}, or indeed
+almost any other window.
+
+\wxheading{Derived from}
+
+\helpref{wxButton}{wxbutton}\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+A bitmap button can be supplied with a single bitmap, and wxWindows will draw
+all button states using this bitmap. If the application needs more control, additional bitmaps for
+the selected state, unpressed focussed state, and greyed-out state may be supplied.
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxBU\_AUTODRAW}}{If
+this is specified, the button will be drawn automatically using the label bitmap only, providing
+a 3D-look border. If this style is not specified, the button will be drawn without borders and using all
+provided bitmaps.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxButton}{wxbutton}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxBitmapButton::wxBitmapButton}\label{wxbitmapbuttonconstr}
+
+\func{}{wxBitmapButton}{\void}
+
+Default constructor.
+
+\func{}{wxBitmapButton}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id}, \param{const wxBitmap\& }{bitmap},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxBU\_AUTODRAW}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``button"}}
+
+Constructor, creating and showing a button.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Button identifier. A value of -1 indicates a default value.}
+
+\docparam{bitmap}{Bitmap to be displayed.}
+
+\docparam{pos}{Button position.}
+
+\docparam{size}{Button size. If the default size (-1, -1) is specified then the button is sized
+appropriately for the bitmap.}
+
+\docparam{style}{Window style. See \helpref{wxBitmapButton}{wxbitmapbutton}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{Remarks}
+
+The {\it bitmap} parameter is normally the only bitmap you need to provide, and wxWindows will
+draw the button correctly in its different states. If you want more control, call
+any of the functions \helpref{wxBitmapButton::SetBitmapSelected}{wxbitmapbuttonsetbitmapselected},\rtfsp
+\helpref{wxBitmapButton::SetBitmapFocus}{wxbitmapbuttonsetbitmapfocus},\rtfsp
+\helpref{wxBitmapButton::SetBitmapDisabled}{wxbitmapbuttonsetbitmapdisabled}.
+
+Note that the bitmap passed is smaller than the actual button created.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::Create}{wxbitmapbuttoncreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxBitmapButton::\destruct{wxBitmapButton}}
+
+\func{}{\destruct{wxBitmapButton}}{\void}
+
+Destructor, destroying the button.
+
+\membersection{wxBitmapButton::Create}\label{wxbitmapbuttoncreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id}, \param{const wxBitmap\& }{bitmap},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``button"}}
+
+Button creation function for two-step creation. For more details, see \helpref{wxBitmapButton::wxBitmapButton}{wxbitmapbuttonconstr}.
+
+\membersection{wxBitmapButton::GetBitmapDisabled}\label{wxbitmapbuttongetbitmapdisabled}
+
+\constfunc{wxBitmap\&}{GetBitmapLabel}{\void}
+
+Returns the bitmap for the disabled state.
+
+\wxheading{Return value}
+
+A reference to the disabled state bitmap.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::SetBitmapDisabled}{wxbitmapbuttonsetbitmapdisabled}
+
+\membersection{wxBitmapButton::GetBitmapFocus}\label{wxbitmapbuttongetbitmapfocus}
+
+\constfunc{wxBitmap\&}{GetBitmapFocus}{\void}
+
+Returns the bitmap for the focussed state.
+
+\wxheading{Return value}
+
+A reference to the focussed state bitmap.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::SetBitmapFocus}{wxbitmapbuttonsetbitmapfocus}
+
+\membersection{wxBitmapButton::GetBitmapLabel}\label{wxbitmapbuttongetbitmaplabel}
+
+\constfunc{wxBitmap\&}{GetBitmapLabel}{\void}
+
+Returns the label bitmap (the one passed to the constructor).
+
+\wxheading{Return value}
+
+A reference to the button's label bitmap.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::SetBitmapLabel}{wxbitmapbuttonsetbitmaplabel}
+
+\membersection{wxBitmapButton::GetBitmapSelected}\label{wxbitmapbuttongetbitmapselected}
+
+\constfunc{wxBitmap\&}{GetBitmapSelected}{\void}
+
+Returns the bitmap for the selected state.
+
+\wxheading{Return value}
+
+A reference to the selected state bitmap.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::SetBitmapSelected}{wxbitmapbuttonsetbitmapselected}
+
+\membersection{wxBitmapButton::SetBitmapDisabled}\label{wxbitmapbuttonsetbitmapdisabled}
+
+\func{void}{SetBitmapDisabled}{\param{const wxBitmap\& }{bitmap}}
+
+Sets the bitmap for the disabled button appearance.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap to set.}
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::GetBitmapDisabled}{wxbitmapbuttongetbitmapdisabled},\rtfsp
+\helpref{wxBitmapButton::SetBitmapLabel}{wxbitmapbuttonsetbitmaplabel},\rtfsp
+\helpref{wxBitmapButton::SetBitmapSelected}{wxbitmapbuttonsetbitmapselected},\rtfsp
+\helpref{wxBitmapButton::SetBitmapFocus}{wxbitmapbuttonsetbitmapfocus}
+
+\membersection{wxBitmapButton::SetBitmapFocus}\label{wxbitmapbuttonsetbitmapfocus}
+
+\func{void}{SetBitmapFocus}{\param{const wxBitmap\& }{bitmap}}
+
+Sets the bitmap for the button appearance when it has the keyboard focus.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap to set.}
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::GetBitmapFocus}{wxbitmapbuttongetbitmapfocus},\rtfsp
+\helpref{wxBitmapButton::SetBitmapLabel}{wxbitmapbuttonsetbitmaplabel},\rtfsp
+\helpref{wxBitmapButton::SetBitmapSelected}{wxbitmapbuttonsetbitmapselected},\rtfsp
+\helpref{wxBitmapButton::SetBitmapDisabled}{wxbitmapbuttonsetbitmapdisabled}
+
+\membersection{wxBitmapButton::SetBitmapLabel}\label{wxbitmapbuttonsetbitmaplabel}
+
+\func{void}{SetBitmapLabel}{\param{const wxBitmap\& }{bitmap}}
+
+Sets the bitmap label for the button.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap label to set.}
+
+\wxheading{Remarks}
+
+This is the bitmap used for the unselected state, and for all other states
+if no other bitmaps are provided.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::GetBitmapLabel}{wxbitmapbuttongetbitmaplabel}
+
+\membersection{wxBitmapButton::SetBitmapSelected}\label{wxbitmapbuttonsetbitmapselected}
+
+\func{void}{SetBitmapSelected}{\param{const wxBitmap\& }{bitmap}}
+
+Sets the bitmap for the selected (depressed) button appearance.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap to set.}
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton::GetBitmapSelected}{wxbitmapbuttongetbitmapselected},\rtfsp
+\helpref{wxBitmapButton::SetBitmapLabel}{wxbitmapbuttonsetbitmaplabel},\rtfsp
+\helpref{wxBitmapButton::SetBitmapFocus}{wxbitmapbuttonsetbitmapfocus},\rtfsp
+\helpref{wxBitmapButton::SetBitmapDisabled}{wxbitmapbuttonsetbitmapdisabled}
+
--- /dev/null
+\section{\class{wxBitmap}}\label{wxbitmap}
+
+%\overview{Overview}{wxbitmapoverview}
+%
+This class encapsulates the concept of a platform-dependent bitmap,
+either monochrome or colour.
+
+\wxheading{Derived from}
+
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxBitmap overview}{wxbitmapoverview}, \helpref{wxDC::Blit}{wxdcblit}, \helpref{wxIcon}{wxicon}, \helpref{wxCursor}{wxcursor}, \helpref{wxMemoryDC}{wxmemorydc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxBitmap::wxBitmap}\label{wxbitmapconstr}
+
+\func{}{wxBitmap}{\void}
+
+Default constructor.
+
+\func{}{wxBitmap}{\param{const wxBitmap\& }{bitmap}}
+
+\func{}{wxBitmap}{\param{const wxBitmap* }{bitmap}}
+
+Copy constructors.
+
+\func{}{wxBitmap}{\param{void*}{ data}, \param{const int}{ type}, \param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a bitmap from the given data, which can be of arbitrary type.
+
+\func{}{wxBitmap}{\param{const char}{ bits[]}, \param{const int}{ width}, \param{const int}{ height}\\
+ \param{const int}{ depth = 1}}
+
+Creates a bitmap from an array of bits.
+
+\func{}{wxBitmap}{\param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a new bitmap.
+
+\func{}{wxBitmap}{\param{const char**}{ bits}}
+
+Creates a bitmap from XPM data.
+
+\func{}{wxBitmap}{\param{const wxString\& }{name}, \param{const long}{ type}}
+
+Loads a bitmap from a file or resource.
+
+\wxheading{Parameters}
+
+\docparam{bits}{Specifies an array of pixel values.}
+
+\docparam{width}{Specifies the width of the bitmap.}
+
+\docparam{height}{Specifies the height of the bitmap.}
+
+\docparam{depth}{Specifies the depth of the bitmap. If this is omitted, the display depth of the
+screen is used.}
+
+\docparam{name}{This can refer to a resource name under MS Windows, or a filename under MS Windows and X.
+Its meaning is determined by the {\it flags} parameter.}
+
+\docparam{type}{May be one of the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_BMP}}}{Load a Windows bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_BMP\_RESOURCE}}}{Load a Windows bitmap from the resource database.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_GIF}}}{Load a GIF bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_XBM}}}{Load an X bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_XPM}}}{Load an XPM bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_RESOURCE}}}{Load a Windows resource name.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.
+If all possible wxWindows settings are used, the Windows platform supports BMP, BMP\_RESOURCE,
+XPM\_DATA, and XPM. Under X, the available formats are BMP, GIF, XBM, and XPM.}
+
+\wxheading{Remarks}
+
+The first form constructs a bitmap object with no data; an assignment or another member function such as Create
+or LoadFile must be called subsequently.
+
+The second and third forms provide copy constructors. Note that these do not copy the
+bitmap data, but instead a pointer to the data, keeping a reference count. They are therefore
+very efficient operations.
+
+The fourth form constructs a bitmap from data whose type and value depends on
+the value of the {\it type} argument.
+
+The fifth form constructs a (usually monochrome) bitmap from an array of pixel values, under both
+X and Windows.
+
+The sixth form constructs a new bitmap.
+
+The seventh form constructs a bitmap from pixmap (XPM) data, if wxWindows has been configured
+to incorporate this feature.
+
+To use this constructor, you must first include an XPM file. For
+example, assuming that the file {\tt mybitmap.xpm} contains an XPM array
+of character pointers called mybitmap:
+
+\begin{verbatim}
+#include "mybitmap.xpm"
+
+...
+
+wxBitmap *bitmap = new wxBitmap(mybitmap);
+\end{verbatim}
+
+The eighth form constructs a bitmap from a file or resource. {\it name} can refer
+to a resource name under MS Windows, or a filename under MS Windows and X.
+
+Under Windows, {\it type} defaults to wxBITMAP\_TYPE\_BMP\_RESOURCE.
+Under X, {\it type} defaults to wxBITMAP\_TYPE\_XBM.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::LoadFile}{wxbitmaploadfile}
+
+\membersection{wxBitmap::\destruct{wxBitmap}}
+
+\func{}{\destruct{wxBitmap}}{\void}
+
+Destroys the wxBitmap object and possibly the underlying bitmap data.
+Because reference counting is used, the bitmap may not actually be
+destroyed at this point - only when the reference count is zero will the
+data be deleted.
+
+If the application omits to delete the bitmap explicitly, the bitmap will be
+destroyed automatically by wxWindows when the application exits.
+
+Do not delete a bitmap that is selected into a memory device context.
+
+\membersection{wxBitmap::AddHandler}\label{wxbitmapaddhandler}
+
+\func{static void}{AddHandler}{\param{wxBitmapHandler*}{ handler}}
+
+Adds a handler to the end of the static list of format handlers.
+
+\docparam{handler}{A new bitmap format handler object. There is usually only one instance
+of a given handler class in an application session.}
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::CleanUpHandlers}
+
+\func{static void}{CleanUpHandlers}{\void}
+
+Deletes all bitmap handlers.
+
+This function is called by wxWindows on exit.
+
+\membersection{wxBitmap::Create}
+
+\func{virtual bool}{Create}{\param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a fresh bitmap. If the final argument is omitted, the display depth of
+the screen is used.
+
+\func{virtual bool}{Create}{\param{void*}{ data}, \param{const int}{ type}, \param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a bitmap from the given data, which can be of arbitrary type.
+
+\wxheading{Parameters}
+
+\docparam{width}{The width of the bitmap in pixels.}
+
+\docparam{height}{The height of the bitmap in pixels.}
+
+\docparam{depth}{The depth of the bitmap in pixels. If this is -1, the screen depth is used.}
+
+\docparam{data}{Data whose type depends on the value of {\it type}.}
+
+\docparam{type}{A bitmap type identifier - see \helpref{wxBitmap::wxBitmap}{wxbitmapconstr} for a list
+of possible values.}
+
+\wxheading{Return value}
+
+TRUE if the call succeeded, FALSE otherwise.
+
+\wxheading{Remarks}
+
+The first form works on all platforms. The portability of the second form depends on the
+type of data.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::wxBitmap}{wxbitmapconstr}
+
+\membersection{wxBitmap::FindHandler}
+
+\func{static wxBitmapHandler*}{FindHandler}{\param{const wxString\& }{name}}
+
+Finds the handler with the given name.
+
+\func{static wxBitmapHandler*}{FindHandler}{\param{const wxString\& }{extension}, \param{long}{ bitmapType}}
+
+Finds the handler associated with the given extension and type.
+
+\func{static wxBitmapHandler*}{FindHandler}{\param{long }{bitmapType}}
+
+Finds the handler associated with the given bitmap type.
+
+\docparam{name}{The handler name.}
+
+\docparam{extension}{The file extension, such as ``bmp".}
+
+\docparam{bitmapType}{The bitmap type, such as wxBITMAP\_TYPE\_BMP.}
+
+\wxheading{Return value}
+
+A pointer to the handler if found, NULL otherwise.
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::GetDepth}
+
+\constfunc{int}{GetDepth}{\void}
+
+Gets the colour depth of the bitmap. A value of 1 indicates a
+monochrome bitmap.
+
+\membersection{wxBitmap::GetHandlers}
+
+\func{static wxList\&}{GetHandlers}{\void}
+
+Returns the static list of bitmap format handlers.
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::GetHeight}\label{wxbitmapgetheight}
+
+\constfunc{int}{GetHeight}{\void}
+
+Gets the height of the bitmap in pixels.
+
+\membersection{wxBitmap::GetPalette}\label{wxbitmapgetpalette}
+
+\constfunc{wxPalette*}{GetPalette}{\void}
+
+Gets the associated palette (if any) which may have been loaded from a file
+or set for the bitmap.
+
+\wxheading{See also}
+
+\helpref{wxPalette}{wxpalette}
+
+\membersection{wxBitmap::GetMask}\label{wxbitmapgetmask}
+
+\constfunc{wxMask*}{GetMask}{\void}
+
+Gets the associated mask if any) which may have been loaded from a file
+or set for the bitmap.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::SetMask}{wxbitmapsetmask}, \helpref{wxMask}{wxmask}
+
+\membersection{wxBitmap::GetWidth}\label{wxbitmapgetwidth}
+
+\constfunc{int}{GetWidth}{\void}
+
+Gets the width of the bitmap in pixels.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::GetHeight}{wxbitmapgetheight}
+
+\membersection{wxBitmap::InitStandardHandlers}
+
+\func{static void}{InitStandardHandlers}{\void}
+
+Adds the standard bitmap format handlers, which, depending on wxWindows
+configuration, can be handlers for Windows bitmap, Windows bitmap resource, and XPM.
+
+This function is called by wxWindows on startup.
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::InsertHandler}
+
+\func{static void}{InsertHandler}{\param{wxBitmapHandler*}{ handler}}
+
+Adds a handler at the start of the static list of format handlers.
+
+\docparam{handler}{A new bitmap format handler object. There is usually only one instance
+of a given handler class in an application session.}
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::LoadFile}\label{wxbitmaploadfile}
+
+\func{bool}{LoadFile}{\param{const wxString\&}{ name}, \param{const long}{ type}}
+
+Loads a bitmap from a file or resource.
+
+\wxheading{Parameters}
+
+\docparam{name}{Either a filename or a Windows resource name.
+The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{One of the following values:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxBITMAP\_TYPE\_BMP}}{Load a Windows bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_BMP\_RESOURCE}}{Load a Windows bitmap from the resource database.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_GIF}}{Load a GIF bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XBM}}{Load an X bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Load an XPM bitmap file.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{Remarks}
+
+A palette may be associated with the bitmap if one exists (especially for
+colour Windows bitmaps), and if the code supports it. You can check
+if one has been created by using the \helpref{GetPalette}{wxbitmapgetpalette} member.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::SaveFile}{wxbitmapsavefile}
+
+\membersection{wxBitmap::Ok}\label{wxbitmapok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if bitmap data is present.
+
+\membersection{wxBitmap::RemoveHandler}
+
+\func{static bool}{RemoveHandler}{\param{const wxString\& }{name}}
+
+Finds the handler with the given name, and removes it. The handler
+is not deleted.
+
+\docparam{name}{The handler name.}
+
+\wxheading{Return value}
+
+TRUE if the handler was found and removed, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxBitmapHandler}{wxbitmaphandler}
+
+\membersection{wxBitmap::SaveFile}\label{wxbitmapsavefile}
+
+\func{bool}{SaveFile}{\param{const wxString\& }{name}, \param{int}{ type}, \param{wxPalette* }{palette = NULL}}
+
+Saves a bitmap in the named file.
+
+\wxheading{Parameters}
+
+\docparam{name}{A filename. The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{One of the following values:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxBITMAP\_TYPE\_BMP}}{Save a Windows bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_GIF}}{Save a GIF bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XBM}}{Save an X bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Save an XPM bitmap file.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.}
+
+\docparam{palette}{An optional palette used for saving the bitmap. TODO: this parameter should
+probably be eliminated; instead the app should set the palette before saving.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{Remarks}
+
+Depending on how wxWindows has been configured, not all formats may be available.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::LoadFile}{wxbitmaploadfile}
+
+\membersection{wxBitmap::SetDepth}\label{wxbitmapsetdepth}
+
+\func{void}{SetDepth}{\param{int }{depth}}
+
+Sets the depth member (does not affect the bitmap data).
+
+\wxheading{Parameters}
+
+\docparam{depth}{Bitmap depth.}
+
+\membersection{wxBitmap::SetHeight}\label{wxbitmapsetheight}
+
+\func{void}{SetHeight}{\param{int }{height}}
+
+Sets the height member (does not affect the bitmap data).
+
+\wxheading{Parameters}
+
+\docparam{height}{Bitmap height in pixels.}
+
+\membersection{wxBitmap::SetMask}\label{wxbitmapsetmask}
+
+\func{void}{SetMask}{\param{wxMask* }{mask}}
+
+Sets the mask for this bitmap.
+
+\wxheading{Remarks}
+
+The bitmap object owns the mask once this has been called.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::GetMask}{wxbitmapgetmask}, \helpref{wxMask}{wxmask}
+
+\membersection{wxBitmap::SetOk}
+
+\func{void}{SetOk}{\param{int }{isOk}}
+
+Sets the validity member (does not affect the bitmap data).
+
+\wxheading{Parameters}
+
+\docparam{isOk}{Validity flag.}
+
+\membersection{wxBitmap::SetPalette}\label{wxbitmapsetpalette}
+
+\func{void}{SetPalette}{\param{wxPalette* }{palette}}
+
+Sets the associated palette: it will be deleted in the wxBitmap
+destructor, so if you do not wish it to be deleted automatically,
+reset the palette to NULL before the bitmap is deleted.
+
+\wxheading{Parameters}
+
+\docparam{palette}{The palette to set.}
+
+\wxheading{Remarks}
+
+The bitmap object owns the palette once this has been called.
+
+\wxheading{See also}
+
+\helpref{wxPalette}{wxpalette}
+
+\membersection{wxBitmap::SetWidth}
+
+\func{void}{SetWidth}{\param{int }{width}}
+
+Sets the width member (does not affect the bitmap data).
+
+\wxheading{Parameters}
+
+\docparam{width}{Bitmap width in pixels.}
+
+\membersection{wxBitmap::operator $=$}
+
+\func{wxBitmap\& }{operator $=$}{\param{const wxBitmap\& }{bitmap}}
+
+Assignment operator. This operator does not copy any data, but instead
+passes a pointer to the data in {\it bitmap} and increments a reference
+counter. It is a fast operation.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{Bitmap to assign.}
+
+\wxheading{Return value}
+
+Returns 'this' object.
+
+\membersection{wxBitmap::operator $==$}
+
+\func{bool}{operator $==$}{\param{const wxBitmap\& }{bitmap}}
+
+Equality operator. This operator tests whether the internal data pointers are
+equal (a fast test).
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{Bitmap to compare with 'this'}
+
+\wxheading{Return value}
+
+Returns TRUE if the bitmaps were effectively equal, FALSE otherwise.
+
+\membersection{wxBitmap::operator $!=$}
+
+\func{bool}{operator $!=$}{\param{const wxBitmap\& }{bitmap}}
+
+Inequality operator. This operator tests whether the internal data pointers are
+unequal (a fast test).
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{Bitmap to compare with 'this'}
+
+\wxheading{Return value}
+
+Returns TRUE if the bitmaps were unequal, FALSE otherwise.
+
+\section{\class{wxBitmapHandler}}\label{wxbitmaphandler}
+
+\overview{Overview}{wxbitmapoverview}
+
+This is the base class for implementing bitmap file loading/saving, and bitmap creation from data.
+It is used within wxBitmap and is not normally seen by the application.
+
+If you wish to extend the capabilities of wxBitmap, derive a class from wxBitmapHandler
+and add the handler using \helpref{wxBitmap::AddHandler}{wxbitmapaddhandler} in your
+application initialisation.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxBitmap}{wxbitmap}, \helpref{wxIcon}{wxicon}, \helpref{wxCursor}{wxcursor}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxBitmapHandler::wxBitmapHandler}\label{wxbitmaphandlerconstr}
+
+\func{}{wxBitmapHandler}{\void}
+
+Default constructor. In your own default constructor, initialise the members
+m\_name, m\_extension and m\_type.
+
+\membersection{wxBitmapHandler::\destruct{wxBitmapHandler}}
+
+\func{}{\destruct{wxBitmapHandler}}{\void}
+
+Destroys the wxBitmapHandler object.
+
+\membersection{wxBitmapHandler::Create}
+
+\func{virtual bool}{Create}{\param{wxBitmap* }{bitmap}, \param{void*}{ data}, \param{const int}{ type}, \param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a bitmap from the given data, which can be of arbitrary type. The wxBitmap object {\it bitmap} is
+manipulated by this function.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The wxBitmap object.}
+
+\docparam{width}{The width of the bitmap in pixels.}
+
+\docparam{height}{The height of the bitmap in pixels.}
+
+\docparam{depth}{The depth of the bitmap in pixels. If this is -1, the screen depth is used.}
+
+\docparam{data}{Data whose type depends on the value of {\it type}.}
+
+\docparam{type}{A bitmap type identifier - see \helpref{wxBitmapHandler::wxBitmapHandler}{wxbitmapconstr} for a list
+of possible values.}
+
+\wxheading{Return value}
+
+TRUE if the call succeeded, FALSE otherwise (the default).
+
+\membersection{wxBitmapHandler::GetName}
+
+\constfunc{wxString}{GetName}{\void}
+
+Gets the name of this handler.
+
+\membersection{wxBitmapHandler::GetExtension}
+
+\constfunc{wxString}{GetExtension}{\void}
+
+Gets the file extension associated with this handler.
+
+\membersection{wxBitmapHandler::GetType}
+
+\constfunc{long}{GetType}{\void}
+
+Gets the bitmap type associated with this handler.
+
+\membersection{wxBitmapHandler::LoadFile}\label{wxbitmaphandlerloadfile}
+
+\func{bool}{LoadFile}{\param{wxBitmap* }{bitmap}, \param{const wxString\&}{ name}, \param{const long}{ type}}
+
+Loads a bitmap from a file or resource, putting the resulting data into {\it bitmap}.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap object which is to be affected by this operation.}
+
+\docparam{name}{Either a filename or a Windows resource name.
+The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{See \helpref{wxBitmap::wxBitmap}{wxbitmapconstr} for values this can take.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::LoadFile}{wxbitmaploadfile}\\
+\helpref{wxBitmap::SaveFile}{wxbitmapsavefile}\\
+\helpref{wxBitmapHandler::SaveFile}{wxbitmaphandlersavefile}
+
+\membersection{wxBitmapHandler::SaveFile}\label{wxbitmaphandlersavefile}
+
+\func{bool}{SaveFile}{\param{wxBitmap* }{bitmap}, \param{const wxString\& }{name}, \param{int}{ type}, \param{wxPalette* }{palette = NULL}}
+
+Saves a bitmap in the named file.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap object which is to be affected by this operation.}
+
+\docparam{name}{A filename. The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{See \helpref{wxBitmap::wxBitmap}{wxbitmapconstr} for values this can take.}
+
+\docparam{palette}{An optional palette used for saving the bitmap. TODO: this parameter should
+probably be eliminated; instead the app should set the palette before saving.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxBitmap::LoadFile}{wxbitmaploadfile}\\
+\helpref{wxBitmap::SaveFile}{wxbitmapsavefile}\\
+\helpref{wxBitmapHandler::LoadFile}{wxbitmaphandlerloadfile}
+
+\membersection{wxBitmapHandler::SetName}
+
+\func{void}{SetName}{\param{const wxString\& }{name}}
+
+Sets the handler name.
+
+\wxheading{Parameters}
+
+\docparam{name}{Handler name.}
+
+\membersection{wxBitmapHandler::SetExtension}
+
+\func{void}{SetExtension}{\param{const wxString\& }{extension}}
+
+Sets the handler extension.
+
+\wxheading{Parameters}
+
+\docparam{extension}{Handler extension.}
+
+\membersection{wxBitmapHandler::SetType}
+
+\func{void}{SetType}{\param{long }{type}}
+
+Sets the handler type.
+
+\wxheading{Parameters}
+
+\docparam{name}{Handler type.}
+
+
--- /dev/null
+\chapter{Introduction}\label{introduction}
+\pagenumbering{arabic}%
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\section{What is wxWindows?}
+
+wxWindows is a C++ framework providing GUI (Graphical User
+Interface) and other facilities on more than one platform. It currently
+supports subsets of Motif, Xt and MS Windows (16-bit, Windows 95 and Windows NT).
+
+wxWindows was originally developed at the Artificial Intelligence
+Applications Institute, University of Edinburgh, for internal use.
+wxWindows has been released into the public domain in the hope
+that others will also find it useful. Version 2.0 is written and
+maintained by Julian Smart and Markus Holzem, with support from users.
+
+This manual discusses wxWindows in the context of multi-platform
+development.\helpignore{For more detail on the wxWindows version 2.0 API
+(Application Programming Interface) please refer to the separate
+wxWindows reference manual.}
+
+Please note that in the following, ``MS Windows" often refers to all
+platforms related to Microsoft Windows, including 16-bit and 32-bit
+variants, unless otherwise stated. All trademarks are acknowledged.
+
+\section{Why another cross-platform development tool?}
+
+wxWindows was developed to provide a cheap and flexible way to maximize
+investment in GUI application development. While a number of commercial
+class libraries already exist for cross-platform development,
+none met all of the following criteria:
+
+\begin{enumerate}\itemsep=0pt
+\item low price;
+\item source availability;
+\item simplicity of programming;
+\item support for a wide range of compilers.
+\end{enumerate}
+
+As public domain software and a project open to everyone, wxWindows has
+benefited from comments, ideas, bug fixes, enhancements and the sheer
+enthusiasm of users, especially via the Internet. This gives wxWindows a
+certain advantage over its commercial brothers, and a robustness against
+the transience of one individual or company. This openness and
+availability of source code is especially important when the future of
+thousands of lines of application code may depend upon the longevity of
+the underlying class library.
+
+In writing wxWindows, completeness has sometimes been traded for
+portability and simplicity of programming. Version 2.0 goes much
+further than previous versions in terms of generality and features,
+allowing applications to be produced
+that are often indistinguishable from those produced using single-platform
+toolkits
+such as Motif and MFC.
+
+wxWindows 2.0 currently maps to two native APIs: Motif and
+MS Windows. An Xt port is also in preparation.
+
+The importance of using a platform-independent class library cannot be
+overstated, since GUI application development is very time-consuming,
+and sustained popularity of particular GUIs cannot be guaranteed.
+Code can very quickly become obsolete if it addresses the wrong
+platform or audience. wxWindows helps to insulate the programmer from
+these winds of change. Although wxWindows may not be suitable for
+every application, it provides access to most of the functionality a
+GUI program normally requires, plus some extras such as form
+construction, interprocess communication and PostScript output, and
+can of course be extended as needs dictate. As a bonus, it provides
+a cleaner programming interface than the native
+APIs. Programmers may find it worthwhile to use wxWindows even if they
+are developing on only one platform.
+
+It is impossible to sum up the functionality of wxWindows in a few paragraphs, but
+here are some of the benefits:
+
+\begin{itemize}\itemsep=0pt
+\item Low cost (free, in fact!)
+\item You get the source.
+\item Several example programs.
+\item Over 200 pages of printable and on-line documentation.
+\item Simple-to-use, object-oriented API.
+\item Graphics calls include splines, polylines, rounded rectangles, etc.
+\item Constraint-based layout option.
+\item Print/preview and document/view architectures.
+\item Status line facility, toolbar
+\item Easy, object-oriented interprocess comms (DDE subset) under UNIX and
+MS Windows.
+\item Encapsulated PostScript generation under UNIX, normal MS Windows printing on the
+PC.
+\item MDI support under Windows.
+\item Can be used to create DLLs under Windows, dynamic libraries on the Sun.
+\item Common dialogs for file browsing, printing, colour selection, etc.
+\item Under MS Windows, support for creating metafiles and copying
+them to the clipboard.
+\item Hypertext help facility, with an API for invocation from applications.
+\item Dialog Editor for building dialogs.
+\end{itemize}
+
+\section{Changes from version 1.xx}\label{versionchanges}
+
+These are a few of the major differences between versions 1.xx and 2.0.
+
+Removals:
+
+\begin{itemize}\itemsep=0pt
+\item XView is no longer supported;
+\item Mac is not yet supported;
+\item all controls (panel items) no longer have labels attached to them;
+\item wxForm removed;
+\item wxCanvasDC, wxPanelDC removed (replaced by wxClientDC, wxWindowDC, wxPaintDC which
+can be used for any window);
+\item wxMultiText, wxTextWindow, wxText removed and replaced by wxTextCtrl;
+\item classes no longer divided into generic and platform-specific parts, for efficiency.
+\end{itemize}
+
+Additions and changes:
+
+\begin{itemize}\itemsep=0pt
+\item class hierarchy changed, and restrictions about subwindow nesting lifted;
+\item header files reorganised to conform to normal C++ standards;
+\item classes less dependent on each another, to reduce executable size;
+\item wxString used instead of char* wherever possible;
+\item the number of separate but mandatory utilities reduced;
+\item the event system has been overhauled, with
+virtual functions and callbacks being replaced with MFC-like event tables;
+\item new controls, such as wxTreeCtrl, wxListCtrl, wxSpinButton;
+\item less inconsistency about what events can be handled, so for example
+mouse clicks or key presses on controls can now be intercepted;
+\item the status bar is now a separate class, wxStatusBar, and is
+implemented in generic wxWindows code;
+\item some renaming of controls for greater consistency;
+\item wxBitmap has the notion of bitmap handlers to allow for extension to new formats
+without ifdefing;
+\item new dialogs: wxPageSetupDialog, wxFileDialog, wxDirDialog,
+wxMessageDialog, wxSingleChoiceDialog, wxTextEntryDialog;
+\item GDI objects are reference-counted and are now passed to most functions
+by reference, making memory management far easier;
+\item wxSystemSettings class allows querying for various system-wide properties
+such as dialog font, colours, user interface element sizes, and so on;
+\item better platform look and feel conformance;
+\item toolbar functionality now separated out into a family of classes with the
+same API;
+\item device contexts are no longer accessed using wxWindow::GetDC - they are created
+temporarily with the window as an argument;
+\item events from sliders and scrollbars can be handled more flexibly;
+\item the handling of window close events has been changed in line with the new
+event system, but backward {\bf OnClose} compatibility has been retained;
+\item the concept of {\it validator} has been added to allow much easier coding of
+the relationship between controls and application data;
+\item the documentation has been revised, with more cross-referencing.
+\end{itemize}
+
+Platform-specific changes:
+
+\begin{itemize}\itemsep=0pt
+\item The Windows header file (windows.h) is no longer included by wxWindows headers;
+\item wx.dll supported under Visual C++;
+\item the full range of Windows 95 window decorations are supported, such as modal frame
+borders;
+\item MDI classes brought out of wxFrame into separate classes, and made more flexible.
+\end{itemize}
+
+\section{wxWindows requirements}\label{requirements}
+
+To make use of wxWindows, you currently need one or both of the
+following setups.
+
+(a) PC:
+
+\begin{enumerate}\itemsep=0pt
+\item A 486 or higher PC running MS Windows.
+\item One of Microsoft Visual C++, Borland C++, Watcom C++, MetroWerks C++,
+Symantec C++, GNU-WIN32.
+\item At least 30 MB of disk space.
+\end{enumerate}
+
+(b) UNIX:
+
+\begin{enumerate}\itemsep=0pt
+\item Almost any C++ compiler, including GNU C++.
+\item Almost any UNIX workstation (VMS is supported too) and Motif 1.2 or higher (not necessary
+for the Xt version)
+\item At least 30 MB of disk space.
+\end{enumerate}
+
+\section{Availability and location of wxWindows}
+
+wxWindows is currently available from the Artificial Intelligence
+Applications Institute by anonymous FTP and World Wide Web:
+
+\begin{verbatim}
+ ftp://ftp.aiai.ed.ac.uk/pub/packages/wxwin
+ http://web.ukonline.co.uk/julian.smart/wxwin
+\end{verbatim}
+
+\section{Acknowledgments}
+
+Thanks are due to the AIAI for being willing to release wxWindows into
+the public domain, and to our patient wives Harriet and Tanja.
+
+The Internet has been an essential prop when coming up against tricky
+problems. Thanks to those who answered our
+queries or submitted bug fixes and enhancements; wxWindows is very
+much a team effort.
+
+Hermann Dunkel contributed XPM support; Arthur Seaton wrote the memory
+checking code; Olaf Klein and Patrick Halke wrote the ODBC classes;
+Harri Pasanen and Robin Dunn wrote wxPython and contributed to the
+wxExtend library.
+
+Markus Holzem write the Xt port. Jonathan Tonberg, Bill Hale,
+Cecil Coupe, Thomaso Paoletti, Thomas Fettig, and others slaved away
+writing the Mac port. Keith Gary Boyce ported wxWindows to the free
+GNU-WIN32 compiler, refusing to give up when shortcuts were suggested.
+
+Many thanks also to: Timothy Peters, Jamshid Afshar, Patrick Albert, C. Buckley,
+Robin Corbet, Harco de Hilster, Josep Fortiana, Torsten Liermann, Tatu
+M\"{a}nnist\"{o}, Ian Perrigo, Giordano Pezzoli, Petr Smilauer, Neil Smith,
+Kari Syst\"{a}, Jyrki Tuomi, Edward Zimmermann, Ian Brown, and many
+others.
+
+`Graphplace', the basis for the wxGraphLayout library, is copyright Dr. Jos
+T.J. van Eijndhoven of Eindhoven University of Technology. The code has
+been used in wxGraphLayout with his permission.
+
+We also acknowledge the author of XFIG, the excellent UNIX drawing tool,
+from the source of which we have borrowed some spline drawing code.
+His copyright is included below.
+
+{\it XFig2.1 is copyright (c) 1985 by Supoj Sutanthavibul. Permission to
+use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of M.I.T. not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission. M.I.T. makes no representations about the
+suitability of this software for any purpose. It is provided ``as is''
+without express or implied warranty.}
+
+\chapter{Multi-platform development with wxWindows}\label{multiplat}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+This chapter describes the practical details of using wxWindows. Please
+see the file install.txt for up-to-date installation instructions, and
+changes.txt for differences between versions.
+
+\section{Include files}
+
+The main include file is {\tt "wx.h"}; this includes the most commonly
+used modules of wxWindows.
+
+To save on compilation time, include only those header files relevant to the
+source file. If you are using precompiled headers, you should include
+the following section before any other includes:
+
+\begin{verbatim}
+// For compilers that support precompilation, includes "wx.h".
+#include "wx_prec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+... include minimum set of files necessary here ...
+#endif
+
+... now your other include files ...
+\end{verbatim}
+
+The file {\tt "wx\_prec.h"} includes {\tt "wx.h"}. Although this incantation
+may seem quirky, it is in fact the end result of a lot of experimentation,
+and several Windows compilers to use precompilation (those tested are Microsoft Visual C++, Borland C++
+and Watcom C++).
+
+Borland precompilation is largely automatic. Visual C++ requires specification of {\tt "wx\_prec.h"} as
+the file to use for precompilation. Watcom C++ is automatic apart from the specification of
+the .pch file. Watcom C++ is strange in requiring the precompiled header to be used only for
+object files compiled in the same directory as that in which the precompiled header was created.
+Therefore, the wxWindows Watcom C++ makefiles go through hoops deleting and recreating
+a single precompiled header file for each module, thus preventing an accumulation of many
+multi-megabyte .pch files.
+
+\section{Libraries}
+
+Under UNIX, use the library libwx\_motif.a
+(Motif). Under Windows, use the library wx.lib for stand-alone Windows
+applications, or wxdll.lib for creating DLLs.
+
+\section{Configuration}
+
+The following lists the options configurable in the file
+\rtfsp{\tt include/base/wx\_setup.h.} Some settings are a matter
+of taste, some help with platform-specific problems, and
+others can be set to minimize the size of the library.
+
+\subsection{General features}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{USE\_CLIPBOARD}{If 1, clipboard code is compiled (Windows only).}
+\twocolitem{USE\_CONSTRAINTS}{If 1, the constaint-based window layout system is compiled.}
+\twocolitem{USE\_DOC\_VIEW\_ARCHITECTURE}{If 1, wxDocument, wxView and related classes are compiled.}
+\twocolitem{USE\_DYNAMIC\_CLASSES}{If 1, the run-time class macros and classes are compiled. Recommended,
+and necessary for the document/view framework.}
+\twocolitem{USE\_EXTENDED\_STATICS}{If 1, wxStaticItem code is compiled for enhanced panel decorative items.
+Not rigorously tested, and not documented.}
+\twocolitem{USE\_HELP}{If 1, interface to help system is compiled.}
+\twocolitem{USE\_GAUGE}{If 1, the wxGauge class compiled.}
+\twocolitem{USE\_GLOBAL\_MEMORY\_OPERATORS}{If 1, redefines global new and delete operators to be compatible
+with the extended arguments of the debugging wxObject new and delete operators. If this causes problems
+for your compiler, set to 0.}
+\twocolitem{USE\_GNU\_WXSTRING}{If 1, the enhanced GNU wxString and regular expression class are compiled
+in place of the normal wxString class. See contrib/wxstring for details.}
+\twocolitem{USE\_IMAGE\_LOADING\_IN\_MSW}{Use code to allow dynamic .BMP loading
+under MS Windows.}
+\twocolitem{USE\_IMAGE\_LOADING\_IN\_X}{Use code in utils/image to allow dynamic .BMP/.GIF loading
+under X.}
+\twocolitem{USE\_RESOURCE\_LOADING\_IN\_MSW}{Use code to allow dynamic .ICO/.CUR loading
+under MS Windows.}
+\twocolitem{USE\_IPC}{If 1, interprocess communication code is compiled.}
+\twocolitem{USE\_MEMORY\_TRACING}{If 1, enables debugging versions of wxObject::new and wxObject::delete
+if the value of DEBUG is defined to more than 0.}
+\twocolitem{USE\_METAFILE}{If 1, Windows Metafile code is compiled.}
+\twocolitem{USE\_PANEL\_IN\_PANEL}{If 1, experimental panel-in-panel code is used
+for common dialog boxes. Not recommended, since tab traversal can suffer.}
+\twocolitem{USE\_POSTSCRIPT}{If 1, PostScript code is compiled.}
+\twocolitem{USE\_POSTSCRIPT\_ARCHITECTURE\_IN\_MSW}{Set to 1 to enable the printing architecture
+to make use of either native Windows printing facilities, or the wxPostScriptDC class depending
+on the wxApp::SetPrintMode setting.}
+\twocolitem{USE\_PRINTING\_ARCHITECTURE}{If 1, wxPrinter, wxPrintout and related classes are compiled
+for the print/preview framework.}
+\twocolitem{USE\_RESOURCES}{If 1, win.ini or .Xdefaults-style resource read/write code is compiled.}
+\twocolitem{USE\_SCROLLBAR}{If 1, wxScrollBar class is compiled. Not rigorously tested, and not documented.}
+\twocolitem{USE\_SPLINES}{If 1, spline code is compiled.}
+\twocolitem{USE\_TOOLBAR}{If 1, the wxToolBar class is compiled.}
+\twocolitem{USE\_TYPEDEFS}{If 1, a typedef will be used for wxPoint instead of
+a class declaration, to reduce overhead and avoid a Microsoft C++ memory bug.}
+\twocolitem{USE\_VLBOX}{If 1, wxVirtListBox code is compiled for a virtual listbox item.
+Not rigorously tested, and not documented.}
+\twocolitem{USE\_WX\_RESOURCES}{If 1, wxWindows resource file (.WXR) code is compiled.}
+\twocolitem{USE\_XFIG\_SPLINE\_CODE}{If 1, XFig-derived code is used for spline
+drawing. If 0, AIAI code is used, which is slower.}
+\twocolitem{USE\_XPM\_IN\_X}{If 1, XPM (colour pixmap) facilities will be compiled and used
+in wxBitmap under X.}
+\twocolitem{USE\_XPM\_IN\_MSW}{If 1, XPM (colour pixmap) facilities will be compiled and used
+in wxBitmap under MS Windows.}
+\end{twocollist}
+
+\subsection{X features}
+
+\begin{twocollist}
+\twocolitem{DEFAULT\_FILE\_SELECTOR\_SIZE}{Let Motif choose the size of
+XmFileSelectionBox. Otherwise, size is 500x600.}
+\twocolitem{PIXEL0\_DISABLE}{Define to disallow allocation of pixel 0 (wxXOR problem).}
+\twocolitem{USE\_GADGETS}{Use gadgets where possible rather than Widgets for items.
+Default is to use Gadgets.}
+\twocolitem{USE\_BUTTON\_GADGET}{Use gadgets for buttons. This can intefere with
+default button selection, so the default is zero.}
+\end{twocollist}
+
+\subsection{Windows and NT features}
+
+\begin{twocollist}
+\twocolitem{CTL3D}{CTL3D should only be used for 16-bit Windows programs.
+On Windows 95 and NT, native 3D effects are used. If you want to
+use it and don't already have CTL3D installed, copy the files in
+contrib/ctl3d to appropriate places (ctl3dv2.lib/ctl3d32.lib into your compiler lib
+directory, ctl3d.h into an include directory, and ctl3dv2.dll into
+windows/system). You may need to find a compiler-specific version of ctl3dv2.lib
+or ctl3d32.lib. Define CTL3D to be 1 in wx\_setup.h and link your executables with ctl3dv2.lib
+or ctl3d32.lib.}
+\twocolitem{USE\_ITSY\_BITSY}{If 1, compiles in code to support tiny window titlebars.}
+\twocolitem{USE\_ODBC}{If 1, compiles wxDatabase and wxRecordSet classes for ODBC
+access. Requires sql.h, sqlext.h files if set to 1 (see topic on database support).}
+\end{twocollist}
+
+\section{Makefiles}
+
+At the moment there is no attempt to make UNIX makefiles and
+PC makefiles compatible, i.e. one makefile is required for
+each environment.
+
+Sample makefiles for UNIX (suffix .UNX), MS C++ (suffix .DOS and .NT), Borland
+C++ (.BCC) and Symantec C++ (.SC) are included for the library, demos
+and utilities. The NT, Borland and Symantec makefiles cannot be
+guaranteed to be up-to-date since the author does not have
+these compilers.
+
+The controlling makefile for wxWindows is in the platform-specific
+directory, such as {\tt src/msw} or {\tt src/x}. This makefile will
+recursively execute the makefile in {\tt src/base}.
+
+\subsection{Windows makefiles}
+
+For Microsoft C++, normally it is only necessary to type {\tt nmake -f
+makefile.dos} (or an alias or batch file which does this). By default,
+binaries are made with debugging information, and no optimization. Use
+FINAL=1 on the command line to remove debugging information (this only
+really necessary at the link stage), and DLL=1 to make a DLL version of
+the library, if building a library.
+
+\subsection{UNIX makefiles}
+
+TODO.
+
+Debugging information is included by default; you may add DEBUG= as an
+argument to make to compile without it, or use the UNIX {\bf strip}
+command to remove debugging information from an executable.
+
+\normalbox{{\it Important note:} Most compiler flags are kept centrally in
+src/make.env, which is included by all other makefiles. This is the
+file to edit to tailor wxWindows compilation to your environment.}
+
+\section{Windows-specific files}
+
+wxWindows application compilation under MS Windows requires at least two
+extra files, resource and module definition files.
+
+\subsection{Resource file}\label{resources}
+
+The least that must be defined in the Windows resource file (extension RC)
+is the following statement:
+
+\begin{verbatim}
+rcinclude wx.rc
+\end{verbatim}
+
+which includes essential internal wxWindows definitions. The resource script
+may also contain references to icons, cursors, etc., for example:
+
+\begin{verbatim}
+wxicon icon wx.ico
+\end{verbatim}
+
+The icon can then be referenced by name when creating a frame icon. See
+the MS Windows SDK documentation.
+
+\normalbox{Note: include wx.rc {\it after} any ICON statements
+so programs that search your executable for icons (such
+as the Program Manager) find your application icon first.}
+
+\subsection{Module definition file}
+
+A module definition file (extension DEF) looks like the following:
+
+\begin{verbatim}
+NAME Hello
+DESCRIPTION 'Hello'
+EXETYPE WINDOWS
+STUB 'WINSTUB.EXE'
+CODE PRELOAD MOVEABLE DISCARDABLE
+DATA PRELOAD MOVEABLE MULTIPLE
+HEAPSIZE 1024
+STACKSIZE 8192
+\end{verbatim}
+
+The only lines which will usually have to be changed per application are
+NAME and DESCRIPTION.
+
+\section{Memory models and memory allocation}\label{memorymodels}
+
+Under UNIX, memory allocation isn't a problem. Under Windows, the only
+really viable way to go is to use the large model, which uses the global
+heap instead of the local heap for memory allocation. Unless more than
+one read-write data segment is used,% (see \helpref{large data}{largedata}
+large model programs may still have multiple instances under MS
+C/C++ 7. Microsoft give the following guidelines for producing
+multiple-instance large model programs:
+
+\begin{itemize}\itemsep=0pt
+\item Do not use {\tt /ND} to name extra data segments unless the segment is READONLY.
+\item Use the .DEF file to mark extra data segments READONLY.
+\item Do not use \_\_far or FAR to mark data items.
+\item Use {\tt /PACKDATA} to combine data segments.
+\item Use {\tt /Gt65500 /Gx} to force all data into the default data segment.
+\end{itemize}
+
+Even with the single-instance limitation, the productivity benefit is
+worth it in the majority of cases. Note that some other multi-platform
+class libraries also have this restriction. (If more than one instance
+really is required, create several copies of the program with different
+names.)
+
+Having chosen the large model, just use C++ `new', `delete' (and if
+necessary `malloc' and `free') in the normal way. The only restrictions
+now encountered are a maximum of 64 KB for a single program segment and
+for a single data item, unless huge model is selected.
+
+For Borland users, use the data threshold switch, and the following is
+also recommended:
+
+\begin{itemize}\itemsep=0pt
+\item Check ``Automatic Far Data Segments"
+\item Check ``Put Constant Strings into Code Segment"
+\end{itemize}
+
+See also the Frequently Asked Questions document for further details
+on using Borland with wxWindows.
+
+\subsection{Allocating and deleting wxWindows objects}
+
+In general, classes derived from wxWindow must dynamically allocated
+with {\it new} and deleted with {\it delete}. If you delete a window,
+all of its children and descendants will be automatically deleted,
+so you don't need to delete these descendants explicitly.
+
+Don't statically create a window unless you know that the window
+cannot be deleted dynamically. Modal dialogs, such as those used
+in the {\tt dialogs} sample, can usually be created statically,
+if you know that the OK or Cancel button does not destroy the dialog.
+
+Most drawing objects, such as wxPen, wxBrush, wxFont, and wxBitmap, should be
+created dynamically. They are cleaned up automatically on program exit.
+wxColourMap is an exception to this rule (currently). In particular,
+do not attempt to create these objects globally before OnInit() has a chance
+to be called, because wxWindows might not have done essential internal initialisation
+(including creation of lists containing all instances of wxPen, wxBrush etc.)
+
+If you decide to allocate a C++ array of objects (such as wxBitmap) that may
+be cleaned up by wxWindows, make sure you delete the array explicitly
+before wxWindows has a chance to do so on exit, since calling {\it delete} on
+array members will cause memory problems.
+
+wxColour can be created statically: it is not automatically cleaned
+up and is unlikely to be shared between other objects; it is lightweight
+enough for copies to be made.
+
+Beware of deleting objects such as a wxPen or wxBitmap if they are still in use.
+Windows is particularly sensitive to this: so make sure you
+make calls like wxDC::SetPen(NULL) or wxDC::SelectObject(NULL) before deleting
+a drawing object that may be in use. Code that doesn't do this will probably work
+fine on some platforms, and then fail under Windows.
+
+\section{Dynamic Link Libraries}
+
+wxWindows may be used to produce DLLs which run under MS Windows. Note that
+this is not the same thing as having wxWindows as a DLL, which is not
+currently possible. For Microsoft C++, use the makefile with the argument DLL=1 to produce
+a version of the wxWindows library which may be used in a DLL application.
+There is a bug in Microsoft C++ which makes the compiler complain about returned floats,
+which goes away when the {\tt /Os} option is used, which is why that flag is
+set in the makefile.
+
+For making wxWindows as a Sun dynamic library, there are comments in the
+UNIX makefile for the appropriate flags for AT\&T C++. Sorry, I haven't
+investigated the flags needed for other compilers.
+
+\section{Conditional compilation}
+
+One of the purposes of wxWindows is to reduce the need for conditional
+compilation in source code, which can be messy and confusing to follow.
+However, sometimes it is necessary to incorporate platform-specific
+features (such as metafile use under MS Windows). The following identifiers
+may be used for this purpose, along with any user-supplied ones:
+
+\begin{itemize}
+\item {\tt wx\_x} - for code which should work under any X toolkit
+\item {\tt wx\_motif} - for code which should work under Motif only
+\item {\tt wx\_msw} - for code which should work under Microsoft Windows only
+\item {\tt wx\_xt} - for code which should work under Xt only
+\end{itemize}
+
+For example:
+
+\begin{verbatim}
+ ...
+#ifdef wx_x
+ (void)wxMessageBox("Sorry, metafiles not available under X.");
+#endif
+#ifdef wx_msw
+ wxMetaFileDC dc;
+ DrawIt(dc);
+ wxMetaFile *mf = dc.Close();
+ mf->SetClipboard();
+ delete mf;
+#endif
+ ...
+\end{verbatim}
+
+\section{Building on-line help}
+
+wxWindows has its own help system from version 1.30: wxHelp. It can be
+used to view the wxWindows class library reference, and also to provide
+on-line help for your wxWindows applications. The API, made accessible
+by including {\tt wx\_help.h}, allows you to load files and display
+specific sections, using DDE to communicate between the application and
+wxHelp.
+
+wxHelp files can be marked up by hand from ASCII files within wxHelp,
+or may be generated from other files, as is the case with the wxWindows
+documentation.
+
+It is possible to use the platform-specific help
+system (e.g. WinHelp) instead of wxHelp.
+
+See {\tt install.txt}, the wxHelp documentation (in {\tt
+utils/wxhelp/docs}) and \helpref{wxHelp}{wxhelp} for further details.
+
+\section{C++ issues}
+
+There are cases where a C++ program will compile and run fine under one
+environment, and then fail to compile using a different compiler. Some
+caveats are given below, from experience with the GNU C++ compiler (GCC)
+and MS C/C++ compiler version 7.
+
+\subsection{Templates}
+
+wxWindows does not use templates for two main reasons: one, it is a
+notoriously unportable feature, and two, the author is irrationally
+suspicious of them and prefers to use casts. More compilers are
+now implementing templates, and so it will probably be safe to use
+them soon without fear of portability problems.
+
+\subsection{Precompiled headers}
+
+Some compilers, such as Borland C++ and Microsoft C++, support
+precompiled headers. This can save a great deal of compiling time. The
+recommended approach is to precompile {\tt ``wx.h''}, using this
+precompiled header for compiling both wxWindows itself and any
+wxWindows applications. For Windows compilers, two dummy source files
+are provided (one for normal applications and one for creating DLLs)
+to allow initial creation of the precompiled header.
+
+However, there are several downsides to using precompiled headers. One
+is that to take advantage of the facility, you often need to include
+more header files than would normally be the case. This means that
+changing a header file will cause more recompilations (in the case of
+wxWindows, everything needs to be recompiled since everything includes
+{\tt ``wx.h''}!)
+
+A related problem is that for compilers that don't have precompiled
+headers, including a lot of header files slows down compilation
+considerably. For this reason, you will find (in the common
+X and Windows parts of the library) conditional
+compilation that under UNIX, includes a minimal set of headers;
+and when using Visual C++, includes {\tt wx.h}. This should help provide
+the optimal compilation for each compiler, although it is
+biassed towards the precompiled headers facility available
+in Microsoft C++.
+
+\section{File handling}
+
+When building an application which may be used under different
+environments, one difficulty is coping with documents which may be
+moved to different directories on other machines. Saving a file which
+has pointers to full pathnames is going to be inherently unportable. One
+approach is to store filenames on their own, with no directory
+information. The application searches through a number of locally
+defined directories to find the file. To support this, the class {\bf
+wxPathList} makes adding directories and searching for files easy, and
+the global function {\bf FileNameFromPath} allows the application to
+strip off the filename from the path if the filename must be stored.
+This has undesirable ramifications for people who have documents of the
+same name in different directories.
+
+As regards the limitations of DOS 8+3 single-case filenames versus
+unrestricted UNIX filenames, the best solution is to use DOS filenames
+for your application, and also for document filenames {\it if} the user
+is likely to be switching platforms regularly. Obviously this latter
+choice is up to the application user to decide. Some programs (such as
+YACC and LEX) generate filenames incompatible with DOS; the best
+solution here is to have your UNIX makefile rename the generated files
+to something more compatible before transferring the source to DOS.
+Transferring DOS files to UNIX is no problem, of course, apart from EOL
+conversion for which there should be a utility available (such as
+dos2unix).
+
+See also the File Functions section of the reference manual for
+descriptions of miscellaneous file handling functions.
+
+\chapter{Utilities supplied with wxWindows}\label{utilities}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+A number of `extras' are supplied with wxWindows, to complement
+the GUI functionality in the main class library. These are found
+below the utils directory and usually have their own source, library
+and documentation directories. For larger user-contributed packages,
+see the directory /pub/packages/wxwin/contrib.
+
+\section{wxHelp}\label{wxhelp}
+
+wxHelp is a stand-alone program, written using wxWindows,
+for displaying hypertext help. It is necessary since not all target
+systems (notably X) supply an adequate
+standard for on-line help. wxHelp is modelled on the MS Windows help
+system, with contents, search and browse buttons, but does not reformat
+text to suit the size of window, as WinHelp does, and its input files
+are uncompressed ASCII with some embedded font commands and an .xlp
+extension. Most wxWindows documentation (user manuals and class
+references) is supplied in wxHelp format, and also in Windows Help
+format.
+
+Note that an application can be programmed to use Windows Help under
+MS Windows, and wxHelp under X. An alternative help viewer under X is
+Mosaic, a World Wide Web viewer that uses HTML as its native hypertext
+format. However, this is not currently integrated with wxWindows
+applications.
+
+wxHelp works in two modes---edit and end-user. In edit mode, an ASCII
+file may be marked up with different fonts and colours, and divided into
+sections. In end-user mode, no editing is possible, and the user browses
+principally by clicking on highlighted blocks.
+
+When an application invokes wxHelp, subsequent sections, blocks or
+files may be viewed using the same instance of wxHelp since the two
+programs are linked using wxWindows interprocess communication
+facilities. When the application exits, that application's instance of
+wxHelp may be made to exit also. See the {\bf wxHelpInstance} entry in the
+reference section for how an application controls wxHelp.
+
+\section{Tex2RTF}\label{textortf}
+
+Supplied with wxWindows is a utility called Tex2RTF for converting\rtfsp
+\LaTeX\ manuals to the following formats:
+
+\begin{description}
+\item[wxHelp]
+wxWindows help system format (XLP).
+\item[Linear RTF]
+Rich Text Format suitable for importing into a word processor.
+\item[Windows Help RTF]
+Rich Text Format suitable for compiling into a WinHelp HLP file with the
+help compiler.
+\item[HTML]
+HTML is the native format for Mosaic, the main hypertext viewer for
+the World Wide Web. Since it is freely available it is a good candidate
+for being the wxWindows help system under X, as an alternative to wxHelp.
+\end{description}
+
+Tex2RTF is used for the wxWindows manuals and can be used independently
+by authors wishing to create on-line and printed manuals from the same\rtfsp
+\LaTeX\ source. Please see the separate documentation for Tex2RTF.
+
+\section{wxTreeLayout}
+
+This is a simple class library for drawing trees in a reasonably pretty
+fashion. It provides only minimal default drawing capabilities, since
+the algorithm is meant to be used for implementing custom tree-based
+tools.
+
+Directed graphs may also be drawn using this library, if cycles are
+removed before the nodes and arcs are passed to the algorithm.
+
+Tree displays are used in many applications: directory browsers,
+hypertext systems, class browsers, and decision trees are a few
+possibilities.
+
+See the separate manual and the directory utils/wxtree.
+
+\section{wxGraphLayout}
+
+The wxGraphLayout class is based on a tool called `graphplace' by Dr.
+Jos T.J. van Eijndhoven of Eindhoven University of Technology. Given a
+(possibly cyclic) directed graph, it does its best to lay out the nodes
+in a sensible manner. There are many applications (such as diagramming)
+where it is required to display a graph with no human intervention. Even
+if manual repositioning is later required, this algorithm can make a good
+first attempt.
+
+See the separate manual and the directory utils/wxgraph.
+
+\section{wxImage}\label{wximage}
+
+This is a collection of GIF/BMP/XBM bitmap loading and displaying
+routines for X.
+
+\section{MFUTILS}\label{mfutils}
+
+A very modest step towards reading Windows metafiles on the
+any platform. Julian Smart's ClockWorks program demonstrates
+how extremely simple metafiles may be read and displayed (in this
+case, to be used as clock hands).
+
+\section{Colours}\label{coloursampler}
+
+A colour sampler for viewing colours and their names on each
+platform.
+
+%
+\chapter{Tutorial}\label{tutorial}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+To be written.
+
+\chapter{Programming strategies}\label{strategies}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+This chapter is intended to list strategies that may be useful when
+writing and debugging wxWindows programs. If you have any good tips,
+please submit them for inclusion here.
+
+\section{Strategies for reducing programming errors}
+
+\subsection{Use ASSERT}
+
+Although I haven't done this myself within wxWindows, it is good
+practice to use ASSERT statements liberally, that check for conditions that
+should or should not hold, and print out appropriate error messages.
+These can be compiled out of a non-debugging version of wxWindows
+and your application. Using ASSERT is an example of `defensive programming':
+it can alert you to problems later on.
+
+\subsection{Use wxString in preference to character arrays}
+
+Using wxString can be much safer and more convenient than using char *.
+Again, I haven't practised what I'm preaching, but I'm now trying to use
+wxString wherever possible. You can reduce the possibility of memory
+leaks substantially, and it's much more convenient to use the overloaded
+operators than functions such as strcmp. wxString won't add a significant
+overhead to your program; the overhead is compensated for by easier
+manipulation (which means less code).
+
+The same goes for other data types: use classes wherever possible.
+
+\section{Strategies for portability}
+
+\subsection{Use relative positioning or constraints}
+
+Don't use absolute panel item positioning if you can avoid it. Different GUIs have
+very differently sized panel items. Consider using the constraint system, although this
+can be complex to program. If you needs are simple, the default relative positioning
+behaviour may be adequate (using default position values and wxPanel::NewLine).
+
+Alternatively, you could use alternative .wrc (wxWindows resource files) on different
+platforms, with slightly different dimensions in each. Or space your panel items out
+to avoid problems.
+
+\subsection{Use wxWindows resource files}
+
+Use .wrc (wxWindows resource files) where possible, because they can be easily changed
+independently of source code. Bitmap resources can be set up to load different
+kinds of bitmap depending on platform (see the section on resource files).
+
+\section{Strategies for debugging}
+
+\subsection{Positive thinking}
+
+It's common to blow up the problem in one's imagination, so that it seems to threaten
+weeks, months or even years of work. The problem you face may seem insurmountable:
+but almost never is. Once you have been programming for some time, you will be able
+to remember similar incidents that threw you into the depths of despair. But
+remember, you always solved the problem, somehow!
+
+Perseverance is often the key, even though a seemingly trivial problem
+can take an apparently inordinate amount of time to solve. In the end,
+you will probably wonder why you worried so much. That's not to say it
+isn't painful at the time. Try not to worry -- there are many more important
+things in life.
+
+\subsection{Simplify the problem}
+
+Reduce the code exhibiting the problem to the smallest program possible
+that exhibits the problem. If it is not possible to reduce a large and
+complex program to a very small program, then try to ensure your code
+doesn't hide the problem (you may have attempted to minimize the problem
+in some way: but now you want to expose it).
+
+With luck, you can add a small amount of code that causes the program
+to go from functioning to non-functioning state. This should give a clue
+to the problem. In some cases though, such as memory leaks or wrong
+deallocation, this can still give totally spurious results!
+
+\subsection{Genetic mutation}
+
+If we had sophisticated genetic algorithm tools that could be applied
+to programming, we could use them. Until then, a common -- if rather irrational --
+technique is to just make arbitrary changes to the code until something
+different happens. You may have an intuition why a change will make a difference;
+otherwise, just try altering the order of code, comment lines out, anything
+to get over an impasse. Obviously, this is usually a last resort.
+
+\subsection{Use a debugger}
+
+This sounds like facetious advice, but it's surprising how often people
+don't use a debugger. Often it's an overhead to install or learn how to
+use a debugger, but it really is essential for anything but the most
+trivial programs. Some platforms don't allow for debugging, such
+as WIN32s under Windows 3.x. In this case, you might be advised to
+debug under 16-bit Windows and when you're confident, compile for
+WIN32s. In fact WIN32s can be very strict about bad memory handling,
+so testing out under WIN32s is a good thing to do even if you're
+not going to distribute this version. (Unless you've got a good memory checking,
+utility, of course!) Tracking bugs under WIN32s can involve a lot of debug message
+insertion and relinking, so make sure your compiler has a fast linker
+(e.g. Watcom, Symantec).
+
+\subsection{Use tracing code}
+
+You can use wxDebugMsg statements (or the wxDebugStreamBuf class) to
+output to a debugging window such as DBWIN under Windows, or standard
+error under X. If compiling in DEBUG mode, you can use TRACE statements
+that will be compiled out of the final build of your application.
+
+Using tracing statements may be more convenient than using the debugger
+in some circumstances (such as when your debugger doesn't support a lot
+of debugging code, or you wish to print a bunch of variables).
+
+\subsection{Use wxObject::Dump and the wxDebugContext class}
+
+It's good practice to implement the Dump member function for all
+classes derived from wxObject. You can then make use of wxDebugContext
+to dump out information on all objects in the program, if DEBUG is
+defined to be more than zero. You can use wxDebugContext to check for
+memory leaks and corrupt memory. See the debugging topic in the
+reference manual for more information.
+
+\subsection{Check Windows debug messages}
+
+Under Windows, it's worth running your program with DBWIN running or
+some other program that shows Windows-generated debug messages. It's
+possible it'll show invalid handles being used. You may have fun seeing
+what commercial programs cause these normally hidden errors! Microsoft
+recommend using the debugging version of Windows, which shows up even
+more problems. However, I doubt it's worth the hassle for most
+applications. wxWindows is designed to minimize the possibility of such
+errors, but they can still happen occasionally, slipping through unnoticed
+because they are not severe enough to cause a crash.
--- /dev/null
+\section{\class{wxBrush}}\label{wxbrush}
+
+A brush is a drawing tool for filling in areas. It is used for painting
+the background of rectangles, ellipses, etc. It has a colour and a
+style.
+
+\wxheading{Derived from}
+
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+On a monochrome display, wxWindows shows
+all brushes as white unless the colour is really black.
+
+Do not initialize objects on the stack before the program commences,
+since other required structures may not have been set up yet. Instead,
+define global pointers to objects and create them in \helpref{wxApp::OnInit}{wxapponinit} or
+when required.
+
+An application may wish to create brushes with different
+characteristics dynamically, and there is the consequent danger that a
+large number of duplicate brushes will be created. Therefore an
+application may wish to get a pointer to a brush by using the global
+list of brushes {\bf wxTheBrushList}, and calling the member function
+\rtfsp{\bf FindOrCreateBrush}.
+
+wxBrush uses a reference counting system, so assignments between brushes are very
+cheap. You can therefore use actual wxBrush objects instead of pointers without
+efficiency problems. Bear in mind, though, that changing a brush's properties may
+affect another brush which has been involved in an assignment with the first brush,
+because of the way internal brush data is shared.
+
+TODO: an overview for wxBrush.
+
+\wxheading{See also}
+
+\helpref{wxBrushList}{wxbrushlist}, \helpref{wxDC}{wxdc}, \helpref{wxDC::SetBrush}{wxdcsetbrush}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxBrush::wxBrush}
+
+\func{}{wxBrush}{\void}
+
+Default constructor. The brush will be uninitialised, and \helpref{wxBrush::Ok}{wxbrushok} will
+return FALSE.
+
+\func{}{wxBrush}{\param{const wxColour\&}{ colour}, \param{const int}{ style}}
+
+Constructs a brush from a colour object and style.
+
+\func{}{wxBrush}{\param{const wxString\& }{colourName}, \param{const int}{ style}}
+
+Constructs a brush from a colour name and style.
+
+\func{}{wxBrush}{\param{const wxBitmap\& }{stippleBitmap}}
+
+Constructs a stippled brush using a bitmap.
+
+\func{}{wxBrush}{\param{const wxBrush\&}{ brush}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\func{}{wxBrush}{\param{const wxBrush*}{ brush}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\wxheading{Parameters}
+
+\docparam{colour}{Colour object.}
+
+\docparam{colourName}{Colour name. The name will be looked up in the colour database.}
+
+\docparam{style}{One of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxTRANSPARENT}}{Transparent (no fill).}
+\twocolitem{{\bf wxSOLID}}{Solid.}
+\twocolitem{{\bf wxBDIAGONAL\_HATCH}}{Backward diagonal hatch.}
+\twocolitem{{\bf wxCROSSDIAG\_HATCH}}{Cross-diagonal hatch.}
+\twocolitem{{\bf wxFDIAGONAL\_HATCH}}{Forward diagonal hatch.}
+\twocolitem{{\bf wxCROSS\_HATCH}}{Cross hatch.}
+\twocolitem{{\bf wxHORIZONTAL\_HATCH}}{Horizontal hatch.}
+\twocolitem{{\bf wxVERTICAL\_HATCH}}{Vertical hatch.}
+\end{twocollist}}
+
+\docparam{brush}{Pointer or reference to a brush to copy.}
+
+\docparam{stippleBitmap}{A bitmap to use for stippling.}
+
+\wxheading{Remarks}
+
+If a stipple brush is created, the brush style will be set to wxSTIPPLE.
+
+\wxheading{See also}
+
+\helpref{wxBrushList}{wxbrushlist}, \helpref{wxColour}{wxcolour}, \helpref{wxColourDatabase}{wxcolourdatabase}
+
+\membersection{wxBrush::\destruct{wxBrush}}
+
+\func{void}{\destruct{wxBrush}}{\void}
+
+Destructor.
+
+\wxheading{Remarks}
+
+The destructor may not delete the underlying brush object of the native windowing
+system, since wxBrush uses a reference counting system for efficiency.
+
+Although all remaining brushes are deleted when the application exits,
+the application should try to clean up all brushes itself. This is because
+wxWindows cannot know if a pointer to the brush object is stored in an
+application data structure, and there is a risk of double deletion.
+
+\membersection{wxBrush::GetColour}\label{wxbrushgetcolour}
+
+\constfunc{wxColour\&}{GetColour}{\void}
+
+Returns a reference to the brush colour.
+
+\wxheading{See also}
+
+\helpref{wxBrush::SetColour}{wxbrushsetcolour}
+
+\membersection{wxBrush::GetStipple}\label{wxbrushgetstipple}
+
+\constfunc{wxBitmap *}{GetStipple}{\void}
+
+Gets a pointer to the stipple bitmap. If the brush does not have a wxSTIPPLE style,
+this bitmap may be non-NULL but uninitialised (\helpref{wxBitmap::Ok}{wxbitmapok} returns FALSE).
+
+\wxheading{See also}
+
+\helpref{wxBrush::SetStipple}{wxbrushsetstipple}
+
+\membersection{wxBrush::GetStyle}\label{wxbrushgetstyle}
+
+\constfunc{int}{GetStyle}{\void}
+
+Returns the brush style, one of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxTRANSPARENT}}{Transparent (no fill).}
+\twocolitem{{\bf wxSOLID}}{Solid.}
+\twocolitem{{\bf wxBDIAGONAL\_HATCH}}{Backward diagonal hatch.}
+\twocolitem{{\bf wxCROSSDIAG\_HATCH}}{Cross-diagonal hatch.}
+\twocolitem{{\bf wxFDIAGONAL\_HATCH}}{Forward diagonal hatch.}
+\twocolitem{{\bf wxCROSS\_HATCH}}{Cross hatch.}
+\twocolitem{{\bf wxHORIZONTAL\_HATCH}}{Horizontal hatch.}
+\twocolitem{{\bf wxVERTICAL\_HATCH}}{Vertical hatch.}
+\twocolitem{{\bf wxSTIPPLE}}{Stippled using a bitmap.}
+\end{twocollist}
+
+\wxheading{See also}
+
+\helpref{wxBrush::SetStyle}{wxbrushsetstyle}, \helpref{wxBrush::SetColour}{wxbrushsetcolour},\rtfsp
+\helpref{wxBrush::SetStipple}{wxbrushsetstipple}
+
+\membersection{wxBrush::Ok}\label{wxbrushok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if the brush is initialised. It will return FALSE if the default
+constructor has been used (for example, the brush is a member of a class, or
+NULL has been assigned to it).
+
+\membersection{wxBrush::SetColour}\label{wxbrushsetcolour}
+
+\func{void}{SetColour}{\param{wxColour\& }{colour}}
+
+Sets the brush colour using a reference to a colour object.
+
+\func{void}{SetColour}{\param{const wxString\& }{colourName}}
+
+Sets the brush colour using a colour name from the colour database.
+
+\func{void}{SetColour}{\param{const unsigned char}{ red}, \param{const unsigned char}{ green}, \param{const unsigned char}{ blue}}
+
+Sets the brush colour using red, green and blue values.
+
+\wxheading{See also}
+
+\helpref{wxBrush::GetColour}{wxbrushgetcolour}
+
+\membersection{wxBrush::SetStipple}\label{wxbrushsetstipple}
+
+\func{void}{SetStipple}{\param{const wxBitmap\&}{ bitmap}}
+
+Sets the stipple bitmap.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{The bitmap to use for stippling.}
+
+\wxheading{Remarks}
+
+The style will be set to wxSTIPPLE.
+
+Note that there is a big difference between stippling in X and Windows.
+On X, the stipple is a mask between the wxBitmap and current colour.
+On Windows, the current colour is ignored, and the bitmap colour is used.
+However, for pre-defined modes like wxCROSS\_HATCH, the behaviour is the
+same for both platforms.
+
+\wxheading{See also}
+
+\helpref{wxBitmap}{wxbitmap}
+
+\membersection{wxBrush::SetStyle}\label{wxbrushsetstyle}
+
+\func{void}{SetStyle}{\param{const int}{ style}}
+
+Sets the brush style.
+
+\docparam{style}{One of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxTRANSPARENT}}{Transparent (no fill).}
+\twocolitem{{\bf wxSOLID}}{Solid.}
+\twocolitem{{\bf wxBDIAGONAL\_HATCH}}{Backward diagonal hatch.}
+\twocolitem{{\bf wxCROSSDIAG\_HATCH}}{Cross-diagonal hatch.}
+\twocolitem{{\bf wxFDIAGONAL\_HATCH}}{Forward diagonal hatch.}
+\twocolitem{{\bf wxCROSS\_HATCH}}{Cross hatch.}
+\twocolitem{{\bf wxHORIZONTAL\_HATCH}}{Horizontal hatch.}
+\twocolitem{{\bf wxVERTICAL\_HATCH}}{Vertical hatch.}
+\twocolitem{{\bf wxSTIPPLE}}{Stippled using a bitmap.}
+\end{twocollist}}
+
+\wxheading{See also}
+
+\helpref{wxBrush::GetStyle}{wxbrushgetstyle}
+
+\membersection{wxBrush::operator $=$}\label{wxbrushassignment}
+
+\func{wxBrush\&}{operator $=$}{\param{const wxBrush\& }{brush}}
+
+Assignment operator, using reference counting. Returns a reference
+to `this'.
+
+\membersection{wxBrush::operator $==$}\label{wxbrushequals}
+
+\func{bool}{operator $==$}{\param{const wxBrush\& }{brush}}
+
+Equality operator. Two brushes are equal if they contain pointers
+to the same underlying brush data. It does not compare each attribute,
+so two independently-created brushes using the same parameters will
+fail the test.
+
+\membersection{wxBrush::operator $!=$}\label{wxbrushnotequals}
+
+\func{bool}{operator $!=$}{\param{const wxBrush\& }{brush}}
+
+Inequality operator. Two brushes are not equal if they contain pointers
+to different underlying brush data. It does not compare each attribute.
+
+\section{\class{wxBrushList}}\label{wxbrushlist}
+
+A brush list is a list containing all brushes which have been created.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+There is only one instance of this class: {\bf wxTheBrushList}. Use
+this object to search for a previously created brush of the desired
+type and create it if not already found. In some windowing systems,
+the brush may be a scarce resource, so it can pay to reuse old
+resources if possible. When an application finishes, all brushes will
+be deleted and their resources freed, eliminating the possibility of
+`memory leaks'. However, it is best not to rely on this automatic
+cleanup because it can lead to double deletion in some circumstances.
+
+There are two mechanisms in recent versions of wxWindows which make the
+brush list less useful than it once was. Under Windows, scarce resources
+are cleaned up internally if they are not being used. Also, a referencing
+counting mechanism applied to all GDI objects means that some sharing
+of underlying resources is possible. You don't have to keep track of pointers,
+working out when it is safe delete a brush, because the referencing counting does
+it for you. For example, you can set a brush in a device context, and then
+immediately delete the brush you passed, because the brush is `copied'.
+
+So you may find it easier to ignore the brush list, and instead create
+and copy brushes as you see fit. If your Windows resource meter suggests
+your application is using too many resources, you can resort to using
+GDI lists to share objects explicitly.
+
+The only compelling use for the brush list is for wxWindows to keep
+track of brushes in order to clean them up on exit. It is also kept for
+backward compatibility with earlier versions of wxWindows.
+
+\wxheading{See also}
+
+\helpref{wxBrush}{wxbrush}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxBrushList::wxBrushList}\label{wxbrushlistconstr}
+
+\func{void}{wxBrushList}{\void}
+
+Constructor. The application should not construct its own brush list:
+use the object pointer {\bf wxTheBrushList}.
+
+\membersection{wxBrushList::AddBrush}\label{wxbrushlistaddbrush}
+
+\func{void}{AddBrush}{\param{wxBrush *}{brush}}
+
+Used internally by wxWindows to add a brush to the list.
+
+\membersection{wxBrushList::FindOrCreateBrush}\label{wxbrushlistfindorcreatebrush}
+
+\func{wxBrush *}{FindOrCreateBrush}{\param{const wxColour\& }{colour}, \param{const int}{ style}}
+
+Finds a brush with the specified attributes and returns it, else creates a new brush, adds it
+to the brush list, and returns it.
+
+\func{wxBrush *}{FindOrCreateBrush}{\param{const wxString\& }{colourName}, \param{const int}{ style}}
+
+Finds a brush with the specified attributes and returns it, else creates a new brush, adds it
+to the brush list, and returns it.
+
+Finds a brush of the given specification, or creates one and adds it to the list.
+
+\wxheading{Parameters}
+
+\docparam{colour}{Colour object.}
+
+\docparam{colourName}{Colour name, which should be in the colour database.}
+
+\docparam{style}{Brush style. See \helpref{wxBrush::SetStyle}{wxbrushsetstyle} for a list of styles.}
+
+\membersection{wxBrushList::RemoveBrush}\label{wxbrushlistremovebrush}
+
+\func{void}{RemoveBrush}{\param{wxBrush *}{brush}}
+
+Used by wxWindows to remove a brush from the list.
+
+
--- /dev/null
+\section{\class{wxButton}}\label{wxbutton}
+
+A button is a control that contains a text string,
+and is one of the commonest elements of a GUI. It may be placed on a
+\rtfsp\helpref{dialog box}{wxdialog} or \helpref{panel}{wxpanel}, or indeed
+almost any other window.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for wxButton.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxBitmapButton}{wxbitmapbutton}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxButton::wxButton}\label{wxbuttonconstr}
+
+\func{}{wxButton}{\void}
+
+Default constructor.
+
+\func{}{wxButton}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``button"}}
+
+Constructor, creating and showing a button.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Button identifier. A value of -1 indicates a default value.}
+
+\docparam{label}{Text to be displayed on the button.}
+
+\docparam{pos}{Button position.}
+
+\docparam{size}{Button size. If the default size (-1, -1) is specified then the button is sized
+appropriately for the text.}
+
+\docparam{style}{Window style. See \helpref{wxButton}{wxbutton}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxButton::Create}{wxbuttoncreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxButton::\destruct{wxButton}}
+
+\func{}{\destruct{wxButton}}{\void}
+
+Destructor, destroying the button.
+
+\membersection{wxButton::Create}\label{wxbuttoncreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``button"}}
+
+Button creation function for two-step creation. For more details, see \helpref{wxButton::wxButton}{wxbuttonconstr}.
+
+\membersection{wxButton::GetLabel}\label{wxbuttongetlabel}
+
+\constfunc{wxString}{GetLabel}{\void}
+
+Returns the string label for the button.
+
+\wxheading{Return value}
+
+The button's label.
+
+\wxheading{See also}
+
+\helpref{wxButton::SetLabel}{wxbuttonsetlabel}
+
+\membersection{wxButton::SetDefault}\label{wxbuttonsetdefault}
+
+\func{void}{SetDefault}{\void}
+
+This sets the button to be the default item for the panel or dialog
+box.
+
+\wxheading{Remarks}
+
+Under Windows, only dialog box buttons respond to this function. As
+normal under Windows and Motif, pressing return causes the default button to
+be depressed when the return key is pressed. See also \helpref{wxWindow::SetFocus}{wxwindowsetfocus}\rtfsp
+which sets the keyboard focus for windows and text panel items, \helpref{wxWindow::OnDefaultAction}{wxwindowondefaultaction}\rtfsp
+and \helpref{wxWindow::GetDefaultItem}{wxwindowgetdefaultitem}.
+
+Note that under Motif, calling this function immediately after
+creation of a button and before the creation of other buttons
+will cause misalignment of the row of buttons, since default
+buttons are larger. To get around this, call {\it SetDefault}\rtfsp
+after you have created a row of buttons: wxWindows will
+then set the size of all buttons currently on the panel to
+the same size.
+
+\membersection{wxButton::SetLabel}\label{wxbuttonsetlabel}
+
+\func{void}{SetLabel}{\param{const wxString\& }{label}}
+
+Sets the string label for the button.
+
+\wxheading{Parameters}
+
+\docparam{label}{The label to set.}
+
+\wxheading{See also}
+
+\helpref{wxButton::GetLabel}{wxbuttongetlabel}
+
--- /dev/null
+\chapter{Classes by category}\label{classesbycat}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+A classification of wxWindows classes by category.
+\twocolwidtha{5cm}
+
+{\large {\bf Managed windows}}
+
+There are several types of window that are directly controlled by the
+window manager (such as MS Windows, or the Motif Window Manager).
+Frames may contain windows, and dialog boxes may directly contain controls.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDialog}{wxdialog}}{Dialog box}
+\twocolitem{\helpref{wxFrame}{wxframe}}{Normal frame}
+\twocolitem{\helpref{wxMDIParentFrame}{wxmdiparentframe}}{MDI parent frame}
+\twocolitem{\helpref{wxMDIChildFrame}{wxmdichildframe}}{MDI child frame}
+\twocolitem{\helpref{wxMiniFrame}{wxminiframe}}{A frame with a small title bar}
+\twocolitem{\helpref{wxTabbedDialog}{wxtabbeddialog}}{Tabbed dialog}
+\end{twocollist}
+
+See also {\bf Common dialogs}.
+
+{\large {\bf Miscellaneous windows}}
+
+The following are a variety of windows that are derived from wxWindow.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxGrid}{wxgrid}}{A grid (table) window}
+\twocolitem{\helpref{wxPanel}{wxpanel}}{A window whose colour changes according to current user settings}
+\twocolitem{\helpref{wxScrolledWindow}{wxscrolledwindow}}{Window with automatically managed scrollbars}
+\twocolitem{\helpref{wxSplitterWindow}{wxsplitterwindow}}{Window which can be split vertically or horizontally}
+\twocolitem{\helpref{wxStatusBar}{wxstatusbar}}{Implements the status bar on a frame}
+\twocolitem{\helpref{wxStatusBar95}{wxstatusbar95}}{Implements a Windows 95 status bar on a frame}
+\twocolitem{\helpref{wxTabbedPanel}{wxtabbedpanel}}{Tabbed panel}
+\end{twocollist}
+
+{\large {\bf Toolbar classes}}
+
+\overview{Overview}{wxtoolbaroverview}
+
+These are the toolbar classes.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxToolBarBase}{wxtoolbarbase}}{Toolbar base class}
+\twocolitem{\helpref{wxToolBarSimple}{wxtoolbarsimple}}{A simple, cross-platform toolbar class}
+\twocolitem{\helpref{wxToolBarMSW}{wxtoolbarmsw}}{A Windows-only toolbar class}
+\twocolitem{\helpref{wxToolBar95}{wxtoolbar95}}{A Windows 95-only toolbar class}
+\end{twocollist}
+
+{\large {\bf Common dialogs}}
+
+\overview{Overview}{commondialogsoverview}
+
+Common dialogs are ready-made dialog classes which are frequently used
+in an application.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDialog}{wxdialog}}{Base class for common dialogs}
+\twocolitem{\helpref{wxColourDialog}{wxcolourdialog}}{Colour chooser dialog}
+\twocolitem{\helpref{wxDirDialog}{wxdirdialog}}{Directory selector dialog}
+\twocolitem{\helpref{wxFileDialog}{wxfiledialog}}{File selector dialog}
+\twocolitem{\helpref{wxMultipleChoiceDialog}{wxmultiplechoicedialog}}{Dialog to get one or more selections from a list}
+\twocolitem{\helpref{wxSingleChoiceDialog}{wxsinglechoicedialog}}{Dialog to get a single selection from a list and return the string}
+\twocolitem{\helpref{wxTextEntryDialog}{wxtextentrydialog}}{Dialog to get a single line of text from the user}
+\twocolitem{\helpref{wxFontDialog}{wxfontdialog}}{Font chooser dialog}
+\twocolitem{\helpref{wxPageSetupDialog}{wxpagesetupdialog}}{Standard page setup dialog}
+\twocolitem{\helpref{wxPrintDialog}{wxprintdialog}}{Standard print dialog}
+\twocolitem{\helpref{wxMessageDialog}{wxmessagedialog}}{Simple message box dialog}
+\end{twocollist}
+
+{\large {\bf Controls}}
+
+Typically, these are small windows which provide interaction with the user. Controls
+that are not static can have \helpref{validators}{wxvalidator} associated with them.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxControl}{wxcontrol}}{The base class for controls}
+\twocolitem{\helpref{wxButton}{wxbutton}}{Push button control, displaying text}
+\twocolitem{\helpref{wxBitmapButton}{wxbitmapbutton}}{Push button control, displaying a bitmap}
+\twocolitem{\helpref{wxCheckBox}{wxcheckbox}}{Checkbox control}
+\twocolitem{\helpref{wxCheckListBox}{wxchecklistbox}}{A listbox with a checkbox to the left of each item}
+\twocolitem{\helpref{wxChoice}{wxchoice}}{Choice control (a combobox without the editable area)}
+\twocolitem{\helpref{wxComboBox}{wxcombobox}}{A choice with an editable area}
+\twocolitem{\helpref{wxGauge}{wxgauge}}{A control to represent a varying quantity, such as time remaining}
+\twocolitem{\helpref{wxStaticBox}{wxstaticbox}}{A static, or group box for visually grouping related controls}
+\twocolitem{\helpref{wxListBox}{wxlistbox}}{A list of strings for single or multiple selection}
+\twocolitem{\helpref{wxListCtrl}{wxlistctrl}}{A control for displaying lists of strings and/or icons, plus a multicolumn report view}
+\twocolitem{\helpref{wxTabCtrl}{wxtabctrl}}{Manages several tabs}
+\twocolitem{\helpref{wxTextCtrl}{wxtextctrl}}{Single or multline text editing control}
+\twocolitem{\helpref{wxTreeCtrl}{wxtreectrl}}{Tree (hierachy) control}
+\twocolitem{\helpref{wxScrollBar}{wxscrollbar}}{Scrollbar control}
+\twocolitem{\helpref{wxSpinButton}{wxspinbutton}}{A spin or `up-down' control}
+\twocolitem{\helpref{wxStaticText}{wxstatictext}}{One or more lines of non-editable text}
+\twocolitem{\helpref{wxStaticBitmap}{wxstaticbitmap}}{A control to display a bitmap}
+\twocolitem{\helpref{wxRadioBox}{wxradiobox}}{A group of radio buttons}
+\twocolitem{\helpref{wxRadioButton}{wxradiobutton}}{A round button to be used with others in a mutually exclusive way}
+\twocolitem{\helpref{wxSlider}{wxslider}}{A slider that can be dragged by the user}
+\end{twocollist}
+
+{\large {\bf Menus}}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxMenu}{wxmenu}}{Displays a series of menu items for selection}
+\twocolitem{\helpref{wxMenuBar}{wxmenubar}}{Contains a series of menus for use with a frame}
+\twocolitem{\helpref{wxMenuItem}{wxmenuitem}}{Represents a single menu item}
+\end{twocollist}
+
+{\large {\bf Window layout}}
+
+\overview{Overview}{constraintsoverview}
+
+These are the classes relevant to automated window layout.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}}{Represents a single constraint dimension}
+\twocolitem{\helpref{wxLayoutConstraints}{wxlayoutconstraints}}{Represents the constraints for a window class}
+\end{twocollist}
+
+{\large {\bf Device contexts}}
+
+\overview{Overview}{dcoverview}
+
+Device contexts are surfaces that may be drawn on, and provide an
+abstraction that allows parameterisation of your drawing code
+by passing different device contexts.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxClientDC}{wxclientdc}}{A device context to access the client area outside {\bf OnPaint} events}
+\twocolitem{\helpref{wxPaintDC}{wxpaintdc}}{A device context to access the client area inside {\bf OnPaint} events}
+\twocolitem{\helpref{wxWindowDC}{wxwindowdc}}{A device context to access the non-client area}
+\twocolitem{\helpref{wxScreenDC}{wxscreendc}}{A device context to access the entire screen}
+\twocolitem{\helpref{wxDC}{wxdc}}{The device context base class}
+\twocolitem{\helpref{wxMemoryDC}{wxmemorydc}}{A device context for drawing into bitmaps}
+\twocolitem{\helpref{wxMetaFileDC}{wxmetafiledc}}{A device context for drawing into metafiles}
+\twocolitem{\helpref{wxPostScriptDC}{wxpostscriptdc}}{A device context for drawing into PostScript files}
+\twocolitem{\helpref{wxPrinterDC}{wxprinterdc}}{A device context for drawing to printers}
+\end{twocollist}
+
+{\large {\bf Graphics device interface}}
+
+\overview{Bitmaps overview}{wxbitmapoverview}
+
+These classes are related to drawing on device contexts and windows.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxColour}{wxcolour}}{Represents the red, blue and green elements of a colour}
+\twocolitem{\helpref{wxBitmap}{wxbitmap}}{Represents a bitmap}
+\twocolitem{\helpref{wxBrush}{wxbrush}}{Used for filling areas on a device context}
+\twocolitem{\helpref{wxBrushList}{wxbrushlist}}{The list of previously-created brushes}
+\twocolitem{\helpref{wxCursor}{wxcursor}}{A small, transparent bitmap representing the cursor}
+\twocolitem{\helpref{wxFont}{wxfont}}{Represents fonts}
+\twocolitem{\helpref{wxFontList}{wxfontlist}}{The list of previously-created fonts}
+\twocolitem{\helpref{wxIcon}{wxicon}}{A small, transparent bitmap for assigning to frames and drawing on device contexts}
+\twocolitem{\helpref{wxImageList}{wximagelist}}{A list of images, used with some controls}
+\twocolitem{\helpref{wxMask}{wxmask}}{Represents a mask to be used with a bitmap for transparent drawing}
+\twocolitem{\helpref{wxPen}{wxpen}}{Used for drawing lines on a device context}
+\twocolitem{\helpref{wxPenList}{wxpenlist}}{The list of previously-created pens}
+\twocolitem{\helpref{wxPalette}{wxpalette}}{Represents a table of indices into RGB values}
+\twocolitem{\helpref{wxRegion}{wxregion}}{Represents a simple or complex region on a window or device context}
+\end{twocollist}
+
+{\large {\bf Events}}
+
+\overview{Overview}{eventhandlingoverview}
+
+An event object contains information about a specific event. Event handlers
+(usually member functions) have a single, event argument.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxActivateEvent}{wxactivateevent}}{A window or application activation event}
+\twocolitem{\helpref{wxCloseEvent}{wxcloseevent}}{A close window or end session event}
+\twocolitem{\helpref{wxCommandEvent}{wxcommandevent}}{An event from a variety of standard controls}
+\twocolitem{\helpref{wxDropFilesEvent}{wxdropfilesevent}}{A drop files event}
+\twocolitem{\helpref{wxEraseEvent}{wxeraseevent}}{An erase background event}
+\twocolitem{\helpref{wxEvent}{wxevent}}{The event base class}
+\twocolitem{\helpref{wxFocusEvent}{wxfocusevent}}{A window focus event}
+\twocolitem{\helpref{wxKeyEvent}{wxkeyevent}}{A keypress event}
+\twocolitem{\helpref{wxIdleEvent}{wxidleevent}}{An idle event}
+\twocolitem{\helpref{wxInitDialogEvent}{wxinitdialogevent}}{A dialog initialisation event}
+\twocolitem{\helpref{wxJoystickEvent}{wxjoystickevent}}{A joystick event}
+\twocolitem{\helpref{wxListEvent}{wxlistevent}}{A list control event}
+\twocolitem{\helpref{wxMenuEvent}{wxmenuevent}}{A menu event}
+\twocolitem{\helpref{wxMouseEvent}{wxmouseevent}}{A mouse event}
+\twocolitem{\helpref{wxMoveEvent}{wxmoveevent}}{A move event}
+\twocolitem{\helpref{wxPaintEvent}{wxpaintevent}}{A paint event}
+%\twocolitem{\helpref{wxSessionEvent}{wxsessionevent}}{A session ending event}
+\twocolitem{\helpref{wxSizeEvent}{wxsizeevent}}{A size event}
+\twocolitem{\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}}{A system colour change event}
+\twocolitem{\helpref{wxTreeEvent}{wxtreeevent}}{A tree control event}
+\twocolitem{\helpref{wxUpdateUIEvent}{wxupdateuievent}}{A user interface update event}
+\end{twocollist}
+
+{\large {\bf Validators}}
+
+These are the window validators, used for filtering and validating
+user input.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxValidator}{wxvalidator}}{Base validator class.}
+\twocolitem{\helpref{wxTextValidator}{wxtextvalidator}}{Text control validator class.}
+\end{twocollist}
+
+{\large {\bf Data structures}}
+
+These are the data structure classes supported by wxWindows.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxExpr}{wxexpr}}{A class for flexible I/O}
+\twocolitem{\helpref{wxExprDatabase}{wxexprdatabase}}{A class for flexible I/O}
+\twocolitem{\helpref{wxDate}{wxdate}}{A class for date manipulation}
+\twocolitem{\helpref{wxHashTable}{wxhashtable}}{A simple hash table implementation}
+\twocolitem{\helpref{wxList}{wxlist}}{A simple linked list implementation}
+\twocolitem{\helpref{wxNode}{wxnode}}{Represents a node in the wxList implementation}
+\twocolitem{\helpref{wxObject}{wxobject}}{The root class for most wxWindows classes}
+\twocolitem{\helpref{wxPathList}{wxpathlist}}{A class to help search multiple paths}
+\twocolitem{\helpref{wxPoint}{wxpoint}}{Representation of a point}
+\twocolitem{\helpref{wxRect}{wxrect}}{A class representing a rectangle}
+\twocolitem{\helpref{wxRegion}{wxregion}}{A class representing a region}
+\twocolitem{\helpref{wxString}{wxstring}}{A string class}
+\twocolitem{\helpref{wxStringList}{wxstringlist}}{A class representing a list of strings}
+\twocolitem{\helpref{wxRealPoint}{wxrealpoint}}{Representation of a point using floating point numbers}
+\twocolitem{\helpref{wxSize}{wxsize}}{Representation of a size}
+\twocolitem{\helpref{wxTime}{wxtime}}{A class for time manipulation}
+\end{twocollist}
+
+{\large {\bf Run-time class information system}}
+
+\overview{Overview}{runtimeclassoverview}
+
+wxWindows supports run-time manipulation of class information, and dynamic
+creation of objects given class names.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxClassInfo}{wxclassinfo}}{Holds run-time class information}
+\twocolitem{\helpref{wxObject}{wxobject}}{Root class for classes with run-time information}
+\twocolitem{\helpref{Macros}{macros}}{Macros for manipulating run-time information}
+\end{twocollist}
+
+{\large {\bf Debugging features}}
+
+\overview{Overview}{debuggingoverview}
+
+wxWindows supports some aspects of debugging an application through
+classes, functions and macros.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDebugContext}{wxdebugcontext}}{Provides various debugging facilities}
+\twocolitem{\helpref{wxDebugStreamBuf}{wxdebugstreambuf}}{A stream buffer writing to the debug stream}
+\twocolitem{\helpref{wxObject}{wxobject}}{Provides optional debugging versions of {\bf new} and {\bf delete}}
+\twocolitem{\helpref{wxTrace}{wxtrace}}{Tracing facility}
+\twocolitem{\helpref{wxTraceLevel}{wxtracelevel}}{Tracing facility with levels}
+\twocolitem{\helpref{WXDEBUG\_NEW}{debugnew}}{Use this macro to give further debugging information}
+\twocolitem{\helpref{WXTRACE}{trace}}{Trace macro}
+\twocolitem{\helpref{WXTRACELEVEL}{tracelevel}}{Trace macro with levels}
+\end{twocollist}
+
+{\large {\bf Interprocess communication}}
+
+\overview{Overview}{ipcoverview}
+
+wxWindows provides a simple interprocess communications facilities
+based on DDE.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDDEClient}{wxddeclient}}{Represents a client}
+\twocolitem{\helpref{wxDDEConnection}{wxddeconnection}}{Represents the connection between a client and a server}
+\twocolitem{\helpref{wxDDEServer}{wxddeserver}}{Represents a server}
+%TODO: put this somewhere \twocolitem{\helpref{wxHelpInstance}{wxhelpinstance}}{A specialised client}
+\end{twocollist}
+
+{\large {\bf Document/view framework}}
+
+\overview{Overview}{docviewoverview}
+
+wxWindows supports a document/view framework which provides
+housekeeping for a document-centric application.
+
+TODO: MDI frame classes for documents; make it unnecessary to convert
+between streams and files (overridable method that uses filenames instead of streams).
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDocument}{wxdocument}}{Represents a document}
+\twocolitem{\helpref{wxView}{wxview}}{Represents a view}
+\twocolitem{\helpref{wxDocTemplate}{wxdoctemplate}}{Manages the relationship between a document class and a veiw class}
+\twocolitem{\helpref{wxDocManager}{wxdocmanager}}{Manages the documents and views in an application}
+\twocolitem{\helpref{wxDocChildFrame}{wxdocchildframe}}{A child frame for showing a document view}
+\twocolitem{\helpref{wxDocParentFrame}{wxdocparentframe}}{A parent frame to contain views}
+\end{twocollist}
+
+{\large {\bf Printing framework}}
+
+\overview{Overview}{printingoverview}
+
+A printing and previewing framework is implemented to
+make it relatively straighforward to provide document printing
+facilities.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxPreviewFrame}{wxpreviewframe}}{Frame for displaying a print preview}
+\twocolitem{\helpref{wxPreviewCanvas}{wxpreviewcanvas}}{Canvas for displaying a print preview}
+\twocolitem{\helpref{wxPreviewControlBar}{wxpreviewcontrolbar}}{Standard control bar for a print preview}
+\twocolitem{\helpref{wxPrintData}{wxprintdata}}{Represents information about the document being printed}
+\twocolitem{\helpref{wxPrintDialog}{wxprintdialog}}{Standard print dialog}
+\twocolitem{\helpref{wxPrinter}{wxprinter}}{Class representing the printer}
+\twocolitem{\helpref{wxPrinterDC}{wxprinterdc}}{Printer device context}
+\twocolitem{\helpref{wxPrintout}{wxprintout}}{Class representing a particular printout}
+\twocolitem{\helpref{wxPrintPreview}{wxprintpreview}}{Class representing a print preview}
+\end{twocollist}
+
+{\large {\bf Database classes}}
+
+\overview{Database classes overview}{odbcoverview}
+
+wxWindows provides a set of classes for accessing Microsoft's ODBC (Open Database Connectivity)
+product.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxDatabase}{wxdatabase}}{Database class}
+\twocolitem{\helpref{wxQueryCol}{wxquerycol}}{Class representing a column}
+\twocolitem{\helpref{wxQueryField}{wxqueryfield}}{Class representing a field}
+\twocolitem{\helpref{wxRecordSet}{wxrecordset}}{Class representing one or more record}
+\end{twocollist}
+
+{\large {\bf Miscellaneous}}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxApp}{wxapp}}{Application class}
+\twocolitem{\helpref{wxTimer}{wxtimer}}{Timer class}
+\twocolitem{\helpref{wxSystemSettings}{wxsystemsettings}}{System settings class}
+\end{twocollist}
+
+
--- /dev/null
+\section{\class{wxCheckBox}}\label{wxcheckbox}
+
+A checkbox is a labelled box which is either on (checkmark is visible)
+or off (no checkmark).
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for wxCheckBox.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxRadioButton}{wxradiobutton}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCheckBox::wxCheckBox}\label{wxcheckboxconstr}
+
+\func{}{wxCheckBox}{\void}
+
+Default constructor.
+
+\func{}{wxCheckBox}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{label}, \param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize}, \param{long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{val}, \param{const wxString\& }{name = ``checkBox"}}
+
+Constructor, creating and showing a checkbox.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Checkbox identifier. A value of -1 indicates a default value.}
+
+\docparam{label}{Text to be displayed next to the checkbox.}
+
+\docparam{pos}{Checkbox position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Checkbox size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxCheckBox}{wxcheckbox}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxCheckBox::Create}{wxcheckboxcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxCheckBox::\destruct{wxCheckBox}}
+
+\func{}{\destruct{wxCheckBox}}{\void}
+
+Destructor, destroying the checkbox.
+
+\membersection{wxCheckBox::Create}\label{wxcheckboxcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{label}, \param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize}, \param{long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{val}, \param{const wxString\& }{name = ``checkBox"}}
+
+Creates the checkbox for two-step construction. See \helpref{wxCheckBox::wxCheckBox}{wxcheckboxconstr}\rtfsp
+for details.
+
+\membersection{wxCheckBox::GetValue}\label{wxcheckboxgetvalue}
+
+\constfunc{bool}{GetValue}{\void}
+
+Gets the state of the checkbox.
+
+\wxheading{Return value}
+
+Returns TRUE if it is checked, FALSE otherwise.
+
+\membersection{wxCheckBox::SetValue}\label{wxcheckboxsetvalue}
+
+\func{void}{SetValue}{\param{const bool}{ state}}
+
+Sets the checkbox to the given state.
+
+\wxheading{Parameters}
+
+\docparam{state}{If TRUE, the check is on, otherwise it is off.}
+
+
--- /dev/null
+\section{\class{wxChoice}}\label{wxchoice}
+
+A choice item is used to select one of a list of strings. Unlike a
+listbox, only the selection is visible until the user pulls down the
+menu of choices.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for wxChoice.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxListBox}{wxlistbox}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxChoice::wxChoice}\label{wxchoiceconstr}
+
+\func{}{wxChoice}{\void}
+
+Default constructor.
+
+\func{}{wxChoice}{\param{wxWindow *}{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\&}{ size},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[]},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``choice"}}
+
+Constructor, creating and showing a choice.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then the choice is sized
+appropriately.}
+
+\docparam{n}{Number of strings with which to initialise the choice control.}
+
+\docparam{choices}{An array of strings with which to initialise the choice control.}
+
+\docparam{style}{Window style. See \helpref{wxChoice}{wxchoice}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxChoice::Create}{wxchoicecreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxChoice::\destruct{wxChoice}}
+
+\func{}{\destruct{wxChoice}}{\void}
+
+Destructor, destroying the choice item.
+
+\membersection{wxChoice::Append}\label{wxchoiceappend}
+
+\func{void}{Append}{\param{const wxString\& }{ item}}
+
+Adds the item to the end of the choice control.
+
+\wxheading{Parameters}
+
+\docparam{item}{String to add.}
+
+\membersection{wxChoice::Clear}\label{wxchoiceclear}
+
+\func{void}{Clear}{\void}
+
+Clears the strings from the choice item.
+
+\membersection{wxChoice::Create}\label{wxchoicecreate}
+
+\func{bool}{Create}{\param{wxWindow *}{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\& }{pos}, \param{const wxSize\&}{ size},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[]},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``choice"}}
+
+Creates the choice for two-step construction. See \helpref{wxChoice::wxChoice}{wxchoiceconstr}.
+
+\membersection{wxChoice::FindString}\label{wxchoicefindstring}
+
+\constfunc{int}{FindString}{\param{const wxString\& }{string}}
+
+Finds a choice matching the given string.
+
+\wxheading{Parameters}
+
+\docparam{string}{String to find.}
+
+\wxheading{Return value}
+
+Returns the position if found, or -1 if not found.
+
+\membersection{wxChoice::GetColumns}\label{wxchoicegetcolumns}
+
+\constfunc{int}{GetColumns}{\void}
+
+Gets the number of columns in this choice item.
+
+\wxheading{Remarks}
+
+This is implemented for Motif only.
+
+\membersection{wxChoice::GetSelection}\label{wxchoicegetselection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Gets the id (position) of the selected string, or -1 if there is no selection.
+
+\membersection{wxChoice::GetString}\label{wxchoicegetstring}
+
+\constfunc{wxString}{GetString}{\param{const int}{ n}}
+
+Returns the string at the given position.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based position.}
+
+\wxheading{Return value}
+
+The string at the given position, or the empty string if {\it n} is invalid.
+
+\membersection{wxChoice::GetStringSelection}\label{wxchoicegetstringselection}
+
+\constfunc{wxString}{GetStringSelection}{\void}
+
+Gets the selected string, or the empty string if no string is selected.
+
+\membersection{wxChoice::Number}\label{wxchoicenumber}
+
+\constfunc{int}{Number}{\void}
+
+Returns the number of strings in the choice control.
+
+\membersection{wxChoice::SetColumns}\label{wxchoicesetcolumns}
+
+\func{void}{SetColumns}{\param{const int}{ n = 1}}
+
+Sets the number of columns in this choice item.
+
+\wxheading{Parameters}
+
+\docparam{n}{Number of columns.}
+
+\wxheading{Remarks}
+
+This is implemented for Motif only.
+
+\membersection{wxChoice::SetSelection}\label{wxchoicesetselection}
+
+\func{void}{SetSelection}{\param{const int}{ n}}
+
+Sets the choice by passing the desired string position.
+
+\wxheading{Parameters}
+
+\docparam{n}{The string position to select, starting from zero.}
+
+\wxheading{See also}
+
+\helpref{wxChoice::SetStringSelection}{wxchoicesetstringselection}
+
+\membersection{wxChoice::SetStringSelection}\label{wxchoicesetstringselection}
+
+\func{void}{SetStringSelection}{\param{const wxString\& }{ string}}
+
+Sets the choice by passing the desired string.
+
+\wxheading{Parameters}
+
+\docparam{string}{The string to select.}
+
+\wxheading{See also}
+
+\helpref{wxChoice::SetSelection}{wxchoicesetselection}
+
+
--- /dev/null
+\section{\class{wxClassInfo}}\label{wxclassinfo}
+
+This class stores meta-information about classes. Instances of this class are
+not generally defined directly by an application, but indirectly through use
+of macros such as {\bf DECLARE\_DYNAMIC\_CLASS} and {\bf IMPLEMENT\_DYNAMIC\_CLASS}.
+
+\wxheading{Derived from}
+
+No parent class.
+
+\wxheading{See also}
+
+\overview{Overview}{wxclassinfooverview}\\
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxClassInfo::wxClassInfo}\label{wxclassinfoconstr}
+
+\func{}{wxClassInfo}{\param{char* }{className}, \param{char* }{baseClass1}, \param{char* }{baseClass2},
+ \param{int}{ size}, \param{wxObjectConstructorFn }{fn}}
+
+Constructs a wxClassInfo object. The supplied macros implicitly construct objects of this
+class, so there is no need to create such objects explicitly in an application.
+
+\membersection{wxClassInfo::CreateObject}
+
+\func{wxObject*}{CreateObject}{\void}
+
+Creates an object of the appropriate kind. Returns NULL if the class has not been declared
+dynamically createable (typically, it's an abstract class).
+
+\membersection{wxClassInfo::FindClass}
+
+\func{static wxClassInfo *}{FindClass}{\param{char* }{name}}
+
+Finds the wxClassInfo object for a class of the given string name.
+
+\membersection{wxClassInfo::GetBaseClassName1}
+
+\constfunc{char*}{GetBaseClassName1}{\void}
+
+Returns the name of the first base class (NULL if none).
+
+\membersection{wxClassInfo::GetBaseClassName2}
+
+\constfunc{char*}{GetBaseClassName2}{\void}
+
+Returns the name of the second base class (NULL if none).
+
+\membersection{wxClassInfo::GetClassName}
+
+\constfunc{char *}{GetClassName}{\void}
+
+Returns the string form of the class name.
+
+\membersection{wxClassInfo::GetSize}
+
+\constfunc{int}{GetSize}{\void}
+
+Returns the size of the class.
+
+\membersection{wxClassInfo::InitializeClasses}
+
+\func{static void}{InitializeClasses}{\void}
+
+Initializes pointers in the wxClassInfo objects for fast execution
+of IsKindOf. Called in base wxWindows library initialization.
+
+\membersection{wxClassInfo::IsKindOf}\label{wxclassinfoiskindof}
+
+\func{bool}{IsKindOf}{\param{wxClassInfo* }{info}}
+
+Returns TRUE if this class is a kind of (inherits from) the given class.
+
+
--- /dev/null
+\chapter{Alphabetical class reference}\label{classref}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\pagenumbering{arabic}%
+%
+\begin{comment}
+\helpignore{\section{Class hierarchy}%
+
+The GUI-specific wxWindows class hierarchy is shown in Figure 5.1.
+Many other, non-GUI classes have been omitted.
+
+\vskip 1cm
+$$\image{14cm;0cm}{wxclass.ps}$$
+\vskip 1cm
+\centerline{Figure 5.1: wxWindows class hierarchy}
+
+\newpage}%
+
+\overview{Writing a wxWindows application: a rough guide}{roughguide}
+
+\helponly{
+\sethotspotcolour{off}%
+\large{
+\helpref{Notes on using the reference}{referencenotes}\\
+\helpref{Guide to functions}{functions}
+\sethotspotcolour{on}%
+}}
+\end{comment}
+
+\input activevt.tex
+\input app.tex
+\input button.tex
+\input bitmap.tex
+\input bbutton.tex
+\input brush.tex
+\input checkbox.tex
+\input choice.tex
+\input clasinfo.tex
+\input clientdc.tex
+\input clipbrd.tex
+\input closeevt.tex
+\input colour.tex
+\input colordlg.tex
+\input combobox.tex
+\input command.tex
+\input cmdevent.tex
+\input cmdproc.tex
+\input control.tex
+\input cursor.tex
+\input database.tex
+\input date.tex
+\input dc.tex
+\input ddeclint.tex
+\input ddeconn.tex
+\input ddeservr.tex
+\input debugcxt.tex
+\input dialog.tex
+\input dirdlg.tex
+\input document.tex
+\input docchfrm.tex
+\input docmanag.tex
+\input docprfrm.tex
+\input doctempl.tex
+\input dropevt.tex
+\input eraseevt.tex
+\input event.tex
+\input evthand.tex
+\input expr.tex
+\input file.tex
+\input filedlg.tex
+\input filehist.tex
+\input focusevt.tex
+\input font.tex
+\input fontdlg.tex
+\input fontlist.tex
+\input frame.tex
+\input gauge.tex
+\input gdiobj.tex
+\input grid.tex
+\input hash.tex
+\input helpinst.tex
+\input idleevt.tex
+\input icon.tex
+\input imaglist.tex
+\input ilayout.tex
+\input indlgevt.tex
+\input keyevent.tex
+\input layout.tex
+\input list.tex
+\input listbox.tex
+\input listctrl.tex
+\input listevt.tex
+\input mask.tex
+\input mdi.tex
+\input menu.tex
+\input menuitem.tex
+\input menuevt.tex
+\input memorydc.tex
+\input msgdlg.tex
+\input metafile.tex
+\input minifram.tex
+\input module.tex
+\input mouseevt.tex
+\input moveevt.tex
+\input mltchdlg.tex
+\input node.tex
+\input object.tex
+\input pagedlg.tex
+\input paintdc.tex
+\input paintevt.tex
+\input palette.tex
+\input panel.tex
+\input pantabv.tex
+\input pathlist.tex
+\input pen.tex
+\input point.tex
+\input prevwin.tex
+\input print.tex
+\input postscpt.tex
+\input query.tex
+\input realpoin.tex
+\input rect.tex
+\input recrdset.tex
+\input radiobox.tex
+\input radiobut.tex
+\input region.tex
+\input screendc.tex
+\input scrolbar.tex
+\input scrolevt.tex
+\input scrolwin.tex
+\input sngchdlg.tex
+\input size.tex
+\input sizeevt.tex
+\input slider.tex
+\input spinbutt.tex
+\input splitter.tex
+\input statbmp.tex
+\input statbox.tex
+\input stattext.tex
+\input statusbr.tex
+\input wxstring.tex
+\input strlist.tex
+\input sysclevt.tex
+\input settings.tex
+\input tab.tex
+\input text.tex
+\input textdlg.tex
+\input valtext.tex
+\input taskbar.tex
+\input time.tex
+\input timer.tex
+\input treectrl.tex
+\input treeevt.tex
+\input toolbar.tex
+\input upditer.tex
+\input upduievt.tex
+\input validatr.tex
+\input view.tex
+\input window.tex
+\input windowdc.tex
+
+\input function.tex
+
--- /dev/null
+\section{\class{wxClientDC}}\label{wxclientdc}
+
+A wxClientDC must be constructed if an application wishes to paint on the
+client area of a window from outside an {\bf OnPaint} event.
+This should normally be constructed as a temporary stack object; don't store
+a wxClientDC object.
+
+To draw on a window from within {\bf OnPaint}, construct a \helpref{wxPaintDC}{wxpaintdc} object.
+
+To draw on the whole window including decorations, construct a \helpref{wxWindowDC}{wxwindowdc} object
+(Windows only).
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{wxWindowDC}{wxwindowdc}, \helpref{wxScreenDC}{wxscreendc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxClientDC::wxClientDC}
+
+\func{}{wxClientDC}{\param{wxWindow*}{ window}}
+
+Constructor. Pass a pointer to the window on which you wish to paint.
+
+
+
--- /dev/null
+\section{\class{wxClipboard}}\label{wxclipboard}
+
+There is one wxClipboard object referenced by the pointer
+wxTheClipboard, initialized by calling \helpref{wxInitClipboard}{wxinitclipboard}.
+Under X, clipboard manipulation must be done by using this class, and
+such code will work under MS Windows also. Under MS Windows, you have the
+alternative of using the normal clipboard functions.
+
+The documentation for this class will be expanded in due course. At present,
+wxClipboard is only used in the wxMediaWindow add-on library.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxClipboardClient}{wxclipboardclient}, \helpref{wxInitClipboard}{wxinitclipboard}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxClipboard::GetClipboardClient}
+
+\func{wxClipboardClient *}{GetClipboardClient}{\void}
+
+Get the clipboard client directly. Will be NULL if clipboard data
+is a string, or if some other application owns the clipboard.
+This can be useful for shortcutting data translation, if the
+clipboard user can check for a specific client.
+
+\membersection{wxClipboard::GetClipboardData}
+
+\func{char*}{GetClipboardData}{\param{const wxString\& }{format}, \param{long *}{length}, \param{long}{ time}}
+
+Get data from the clipboard.
+
+\membersection{wxClipboard::GetClipboardString}
+
+\func{wxString}{GetClipboardString}{\param{long}{ time}}
+
+Get the data from the clipboard in the format ``TEXT".
+
+\membersection{wxClipboard::SetClipboardClient}
+
+\func{void}{SetClipboardClient}{\param{wxClipboardClient *}{client}, \param{long}{ time}}
+
+Set the clipboard data owner.
+
+\membersection{wxClipboard::SetClipboardString}
+
+\func{void}{SetClipboardString}{\param{const wxString\& }{data}, \param{long}{ time}}
+
+Set the clipboard string; does not require a client.
+
+\section{\class{wxClipboardClient}}\label{wxclipboardclient}
+
+Implemented under X and MS Windows, a clipboard client holds data
+belonging to the clipboard. For plain text, a client is not necessary.
+
+wxClipboardClient is an abstract class for which the virtual functions
+BeingReplaced and GetData must be overridden.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxClipboard}{wxclipboard}, \helpref{wxInitClipboard}{wxinitclipboard}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxClipboardClient::formats}
+
+\member{wxStringList}{formats}
+
+This list should be filled in with strings indicating the formats
+this client can provide. Almost all clients will provide``TEXT".
+Format names should be 4 characters long, so things will work
+out on the Macintosh.
+
+\membersection{wxClipboardClient::BeingReplaced}
+
+\func{void}{BeingReplaced}{\void}
+
+This method is called when the client is losing the selection.
+
+\membersection{wxClipboardClient::GetData}
+
+\func{char*}{GetData}{\param{const wxString\& }{format}, \param{long *}{size}}
+
+This method is called when someone wants the data this client is
+supplying to the clipboard.
+
+{\it format} is a string indicating the
+format of the data - one of the strings from the ``formats"
+list.
+
+{\it size} should be filled with the size of the resulting
+data. In the case of text, {\it size} does not count the
+NULL terminator.
+
+
--- /dev/null
+\section{\class{wxCloseEvent}}\label{wxcloseevent}
+
+This event class contains information about window and session close events.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}
+
+\wxheading{Event table macros}
+
+To process a close event, use these event handler macros to direct input to member
+functions that take a wxCloseEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_CLOSE(func)}}{Process a close event, supplying the member function.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow},\rtfsp
+\helpref{wxWindow::Close}{wxwindowclose},\rtfsp
+\helpref{Window deletion overview}{windowdeletionoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCloseEvent::wxCloseEvent}
+
+\func{}{wxCloseEvent}{\param{WXTYPE}{ commandEventType = 0}, \param{int}{ id = 0}}
+
+Constructor.
+
+\membersection{wxCloseEvent::GetLoggingOff}\label{wxcloseeventgetloggingoff}
+
+\constfunc{bool}{GetLoggingOff}{\void}
+
+Returns TRUE if the user is logging off.
+
+\membersection{wxCloseEvent::GetSessionEnding}\label{wxcloseeventgetsessionending}
+
+\constfunc{bool}{GetSessionEnding}{\void}
+
+Returns TRUE if the session is ending.
+
+\membersection{wxCloseEvent::GetForce}\label{wxcloseeventgetforce}
+
+\constfunc{void}{GetForce}{\void}
+
+Returns TRUE if the application wishes to force the window to close.
+
+\membersection{wxCloseEvent::Veto}\label{wxcloseeventveto}
+
+\func{void}{Veto}{\void}
+
+Call this from your event handler to veto a system shutdown.
+
+
--- /dev/null
+\section{\class{wxCommandEvent}}\label{wxcommandevent}
+
+This event class contains information about command events, which originate from a variety of
+simple controls. More complex controls, such as \helpref{wxTreeCtrl}{wxtreectrl}, have separate command event classes.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}
+
+\wxheading{Event table macros}
+
+To process a menu command event, use these event handler macros to direct input to member
+functions that take a wxCommandEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_COMMAND(id, cmd, func)}}{Process a command, supplying the window identifier,
+command event identifier, and member function.}
+\twocolitem{{\bf EVT\_COMMAND\_RANGE(id1, id2, cmd, func)}}{Process a command for a range
+of window identifiers, supplying the minimum and maximum window identifiers,
+command event identifier, and member function.}
+\twocolitem{{\bf EVT\_BUTTON(id, func)}}{Process a wxEVT\_COMMAND\_BUTTON\_CLICKED command,
+which is generated by a wxButton control.}
+\twocolitem{{\bf EVT\_CHECKBOX(id, func)}}{Process a wxEVT\_COMMAND\_CHECKBOX\_CLICKED command,
+which is generated by a wxCheckBox control.}
+\twocolitem{{\bf EVT\_CHOICE(id, func)}}{Process a wxEVT\_COMMAND\_CHOICE\_SELECTED command,
+which is generated by a wxChoice control.}
+\twocolitem{{\bf EVT\_LISTBOX(id, func)}}{Process a wxEVT\_COMMAND\_LISTBOX\_SELECTED command,
+which is generated by a wxListBox control.}
+\twocolitem{{\bf EVT\_TEXT(id, func)}}{Process a wxEVT\_COMMAND\_TEXT\_UPDATED command,
+which is generated by a wxTextCtrl control.}
+\twocolitem{{\bf EVT\_TEXT\_ENTER(id, func)}}{Process a wxEVT\_COMMAND\_TEXT\_ENTER command,
+which is generated by a wxTextCtrl control.}
+\twocolitem{{\bf EVT\_MENU(id, func)}}{Process a wxEVT\_COMMAND\_MENU\_SELECTED command,
+which is generated by a menu item.}
+\twocolitem{{\bf EVT\_MENU\_RANGE(id1, id2, func)}}{Process a wxEVT\_COMMAND\_MENU\_RANGE command,
+which is generated by a range of menu items.}
+\twocolitem{{\bf EVT\_SLIDER(id, func)}}{Process a wxEVT\_COMMAND\_SLIDER\_UPDATED command,
+which is generated by a wxSlider control.}
+\twocolitem{{\bf EVT\_RADIOBOX(id, func)}}{Process a wxEVT\_COMMAND\_RADIOBOX\_SELECTED command,
+which is generated by a wxRadioBox control.}
+\twocolitem{{\bf EVT\_RADIOBUTTON(id, func)}}{Process a wxEVT\_COMMAND\_RADIOBUTTON\_SELECTED command,
+which is generated by a wxRadioButton control.}
+\twocolitem{{\bf EVT\_SCROLLBAR(id, func)}}{Process a wxEVT\_COMMAND\_SCROLLBAR\_UPDATED command,
+which is generated by a wxScrollBar control. This is provided for compatibility only;
+more specific scrollbar event macros should be used instead (see \helpref{wxScrollEvent}{wxscrollevent}).}
+\twocolitem{{\bf EVT\_COMBOBOX(id, func)}}{Process a wxEVT\_COMMAND\_COMBOBOX\_SELECTED command,
+which is generated by a wxComboBox control.}
+\twocolitem{{\bf EVT\_TOOL(id, func)}}{Process a wxEVT\_COMMAND\_TOOL\_CLICKED command,
+which is generated by a toobar button.}
+\twocolitem{{\bf EVT\_TOOL\_RCLICKED(id, func)}}{Process a wxEVT\_COMMAND\_TOOL\_RCLICKED command,
+which is generated by a toobar button.}
+\twocolitem{{\bf EVT\_TOOL\_ENTER(id, func)}}{Process a wxEVT\_COMMAND\_TOOL\_ENTER command,
+which is generated by a toobar button.}
+\twocolitem{{\bf EVT\_COMMAND\_LEFT\_CLICK(id, func)}}{Process a wxEVT\_COMMAND\_LEFT\_CLICK command,
+which is generated by a control (Windows 95 and NT only).}
+\twocolitem{{\bf EVT\_COMMAND\_LEFT\_DCLICK(id, func)}}{Process a wxEVT\_COMMAND\_LEFT\_DCLICK command,
+which is generated by a control (Windows 95 and NT only).}
+\twocolitem{{\bf EVT\_COMMAND\_RIGHT\_CLICK(id, func)}}{Process a wxEVT\_COMMAND\_RIGHT\_CLICK command,
+which is generated by a control (Windows 95 and NT only).}
+\twocolitem{{\bf EVT\_COMMAND\_SET\_FOCUS(id, func)}}{Process a wxEVT\_COMMAND\_SET\_FOCUS command,
+which is generated by a control (Windows 95 and NT only).}
+\twocolitem{{\bf EVT\_COMMAND\_KILL\_FOCUS(id, func)}}{Process a wxEVT\_COMMAND\_KILL\_FOCUS command,
+which is generated by a control (Windows 95 and NT only).}
+\twocolitem{{\bf EVT\_COMMAND\_ENTER(id, func)}}{Process a wxEVT\_COMMAND\_ENTER command,
+which is generated by a control.}
+\end{twocollist}%
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCommandEvent::m\_clientData}
+
+\member{char*}{m\_clientData}
+
+Contains a pointer to client data for listboxes and choices, if the event
+was a selection.
+
+\membersection{wxCommandEvent::m\_commandInt}
+
+\member{int}{m\_commandInt}
+
+Contains an integer identifier corresponding to a listbox, choice or
+radiobox selection (only if the event was a selection, not a
+deselection), or a boolean value representing the value of a checkbox.
+
+\membersection{wxCommandEvent::m\_commandString}
+
+\member{char*}{m\_commandString}
+
+Contains a string corresponding to a listbox or choice selection.
+
+\membersection{wxCommandEvent::m\_extraLong}
+
+\member{long}{m\_extraLong}
+
+Extra information. If the event comes from a listbox selection, it is
+a boolean determining whether the event was a selection (TRUE) or a
+deselection (FALSE). A listbox deselection only occurs for
+multiple-selection boxes, and in this case the index and string values
+are indeterminate and the listbox must be examined by the application.
+
+\membersection{wxCommandEvent::wxCommandEvent}
+
+\func{}{wxCommandEvent}{\param{WXTYPE}{ commandEventType = 0}, \param{int}{ id = 0}}
+
+Constructor.
+
+\membersection{wxCommandEvent::Checked}
+
+\func{bool}{Checked}{\void}
+
+Returns TRUE or FALSE for a checkbox selection event.
+
+\membersection{wxCommandEvent::GetClientData}
+
+\func{char*}{GetClientData}{\void}
+
+Returns client data pointer for a listbox or choice selection event
+(not valid for a deselection).
+
+\membersection{wxCommandEvent::GetExtraLong}
+
+\func{long}{GetExtraLong}{\void}
+
+Returns the {\bf m\_extraLong} member.
+
+\membersection{wxCommandEvent::GetInt}
+
+\func{int}{GetInt}{\void}
+
+Returns the {\bf m\_commandInt} member.
+
+\membersection{wxCommandEvent::GetSelection}
+
+\func{int}{GetSelection}{\void}
+
+Returns item index for a listbox or choice selection event (not valid for
+a deselection).
+
+\membersection{wxCommandEvent::GetString}
+
+\func{char*}{GetString}{\void}
+
+Returns item string for a listbox or choice selection event (not valid for
+a deselection).
+
+\membersection{wxCommandEvent::IsSelection}
+
+\func{bool}{IsSelection}{\void}
+
+For a listbox or choice event, returns TRUE if it is a selection, FALSE if it
+is a deselection.
+
+\membersection{wxCommandEvent::SetClientData}
+
+\func{void}{SetClientData}{\param{char*}{ clientData}}
+
+Sets the client data for this event.
+
+\membersection{wxCommandEvent::SetExtraLong}
+
+\func{void}{SetExtraLong}{\param{int}{ extraLong}}
+
+Sets the {\bf m\_extraLong} member.
+
+\membersection{wxCommandEvent::SetInt}
+
+\func{void}{SetInt}{\param{int}{ intCommand}}
+
+Sets the {\bf m\_commandInt} member.
+
+\membersection{wxCommandEvent::SetString}
+
+\func{void}{SetString}{\param{char*}{ string}}
+
+Sets the {\bf m\_commandString} member.
+
--- /dev/null
+\section{\class{wxCommandProcessor}}\label{wxcommandprocessor}
+
+wxCommandProcessor is a class that maintains a history of wxCommands,
+with undo/redo functionality built-in. Derive a new class from this
+if you want different behaviour.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxCommandProcessor overview}{wxcommandprocessoroverview}, \helpref{wxCommand}{wxcommand}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCommandProcessor::wxCommandProcessor}
+
+\func{}{wxCommandProcessor}{\param{int}{ maxCommands = 100}}
+
+Constructor.
+
+{\it maxCommands} defaults to a rather arbitrary 100, but can be set from 1 to any integer.
+If your wxCommand classes store a lot of data, you may wish the limit the number of
+commands stored to a smaller number.
+
+\membersection{wxCommandProcessor::\destruct{wxCommandProcessor}}
+
+\func{}{\destruct{wxCommandProcessor}}{\void}
+
+Destructor.
+
+\membersection{wxCommandProcessor::CanUndo}
+
+\func{virtual bool}{CanUndo}{\void}
+
+Returns TRUE if the currently-active command can be undone, FALSE otherwise.
+
+\membersection{wxCommandProcessor::ClearCommands}
+
+\func{virtual void}{ClearCommands}{\void}
+
+Deletes all the commands in the list and sets the current command pointer to NULL.
+
+\membersection{wxCommandProcessor::Do}
+
+\func{virtual bool}{Do}{\void}
+
+Executes (redoes) the current command (the command that has just been undone if any).
+
+\membersection{wxCommandProcessor::GetCommands}
+
+\constfunc{wxList\&}{GetCommands}{\void}
+
+Returns the list of commands.
+
+\membersection{wxCommandProcessor::GetMaxCommands}
+
+\constfunc{int}{GetMaxCommands}{\void}
+
+Returns the maximum number of commands that the command processor stores.
+
+\membersection{wxCommandProcessor::GetEditMenu}
+
+\constfunc{wxMenu*}{GetEditMenu}{\void}
+
+Returns the edit menu associated with the command processor.
+
+\membersection{wxCommandProcessor::Initialize}
+
+\func{virtual void}{Initialize}{\void}
+
+Initializes the command processor, setting the current command to the
+last in the list (if any), and updating the edit menu (if one has been
+specified).
+
+\membersection{wxCommandProcessor::SetEditMenu}
+
+\func{void}{SetEditMenu}{\param{wxMenu* }{menu}}
+
+Tells the command processor to update the Undo and Redo items on this
+menu as appropriate. Set this to NULL if the menu is about to be
+destroyed and command operations may still be performed, or the command
+processor may try to access an invalid pointer.
+
+\membersection{wxCommandProcessor::Submit}
+
+\func{virtual bool}{Submit}{\param{wxCommand *}{command}, \param{bool}{ storeIt = TRUE}}
+
+Submits a new command to the command processor. The command processor
+calls wxCommand::Do to execute the command; if it succeeds, the command
+is stored in the history list, and the associated edit menu (if any) updated
+appropriately. If it fails, the command is deleted
+immediately. Once Submit has been called, the passed command should not
+be deleted directly by the application.
+
+{\it storeIt} indicates whether the successful command should be stored
+in the history list.
+
+\membersection{wxCommandProcessor::Undo}
+
+\func{virtual bool}{Undo}{\void}
+
+Undoes the command just executed.
+
+
--- /dev/null
+\section{\class{wxColourDialog}}\label{wxcolourdialog}
+
+This class represents the colour chooser dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxColourDialog Overview}{wxcolourdialogoverview}, \helpref{wxColour}{wxcolour}, \helpref{wxColourData}{wxcolourdata}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxColourDialog::wxColourDialog}
+
+\func{}{wxColourDialog}{\param{wxWindow* }{parent}, \param{wxColourData* }{data = NULL}}
+
+Constructor. Pass a parent window, and optionally a pointer to a block of colour
+data, which will be copied to the colour dialog's colour data.
+
+\wxheading{See also}
+
+\helpref{wxColourData}{wxcolourdata}
+
+\membersection{wxColourDialog::\destruct{wxColourDialog}}
+
+\func{}{\destruct{wxColourDialog}}{\void}
+
+Destructor.
+
+\membersection{wxColourDialog::GetColourData}
+
+\func{wxColourData\&}{GetColourData}{\void}
+
+Returns the \helpref{colour data}{wxcolourdata} associated with the colour dialog.
+
+\membersection{wxColourDialog::ShowModal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxOK\_CANCEL
+otherwise.
+
+
--- /dev/null
+\section{\class{wxColour}}\label{wxcolour}
+
+A colour is an object representing a combination of Red, Green, and Blue (RGB) intensity values,
+and is used to determine drawing colours. See the
+entry for \helpref{wxColourDatabase}{wxcolourdatabase} for how a pointer to a predefined,
+named colour may be returned instead of creating a new colour.
+
+Valid RGB values are in the range 0 to 255.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxColourDatabase}{wxcolourdatabase}, \helpref{wxPen}{wxpen}, \helpref{wxBrush}{wxbrush},\rtfsp
+\helpref{wxColourDialog}{wxcolourdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxColour::wxColour}\label{wxcolourconstr}
+
+\func{}{wxColour}{\void}
+
+Default constructor.
+
+\func{}{wxColour}{\param{const unsigned char}{ red}, \param{const unsigned char}{ green}, \param{const unsigned char}{ blue}}
+
+Constructs a colour from red, green and blue values.
+
+\func{}{wxColour}{\param{const wxString\& }{colourNname}}
+
+Constructs a colour object using a colour name
+listed in {\bf wxTheColourDatabase}.
+
+\wxheading{Parameters}
+
+\docparam{red}{The red value.}
+
+\docparam{green}{The green value.}
+
+\docparam{blue}{The blue value.}
+
+\docparam{colourName}{The colour name.}
+
+\wxheading{See also}
+
+\helpref{wxColourDatabase}{wxcolourdatabase}
+
+\membersection{wxColour::Blue}\label{wxcolourblue}
+
+\constfunc{unsigned char}{Blue}{\void}
+
+Returns the blue intensity.
+
+\membersection{wxColour::GetPixel}\label{wxcolourgetpixel}
+
+\constfunc{long}{GetPixel}{\void}
+
+Returns a pixel value which is platform-dependent. On Windows, a COLORREF is returned.
+On X, an allocated pixel value is returned.
+
+-1 is returned if the pixel is invalid (on X, unallocated).
+
+\membersection{wxColour::Green}\label{wxcolourgreen}
+
+\constfunc{unsigned char}{Green}{\void}
+
+Returns the green intensity.
+
+\membersection{wxColour::Ok}\label{wxcolourok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if the colour object is valid (the colour has been initialised with RGB values).
+
+\membersection{wxColour::Red}\label{wxcolourred}
+
+\constfunc{unsigned char}{Red}{\void}
+
+Returns the red intensity.
+
+\membersection{wxColour::Set}\label{wxcolourset}
+
+\func{void}{Set}{\param{const unsigned char}{ red}, \param{const unsigned char}{ green}, \param{const unsigned char}{ blue}}
+
+Sets the RGB intensity values.
+
+\membersection{wxColour::operator $=$}\label{wxcolourassign}
+
+\func{wxColour\&}{operator $=$}{\param{const wxColour\&}{ colour}}
+
+Assignment operator, taking another colour object.
+
+\func{wxColour\&}{operator $=$}{\param{const wxString\&}{ colourName}}
+
+Assignment operator, using a colour name to be found in the colour database.
+
+\wxheading{See also}
+
+\helpref{wxColourDatabase}{wxcolourdatabase}
+
+\membersection{wxColour::operator $==$}\label{wxcolourequality}
+
+\func{bool}{operator $==$}{\param{const wxColour\&}{ colour}}
+
+Tests the equality of two colours by comparing individual red, green blue colours.
+
+TODO: this may be different on platforms other than Windows - no reference counting
+is done on Windows.
+
+\membersection{wxColour::operator $!=$}\label{wxcolourinequality}
+
+\func{bool}{operator $!=$}{\param{const wxColour\&}{ colour}}
+
+Tests the inequality of two colours by comparing individual red, green blue colours.
+
+TODO: this may be different on platforms other than Windows - no reference counting
+is done on Windows.
+
+\section{\class{wxColourData}}\label{wxcolourdata}
+
+This class holds a variety of information related to colour dialogs.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxColour}{wxcolour}, \helpref{wxColourDialog}{wxcolourdialog}, \helpref{wxColourDialog overview}{wxcolourdialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxColourData::wxColourData}\label{wxcolourdataconstr}
+
+\func{}{wxColourData}{\void}
+
+Constructor. Initializes the custom colours to white, the {\it data colour} setting
+to black, and the {\it choose full} setting to TRUE.
+
+\membersection{wxColourData::\destruct{wxColourData}}
+
+\func{}{\destruct{wxColourData}}{\void}
+
+Destructor.
+
+\membersection{wxColourData::GetChooseFull}\label{wxcolourdatagetchoosefull}
+
+\constfunc{bool}{GetChooseFull}{\void}
+
+Under Windows, determines whether the Windows colour dialog will display the full dialog
+with custom colour selection controls. Has no meaning under other platforms.
+
+The default value is TRUE.
+
+\membersection{wxColourData::GetColour}\label{wxcolourdatagetcolour}
+
+\constfunc{wxColour\&}{GetColour}{\void}
+
+Gets the current colour associated with the colour dialog.
+
+The default colour is black.
+
+\membersection{wxColourData::GetCustomColour}\label{wxcolourdatagetcustomcolour}
+
+\constfunc{wxColour\&}{GetCustomColour}{\param{const int}{ i}}
+
+Gets the {\it i}th custom colour associated with the colour dialog. {\it i} should
+be an integer between 0 and 15.
+
+The default custom colours are all white.
+
+\membersection{wxColourData::SetChooseFull}\label{wxcolourdatasetchoosefull}
+
+\func{void}{SetChooseFull}{\param{const bool }{flag}}
+
+Under Windows, tells the Windows colour dialog to display the full dialog
+with custom colour selection controls. Under other platforms, has no effect.
+
+The default value is TRUE.
+
+\membersection{wxColourData::SetColour}\label{wxcolourdatasetcolour}
+
+\func{void}{SetColour}{\param{const wxColour\&}{ colour}}
+
+Sets the default colour for the colour dialog.
+
+The default colour is black.
+
+\membersection{wxColourData::SetCustomColour}\label{wxcolourdatasetcustomcolour}
+
+\func{void}{SetColour}{\param{const int}{ i}, \param{const wxColour\&}{ colour}}
+
+Sets the {\it i}th custom colour for the colour dialog. {\it i} should
+be an integer between 0 and 15.
+
+The default custom colours are all white.
+
+\membersection{wxColourData::operator $=$}\label{wxcolourdataassign}
+
+\func{void}{operator $=$}{\param{const wxColourData\&}{ data}}
+
+Assingment operator for the colour data.
+
+\section{\class{wxColourDatabase}}\label{wxcolourdatabase}
+
+wxWindows maintains a database of standard RGB colours for a predefined
+set of named colours (such as ``BLACK'', ``LIGHT GREY''). The
+application may add to this set if desired by using {\it Append}. There
+is only one instance of this class: {\bf wxTheColourDatabase}.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+The colours in the standard database are as follows:
+
+AQUAMARINE, BLACK, BLUE, BLUE VIOLET, BROWN, CADET BLUE, CORAL,
+CORNFLOWER BLUE, CYAN, DARK GREY, DARK GREEN, DARK OLIVE GREEN, DARK
+ORCHID, DARK SLATE BLUE, DARK SLATE GREY DARK TURQUOISE, DIM GREY,
+FIREBRICK, FOREST GREEN, GOLD, GOLDENROD, GREY, GREEN, GREEN YELLOW,
+INDIAN RED, KHAKI, LIGHT BLUE, LIGHT GREY, LIGHT STEEL BLUE, LIME GREEN,
+MAGENTA, MAROON, MEDIUM AQUAMARINE, MEDIUM BLUE, MEDIUM FOREST GREEN,
+MEDIUM GOLDENROD, MEDIUM ORCHID, MEDIUM SEA GREEN, MEDIUM SLATE BLUE,
+MEDIUM SPRING GREEN, MEDIUM TURQUOISE, MEDIUM VIOLET RED, MIDNIGHT BLUE,
+NAVY, ORANGE, ORANGE RED, ORCHID, PALE GREEN, PINK, PLUM, PURPLE, RED,
+SALMON, SEA GREEN, SIENNA, SKY BLUE, SLATE BLUE, SPRING GREEN, STEEL
+BLUE, TAN, THISTLE, TURQUOISE, VIOLET, VIOLET RED, WHEAT, WHITE, YELLOW,
+YELLOW GREEN.
+
+\wxheading{See also}
+
+\helpref{wxColour}{wxcolour}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxColourDatabase::wxColourDatabase}\label{wxcolourdatabaseconstr}
+
+\func{}{wxColourDatabase}{\void}
+
+Constructs the colour database.
+
+\membersection{wxColourDatabase::FindColour}\label{wxcolourdatabasefindcolour}
+
+\func{wxColour*}{FindColour}{\param{const wxString\& }{colourName}}
+
+Finds a colour given the name. Returns NULL if not found.
+
+\membersection{wxColourDatabase::FindName}\label{wxcolourdatabasefindname}
+
+\constfunc{wxString}{FindName}{\param{const wxColour\&}{ colour}}
+
+Finds a colour name given the colour. Returns NULL if not found.
+
+\membersection{wxColourDatabase::Initialize}\label{wxcolourdatabaseinitialize}
+
+\func{void}{Initialize}{\void}
+
+Initializes the database with a number of stock colours. Called by wxWindows
+on start-up.
+
+
--- /dev/null
+\section{\class{wxComboBox}}\label{wxcombobox}
+
+A combobox is like a combination of an edit control and a listbox. It can be
+displayed as static list with editable or read-only text field; or a drop-down list with
+text field; or a drop-down list without a text field.
+
+A combobox permits a single selection only. Combobox items are numbered from zero.
+
+\wxheading{Derived from}
+
+\helpref{wxChoice}{wxchoice}\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxCB\_SIMPLE}}{Creates a combobox with a permanently displayed list.}
+\twocolitem{\windowstyle{wxCB\_DROPDOWN}}{Creates a combobox with a drop-down list.}
+\twocolitem{\windowstyle{wxCB\_READONLY}}{Creates a combo box consisting of a drop-down list and static text item
+displaying the current selection.}
+\twocolitem{\windowstyle{wxCB\_SORT}}{Sorts the entries in the list alphabetically.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxListBox}{wxlistbox}, \helpref{wxTextCtrl}{wxtextctrl}, \helpref{wxChoice}{wxchoice}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxComboBox::wxComboBox}\label{wxcomboboxconstr}
+
+\func{}{wxComboBox}{\void}
+
+Default constructor.
+
+\func{}{wxComboBox}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{value = ``"}, \param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[]},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``comboBox"}}
+
+Constructor, creating and showing a combobox.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then the window is sized
+appropriately.}
+
+\docparam{n}{Number of strings with which to initialise the control.}
+
+\docparam{choices}{An array of strings with which to initialise the control.}
+
+\docparam{style}{Window style. See \helpref{wxComboBox}{wxcombobox}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxComboBox::Create}{wxcomboboxcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxComboBox::\destruct{wxComboBox}}
+
+\func{}{\destruct{wxComboBox}}{\void}
+
+Destructor, destroying the combobox.
+
+\membersection{wxComboBox::Append}\label{wxcomboboxappend}
+
+\func{void}{Append}{\param{const wxString\& }{item}}
+
+Adds the item to the end of the combobox.
+
+\func{void}{Append}{\param{const wxString\& }{ item}, \param{char* }{clientData}}
+
+Adds the item to the end of the combobox, associating the given data
+with the item.
+
+\wxheading{Parameters}
+
+\docparam{item}{The string to add.}
+
+\docparam{clientData}{Client data to associate with the item.}
+
+\membersection{wxComboBox::Clear}\label{wxcomboboxclear}
+
+\func{void}{Clear}{\void}
+
+Clears all strings from the combobox.
+
+\membersection{wxComboBox::Create}\label{wxcomboboxcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{value = ``"}, \param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[]},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``comboBox"}}
+
+Creates the combobox for two-step construction. Derived classes
+should call or replace this function. See \helpref{wxComboBox::wxComboBox}{wxcomboboxconstr}\rtfsp
+for further details.
+
+\membersection{wxComboBox::Copy}\label{wxcomboboxcopy}
+
+\func{void}{Copy}{\void}
+
+Copies the selected text to the clipboard.
+
+\membersection{wxComboBox::Cut}\label{wxcomboboxcut}
+
+\func{void}{Cut}{\void}
+
+Copies the selected text to the clipboard and removes the selection.
+
+\membersection{wxComboBox::Delete}\label{wxcomboboxdelete}
+
+\func{void}{Delete}{\param{const int}{ n}}
+
+Deletes an item from the combobox.
+
+\wxheading{Parameters}
+
+\docparam{n}{The item to delete, starting from zero.}
+
+\membersection{wxComboBox::Deselect}\label{wxcomboboxdeselect}
+
+\func{void}{Deselect}{\param{const int}{ n}}
+
+Deselects an item in the combobox.
+
+\wxheading{Parameters}
+
+\docparam{n}{The item to deselect, starting from zero.}
+
+\membersection{wxComboBox::FindString}\label{wxcomboboxfindstring}
+
+\func{int}{FindString}{\param{const wxString\& }{string}}
+
+Finds a choice matching the given string.
+
+\wxheading{Parameters}
+
+\docparam{string}{The item to find.}
+
+\wxheading{Return value}
+
+The position if found, or -1 if not found.
+
+\membersection{wxComboBox::GetClientData}\label{wxcomboboxgetclientdata}
+
+\constfunc{char*}{GetClientData}{\param{const int}{ n}}
+
+Returns a pointer to the client data associated with the given item (if any).
+
+\wxheading{Parameters}
+
+\docparam{n}{An item, starting from zero.}
+
+\wxheading{Return value}
+
+A pointer to the client data, or NULL if the item was not found.
+
+\membersection{wxComboBox::GetInsertionPoint}\label{wxcomboboxgetinsertionpoint}
+
+\constfunc{long}{GetInsertionPoint}{\void}
+
+Returns the insertion point for the combobox's text field.
+
+\membersection{wxComboBox::GetLastPosition}\label{wxcomboboxgetlastposition}
+
+\constfunc{long}{GetLastPosition}{\void}
+
+Returns the last position in the combobox text field.
+
+\membersection{wxComboBox::GetSelection}\label{wxcomboboxgetselection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Gets the position of the selected string, or -1 if there is no selection.
+
+\membersection{wxComboBox::GetString}\label{wxcomboboxgetstring}
+
+\constfunc{wxString}{GetString}{\param{int}{ n}}
+
+Returns the string at position {\it n}.
+
+\wxheading{Parameters}
+
+\docparam{n}{The item position, starting from zero.}
+
+\wxheading{Return value}
+
+The string if the item is found, otherwise the empty string.
+
+\membersection{wxComboBox::GetStringSelection}\label{wxcomboboxgetstringselection}
+
+\constfunc{wxString}{GetStringSelection}{\void}
+
+Gets the selected string.
+
+\membersection{wxComboBox::GetValue}\label{wxcomboboxgetvalue}
+
+\constfunc{wxString}{GetValue}{\void}
+
+Returns the current value in the combobox text field.
+
+\membersection{wxComboBox::Number}\label{wxcomboboxnumber}
+
+\constfunc{int}{Number}{\void}
+
+Returns the number of items in the combobox list.
+
+TODO: make this GetNumber or GetCount?
+
+\membersection{wxComboBox::Paste}\label{wxcomboboxpaste}
+
+\func{void}{Paste}{\void}
+
+Pastes text from the clipboard to the text field.
+
+\membersection{wxComboBox::Replace}\label{wxcomboboxreplace}
+
+\func{void}{Replace}{\param{const long}{ from}, \param{const long}{ to}, \param{const wxString\& }{text}}
+
+Replaces the text between two positions with the given text, in the combobox text field.
+
+\wxheading{Parameters}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The second position.}
+
+\docparam{text}{The text to insert.}
+
+\membersection{wxComboBox::Remove}\label{wxcomboboxremove}
+
+\func{void}{Remove}{\param{const long}{ from}, \param{const long}{ to}}
+
+Removes the text between the two positions in the combobox text field.
+
+\wxheading{Parameters}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The last position.}
+
+\membersection{wxComboBox::SetClientData}\label{wxcomboboxsetclientdata}
+
+\func{void}{SetClientData}{\param{const int}{ n}, \param{char* }{data}}
+
+Associates the given client data pointer with the given item.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item.}
+
+\docparam{data}{The client data.}
+
+\membersection{wxComboBox::SetInsertionPoint}\label{wxcomboboxsetinsertionpoint}
+
+\func{void}{SetInsertionPoint}{\param{const long}{ pos}}
+
+Sets the insertion point in the combobox text field.
+
+\wxheading{Parameters}
+
+\docparam{pos}{The new insertion point.}
+
+\membersection{wxComboBox::SetInsertionPointEnd}\label{wxcomboboxsetinsertionpointend}
+
+\func{void}{SetInsertionPointEnd}{\void}
+
+Sets the insertion point at the end of the combobox text field.
+
+\membersection{wxComboBox::SetSelection}\label{wxcomboboxsetselection}
+
+\func{void}{SetSelection}{\param{const int}{ n}}
+
+Selects the given item in the combobox list.
+
+\func{void}{SetSelection}{\param{const long}{ from}, \param{const long}{ to}}
+
+Selects the text between the two positions, in the combobox text field.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item to select.}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The second position.}
+
+\membersection{wxComboBox::SetValue}\label{wxcomboboxsetvalue}
+
+\func{void}{SetValue}{\param{const wxString\& }{text}}
+
+Sets the text for the combobox text field.
+
+\wxheading{Parameters}
+
+\docparam{text}{The text to set.}
+
+
--- /dev/null
+\section{\class{wxCommand}}\label{wxcommand}
+
+wxCommand is a base class for modelling an application command,
+which is an action usually performed by selecting a menu item, pressing
+a toolbar button or any other means provided by the application to
+change the data or view.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{Overview}{wxcommandoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCommand::wxCommand}
+
+\func{}{wxCommand}{\param{bool}{ canUndo = FALSE}, \param{const wxString\& }{name = NULL}}
+
+Constructor. wxCommand is an abstract class, so you will need to derive
+a new class and call this constructor from your own constructor.
+
+{\it canUndo} tells the command processor whether this command is undo-able. You
+can achieve the same functionality by overriding the CanUndo member function (if for example
+the criteria for undoability is context-dependant).
+
+{\it name} must be supplied for the command processor to display the command name
+in the application's edit menu.
+
+\membersection{wxCommand::\destruct{wxCommand}}
+
+\func{}{\destruct{wxCommand}}{\void}
+
+Destructor.
+
+\membersection{wxCommand::CanUndo}
+
+\func{bool}{CanUndo}{\void}
+
+Returns TRUE if the command can be undone, FALSE otherwise.
+
+\membersection{wxCommand::Do}
+
+\func{bool}{Do}{\void}
+
+Override this member function to execute the appropriate action when called.
+Return TRUE to indicate that the action has taken place, FALSE otherwise.
+Returning FALSE will indicate to the command processor that the action is
+not undoable and should not be added to the command history.
+
+\membersection{wxCommand::GetName}
+
+\func{wxString}{GetName}{\void}
+
+Returns the command name.
+
+\membersection{wxCommand::Undo}
+
+\func{bool}{Undo}{\void}
+
+Override this member function to un-execute a previous Do.
+Return TRUE to indicate that the action has taken place, FALSE otherwise.
+Returning FALSE will indicate to the command processor that the action is
+not redoable and no change should be made to the command history.
+
+How you implement this command is totally application dependent, but typical
+strategies include:
+
+\begin{itemize}\itemsep=0pt
+\item Perform an inverse operation on the last modified piece of
+data in the document. When redone, a copy of data stored in command
+is pasted back or some operation reapplied. This relies on the fact that
+you know the ordering of Undos; the user can never Undo at an arbitrary position
+in the command history.
+\item Restore the entire document state (perhaps using document transactioning).
+Potentially very inefficient, but possibly easier to code if the user interface
+and data are complex, and an `inverse execute' operation is hard to write.
+\end{itemize}
+
+The docview sample uses the first method, to remove or restore segments
+in the drawing.
+
+
--- /dev/null
+\section{\class{wxControl}}\label{wxcontrol}
+
+This is the base class for a control or `widget'.
+
+A control is generally a small window which processes user input and/or displays one or more item
+of data.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxValidator}{wxvalidator}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxControl::Command}\label{wxcontrolcommand}
+
+\func{void}{Command}{\param{wxCommandEvent\& }{event}}
+
+Simulates the effect of the user issuing a command to the item. See \helpref{wxCommandEvent}{wxcommandevent}.
+
+\membersection{wxControl::GetLabel}\label{wxcontrolgetlabel}
+
+\func{wxString\&}{GetLabel}{\void}
+
+Returns the control's text.
+
+\membersection{wxControl::SetLabel}\label{wxcontrolsetlabel}
+
+\func{void}{SetLabel}{\param{const wxString\& }{label}}
+
+Sets the item's text.
+
--- /dev/null
+\section{\class{wxCursor}}\label{wxcursor}
+
+A cursor is a small bitmap usually used for denoting where the mouse
+pointer is, with a picture that might indicate the interpretation of a
+mouse click. As with icons, cursors in X and MS Windows are created
+in a different manner. Therefore, separate cursors will be created for the
+different environments. Platform-specific methods for creating a {\bf
+wxCursor} object are catered for, and this is an occasion where
+conditional compilation will probably be required (see \helpref{wxIcon}{wxicon} for
+an example).
+
+A single cursor object may be used in many windows (any subwindow type).
+The wxWindows convention is to set the cursor for a window, as in X,
+rather than to set it globally as in MS Windows, although a
+global \helpref{::wxSetCursor}{wxsetcursor} is also available for MS Windows use.
+
+\wxheading{Derived from}
+
+\helpref{wxBitmap}{wxbitmap}\\
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxBitmap}{wxbitmap}, \helpref{wxIcon}{wxicon}, \helpref{wxWindow::SetCursor}{wxwindowsetcursor},\rtfsp
+\helpref{::wxSetCursor}{wxsetcursor}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxCursor::wxCursor}\label{wxcursorconstr}
+
+\func{}{wxCursor}{\void}
+
+Default constructor.
+
+\func{}{wxCursor}{\param{const char}{ bits[]}, \param{const int }{width},
+ \param{const int }{ height}, \param{const int }{hotSpotX=-1}, \param{const int }{hotSpotY=-1}, \param{const char }{maskBits[]=NULL}}
+
+Constructs a cursor by passing an array of bits (Motif and Xt only). {\it maskBits} is used only under Motif.
+
+If either {\it hotSpotX} or {\it hotSpotY} is -1, the hotspot will be the centre of the cursor image (Motif only).
+
+\func{}{wxCursor}{\param{const wxString\& }{cursorName}, \param{const long }{type}, \param{const int }{hotSpotX=0}, \param{const int }{hotSpotY=0}}
+
+Constructs a cursor by passing a string resource name or filename.
+
+{\it hotSpotX} and {\it hotSpotY} are currently only used under Windows when loading from an
+icon file, to specify the cursor hotspot relative to the top left of the image.
+
+\func{}{wxCursor}{\param{const int}{ cursorId}}
+
+Constructs a cursor using a cursor identifier.
+
+\func{}{wxCursor}{\param{const wxCursor\&}{ cursor}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\func{}{wxCursor}{\param{const wxCursor*}{ cursor}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\wxheading{Parameters}
+
+\docparam{bits}{An array of bits.}
+
+\docparam{maskBits}{Bits for a mask bitmap.}
+
+\docparam{width}{Cursor width.}
+
+\docparam{height}{Cursor height.}
+
+\docparam{hotSpotX}{Hotspot x coordinate.}
+
+\docparam{hotSpotY}{Hotspot y coordinate.}
+
+\docparam{type}{Icon type to load. Under Motif, {\it type} defaults to {\bf wxBITMAP\_TYPE\_XBM}. Under Windows,
+it defaults to {\bf wxBITMAP\_TYPE\_CUR\_RESOURCE}.
+
+Under X, the permitted cursor types are:
+
+\twocolwidtha{6cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxBITMAP\_TYPE\_XBM}}{Load an X bitmap file.}
+\end{twocollist}
+
+Under Windows, the permitted types are:
+
+\twocolwidtha{6cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxBITMAP\_TYPE\_CUR}}{Load a cursor from a .cur cursor file (only if USE\_RESOURCE\_LOADING\_IN\_MSW
+is enabled in wx\_setup.h).}
+\twocolitem{\windowstyle{wxBITMAP\_TYPE\_CUR\_RESOURCE}}{Load a Windows resource (as specified in the .rc file).}
+\twocolitem{\windowstyle{wxBITMAP\_TYPE\_ICO}}{Load a cursor from a .ico icon file (only if USE\_RESOURCE\_LOADING\_IN\_MSW
+is enabled in wx\_setup.h). Specify {\it hotSpotX} and {\it hotSpotY}.}
+\end{twocollist}}
+
+\docparam{cursorId}{A stock cursor identifier. May be one of:
+
+\twocolwidtha{6cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxCURSOR\_ARROW}}{A standard arrow cursor.}
+\twocolitem{{\bf wxCURSOR\_BULLSEYE}}{Bullseye cursor.}
+\twocolitem{{\bf wxCURSOR\_CHAR}}{Rectangular character cursor.}
+\twocolitem{{\bf wxCURSOR\_CROSS}}{A cross cursor.}
+\twocolitem{{\bf wxCURSOR\_HAND}}{A hand cursor.}
+\twocolitem{{\bf wxCURSOR\_IBEAM}}{An I-beam cursor (vertical line).}
+\twocolitem{{\bf wxCURSOR\_LEFT\_BUTTON}}{Represents a mouse with the left button depressed.}
+\twocolitem{{\bf wxCURSOR\_MAGNIFIER}}{A magnifier icon.}
+\twocolitem{{\bf wxCURSOR\_MIDDLE\_BUTTON}}{Represents a mouse with the middle button depressed.}
+\twocolitem{{\bf wxCURSOR\_NO\_ENTRY}}{A no-entry sign cursor.}
+\twocolitem{{\bf wxCURSOR\_PAINT\_BRUSH}}{A paintbrush cursor.}
+\twocolitem{{\bf wxCURSOR\_PENCIL}}{A pencil cursor.}
+\twocolitem{{\bf wxCURSOR\_POINT\_LEFT}}{A cursor that points left.}
+\twocolitem{{\bf wxCURSOR\_POINT\_RIGHT}}{A cursor that points right.}
+\twocolitem{{\bf wxCURSOR\_QUESTION\_ARROW}}{An arrow and question mark.}
+\twocolitem{{\bf wxCURSOR\_RIGHT\_BUTTON}}{Represents a mouse with the right button depressed.}
+\twocolitem{{\bf wxCURSOR\_SIZENESW}}{A sizing cursor pointing NE-SW.}
+\twocolitem{{\bf wxCURSOR\_SIZENS}}{A sizing cursor pointing N-S.}
+\twocolitem{{\bf wxCURSOR\_SIZENWSE}}{A sizing cursor pointing NW-SE.}
+\twocolitem{{\bf wxCURSOR\_SIZEWE}}{A sizing cursor pointing W-E.}
+\twocolitem{{\bf wxCURSOR\_SIZING}}{A general sizing cursor.}
+\twocolitem{{\bf wxCURSOR\_SPRAYCAN}}{A spraycan cursor.}
+\twocolitem{{\bf wxCURSOR\_WAIT}}{A wait cursor.}
+\twocolitem{{\bf wxCURSOR\_WATCH}}{A watch cursor.}
+\end{twocollist}\twocolwidtha{5cm}
+
+Note that not all cursors are available on all platforms.}
+
+\docparam{cursor}{Pointer or reference to a cursor to copy.}
+
+\membersection{wxCursor::\destruct{wxCursor}}
+
+\func{}{\destruct{wxCursor}}{\void}
+
+Destroys the cursor. A cursor can be reused for more
+than one window, and does not get destroyed when the window is
+destroyed. wxWindows destroys all cursors on application exit, although
+it's best to clean them up explicitly.
+
+\membersection{wxCursor::Ok}\label{wxcursorok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if cursor data is present.
+
+\membersection{wxCursor::operator $=$}\label{wxcursorassignment}
+
+\func{wxCursor\&}{operator $=$}{\param{const wxCursor\& }{cursor}}
+
+Assignment operator, using reference counting. Returns a reference
+to `this'.
+
+\membersection{wxCursor::operator $==$}\label{wxcursorequals}
+
+\func{bool}{operator $==$}{\param{const wxCursor\& }{cursor}}
+
+Equality operator. Two cursors are equal if they contain pointers
+to the same underlying cursor data. It does not compare each attribute,
+so two independently-created cursors using the same parameters will
+fail the test.
+
+\membersection{wxCursor::operator $!=$}\label{wxcursornotequals}
+
+\func{bool}{operator $!=$}{\param{const wxCursor\& }{cursor}}
+
+Inequality operator. Two cursors are not equal if they contain pointers
+to different underlying cursor data. It does not compare each attribute.
+
+
--- /dev/null
+\section{\class{wxDatabase}}\label{wxdatabase}
+
+Every database object represents an ODBC connection. The connection may be closed and reopened.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{wxDatabase overview}{wxdatabaseoverview}, \helpref{wxRecordSet}{wxrecordset}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDatabase::wxDatabase}
+
+\func{}{wxDatabase}{\void}
+
+Constructor. The constructor of the first wxDatabase instance of an
+application initializes the ODBC manager.
+
+\membersection{wxDatabase::\destruct{wxDatabase}}
+
+\func{}{\destruct{wxDatabase}}{\void}
+
+Destructor. Resets and destroys any associated wxRecordSet instances.
+
+The destructor of the last wxDatabase instance will deinitialize
+the ODBC manager.
+
+\membersection{wxDatabase::BeginTrans}
+
+\func{bool}{BeginTrans}{\void}
+
+Not implemented.
+
+\membersection{wxDatabase::Cancel}
+
+\func{void}{Cancel}{\void}
+
+Not implemented.
+
+\membersection{wxDatabase::CanTransact}
+
+\func{bool}{CanTransact}{\void}
+
+Not implemented.
+
+
+\membersection{wxDatabase::CanUpdate}
+
+\func{bool}{CanUpdate}{\void}
+
+Not implemented.
+
+\membersection{wxDatabase::Close}
+
+\func{bool}{Close}{\void}
+
+Resets the statement handles of any associated wxRecordSet objects,
+and disconnects from the current data source.
+
+\membersection{wxDatabase::CommitTrans}
+
+\func{bool}{CommitTrans}{\void}
+
+Commits previous transactions. Not implemented.
+
+\membersection{wxDatabase::ErrorOccured}
+
+\func{bool}{ErrorOccured}{\void}
+
+Returns TRUE if the last action caused an error.
+
+\membersection{wxDatabase::ErrorSnapshot}
+
+\func{void}{ErrorSnapshot}{\param{HSTMT}{ statement = SQL\_NULL\_HSTMT}}
+
+This function will be called whenever an ODBC error occured. It stores the
+error related information returned by ODBC. If a statement handle of the
+concerning ODBC action is available it should be passed to the function.
+
+\membersection{wxDatabase::GetDatabaseName}
+
+\func{wxString}{GetDatabaseName}{\void}
+
+Returns the name of the database associated with the current connection.
+
+\membersection{wxDatabase::GetDataSource}
+
+\func{wxString}{GetDataSource}{\void}
+
+Returns the name of the connected data source.
+
+\membersection{wxDatabase::GetErrorClass}
+
+\func{wxString}{GetErrorClass}{\void}
+
+Returns the error class of the last error. The error class consists of
+five characters where the first two characters contain the class
+and the other three characters contain the subclass of the ODBC error.
+See ODBC documentation for further details.
+
+\membersection{wxDatabase::GetErrorCode}
+
+\func{wxRETCODE}{GetErrorCode}{\void}
+
+Returns the error code of the last ODBC function call. This will be one of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{SQL\_ERROR}{General error.}
+\twocolitem{SQL\_INVALID\_HANDLE}{An invalid handle was passed to an ODBC function.}
+\twocolitem{SQL\_NEED\_DATA}{ODBC expected some data.}
+\twocolitem{SQL\_NO\_DATA\_FOUND}{No data was found by this ODBC call.}
+\twocolitem{SQL\_SUCCESS}{The call was successful.}
+\twocolitem{SQL\_SUCCESS\_WITH\_INFO}{The call was successful, but further information can be
+obtained from the ODBC manager.}
+\end{twocollist}
+
+\membersection{wxDatabase::GetErrorMessage}
+
+\func{wxString}{GetErrorMessage}{\void}
+
+Returns the last error message returned by the ODBC manager.
+
+\membersection{wxDatabase::GetErrorNumber}
+
+\func{long}{GetErrorNumber}{\void}
+
+Returns the last native error. A native error is an ODBC driver dependent
+error number.
+
+\membersection{wxDatabase::GetHDBC}
+
+\func{HDBC}{GetHDBC}{\void}
+
+Returns the current ODBC database handle.
+
+\membersection{wxDatabase::GetHENV}
+
+\func{HENV}{GetHENV}{\void}
+
+Returns the ODBC environment handle.
+
+\membersection{wxDatabase::GetInfo}
+
+\func{bool}{GetInfo}{\param{long}{ infoType}, \param{long *}{buf}}
+
+\func{bool}{GetInfo}{\param{long}{ infoType}, \param{const wxString\& }{buf}, \param{int}{ bufSize=-1}}
+
+Returns requested information. The return value is TRUE if successful, FALSE otherwise.
+
+{\it infoType} is an ODBC identifier specifying the type of information to be returned.
+
+{\it buf} is a character or long integer pointer to storage which must be allocated by the
+application, and which will contain the information if the function is successful.
+
+{\it bufSize} is the size of the character buffer. A value of -1 indicates that the size
+should be computed by the GetInfo function.
+
+\membersection{wxDatabase::GetPassword}
+
+\func{wxString}{GetPassword}{\void}
+
+Returns the password of the current user.
+
+\membersection{wxDatabase::GetUsername}
+
+\func{wxString}{GetUsername}{\void}
+
+Returns the current username.
+
+\membersection{wxDatabase::GetODBCVersionFloat}
+
+\func{float}{GetODBCVersionFloat}{\param{bool}{ implementation=TRUE}}
+
+Returns the version of ODBC in floating point format, e.g. 2.50.
+
+{\it implementation} should be TRUE to get the DLL version, or FALSE to get the
+version defined in the {\tt sql.h} header file.
+
+This function can return the value 0.0 if the header version number is not defined (for early
+versions of ODBC).
+
+\membersection{wxDatabase::GetODBCVersionString}
+
+\func{wxString}{GetODBCVersionString}{\param{bool}{ implementation=TRUE}}
+
+Returns the version of ODBC in string format, e.g. ``02.50".
+
+{\it implementation} should be TRUE to get the DLL version, or FALSE to get the
+version defined in the {\tt sql.h} header file.
+
+This function can return the value ``00.00" if the header version number is not defined (for early
+versions of ODBC).
+
+\membersection{wxDatabase::InWaitForDataSource}
+
+\func{bool}{InWaitForDataSource}{\void}
+
+Not implemented.
+
+\membersection{wxDatabase::IsOpen}
+
+\func{bool}{IsOpen}{\void}
+
+Returns TRUE if a connection is open.
+
+\membersection{wxDatabase::Open}\label{wxdatabaseopen}
+
+\func{bool}{Open}{\param{const wxString\& }{datasource}, \param{bool}{ exclusive = FALSE}, \param{bool }{readOnly = TRUE},
+ \param{const wxString\& }{username = ``ODBC"}, \param{const wxString\& }{password = ``"}}
+
+Connect to a data source. {\it datasource} contains the name of the ODBC data
+source. The parameters exclusive and readOnly are not used.
+
+\membersection{wxDatabase::OnSetOptions}
+
+\func{void}{OnSetOptions}{\param{wxRecordSet *}{recordSet}}
+
+Not implemented.
+
+\membersection{wxDatabase::OnWaitForDataSource}
+
+\func{void}{OnWaitForDataSource}{\param{bool}{ stillExecuting}}
+
+Not implemented.
+
+\membersection{wxDatabase::RollbackTrans}
+
+\func{bool}{RollbackTrans}{\void}
+
+Sends a rollback to the ODBC driver. Not implemented.
+
+\membersection{wxDatabase::SetDataSource}
+
+\func{void}{SetDataSource}{\param{const wxString\& }{s}}
+
+Sets the name of the data source. Not implemented.
+
+\membersection{wxDatabase::SetLoginTimeout}
+
+\func{void}{SetLoginTimeout}{\param{long}{ seconds}}
+
+Sets the time to wait for an user login. Not implemented.
+
+\membersection{wxDatabase::SetPassword}
+
+\func{void}{SetPassword}{\param{const wxString\& }{s}}
+
+Sets the password of the current user. Not implemented.
+
+\membersection{wxDatabase::SetSynchronousMode}
+
+\func{void}{SetSynchronousMode}{\param{bool }{synchronous}}
+
+Toggles between synchronous and asynchronous mode. Currently only synchronous
+mode is supported, so this function has no effect.
+
+\membersection{wxDatabase::SetQueryTimeout}
+
+\func{void}{SetQueryTimeout}{\param{long}{ seconds}}
+
+Sets the time to wait for a response to a query. Not implemented.
+
+\membersection{wxDatabase::SetUsername}
+
+\func{void}{SetUsername}{\param{const wxString\& }{s}}
+
+Sets the name of the current user. Not implemented.
+
+
--- /dev/null
+\section{\class{wxDate}}\label{wxdate}
+
+A class for manipulating dates.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxTime}{wxtime}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDate::wxDate}\label{wxdateconstr}
+
+\func{}{wxDate}{\void}
+
+Default constructor.
+
+\func{}{wxDate}{\param{const wxDate\&}{ date}}
+
+Copy constructor.
+
+\func{}{wxDate}{\param{const int}{ month}, \param{const int}{ day}, \param{const int}{ year}}
+
+Constructor taking month, day and year.
+
+\func{}{wxDate}{\param{const long}{ julian}}
+
+Constructor taking an integer representing the Julian date. This is the number of days since
+1st January 4713 B.C., so to convert from the number of days since 1st January 1901,
+construct a date for 1/1/1901, and add the number of days.
+
+\func{}{wxDate}{\param{const wxString\& }{dateString}}
+
+Constructor taking a string representing a date. This must be either the string TODAY, or of the
+form {\tt MM/DD/YYYY} or {\tt MM-DD-YYYY}. For example:
+
+\begin{verbatim}
+ wxDate date("11/26/1966");
+\end{verbatim}
+
+\wxheading{Parameters}
+
+\docparam{date}{Date to copy.}
+
+\docparam{month}{Month: a number between 1 and 12.}
+
+\docparam{day}{Day: a number between 1 and 31.}
+
+\docparam{year}{Year, such as 1995, 2005.}
+
+\membersection{wxDate::\destruct{wxDate}}
+
+\func{void}{\destruct{wxDate}}{\void}
+
+Destructor.
+
+\membersection{wxDate::AddMonths}\label{wxdateaddmonths}
+
+\func{wxDate\&}{AddMonths}{\param{const int}{ months=1}}
+
+Adds the given number of months to the date, returning a reference to `this'.
+
+\membersection{wxDate::AddWeeks}\label{wxdateaddweeks}
+
+\func{wxDate\&}{AddWeeks}{\param{const int}{ weeks=1}}
+
+Adds the given number of weeks to the date, returning a reference to `this'.
+
+\membersection{wxDate::AddYears}\label{wxdateaddyears}
+
+\func{wxDate\&}{AddYears}{\param{const int}{ years=1}}
+
+Adds the given number of months to the date, returning a reference to `this'.
+
+\membersection{wxDate::FormatDate}\label{wxdateformatdate}
+
+\constfunc{wxString}{FormatDate}{\param{const int}{ type=-1}}
+
+Formats the date according to {\it type} if not -1, or according
+to the current display type if -1.
+
+\wxheading{Parameters}
+
+\docparam{type}{-1 or one of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxDAY}{Format day only.}
+\twocolitem{wxMONTH}{Format month only.}
+\twocolitem{wxMDY}{Format MONTH, DAY, YEAR.}
+\twocolitem{wxFULL}{Format day, month and year in US style: DAYOFWEEK, MONTH, DAY, YEAR.}
+\twocolitem{wxEUROPEAN}{Format day, month and year in European style: DAY, MONTH, YEAR.}
+\end{twocollist}}
+
+\membersection{wxDate::GetDay}\label{wxdategetday}
+
+\constfunc{int}{GetDay}{\void}
+
+Returns the numeric day (in the range 1 to 31).
+
+\membersection{wxDate::GetDayOfWeek}\label{wxdategetdayofweek}
+
+\constfunc{int}{GetDayOfWeek}{\void}
+
+Returns the integer day of the week (in the range 1 to 7).
+
+\membersection{wxDate::GetDayOfWeekName}\label{wxdategetdayofweekname}
+
+\constfunc{wxString}{GetDayOfWeekName}{\void}
+
+Returns the name of the day of week.
+
+\membersection{wxDate::GetDayOfYear}\label{wxdategetdayofyear}
+
+\constfunc{long}{GetDayOfYear}{\void}
+
+Returns the day of the year (from 1 to 365).
+
+\membersection{wxDate::GetDaysInMonth}\label{wxdategetdaysinmonth}
+
+\constfunc{int}{GetDaysInMonth}{\void}
+
+Returns the number of days in the month (in the range 1 to 31).
+
+\membersection{wxDate::GetFirstDayOfMonth}\label{wxdategetfirstdayofmonth}
+
+\constfunc{int}{GetFirstDayOfMonth}{\void}
+
+Returns the day of week that is first in the month (in the range 1 to 7).
+
+\membersection{wxDate::GetJulianDate}\label{wxdategetjuliandate}
+
+\constfunc{long}{GetJulianDate}{\void}
+
+Returns the Julian date.
+
+\membersection{wxDate::GetMonth}\label{wxdategetmonth}
+
+\constfunc{int}{GetMonth}{\void}
+
+Returns the month number (in the range 1 to 12).
+
+\membersection{wxDate::GetMonthEnd}
+
+\func{wxDate}{GetMonthEnd}{\void}
+
+Returns the date representing the last day of the month.
+
+\membersection{wxDate::GetMonthName}\label{wxdategetmonthname}
+
+\constfunc{wxString}{GetMonthName}{\void}
+
+Returns the name of the month. Do not delete the returned storage.
+
+\membersection{wxDate::GetMonthStart}\label{wxdategetmonthstart}
+
+\constfunc{wxDate}{GetMonthStart}{\void}
+
+Returns the date representing the first day of the month.
+
+\membersection{wxDate::GetWeekOfMonth}\label{wxdategetweekofmonth}
+
+\constfunc{int}{GetWeekOfMonth}{\void}
+
+Returns the week of month (in the range 1 to 6).
+
+\membersection{wxDate::GetWeekOfYear}\label{wxdategetweekofyear}
+
+\constfunc{int}{GetWeekOfYear}{\void}
+
+Returns the week of year (in the range 1 to 52).
+
+\membersection{wxDate::GetYear}\label{wxdategetyear}
+
+\constfunc{int}{GetYear}{\void}
+
+Returns the year as an integer (such as `1995').
+
+\membersection{wxDate::GetYearEnd}\label{wxdategetyearend}
+
+\constfunc{wxDate}{GetYearEnd}{\void}
+
+Returns the date representing the last day of the year.
+
+\membersection{wxDate::GetYearStart}\label{wxdategetyearstart}
+
+\constfunc{wxDate}{GetYearStart}{\void}
+
+Returns the date representing the first day of the year.
+
+\membersection{wxDate::IsLeapYear}\label{wxdateisleapyear}
+
+\constfunc{bool}{IsLeapYear}{\void}
+
+Returns TRUE if the year of this date is a leap year.
+
+\membersection{wxDate::Set}\label{wxdateset}
+
+\func{wxDate\&}{Set}{\void}
+
+Sets the date to current system date, returning a reference to `this'.
+
+\func{wxDate\&}{Set}{\param{const long}{ julian}}
+
+Sets the date to the given Julian date, returning a reference to `this'.
+
+\func{wxDate\&}{Set}{\param{const int}{ month}, \param{const int}{ day}, \param{const int}{ year}}
+
+Sets the date to the given date, returning a reference to `this'.
+
+{\it month} is a number from 1 to 12.
+
+{\it day} is a number from 1 to 31.
+
+{\it year} is a year, such as 1995, 2005.
+
+\membersection{wxDate::SetFormat}\label{wxdatesetformat}
+
+\func{void}{SetFormat}{\param{const int}{ format}}
+
+Sets the current format type.
+
+\wxheading{Parameters}
+
+\docparam{format}{-1 or one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxDAY}}{Format day only.}
+\twocolitem{{\bf wxMONTH}}{Format month only.}
+\twocolitem{{\bf wxMDY}}{Format MONTH, DAY, YEAR.}
+\twocolitem{{\bf wxFULL}}{Format day, month and year in US style: DAYOFWEEK, MONTH, DAY, YEAR.}
+\twocolitem{{\bf wxEUROPEAN}}{Format day, month and year in European style: DAY, MONTH, YEAR.}
+\end{twocollist}}
+
+\membersection{wxDate::SetOption}\label{wxdatesetoption}
+
+\func{int}{SetOption}{\param{const int}{ option}, \param{const bool}{ enable=TRUE}}
+
+Enables or disables an option for formatting.
+
+\wxheading{Parameters}
+
+\docparam{option}{May be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxNO\_CENTURY}}{The century is not formatted.}
+\twocolitem{{\bf wxDATE\_ABBR}}{Month and day names are abbreviated to 3 characters when formatting.}
+\end{twocollist}}
+
+\membersection{wxDate::operator wxString}\label{wxdatewxstring}
+
+\func{}{operator wxString}{\void}
+
+Conversion operator, to convert wxDate to wxString by calling FormatDate.
+
+\membersection{wxDate::operator $+$}\label{wxdateplus}
+
+\func{wxDate}{operator $+$}{\param{const long}{ i}}
+
+\func{wxDate}{operator $+$}{\param{const int}{ i}}
+
+Adds an integer number of days to the date, returning a date.
+
+\membersection{wxDate::operator $-$}\label{wxdateminus}
+
+\func{wxDate}{operator $-$}{\param{const long}{ i}}
+
+\func{wxDate}{operator $-$}{\param{const int}{ i}}
+
+Subtracts an integer number of days from the date, returning a date.
+
+\func{long}{operator $-$}{\param{const wxDate\&}{ date}}
+
+Subtracts one date from another, return the number of intervening days.
+
+\membersection{wxDate::operator $+=$}\label{wxdateplusequals}
+
+\func{wxDate\&}{operator $+=$}{\param{const long}{ i}}
+
+Postfix operator: adds an integer number of days to the date, returning
+a reference to `this' date.
+
+\membersection{wxDate::operator $-=$}\label{wxdateminusequals}
+
+\func{wxDate\&}{operator $-=$}{\param{const long}{ i}}
+
+Postfix operator: subtracts an integer number of days from the date, returning
+a reference to `this' date.
+
+\membersection{wxDate::operator $++$}\label{wxdateplusplus}
+
+\func{wxDate\&}{operator $++$}{\void}
+
+Increments the date (postfix or prefix).
+
+\membersection{wxDate::operator $--$}\label{wxdateminusminus}
+
+\func{wxDate\&}{operator $--$}{\void}
+
+Decrements the date (postfix or prefix).
+
+\membersection{wxDate::operator $<$}\label{wxdatelessthan}
+
+\func{friend bool}{operator $<$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is earlier than {\it date2}.
+
+\membersection{wxDate::operator $<=$}\label{wxdatelessthaneq}
+
+\func{friend bool}{operator $<=$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is earlier than or equal to {\it date2}.
+
+\membersection{wxDate::operator $>$}\label{wxdategreaterthan}
+
+\func{friend bool}{operator $>$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is later than {\it date2}.
+
+\membersection{wxDate::operator $>=$}\label{wxdategreaterthaneq}
+
+\func{friend bool}{operator $>=$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is later than or equal to {\it date2}.
+
+\membersection{wxDate::operator $==$}\label{wxdateequals}
+
+\func{friend bool}{operator $==$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is equal to {\it date2}.
+
+\membersection{wxDate::operator $!=$}\label{wxdatenotequals}
+
+\func{friend bool}{operator $!=$}{\param{const wxDate\&}{ date1}, \param{const wxDate\&}{ date2}}
+
+Function to compare two dates, returning TRUE if {\it date1} is not equal to {\it date2}.
+
+\membersection{wxDate::operator \cinsert}\label{wxdateinsert}
+
+\func{friend ostream\&}{operator \cinsert}{\param{ostream\&}{ os}, \param{const wxDate\&}{ date}}
+
+Function to output a wxDate to an ostream.
+
+
--- /dev/null
+\section{\class{wxDC}}\label{wxdc}
+
+A wxDC is a {\it device context} onto which graphics and text can be drawn.
+It is intended to represent a number of output devices in a generic way,
+so a canvas has a device context and a printer also has a device context.
+In this way, the same piece of code may write to a number of different devices,
+if the device context is used as a parameter.
+
+Derived types of wxDC have documentation for specific features
+only, so refer to this section for most device context information.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Overview}{dcoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDC::wxDC}
+
+\func{}{wxDC}{\void}
+
+Constructor.
+
+\membersection{wxDC::\destruct{wxDC}}
+
+\func{}{\destruct{wxDC}}{\void}
+
+Destructor.
+
+\membersection{wxDC::BeginDrawing}\label{wxdcbegindrawing}
+
+\func{void}{BeginDrawing}{\void}
+
+Allows optimization of drawing code under MS Windows. Enclose
+drawing primitives between {\bf BeginDrawing} and {\bf EndDrawing}\rtfsp
+calls.
+
+Drawing to a wxDialog panel device context outside of a
+system-generated OnPaint event {\it requires} this pair of calls to
+enclose drawing code. This is because a Windows dialog box does not have
+a retained device context associated with it, and selections such as pen
+and brush settings would be lost if the device context were obtained and
+released for each drawing operation.
+
+\membersection{wxDC::Blit}\label{wxdcblit}
+
+\func{bool}{Blit}{\param{long}{ xdest}, \param{long}{ ydest}, \param{long}{ width}, \param{long}{ height},
+ \param{wxDC* }{source}, \param{long}{ xsrc}, \param{long}{ ysrc}, \param{int}{ logicalFunc},
+ \param{bool }{useMask}}
+
+Copy from a source DC to this DC, specifying the destination
+coordinates, size of area to copy, source DC, source coordinates, and
+logical function.
+
+\wxheading{Parameters}
+
+\docparam{xdest}{Destination device context x position.}
+
+\docparam{ydest}{Destination device context y position.}
+
+\docparam{width}{Width of source area to be copied.}
+
+\docparam{height}{Height of source area to be copied.}
+
+\docparam{source}{Source device context.}
+
+\docparam{xsrc}{Source device context x position.}
+
+\docparam{ysrc}{Source device context y position.}
+
+\docparam{logicalFunc}{Logical function to use: see \helpref{wxDC::SetLogicalFunction}{wxdcsetlogicalfunction}.}
+
+\docparam{useMask}{If TRUE, Blit does a transparent blit using the mask that is associated with the bitmap
+selected into the source device context. The Windows implementation does the following:
+
+\begin{enumerate}
+\item Creates a temporary bitmap and copies the destination area into it.
+\item Copies the source area into the temporary bitmap using the specified logical function.
+\item Sets the masked area in the temporary bitmap to BLACK by ANDing the
+mask bitmap with the temp bitmap with the foreground colour set to WHITE
+and the bg colour set to BLACK.
+\item Sets the unmasked area in the destination area to BLACK by ANDing the
+mask bitmap with the destination area with the foreground colour set to BLACK
+and the background colour set to WHITE.
+\item ORs the temporary bitmap with the destination area.
+\item Deletes the temporary bitmap.
+\end{enumerate}
+
+This sequence of operations ensures that the source's transparent area need not be black,
+and logical functions are supported.
+}
+
+\wxheading{Remarks}
+
+There is partial support for Blit in wxPostScriptDC, under X.
+
+See \helpref{wxMemoryDC}{wxmemorydc} for typical usage.
+
+wxheading{See also}
+
+\helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxBitmap}{wxbitmap}, \helpref{wxMask}{wxmask}
+
+\membersection{wxDC::Clear}\label{wxdcclear}
+
+\func{void}{Clear}{\void}
+
+Clears the device context using the current background brush.
+
+\membersection{wxDC::CrossHair}\label{wxdccrosshair}
+
+\func{void}{CrossHair}{\param{long}{ x}, \param{long}{ y}}
+
+Displays a cross hair using the current pen. This is a vertical
+and horizontal line the height and width of the canvas, centred
+on the given point.
+
+\membersection{wxDC::DestroyClippingRegion}\label{wxdcdestroyclippingregion}
+
+\func{void}{DestroyClippingRegion}{\void}
+
+Destroys the current clipping region so that none of the DC is clipped.
+See also \helpref{wxDC::SetClippingRegion}{wxdcsetclippingregion}.
+
+\membersection{wxDC::DeviceToLogicalX}\label{wxdcdevicetologicalx}
+
+\func{long}{DeviceToLogicalX}{\param{long}{ x}}
+
+Convert device X coordinate to logical coordinate, using the current
+mapping mode.
+
+\membersection{wxDC::DeviceToLogicalXRel}\label{wxdcdevicetologicalxrel}
+
+\func{long}{DeviceToLogicalXRel}{\param{long}{ x}}
+
+Convert device X coordinate to relative logical coordinate, using the current
+mapping mode. Use this function for converting a width, for example.
+
+\membersection{wxDC::DeviceToLogicalY}\label{wxdcdevicetologicaly}
+
+\func{long}{DeviceToLogicalY}{\param{long}{ y}}
+
+Converts device Y coordinate to logical coordinate, using the current
+mapping mode.
+
+\membersection{wxDC::DeviceToLogicalYRel}\label{wxdcdevicetologicalyrel}
+
+\func{long}{DeviceToLogicalYRel}{\param{long}{ y}}
+
+Convert device Y coordinate to relative logical coordinate, using the current
+mapping mode. Use this function for converting a height, for example.
+
+\membersection{wxDC::DrawArc}\label{wxdcdrawarc}
+
+\func{void}{DrawArc}{\param{long}{ x1}, \param{long}{ y1}, \param{long}{ x2}, \param{long}{ y2}, \param{double}{ xc}, \param{double}{ yc}}
+
+Draws an arc, centred on ({\it xc, yc}), with starting point ({\it x1, y1})
+and ending at ({\it x2, y2}). The current pen is used for the outline
+and the current brush for filling the shape.
+
+\membersection{wxDC::DrawEllipse}\label{wxdcdrawellipse}
+
+\func{void}{DrawEllipse}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Draws an ellipse contained in the rectangle with the given top left corner, and with the
+given size. The current pen is used for the outline and the current brush for
+filling the shape.
+
+\membersection{wxDC::DrawEllipticArc}\label{wxdcdrawellipticarc}
+
+\func{void}{DrawEllipticArc}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height},
+ \param{double}{ start}, \param{double}{ end}}
+
+Draws an arc of an ellipse. The current pen is used for drawing the arc and
+the current brush is used for drawing the pie. This function is currently only available for
+X canvas and PostScript device contexts.
+
+{\it x} and {\it y} specify the x and y coordinates of the upper-left corner of the rectangle that contains
+the ellipse.
+
+{\it width} and {\it height} specify the width and height of the rectangle that contains
+the ellipse.
+
+{\it start} and {\it end} specify the start and end of the arc relative to the three-o'clock
+position from the center of the rectangle. Angles are specified
+in degrees (360 is a complete circle). Positive values mean
+counter-clockwise motion. If {\it start} is equal to {\it end}, a
+complete ellipse will be drawn.
+
+\membersection{wxDC::DrawIcon}\label{wxdcdrawicon}
+
+\func{void}{DrawIcon}{\param{const wxIcon\&}{ icon}, \param{long}{ x}, \param{long}{ y}}
+
+Draw an icon on the display (does nothing if the device context is PostScript).
+This can be the simplest way of drawing bitmaps on a canvas.
+
+\membersection{wxDC::DrawLine}\label{wxdcdrawline}
+
+\func{void}{DrawLine}{\param{long}{ x1}, \param{long}{ y1}, \param{long}{ x2}, \param{long}{ y2}}
+
+Draws a line from the first point to the second. The current pen is used
+for drawing the line.
+
+\membersection{wxDC::DrawLines}\label{wxdcdrawlines}
+
+\func{void}{DrawLines}{\param{int}{ n}, \param{wxPoint}{ points[]}, \param{long}{ xoffset = 0}, \param{long}{ yoffset = 0}}
+
+\func{void}{DrawLines}{\param{wxList *}{points}, \param{long}{ xoffset = 0}, \param{long}{ yoffset = 0}}
+
+Draws lines using an array of {\it points} of size {\it n}, or list of
+pointers to points, adding the optional offset coordinate. The current
+pen is used for drawing the lines. The programmer is responsible for
+deleting the list of points.
+
+\membersection{wxDC::DrawPolygon}\label{wxdcdrawpolygon}
+
+\func{void}{DrawPolygon}{\param{int}{ n}, \param{wxPoint}{ points[]}, \param{long}{ xoffset = 0}, \param{long}{ yoffset = 0},\\
+ \param{int }{fill\_style = wxODDEVEN\_RULE}}
+
+\func{void}{DrawPolygon}{\param{wxList *}{points}, \param{long}{ xoffset = 0}, \param{long}{ yoffset = 0},\\
+ \param{int }{fill\_style = wxODDEVEN\_RULE}}
+
+Draws a filled polygon using an array of {\it points} of size {\it n},
+or list of pointers to points, adding the optional offset coordinate.
+
+The last argument specifies the fill rule: {\bf wxODDEVEN\_RULE} (the
+default) or {\bf wxWINDING\_RULE}.
+
+The current pen is used for drawing the outline, and the current brush
+for filling the shape. Using a transparent brush suppresses filling.
+The programmer is responsible for deleting the list of points.
+
+Note that wxWindows automatically closes the first and last points.
+
+\membersection{wxDC::DrawPoint}\label{wxdcdrawpoint}
+
+\func{void}{DrawPoint}{\param{long}{ x}, \param{long}{ y}}
+
+Draws a point using the current pen.
+
+\membersection{wxDC::DrawRectangle}\label{wxdcdrawrectangle}
+
+\func{void}{DrawRectangle}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Draws a rectangle with the given top left corner, and with the given
+size. The current pen is used for the outline and the current brush
+for filling the shape.
+
+\membersection{wxDC::DrawRoundedRectangle}\label{wxdcdrawroundedrectangle}
+
+\func{void}{DrawRoundedRectangle}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}, \param{double}{ radius = 20}}
+
+Draws a rectangle with the given top left corner, and with the given
+size. The corners are quarter-circles using the given radius. The
+current pen is used for the outline and the current brush for filling
+the shape.
+
+If {\it radius} is positive, the value is assumed to be the
+radius of the rounded corner. If {\it radius} is negative,
+the absolute value is assumed to be the {\it proportion} of the smallest
+dimension of the rectangle. This means that the corner can be
+a sensible size relative to the size of the rectangle, and also avoids
+the strange effects X produces when the corners are too big for
+the rectangle.
+
+\membersection{wxDC::DrawSpline}\label{wxdcdrawspline}
+
+\func{void}{DrawSpline}{\param{wxList *}{points}}
+
+Draws a spline between all given control points, using the current
+pen. Doesn't delete the wxList and contents. The spline is drawn
+using a series of lines, using an algorithm taken from the X drawing
+program `XFIG'.
+
+\func{void}{DrawSpline}{\param{long}{ x1}, \param{long}{ y1}, \param{long}{ x2}, \param{long}{ y2}, \param{long}{ x3}, \param{long}{ y3}}
+
+Draws a three-point spline using the current pen.
+
+\membersection{wxDC::DrawText}\label{wxdcdrawtext}
+
+\func{void}{DrawText}{\param{const wxString\& }{text}, \param{long}{ x}, \param{long}{ y}}
+
+Draws a text string at the specified point, using the current text font,
+and the current text foreground and background colours.
+
+The coordinates refer to the top-left corner of the rectangle bounding
+the string. See \helpref{wxDC::GetTextExtent}{wxdcgettextextent} for how
+to get the dimensions of a text string, which can be used to position the
+text more precisely.
+
+\membersection{wxDC::EndDoc}\label{wxdcenddoc}
+
+\func{void}{EndDoc}{\void}
+
+Ends a document (only relevant when outputting to a printer).
+
+\membersection{wxDC::EndDrawing}\label{wxdcenddrawing}
+
+\func{void}{EndDrawing}{\void}
+
+Allows optimization of drawing code under MS Windows. Enclose
+drawing primitives between {\bf BeginDrawing} and {\bf EndDrawing}\rtfsp
+calls.
+
+\membersection{wxDC::EndPage}\label{wxdcendpage}
+
+\func{void}{EndPage}{\void}
+
+Ends a document page (only relevant when outputting to a printer).
+
+\membersection{wxDC::FloodFill}\label{wxdcfloodfill}
+
+\func{void}{FloodFill}{\param{long}{ x}, \param{long}{ y}, \param{wxColour *}{colour}, \param{int}{ style=wxFLOOD\_SURFACE}}
+
+Flood fills the device context starting from the given point, in the given colour,
+and using a style:
+
+\begin{itemize}\itemsep=0pt
+\item wxFLOOD\_SURFACE: the flooding occurs until a colour other than the given colour is encountered.
+\item wxFLOOD\_BORDER: the area to be flooded is bounded by the given colour.
+\end{itemize}
+
+{\it Note:} this function is available in MS Windows only.
+
+\membersection{wxDC::GetBackground}\label{wxdcgetbackground}
+
+\func{wxBrush *}{GetBackground}{\void}
+
+Gets the brush used for painting the background (see \helpref{wxDC::SetBackground}{wxdcsetbackground}).
+
+\membersection{wxDC::GetBrush}\label{wxdcgetbrush}
+
+\func{wxBrush *}{GetBrush}{\void}
+
+Gets the current brush (see \helpref{wxDC::SetBrush}{wxdcsetbrush}).
+
+\membersection{wxDC::GetCharHeight}\label{wxdcgetcharheight}
+
+\func{long}{GetCharHeight}{\void}
+
+Gets the character height of the currently set font.
+
+\membersection{wxDC::GetCharWidth}\label{wxdcgetcharwidth}
+
+\func{long}{GetCharWidth}{\void}
+
+Gets the average character width of the currently set font.
+
+\membersection{wxCanvas::GetClippingBox}\label{wxdcgetclippingbox}
+
+\func{void}{GetClippingBox}{\param{long}{ *x}, \param{long}{ *y}, \param{long}{ *width}, \param{long}{ *height}}
+
+Gets the rectangle surrounding the current clipping region.
+
+\membersection{wxDC::GetFont}\label{wxdcgetfont}
+
+\func{wxFont *}{GetFont}{\void}
+
+Gets the current font (see \helpref{wxDC::SetFont}{wxdcsetfont}).
+
+\membersection{wxDC::GetLogicalFunction}\label{wxdcgetlogicalfunction}
+
+\func{int}{GetLogicalFunction}{\void}
+
+Gets the current logical function (see \helpref{wxDC::SetLogicalFunction}{wxdcsetlogicalfunction}).
+
+\membersection{wxDC::GetMapMode}\label{wxdcgetmapmode}
+
+\func{int}{GetMapMode}{\void}
+
+Gets the {\it mapping mode} for the device context (see \helpref{wxDC::SetMapMode}{wxdcsetmapmode}).
+
+\membersection{wxDC::GetOptimization}\label{wxdcgetoptimization}
+
+\func{bool}{GetOptimization}{\void}
+
+Returns TRUE if device context optimization is on.
+See \helpref{wxDC::SetOptimization}{wxsetoptimization} for details.
+
+\membersection{wxDC::GetPen}\label{wxdcgetpen}
+
+\func{wxPen *}{GetPen}{\void}
+
+Gets the current pen (see \helpref{wxDC::SetPen}{wxdcsetpen}).
+
+\membersection{wxDC::GetPixel}\label{wxdcgetpixel}
+
+\func{bool}{GetPixel}{\param{long}{ x}, \param{long}{ y}, \param{wxColour *}{colour}}
+
+Sets {\it colour} to the colour at the specified location. Windows only; an X implementation
+is being worked on. Not available for wxPostScriptDC or wxMetaFileDC.
+
+\membersection{wxDC::GetSize}\label{wxdcgetsize}
+
+\func{void}{GetSize}{\param{long *}{width}, \param{long *}{height}}
+
+For a PostScript device context, this gets the maximum size of graphics
+drawn so far on the device context.
+
+For a Windows printer device context, this gets the horizontal and vertical
+resolution. It can be used to scale graphics to fit the page when using
+a Windows printer device context. For example, if {\it maxX} and {\it maxY}\rtfsp
+represent the maximum horizontal and vertical `pixel' values used in your
+application, the following code will scale the graphic to fit on the
+printer page:
+
+\begin{verbatim}
+ long w, h;
+ dc.GetSize(&w, &h);
+ double scaleX=(double)(maxX/w);
+ double scaleY=(double)(maxY/h);
+ dc.SetUserScale(min(scaleX,scaleY),min(scaleX,scaleY));
+\end{verbatim}
+
+\membersection{wxDC::GetTextBackground}\label{wxdcgettextbackground}
+
+\func{wxColour\&}{GetTextBackground}{\void}
+
+Gets the current text background colour (see \helpref{wxDC::SetTextBackground}{wxdcsettextbackground}).
+
+\membersection{wxDC::GetTextExtent}\label{wxdcgettextextent}
+
+\func{void}{GetTextExtent}{\param{const wxString\& }{string}, \param{long *}{w}, \param{long *}{h},\\
+ \param{long *}{descent = NULL}, \param{long *}{externalLeading = NULL}, \param{wxFont *}{font = NULL}}
+
+Gets the dimensions of the string using the currently selected font.
+\rtfsp{\it string} is the text string to measure, {\it w} and {\it h} are
+the total width and height respectively, {\it descent} is the
+dimension from the baseline of the font to the bottom of the
+descender, and {\it externalLeading} is any extra vertical space added
+to the font by the font designer (usually is zero).
+
+The optional parameter {\it font} specifies an alternative
+to the currently selected font: but note that this does not
+yet work under Windows, so you need to set a font for
+the device context first.
+
+See also \helpref{wxFont}{wxfont}, \helpref{wxDC::SetFont}{wxdcsetfont}.
+
+\membersection{wxDC::GetTextForeground}\label{wxdcgettextforeground}
+
+\func{wxColour\&}{GetTextForeground}{\void}
+
+Gets the current text foreground colour (see \helpref{wxDC::SetTextForeground}{wxdcsettextforeground}).
+
+\membersection{wxDC::LogicalToDeviceX}\label{wxdclogicaltodevicex}
+
+\func{long}{LogicalToDeviceX}{\param{long}{ x}}
+
+Converts logical X coordinate to device coordinate, using the current
+mapping mode.
+
+\membersection{wxDC::LogicalToDeviceXRel}\label{wxdclogicaltodevicexrel}
+
+\func{long}{LogicalToDeviceXRel}{\param{long}{ x}}
+
+Converts logical X coordinate to relative device coordinate, using the current
+mapping mode. Use this for converting a width, for example.
+
+\membersection{wxDC::LogicalToDeviceY}\label{wxdclogicaltodevicey}
+
+\func{long}{LogicalToDeviceY}{\param{long}{ y}}
+
+Converts logical Y coordinate to device coordinate, using the current
+mapping mode.
+
+\membersection{wxDC::LogicalToDeviceYRel}\label{wxdclogicaltodeviceyrel}
+
+\func{long}{LogicalToDeviceYRel}{\param{long}{ y}}
+
+Converts logical Y coordinate to relative device coordinate, using the current
+mapping mode. Use this for converting a height, for example.
+
+\membersection{wxDC::MaxX}\label{wxdcmaxx}
+
+\func{long}{MaxX}{\void}
+
+Gets the maximum horizontal extent used in drawing commands so far.
+
+\membersection{wxDC::MaxY}\label{wxdcmaxy}
+
+\func{long}{MaxY}{\void}
+
+Gets the maximum vertical extent used in drawing commands so far.
+
+\membersection{wxDC::MinX}\label{wxdcminx}
+
+\func{long}{MinX}{\void}
+
+Gets the minimum horizontal extent used in drawing commands so far.
+
+\membersection{wxDC::MinY}\label{wxdcminy}
+
+\func{long}{MinY}{\void}
+
+Gets the minimum vertical extent used in drawing commands so far.
+
+\membersection{wxDC::Ok}\label{wxdcok}
+
+\func{bool}{Ok}{\void}
+
+Returns TRUE if the DC is ok to use.
+
+\membersection{wxDC::SetDeviceOrigin}\label{wxdcsetdeviceorigin}
+
+\func{void}{SetDeviceOrigin}{\param{long}{ x}, \param{long}{ y}}
+
+Sets the device origin (i.e., the origin in pixels after scaling has been
+applied).
+
+This function may be useful in Windows printing
+operations for placing a graphic on a page.
+
+\membersection{wxDC::SetBackground}\label{wxdcsetbackground}
+
+\func{void}{SetBackground}{\param{const wxBrush\& }{brush}}
+
+Sets the current background brush for the DC.
+
+\membersection{wxDC::SetBackgroundMode}\label{wxdcsetbackgroundmode}
+
+\func{void}{SetBackgroundMode}{\param{int}{ mode}}
+
+{\it mode} may be one of wxSOLID and wxTRANSPARENT. This setting determines
+whether text will be drawn with a background colour or not.
+
+\membersection{wxDC::SetClippingRegion}\label{wxdcsetclippingregion}
+
+\func{void}{SetClippingRegion}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Sets the clipping region for the DC. The clipping region is a rectangular area
+to which drawing is restricted. Possible uses for the clipping region are for clipping text
+or for speeding up canvas redraws when only a known area of the screen is damaged.
+
+See also \helpref{wxDC::DestroyClippingRegion}{wxdcdestroyclippingregion}.
+
+\membersection{wxDC::SetPalette}\label{wxdcsetpalette}
+
+\func{void}{SetPalette}{\param{const wxPalette\& }{palette}}
+
+If this is a canvas DC or memory DC, assigns the given palette to the window
+or bitmap associated with the DC. If the argument is wxNullPalette, the current
+palette is selected out of the device context, and the original palette
+restored.
+
+See \helpref{wxPalette}{wxpalette} for further details.
+
+\membersection{wxDC::SetBrush}\label{wxdcsetbrush}
+
+\func{void}{SetBrush}{\param{const wxBrush\& }{brush}}
+
+Sets the current brush for the DC.
+
+If the argument is wxNullBrush, the current brush is selected out of the device
+context, and the original brush restored, allowing the current brush to
+be destroyed safely.
+
+See also \helpref{wxBrush}{wxbrush}.
+
+\membersection{wxDC::SetFont}\label{wxdcsetfont}
+
+\func{void}{SetFont}{\param{const wxFont\& }{font}}
+
+Sets the current font for the DC.
+
+If the argument is wxNullFont, the current font is selected out of the device
+context, and the original font restored, allowing the current font to
+be destroyed safely.
+
+See also \helpref{wxFont}{wxfont}.
+
+\membersection{wxDC::SetLogicalFunction}\label{wxdcsetlogicalfunction}
+
+\func{void}{SetLogicalFunction}{\param{int}{ function}}
+
+Sets the current logical function for the canvas. This determines how
+a source pixel (from a pen or brush colour, or source device context if
+using \helpref{wxDC::Blit}{wxdcblit}) combines with a destination pixel in the
+current device context.
+
+The possible values
+and their meaning in terms of source and destination pixel values are
+as follows:
+
+\begin{verbatim}
+wxAND src AND dst
+wxAND_INVERT (NOT src) AND dst
+wxAND_REVERSE src AND (NOT dst)
+wxCLEAR 0
+wxCOPY src
+wxEQUIV (NOT src) XOR dst
+wxINVERT NOT dst
+wxNAND (NOT src) OR (NOT dst)
+wxNOR (NOT src) AND (NOT dst)
+wxNO_OP dst
+wxOR src OR dst
+wxOR_INVERT (NOT src) OR dst
+wxOR_REVERSE src OR (NOT dst)
+wxSET 1
+wxSRC_INVERT NOT src
+wxXOR src XOR dst
+\end{verbatim}
+
+The default is wxCOPY, which simply draws with the current colour.
+The others combine the current colour and the background using a
+logical operation. wxXOR is commonly used for drawing rubber bands or
+moving outlines, since drawing twice reverts to the original colour.
+
+\membersection{wxDC::SetMapMode}\label{wxdcsetmapmode}
+
+\func{void}{SetMapMode}{\param{int}{ int}}
+
+The {\it mapping mode} of the device context defines the unit of
+measurement used to convert logical units to device units. Note that
+in X, text drawing isn't handled consistently with the mapping mode; a
+font is always specified in point size. However, setting the {\it
+user scale} (see \helpref{wxDC::SetUserScale}{wxdcsetuserscale}) scales the text appropriately. In
+Windows, scaleable TrueType fonts are always used; in X, results depend
+on availability of fonts, but usually a reasonable match is found.
+
+Note that the coordinate origin should ideally be selectable, but for
+now is always at the top left of the screen/printer.
+
+Drawing to a Windows printer device context under UNIX
+uses the current mapping mode, but mapping mode is currently ignored for
+PostScript output.
+
+The mapping mode can be one of the following:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{MM\_TWIPS}{Each logical unit is 1/20 of a point, or 1/1440 of
+ an inch.}
+\twocolitem{MM\_POINTS}{Each logical unit is a point, or 1/72 of an inch.}
+\twocolitem{MM\_METRIC}{Each logical unit is 1 mm.}
+\twocolitem{MM\_LOMETRIC}{Each logical unit is 1/10 of a mm.}
+\twocolitem{MM\_TEXT}{Each logical unit is 1 pixel.}
+\end{twocollist}
+
+\membersection{wxDC::SetOptimization}\label{wxsetoptimization}
+
+\func{void}{SetOptimization}{\param{bool }{optimize}}
+
+If {\it optimize} is TRUE (the default), this function sets optimization mode on.
+This currently means that under X, the device context will not try to set a pen or brush
+property if it is known to be set already. This approach can fall down
+if non-wxWindows code is using the same device context or window, for example
+when the window is a panel on which the windowing system draws panel items.
+The wxWindows device context 'memory' will now be out of step with reality.
+
+Setting optimization off, drawing, then setting it back on again, is a trick
+that must occasionally be employed.
+
+\membersection{wxDC::SetPen}\label{wxdcsetpen}
+
+\func{void}{SetPen}{\param{const wxPen\& }{pen}}
+
+Sets the current pen for the DC.
+
+If the argument is wxNullPen, the current pen is selected out of the device
+context, and the original pen restored.
+
+\membersection{wxDC::SetTextBackground}\label{wxdcsettextbackground}
+
+\func{void}{SetTextBackground}{\param{const wxColour\& }{colour}}
+
+Sets the current text background colour for the DC.
+
+\membersection{wxDC::SetTextForeground}\label{wxdcsettextforeground}
+
+\func{void}{SetTextForeground}{\param{const wxColour\& }{colour}}
+
+Sets the current text foreground colour for the DC.
+
+\membersection{wxDC::SetUserScale}\label{wxdcsetuserscale}
+
+\func{void}{SetUserScale}{\param{double}{ xScale}, \param{double}{ yScale}}
+
+Sets the user scaling factor, useful for applications which require
+`zooming'.
+
+\membersection{wxDC::StartDoc}\label{wxdcstartdoc}
+
+\func{bool}{StartDoc}{\param{const wxString\& }{message}}
+
+Starts a document (only relevant when outputting to a printer).
+Message is a message to show whilst printing.
+
+\membersection{wxDC::StartPage}\label{wxdcstartpage}
+
+\func{bool}{StartPage}{\void}
+
+Starts a document page (only relevant when outputting to a printer).
+
--- /dev/null
+\section{\class{wxDDEClient}}\label{wxddeclient}
+
+\overview{Interprocess communications overview}{ipcoverview}
+
+A wxDDEClient object represents the client part of a client-server DDE
+(Dynamic Data Exchange) conversation (available in {\it both}\/
+Windows and UNIX).
+
+To create a client which can communicate with a suitable server,
+you need to derive a class from wxDDEConnection and another from wxDDEClient.
+The custom wxDDEConnection class will intercept communications in
+a `conversation' with a server, and the custom wxDDEServer is required
+so that a user-overriden \helpref{wxDDEClient::OnMakeConnection}{wxddeclientonmakeconnection} member can return
+a wxDDEConnection of the required class, when a connection is made.
+
+\wxheading{Derived from}
+
+wxDDEObject
+
+\wxheading{See also}
+
+\helpref{wxDDEServer}{wxddeserver}, \helpref{wxDDEConnection}{wxddeconnection},
+the chapter on interprocess communication in the user manual, and
+the programs in {\tt samples/ipc}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDDEClient::wxDDEClient}
+
+\func{}{wxDDEClient}{\void}
+
+Constructs a client object.
+
+\membersection{wxDDEClient::MakeConnection}\label{wxddeclientmakeconnection}
+
+\func{wxDDEConnection *}{MakeConnection}{\param{const wxString\& }{host}, \param{const wxString\& }{service}, \param{const wxString\& }{topic}}
+
+Tries to make a connection with a server specified by the host
+(machine name under UNIX, ignored under Windows), service name (must
+contain an integer port number under UNIX), and topic string. If the
+server allows a connection, a wxDDEConnection object will be returned.
+The type of wxDDEConnection returned can be altered by overriding
+the \helpref{wxDDEClient::OnMakeConnection}{wxddeclientonmakeconnection} member to return your own
+derived connection object.
+
+\membersection{wxDDEClient::OnMakeConnection}\label{wxddeclientonmakeconnection}
+
+\func{wxDDEConnection *}{OnMakeConnection}{\void}
+
+The type of \helpref{wxDDEConnection}{wxddeconnection} returned from a \helpref{wxDDEClient::MakeConnection}{wxddeclientmakeconnection} call can
+be altered by deriving the {\bf OnMakeConnection} member to return your
+own derived connection object. By default, an ordinary wxDDEConnection
+object is returned.
+
+The advantage of deriving your own connection class is that it will
+enable you to intercept messages initiated by the server, such
+as \helpref{wxDDEConnection::OnAdvise}{wxddeconnectiononadvise}. You may also want to
+store application-specific data in instances of the new class.
+
+\membersection{wxDDEClient::ValidHost}
+
+\func{bool}{ValidHost}{\param{const wxString\& }{host}}
+
+Returns TRUE if this is a valid host name, FALSE otherwise. This always
+returns TRUE under MS Windows.
+
+
--- /dev/null
+\section{\class{wxDDEConnection}}\label{wxddeconnection}
+
+A wxDDEConnection object represents the connection between a client and a
+server. It can be created by making a connection using a\rtfsp
+\helpref{wxDDEClient}{wxddeclient} object, or by the acceptance of a connection by a\rtfsp
+\helpref{wxDDEServer}{wxddeserver} object. The bulk of a DDE (Dynamic Data Exchange)
+conversation (available in both Windows and UNIX) is controlled by
+calling members in a {\bf wxDDEConnection} object or by overriding its
+members.
+
+An application should normally derive a new connection class from
+wxDDEConnection, in order to override the communication event handlers
+to do something interesting.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDDEClient}{wxddeclient}, \helpref{wxDDEServer}{wxddeserver}, \helpref{Interprocess communications overview}{ipcoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDDEConnection::wxDDEConnection}
+
+\func{}{wxDDEConnection}{\void}
+
+\func{}{wxDDEConnection}{\param{char* }{buffer}, \param{int}{ size}}
+
+Constructs a connection object. If no user-defined connection object is
+to be derived from wxDDEConnection, then the constructor should not be
+called directly, since the default connection object will be provided on
+requesting (or accepting) a connection. However, if the user defines his
+or her own derived connection object, the \helpref{wxDDEServer::OnAcceptConnection}{wxddeserveronacceptconnection}\rtfsp
+and/or \helpref{wxDDEClient::OnMakeConnection}{wxddeclientonmakeconnection} members should be replaced by
+functions which construct the new connection object. If the arguments of
+the wxDDEConnection constructor are void, then a default buffer is
+associated with the connection. Otherwise, the programmer must provide a
+a buffer and size of the buffer for the connection object to use in
+transactions.
+
+\membersection{wxDDEConnection::Advise}
+
+\func{bool}{Advise}{\param{const wxString\& }{item}, \param{char* }{data}, \param{int}{ size = -1}, \param{int}{ format = wxCF\_TEXT}}
+
+Called by the server application to advise the client of a change in
+the data associated with the given item. Causes the client
+connection's \helpref{wxDDEConnection::OnAdvise}{wxddeconnectiononadvise}
+member to be called. Returns TRUE if successful.
+
+\membersection{wxDDEConnection::Execute}
+
+\func{bool}{Execute}{\param{char* }{data}, \param{int}{ size = -1},
+\param{int}{ format = wxCF\_TEXT}}
+
+Called by the client application to execute a command on the server. Can
+also be used to transfer arbitrary data to the server (similar
+to \helpref{wxDDEConnection::Poke}{wxddeconnectionpoke} in that respect). Causes the
+server connection's \helpref{wxDDEConnection::OnExecute}{wxddeconnectiononexecute} member to be
+called. Returns TRUE if successful.
+
+\membersection{wxDDEConnection::Disconnect}
+
+\func{bool}{Disconnect}{\void}
+
+Called by the client or server application to disconnect from the other
+program; it causes the \helpref{wxDDEConnection::OnDisconnect}{wxddeconnectionondisconnect} message
+to be sent to the corresponding connection object in the other
+program. The default behaviour of {\bf OnDisconnect} is to delete the
+connection, but the calling application must explicitly delete its
+side of the connection having called {\bf Disconnect}. Returns TRUE if
+successful.
+
+\membersection{wxDDEConnection::OnAdvise}\label{wxddeconnectiononadvise}
+
+\func{bool}{OnAdvise}{\param{const wxString\& }{topic}, \param{const wxString\& }{item}, \param{char* }{data}, \param{int}{ size}, \param{int}{ format}}
+
+Message sent to the client application when the server notifies it of a
+change in the data associated with the given item.
+
+\membersection{wxDDEConnection::OnDisconnect}\label{wxddeconnectionondisconnect}
+
+\func{bool}{OnDisconnect}{\void}
+
+Message sent to the client or server application when the other
+application notifies it to delete the connection. Default behaviour is
+to delete the connection object.
+
+\membersection{wxDDEConnection::OnExecute}\label{wxddeconnectiononexecute}
+
+\func{bool}{OnExecute}{\param{const wxString\& }{topic}, \param{char* }{data}, \param{int}{ size}, \param{int}{ format}}
+
+Message sent to the server application when the client notifies it to
+execute the given data. Note that there is no item associated with
+this message.
+
+\membersection{wxDDEConnection::OnPoke}\label{wxddeconnectiononpoke}
+
+\func{bool}{OnPoke}{\param{const wxString\& }{topic}, \param{const wxString\& }{item}, \param{char* }{data}, \param{int}{ size}, \param{int}{ format}}
+
+Message sent to the server application when the client notifies it to
+accept the given data.
+
+\membersection{wxDDEConnection::OnRequest}\label{wxddeconnectiononrequest}
+
+\func{char*}{OnRequest}{\param{const wxString\& }{topic}, \param{const wxString\& }{item}, \param{int *}{size}, \param{int}{ format}}
+
+Message sent to the server application when the client
+calls \helpref{wxDDEConnection::Request}{wxddeconnectionrequest}. The server
+should respond by returning a character string from {\bf OnRequest},
+or NULL to indicate no data.
+
+\membersection{wxDDEConnection::OnStartAdvise}\label{wxddeconnectiononstartadvise}
+
+\func{bool}{OnStartAdvise}{\param{const wxString\& }{topic}, \param{const wxString\& }{item}}
+
+Message sent to the server application by the client, when the client
+wishes to start an `advise loop' for the given topic and item. The
+server can refuse to participate by returning FALSE.
+
+\membersection{wxDDEConnection::OnStopAdvise}\label{wxddeconnectiononstopadvise}
+
+\func{bool}{OnStopAdvise}{\param{const wxString\& }{topic}, \param{const wxString\& }{item}}
+
+Message sent to the server application by the client, when the client
+wishes to stop an `advise loop' for the given topic and item. The
+server can refuse to stop the advise loop by returning FALSE, although
+this doesn't have much meaning in practice.
+
+\membersection{wxDDEConnection::Poke}\label{wxddeconnectionpoke}
+
+\func{bool}{Poke}{\param{const wxString\& }{item}, \param{char* }{data}, \param{int}{ size = -1}, \param{int}{ format = wxCF\_TEXT}}
+
+Called by the client application to poke data into the server. Can be
+used to transfer arbitrary data to the server. Causes the server
+connection's \helpref{wxDDEConnection::OnPoke}{wxddeconnectiononpoke} member
+to be called. Returns TRUE if successful.
+
+\membersection{wxDDEConnection::Request}\label{wxddeconnectionrequest}
+
+\func{char*}{Request}{\param{const wxString\& }{item}, \param{int *}{size}, \param{int}{ format = wxCF\_TEXT}}
+
+Called by the client application to request data from the server. Causes
+the server connection's \helpref{wxDDEConnection::OnRequest}{wxddeconnectiononrequest} member to be called. Returns a
+character string (actually a pointer to the connection's buffer) if
+successful, NULL otherwise.
+
+\membersection{wxDDEConnection::StartAdvise}\label{wxddeconnectionstartadvise}
+
+\func{bool}{StartAdvise}{\param{const wxString\& }{item}}
+
+Called by the client application to ask if an advise loop can be started
+with the server. Causes the server connection's \helpref{wxDDEConnection::OnStartAdvise}{wxddeconnectiononstartadvise}\rtfsp
+member to be called. Returns TRUE if the server okays it, FALSE
+otherwise.
+
+\membersection{wxDDEConnection::StopAdvise}\label{wxddeconnectionstopadvise}
+
+\func{bool}{StopAdvise}{\param{const wxString\& }{item}}
+
+Called by the client application to ask if an advise loop can be
+stopped. Causes the server connection's \helpref{wxDDEConnection::OnStopAdvise}{wxddeconnectiononstopadvise} member
+to be called. Returns TRUE if the server okays it, FALSE otherwise.
+
+
--- /dev/null
+\section{\class{wxDDEServer}}\label{wxddeserver}
+
+A wxDDEServer object represents the server part of a client-server DDE
+(Dynamic Data Exchange) conversation (available under both Windows
+and UNIX).
+
+\wxheading{Derived from}
+
+wxDDEObject
+
+\wxheading{See also}
+
+\helpref{IPC overview}{ipcoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDDEServer::wxDDEServer}
+
+\func{}{wxDDEServer}{\void}
+
+Constructs a server object.
+
+\membersection{wxDDEServer::Create}
+
+\func{bool}{Create}{\param{const wxString\& }{service}}
+
+Registers the server using the given service name. Under UNIX, the
+string must contain an integer id which is used as an Internet port
+number. FALSE is returned if the call failed (for example, the port
+number is already in use).
+
+\membersection{wxDDEServer::OnAcceptConnection}\label{wxddeserveronacceptconnection}
+
+\func{wxDDEConnection *}{OnAcceptConnection}{\param{const wxString\& }{topic}}
+
+When a client calls {\bf MakeConnection}, the server receives the
+message and this member is called. The application should derive a
+member to intercept this message and return a connection object of
+either the standard wxDDEConnection type, or of a user-derived type. If the
+topic is ``STDIO'', the application may wish to refuse the connection.
+Under UNIX, when a server is created the OnAcceptConnection message is
+always sent for standard input and output, but in the context of DDE
+messages it doesn't make a lot of sense.
+
+
--- /dev/null
+\section{\class{wxDebugContext}}\label{wxdebugcontext}
+
+A class for performing various debugging and memory tracing
+operations. Full functionality (such as printing out objects
+currently allocated) is only present in a debugging build of wxWindows,
+i.e. if the DEBUG symbol is defined and non-zero. wxDebugContext
+and related functions and macros can be compiled out by setting
+USE\_DEBUG\_CONTEXT to 0 is wx\_setup.h
+
+\wxheading{Derived from}
+
+No parent class.
+
+\wxheading{See also}
+
+\overview{Overview}{wxdebugcontextoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDebugContext::Check}\label{wxdebugcontextcheck}
+
+\func{int}{Check}{\void}
+
+Checks the memory blocks for errors, starting from the currently set
+checkpoint.
+
+\wxheading{Return value}
+
+Returns the number of errors,
+so a value of zero represents success. Returns -1 if an error
+was detected that prevents further checking.
+
+\membersection{wxDebugContext::Dump}\label{wxdebugcontextdump}
+
+\func{bool}{Dump}{\void}
+
+Performs a memory dump from the currently set checkpoint, writing to the
+current debug stream. Calls the {\bf Dump} member function for each wxObject
+derived instance.
+
+\wxheading{Return value}
+
+TRUE if the function succeeded, FALSE otherwise.
+
+\membersection{wxDebugContext::GetCheckPrevious}\label{wxdebugcontextgetcheckprevious}
+
+\func{bool}{GetCheckPrevious}{\void}
+
+Returns TRUE if the memory allocator checks all previous memory blocks for errors.
+By default, this is FALSE since it slows down execution considerably.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::SetCheckPrevious}{wxdebugcontextsetcheckprevious}
+
+\membersection{wxDebugContext::GetDebugMode}\label{wxdebugcontextgetdebugmode}
+
+\func{bool}{GetDebugMode}{\void}
+
+Returns TRUE if debug mode is on. If debug mode is on, the wxObject new and delete
+operators store or use information about memory allocation. Otherwise,
+a straight malloc and free will be performed by these operators.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::SetDebugMode}{wxdebugcontextsetdebugmode}
+
+\membersection{wxDebugContext::GetLevel}\label{wxdebugcontextgetlevel}
+
+\func{int}{GetLevel}{\void}
+
+Gets the debug level (default 1). The debug level is used by the wxTraceLevel function and
+the WXTRACELEVEL macro to specify how detailed the trace information is; setting
+a different level will only have an effect if trace statements in the application
+specify a value other than one.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::SetLevel}{wxdebugcontextsetlevel}
+
+\membersection{wxDebugContext::GetStream}\label{wxdebugcontextgetstream}
+
+\func{ostream\&}{GetStream}{\void}
+
+Returns the output stream associated with the debug context.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::SetStream}{wxdebugcontextsetstream}
+
+\membersection{wxDebugContext::GetStreamBuf}\label{wxdebugcontextgetstreambuf}
+
+\func{streambuf*}{GetStreamBuf}{\void}
+
+Returns a pointer to the output stream buffer associated with the debug context.
+There may not necessarily be a stream buffer if the stream has been set
+by the user.
+
+\membersection{wxDebugContext::HasStream}\label{wxdebugcontexthasstream}
+
+\func{bool}{HasStream}{\void}
+
+Returns TRUE if there is a stream currently associated
+with the debug context.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::SetStream}{wxdebugcontextsetstream}, \helpref{wxDebugContext::GetStream}{wxdebugcontextgetstream}
+
+\membersection{wxDebugContext::PrintClasses}\label{wxdebugcontextprintclasses}
+
+\func{bool}{PrintClasses}{\void}
+
+Prints a list of the classes declared in this application, giving derivation
+and whether instances of this class can be dynamically created.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::PrintStatistics}{wxdebugcontextprintstatistics}
+
+\membersection{wxDebugContext::PrintStatistics}\label{wxdebugcontextprintstatistics}
+
+\func{bool}{PrintStatistics}{\param{bool}{ detailed = TRUE}}
+
+Performs a statistics analysis from the currently set checkpoint, writing
+to the current debug stream. The number of object and non-object
+allocations is printed, together with the total size.
+
+\wxheading{Parameters}
+
+\docparam{detailed}{If TRUE, the function will also print how many
+objects of each class have been allocated, and the space taken by
+these class instances.}
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::PrintStatistics}{wxdebugcontextprintstatistics}
+
+\membersection{wxDebugContext::SetCheckpoint}\label{wxdebugcontextsetcheckpoint}
+
+\func{void}{SetCheckpoint}{\param{bool}{ all = FALSE}}
+
+Sets the current checkpoint: Dump and PrintStatistics operations will
+be performed from this point on. This allows you to ignore allocations
+that have been performed up to this point.
+
+\wxheading{Parameters}
+
+\docparam{all}{If TRUE, the checkpoint is reset to include all
+memory allocations since the program started.}
+
+\membersection{wxDebugContext::SetCheckPrevious}\label{wxdebugcontextsetcheckprevious}
+
+\func{void}{SetCheckPrevious}{\param{bool}{ check}}
+
+Tells the memory allocator to check all previous memory blocks for errors.
+By default, this is FALSE since it slows down execution considerably.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::GetCheckPrevious}{wxdebugcontextgetcheckprevious}
+
+\membersection{wxDebugContext::SetDebugMode}\label{wxdebugcontextsetdebugmode}
+
+\func{void}{SetDebugMode}{\param{bool}{ debug}}
+
+Sets the debug mode on or off. If debug mode is on, the wxObject new and delete
+operators store or use information about memory allocation. Otherwise,
+a straight malloc and free will be performed by these operators.
+
+By default, debug mode is on if DEBUG is non-zero. If the application
+uses this function, it should make sure that all object memory allocated
+is deallocated with the same value of debug mode. Otherwise, the
+delete operator might try to look for memory information that does not
+exist.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::GetDebugMode}{wxdebugcontextgetdebugmode}
+
+\membersection{wxDebugContext::SetFile}\label{wxdebugcontextsetfile}
+
+\func{bool}{SetFile}{\param{const wxString\& }{filename}}
+
+Sets the current debug file and creates a stream. This will delete any existing
+stream and stream buffer. By default, the debug context stream
+outputs to the debugger (Windows) or standard error (other platforms).
+
+\membersection{wxDebugContext::SetLevel}\label{wxdebugcontextsetlevel}
+
+\func{void}{SetLevel}{\param{int}{ level}}
+
+Sets the debug level (default 1). The debug level is used by the wxTraceLevel function and
+the WXTRACELEVEL macro to specify how detailed the trace information is; setting
+a different level will only have an effect if trace statements in the application
+specify a value other than one.
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::GetLevel}{wxdebugcontextgetlevel}
+
+\membersection{wxDebugContext::SetStandardError}\label{wxdebugcontextsetstandarderror}
+
+\func{bool}{SetStandardError}{\void}
+
+Sets the debugging stream to be the debugger (Windows) or standard error (other platforms).
+This is the default setting. The existing stream will be flushed and deleted.
+
+\membersection{wxDebugContext::SetStream}\label{wxdebugcontextsetstream}
+
+\func{void}{SetStream}{\param{ostream* }{stream}, \param{streambuf* }{streamBuf = NULL}}
+
+Sets the stream and optionally, stream buffer associated with the debug context.
+This operation flushes and deletes the existing stream (and stream buffer if any).
+
+\wxheading{Parameters}
+
+\docparam{stream}{Stream to associate with the debug context. Do not set this to NULL.}
+
+\docparam{streamBuf}{Stream buffer to associate with the debug context.}
+
+\wxheading{See also}
+
+\helpref{wxDebugContext::GetStream}{wxdebugcontextgetstream}, \helpref{wxDebugContext::HasStream}{wxdebugcontexthasstream}
+
+\section{\class{wxDebugStreamBuf}}\label{wxdebugstreambuf}
+
+This class allows you to treat debugging output in a similar
+(stream-based) fashion on different platforms. Under
+Windows, an ostream constructed with this buffer outputs
+to the debugger, or other program that intercepts debugging
+output. On other platforms, the output goes to standard error (cerr).
+
+\wxheading{Derived from}
+
+streambuf
+
+\wxheading{Example}
+
+\begin{verbatim}
+ wxDebugStreamBuf streamBuf;
+ ostream stream(&streamBuf);
+
+ stream << "Hello world!" << endl;
+\end{verbatim}
+
+\wxheading{See also}
+
+\overview{Overview}{wxdebugcontextoverview}
+
+
--- /dev/null
+\section{\class{wxDialog}}\label{wxdialog}
+
+A dialog box is a window with a title bar and sometimes a system menu, which can be moved around
+the screen. It can contain controls and other windows.
+
+\wxheading{Derived from}
+
+\helpref{wxPanel}{wxpanel}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+There are two kinds of dialog - {\it modal} and {\it modeless}. A modal dialog
+blocks program flow and user input on other windows until it is dismissed, whereas a modeless dialog behaves more
+like a frame in that program flow continues, and input on other windows is still possible.
+You specify the type of dialog with the {\bf wxDIALOG\_MODAL} and {\bf wxDIALOG\_MODELESS} window
+styles.
+
+A dialog may be loaded from a wxWindows resource file (extension {\tt wxr}).
+
+An application can define an \helpref{OnCloseWindow}{wxwindowonclosewindow} handler for the
+dialog to respond to system close events.
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxCAPTION}}{Puts a caption on the dialog box (Motif only).}
+\twocolitem{\windowstyle{wxDEFAULT\_DIALOG\_STYLE}}{Equivalent to a combination of wxCAPTION, wxSYSTEM\_MENU and wxTHICK\_FRAME}
+\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Display a resizeable frame around the window (Motif only).}
+\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Display a system menu (Motif only).}
+\twocolitem{\windowstyle{wxTHICK\_FRAME}}{Display a thick frame around the window (Motif only).}
+\twocolitem{\windowstyle{wxNO\_3D}}{Under Windows, specifies that the child controls
+should not have 3D borders unless specified in the control.}
+\end{twocollist}
+
+Under Motif, MWM (the Motif Window Manager) should be running for any of these styles to have an effect.
+
+See also \helpref{Generic window styles}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxDialog overview}{wxdialogoverview}, \helpref{wxFrame}{wxframe}, \helpref{Resources}{resources},\rtfsp
+\helpref{Validator overview}{validatoroverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDialog::wxDialog}\label{wxdialogconstr}
+
+\func{}{wxDialog}{\void}
+
+Default constructor.
+
+\func{}{wxDialog}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxDEFAULT\_DIALOG\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``dialogBox"}}
+
+Constructor.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Can be NULL, a frame or another dialog box.}
+
+\docparam{id}{An identifier for the dialog. A value of -1 is taken to mean a default.}
+
+\docparam{title}{The title of the dialog.}
+
+\docparam{pos}{The dialog position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The dialog size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxDialog}{wxdialog}.}
+
+\docparam{name}{Used to associate a name with the window,
+allowing the application user to set Motif resource values for
+individual dialog boxes.}
+
+\wxheading{See also}
+
+\helpref{wxDialog::Create}{wxdialogcreate}
+
+\membersection{wxDialog::\destruct{wxDialog}}
+
+\func{}{\destruct{wxDialog}}{\void}
+
+Destructor. Deletes any child windows before deleting the physical window.
+
+\membersection{wxDialog::Centre}\label{wxdialogcentre}
+
+\func{void}{Centre}{\param{const int}{ direction = wxBOTH}}
+
+Centres the dialog box on the display.
+
+\wxheading{Parameters}
+
+\docparam{direction}{May be {\tt wxHORIZONTAL}, {\tt wxVERTICAL} or {\tt wxBOTH}.}
+
+\membersection{wxDialog::Create}\label{wxdialogcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxDEFAULT\_DIALOG\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``dialogBox"}}
+
+Used for two-step dialog box construction. See \helpref{wxDialog::wxDialog}{wxdialogconstr}\rtfsp
+for details.
+
+\membersection{wxDialog::EndModal}\label{wxdialogendmodal}
+
+\func{void}{EndModal}{\param{int }{retCode}}
+
+Ends a modal dialog, passing a value to be returned from the \helpref{wxDialog::ShowModal}{wxdialogshowmodal}\rtfsp
+invocation.
+
+\wxheading{Parameters}
+
+\docparam{retCode}{The value that should be returned by {\bf ShowModal}.}
+
+\wxheading{See also}
+
+\helpref{wxDialog::ShowModal}{wxdialogshowmodal},\rtfsp
+\helpref{wxWindow::GetReturnCode}{wxwindowgetreturncode},\rtfsp
+\helpref{wxWindow::SetReturnCode}{wxwindowsetreturncode}
+
+\membersection{wxDialog::GetTitle}\label{wxdialoggettitle}
+
+\constfunc{wxString}{GetTitle}{\void}
+
+Returns the title of the dialog box.
+
+\membersection{wxDialog::Iconize}\label{wxdialogiconized}
+
+\func{void}{Iconize}{\param{const bool}{ iconize}}
+
+Iconizes or restores the dialog.
+
+\wxheading{Parameters}
+
+\docparam{iconize}{If TRUE, iconizes the dialog box; if FALSE, shows and restores it.}
+
+\wxheading{Remarks}
+
+Note that in Windows, iconization has no effect since dialog boxes cannot be
+iconized. However, applications may need to explicitly restore dialog
+boxes under Motif which have user-iconizable frames, and under Windows
+calling {\tt Iconize(FALSE)} will bring the window to the front, as does
+\rtfsp{\tt Show(TRUE)}.
+
+\membersection{wxDialog::IsIconized}\label{wxdialogisiconized}
+
+\constfunc{bool}{IsIconized}{\void}
+
+Returns TRUE if the dialog box is iconized.
+
+\wxheading{Remarks}
+
+Always returns FALSE under Windows since dialogs cannot be iconized.
+
+\membersection{wxDialog::IsModal}\label{wxdialogismodal}
+
+\constfunc{bool}{IsModal}{\void}
+
+Returns TRUE if the dialog box is modal, FALSE otherwise.
+
+\membersection{wxDialog::OnCharHook}\label{wxdialogoncharhook}
+
+\func{void}{OnCharHook}{\param{wxKeyEvent\&}{ event}}
+
+This member is called to allow the window to intercept keyboard events
+before they are processed by child windows.
+
+For more information, see \helpref{wxWindow::OnCharHook}{wxwindowoncharhook}
+
+\wxheading{Remarks}
+
+wxDialog implements this handler to fake a cancel command if the escape key has been
+pressed. This will dismiss the dialog.
+
+\membersection{wxDialog::OnApply}\label{wxdialogonapply}
+
+\func{void}{OnApply}{\param{wxCommandEvent\& }{event}}
+
+The default handler for the wxID\_APPLY identifier.
+
+\wxheading{Remarks}
+
+This function calls \helpref{wxWindow::Validate}{wxwindowvalidate} and \helpref{wxWindow::TransferDataToWindow}{wxwindowtransferdatatowindow}.
+
+\wxheading{See also}
+
+\helpref{wxDialog::OnOK}{wxdialogonok}, \helpref{wxDialog::OnCancel}{wxdialogoncancel}
+
+\membersection{wxDialog::OnCancel}\label{wxdialogoncancel}
+
+\func{void}{OnCancel}{\param{wxCommandEvent\& }{event}}
+
+The default handler for the wxID\_CANCEL identifier.
+
+\wxheading{Remarks}
+
+The function either calls {\bf EndModal(wxID\_CANCEL)} if the dialog is modal, or
+sets the return value to wxID\_CANCEL and calls {\bf Show(FALSE)} if the dialog is modeless.
+
+\wxheading{See also}
+
+\helpref{wxDialog::OnOK}{wxdialogonok}, \helpref{wxDialog::OnApply}{wxdialogonapply}
+
+\membersection{wxDialog::OnOK}\label{wxdialogonok}
+
+\func{void}{OnOK}{\param{wxCommandEvent\& }{event}}
+
+The default handler for the wxID\_OK identifier.
+
+\wxheading{Remarks}
+
+The function calls
+\rtfsp\helpref{wxWindow::Validate}{wxwindowvalidate}, then \helpref{wxWindow::TransferDataFromWindow}{wxwindowtransferdatafromwindow}.
+If this returns TRUE, the function either calls {\bf EndModal(wxID\_OK)} if the dialog is modal, or
+sets the return value to wxID\_OK and calls {\bf Show(FALSE)} if the dialog is modeless.
+
+\wxheading{See also}
+
+\helpref{wxDialog::OnCancel}{wxdialogoncancel}, \helpref{wxDialog::OnApply}{wxdialogonapply}
+
+\membersection{wxDialog::OnSysColourChanged}\label{wxdialogonsyscolourchanged}
+
+\func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
+
+The default handler for wxEVT\_SYS\_COLOUR\_CHANGED.
+
+\wxheading{Parameters}
+
+\docparam{event}{The colour change event.}
+
+\wxheading{Remarks}
+
+Changes the dialog's colour to conform to the current settings (Windows only).
+Add an event table entry for your dialog class if you wish the behaviour
+to be different (such as keeping a user-defined
+background colour). If you do override this function, call \helpref{wxWindow::OnSysColourChanged}{wxwindowonsyscolourchanged} to
+propagate the notification to child windows and controls.
+
+\wxheading{See also}
+
+\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}
+
+\membersection{wxDialog::SetModal}\label{wxdialogsetmodal}
+
+\func{void}{SetModal}{\param{const bool}{ flag}}
+
+Allows the programmer to specify whether the dialog box is modal (wxDialog::Show blocks control
+until the dialog is hidden) or modeless (control returns immediately).
+
+\wxheading{Parameters}
+
+\docparam{flag}{If TRUE, the dialog will be modal, otherwise it will be modeless.}
+
+\membersection{wxDialog::SetTitle}\label{wxdialogsettitle}
+
+\func{void}{SetTitle}{\param{const wxString\& }{ title}}
+
+Sets the title of the dialog box.
+
+\wxheading{Parameters}
+
+\docparam{title}{The dialog box title.}
+
+\membersection{wxDialog::Show}\label{wxdialogshow}
+
+\func{bool}{Show}{\param{const bool}{ show}}
+
+Hides or shows the dialog.
+
+\wxheading{Parameters}
+
+\docparam{show}{If TRUE, the dialog box is shown and brought to the front;
+otherwise the box is hidden. If FALSE and the dialog is
+modal, control is returned to the calling program.}
+
+\wxheading{Remarks}
+
+The preferred way of dismissing a modal dialog is to use \helpref{wxDialog::EndModal}{wxdialogendmodal}.
+
+\membersection{wxDialog::ShowModal}\label{wxdialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows a modal dialog. Program flow does not return until the dialog has been dismissed with\rtfsp
+\helpref{wxDialog::EndModal}{wxdialogendmodal}.
+
+\wxheading{Return value}
+
+The return value is the value set with \helpref{wxWindow::SetReturnCode}{wxwindowsetreturncode}.
+
+\wxheading{See also}
+
+\helpref{wxDialog::EndModal}{wxdialogendmodal},\rtfsp
+\helpref{wxWindow::GetReturnCode}{wxwindowgetreturncode},\rtfsp
+\helpref{wxWindow::SetReturnCode}{wxwindowsetreturncode}
+
+
--- /dev/null
+\section{\class{wxDirDialog}}\label{wxdirdialog}
+
+This class represents the directory chooser dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDirDialog overview}{wxdirdialogoverview}, \helpref{wxFileDialog}{wxfiledialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDirDialog::wxDirDialog}\label{wxdirdialogconstr}
+
+\func{}{wxDirDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message = "Choose a directory"},\rtfsp
+\param{const wxString\& }{defaultPath = ""}, \param{long }{style = 0}, \param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor. Use \helpref{wxDirDialog::ShowModal}{wxdirdialogshowmodal} to show the dialog.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{message}{Message to show on the dialog.}
+
+\docparam{defaultPath}{The default path, or the empty string.}
+
+\docparam{style}{A dialog style, currently unused.}
+
+\docparam{pos}{Dialog position. Not implemented.}
+
+\membersection{wxDirDialog::\destruct{wxDirDialog}}
+
+\func{}{\destruct{wxDirDialog}}{\void}
+
+Destructor.
+
+\membersection{wxDirDialog::GetPath}\label{wxdirdialoggetpath}
+
+\constfunc{wxString}{GetPath}{\void}
+
+Returns the default or user-selected path.
+
+\membersection{wxDirDialog::GetMessage}\label{wxdirdialoggetmessage}
+
+\constfunc{wxString}{GetMessage}{\void}
+
+Returns the message that will be displayed on the dialog.
+
+\membersection{wxDirDialog::GetStyle}\label{wxdirdialoggetstyle}
+
+\constfunc{long}{GetStyle}{\void}
+
+Returns the dialog style.
+
+\membersection{wxDirDialog::SetMessage}\label{wxdirdialogsetmessage}
+
+\func{void}{SetMessage}{\param{const wxString\& }{message}}
+
+Sets the message that will be displayed on the dialog.
+
+\membersection{wxDirDialog::SetPath}\label{wxdirdialogsetpath}
+
+\func{void}{SetPath}{\param{const wxString\& }{path}}
+
+Sets the default path.
+
+\membersection{wxDirDialog::SetStyle}\label{wxdirdialogsetstyle}
+
+\func{void}{SetStyle}{\param{long }{style}}
+
+Sets the dialog style. This is currently unused.
+
+\membersection{wxDirDialog::ShowModal}\label{wxdirdialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxOK\_CANCEL
+otherwise.
+
+
--- /dev/null
+\section{\class{wxDocChildFrame}}\label{wxdocchildframe}
+
+The wxDocChildFrame class provides a default frame for displaying documents
+on separate windows. This class can only be used for SDI (not MDI) child frames.
+
+The class is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocument}{wxdocument},
+\rtfsp\helpref{wxDocManager}{wxdocmanager} and \helpref{wxDocTemplate}{wxdoctemplate} classes.
+
+See the example application in {\tt samples/docview}.
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Document/view overview}{docviewoverview}, \helpref{wxFrame}{wxframe}
+
+\membersection{wxDocChildFrame::m\_childDocument}
+
+\member{wxDocument*}{m\_childDocument}
+
+The document associated with the frame.
+
+\membersection{wxDocChildFrame::m\_childView}
+
+\member{wxView*}{m\_childView}
+
+The view associated with the frame.
+
+\membersection{wxDocChildFrame::wxDocChildFrame}
+
+\func{}{wxDocChildFrame}{\param{wxDocument* }{doc}, \param{wxView* }{view}, \param{wxFrame* }{parent},
+ \param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},
+ \param{const wxSize\&}{ size = wxDefaultSize},
+ \param{long}{ style = wxDEFAULT\_FRAME\_STYLE}, \param{const wxString\& }{name = ``frame"}}
+
+Constructor.
+
+\membersection{wxDocChildFrame::\destruct{wxDocChildFrame}}
+
+\func{}{\destruct{wxDocChildFrame}}{\void}
+
+Destructor.
+
+\membersection{wxDocChildFrame::GetDocument}
+
+\constfunc{wxDocument*}{GetDocument}{\void}
+
+Returns the document associated with this frame.
+
+\membersection{wxDocChildFrame::GetView}
+
+\constfunc{wxView*}{GetView}{\void}
+
+Returns the view associated with this frame.
+
+\membersection{wxDocChildFrame::OnActivate}
+
+\func{void}{OnActivate}{\param{bool}{ active}}
+
+Sets the currently active view to be the frame's view. You may need
+to override (but still call) this function in order to set the keyboard
+focus for your subwindow.
+
+\membersection{wxDocChildFrame::OnClose}
+
+\func{virtual bool}{OnClose}{\void}
+
+Closes and deletes the current view and document.
+
+\membersection{wxDocChildFrame::SetDocument}
+
+\func{void}{SetDocument}{\param{wxDocument *}{doc}}
+
+Sets the document for this frame.
+
+\membersection{wxDocChildFrame::SetView}
+
+\func{void}{SetView}{\param{wxView *}{view}}
+
+Sets the view for this frame.
+
+
--- /dev/null
+\section{\class{wxDocManager}}\label{wxdocmanager}
+
+The wxDocManager class is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocument}{wxdocument}\rtfsp
+and \helpref{wxDocTemplate}{wxdoctemplate} classes.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDocManager overview}{wxdocmanageroverview}, \helpref{wxDocument}{wxdocument},\rtfsp
+\helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDocManager::m\_currentView}
+
+\member{wxView*}{m\_currentView}
+
+The currently active view.
+
+\membersection{wxDocManager::m\_defaultDocumentNameCounter}
+
+\member{int}{m\_defaultDocumentNameCounter}
+
+Stores the integer to be used for the next default document name.
+
+\membersection{wxDocManager::m\_fileHistory}
+
+\member{wxFileHistory*}{m\_fileHistory}
+
+A pointer to an instance of \helpref{wxFileHistory}{wxfilehistory},
+which manages the history of recently-visited files on the File menu.
+
+\membersection{wxDocManager::m\_maxDocsOpen}
+
+\member{int}{m\_maxDocsOpen}
+
+Stores the maximum number of documents that can be opened before
+existing documents are closed. By default, this is 10,000.
+
+\membersection{wxDocManager::m\_docs}
+
+\member{wxList}{m\_docs}
+
+A list of all documents.
+
+\membersection{wxDocManager::m\_flags}
+
+\member{long}{m\_flags}
+
+Stores the flags passed to the constructor.
+
+\membersection{wxDocManager::m\_templates}
+
+\member{wxList}{mnTemplates}
+
+A list of all document templates.
+
+\membersection{wxDocManager::wxDocManager}
+
+\func{void}{wxDocManager}{\param{long}{ flags = wxDEFAULT\_DOCMAN\_FLAGS}, \param{bool}{ initialize = TRUE}}
+
+Constructor. Create a document manager instance dynamically near the start of your application
+before doing any document or view operations.
+
+{\it flags} is currently unused.
+
+If {\it initialize} is TRUE, the \helpref{Initialize}{wxdocmanagerinitialize} function will be called
+to create a default history list object. If you derive from wxDocManager, you may wish to call the
+base constructor with FALSE, and then call Initialize in your own constructor, to allow
+your own Initialize or OnCreateFileHistory functions to be called.
+
+\membersection{wxDocManager::\destruct{wxDocManager}}
+
+\func{void}{\destruct{wxDocManager}}{\void}
+
+Destructor.
+
+\membersection{wxDocManager::ActivateView}
+
+\func{void}{ActivateView}{\param{wxView* }{doc}, \param{bool}{ activate}, \param{bool}{ deleting}}
+
+Sets the current view.
+
+\membersection{wxDocManager::AddDocument}
+
+\func{void}{AddDocument}{\param{wxDocument *}{doc}}
+
+Adds the document to the list of documents.
+
+\membersection{wxDocManager::AddFileToHistory}
+
+\func{void}{AddFileToHistory}{\param{const wxString\& }{filename}}
+
+Adds a file to the file history list, if we have a pointer to an appropriate file menu.
+
+\membersection{wxDocManager::AssociateTemplate}
+
+\func{void}{AssociateTemplate}{\param{wxDocTemplate *}{temp}}
+
+Adds the template to the document manager's template list.
+
+\membersection{wxDocManager::CreateDocument}
+
+\func{wxDocument*}{CreateDocument}{\param{const wxString\& }{path}, \param{long}{ flags}}
+
+Creates a new document in a manner determined by the {\it flags} parameter, which can be:
+
+\begin{itemize}\itemsep=0pt
+\item wxDOC\_NEW Creates a fresh document.
+\item wxDOC\_SILENT Silently loads the given document file.
+\end{itemize}
+
+If wxDOC\_NEW is present, a new document will be created and returned, possibly after
+asking the user for a template to use if there is more than one document template.
+If wxDOC\_SILENT is present, a new document will be created and the given file loaded
+into it. If neither of these flags is present, the user will be presented with
+a file selector for the file to load, and the template to use will be determined by the
+extension (Windows) or by popping up a template choice list (other platforms).
+
+If the maximum number of documents has been reached, this function
+will delete the oldest currently loaded document before creating a new one.
+
+\membersection{wxDocManager::CreateView}
+
+\func{wxView*}{CreateView}{\param{wxDocument*}{doc}, \param{long}{ flags}}
+
+Creates a new view for the given document. If more than one view is allowed for the
+document (by virtue of multiple templates mentioning the same document type), a choice
+of view is presented to the user.
+
+\membersection{wxDocManager::DisassociateTemplate}
+
+\func{void}{DisassociateTemplate}{\param{wxDocTemplate *}{temp}}
+
+Removes the template from the list of templates.
+
+\membersection{wxDocManager::FileHistoryLoad}
+
+\func{void}{FileHistoryLoad}{\param{const wxString\& }{resourceFile}, \param{const wxString\& }{sectionName}}
+
+Loads the file history from a resource file, using the given section. This must be called
+explicitly by the application.
+
+\membersection{wxDocManager::FileHistorySave}
+
+\func{void}{FileHistorySave}{\param{const wxString\& }{resourceFile}, \param{const wxString\& }{sectionName}}
+
+Saves the file history into a resource file, using the given section. This must be called
+explicitly by the application.
+
+\membersection{wxDocManager::FileHistoryUseMenu}
+
+\func{void}{FileHistoryUseMenu}{\param{wxMenu *}{menu}}
+
+Use this menu for appending recently-visited document filenames, for convenient
+access. Calling this function with a valid menu pointer enables the history
+list functionality.
+
+\membersection{wxDocManager::FindTemplateForPath}
+
+\func{wxDocTemplate *}{FindTemplateForPath}{\param{const wxString\& }{path}}
+
+Given a path, try to find template that matches the extension. This is only
+an approximate method of finding a template for creating a document.
+
+\membersection{wxDocManager::GetCurrentDocument}
+
+\func{wxDocument *}{GetCurrentDocument}{\void}
+
+Returns the document associated with the currently active view (if any).
+
+\membersection{wxDocManager::GetCurrentView}
+
+\func{wxView *}{GetCurrentView}{\void}
+
+Returns the currently active view
+
+\membersection{wxDocManager::GetDocuments}
+
+\func{wxList\&}{GetDocuments}{\void}
+
+Returns a reference to the list of documents.
+
+\membersection{wxDocManager::GetFileHistory}
+
+\func{wxFileHistory *}{GetFileHistory}{\void}
+
+Returns a pointer to file history.
+
+\membersection{wxDocManager::GetMaxDocsOpen}
+
+\func{int}{GetMaxDocsOpen}{\void}
+
+Returns the number of documents that can be open simultaneously.
+
+\membersection{wxDocManager::GetNoHistoryFiles}
+
+\func{int}{GetNoHistoryFiles}{\void}
+
+Returns the number of files currently stored in the file history.
+
+\membersection{wxDocManager::Initialize}\label{wxdocmanagerinitialize}
+
+\func{bool}{Initialize}{\void}
+
+Initializes data; currently just calls OnCreateFileHistory. Some data cannot
+always be initialized in the constructor because the programmer must be given
+the opportunity to override functionality. If OnCreateFileHistory was called
+from the constructor, an overridden virtual OnCreateFileHistory would not be
+called due to C++'s `interesting' constructor semantics. In fact Initialize
+\rtfsp{\it is} called from the wxDocManager constructor, but this can be
+vetoed by passing FALSE to the second argument, allowing the derived class's
+constructor to call Initialize, possibly calling a different OnCreateFileHistory
+from the default.
+
+The bottom line: if you're not deriving from Initialize, forget it and
+construct wxDocManager with no arguments.
+
+\membersection{wxDocManager::MakeDefaultName}
+
+\func{bool}{MakeDefaultName}{\param{const wxString\& }{buf}}
+
+Copies a suitable default name into {\it buf}. This is implemented by
+appending an integer counter to the string {\bf unnamed} and incrementing
+the counter.
+
+\membersection{wxDocManager::OnCreateFileHistory}
+
+\func{wxFileHistory *}{OnCreateFileHistory}{\void}
+
+A hook to allow a derived class to create a different type of file history. Called
+from \helpref{Initialize}{wxdocmanagerinitialize}.
+
+\membersection{wxDocManager::OnFileClose}
+
+\func{void}{OnFileClose}{\void}
+
+Closes and deletes the currently active document.
+
+\membersection{wxDocManager::OnFileNew}
+
+\func{void}{OnFileNew}{\void}
+
+Creates a document from a list of templates (if more than one template).
+
+\membersection{wxDocManager::OnFileOpen}
+
+\func{void}{OnFileOpen}{\void}
+
+Creates a new document and reads in the selected file.
+
+\membersection{wxDocManager::OnFileSave}
+
+\func{void}{OnFileSave}{\void}
+
+Saves the current document by calling wxDocument::Save for the current document.
+
+\membersection{wxDocManager::OnFileSaveAs}
+
+\func{void}{OnFileSaveAs}{\void}
+
+Calls wxDocument::SaveAs for the current document.
+
+\membersection{wxDocManager::OnMenuCommand}
+
+\func{void}{OnMenuCommand}{\param{int}{ cmd}}
+
+Processes menu commands routed from child or parent frames. This deals
+with the following predefined menu item identifiers:
+
+\begin{itemize}\itemsep=0pt
+\item wxID\_OPEN Creates a new document and opens a file into it.
+\item wxID\_CLOSE Closes the current document.
+\item wxID\_NEW Creates a new document.
+\item wxID\_SAVE Saves the document.
+\item wxID\_SAVE\_AS Saves the document into a specified filename.
+\end{itemize}
+
+Unrecognized commands are routed to the currently active wxView's OnMenuCommand.
+
+\membersection{wxDocManager::RemoveDocument}
+
+\func{void}{RemoveDocument}{\param{wxDocument *}{doc}}
+
+Removes the document from the list of documents.
+
+\membersection{wxDocManager::SelectDocumentPath}
+
+\func{wxDocTemplate *}{SelectDocumentPath}{\param{wxDocTemplate **}{templates},
+ \param{int}{ noTemplates}, \param{const wxString\& }{path}, \param{const wxString\& }{bufSize},
+ \param{long}{ flags}, \param{bool}{ save}}
+
+Under Windows, pops up a file selector with a list of filters corresponding to document templates.
+The wxDocTemplate corresponding to the selected file's extension is returned.
+
+On other platforms, if there is more than one document template a choice list is popped up,
+followed by a file selector.
+
+This function is used in wxDocManager::CreateDocument.
+
+\membersection{wxDocManager::SelectDocumentType}
+
+\func{wxDocTemplate *}{SelectDocumentType}{\param{wxDocTemplate **}{templates},
+ \param{int}{ noTemplates}}
+
+Returns a document template by asking the user (if there is more than one template).
+This function is used in wxDocManager::CreateDocument.
+
+\membersection{wxDocManager::SelectViewType}
+
+\func{wxDocTemplate *}{SelectViewType}{\param{wxDocTemplate **}{templates},
+ \param{int}{ noTemplates}}
+
+Returns a document template by asking the user (if there is more than one template),
+displaying a list of valid views. This function is used in wxDocManager::CreateView.
+The dialog normally won't appear because the array of templates only contains
+those relevant to the document in question, and often there will only be one such.
+
+\membersection{wxDocManager::SetMaxDocsOpen}
+
+\func{void}{SetMaxDocsOpen}{\param{int}{ n}}
+
+Sets the maximum number of documents that can be open at a time. By default, this
+is 10,000. If you set it to 1, existing documents will be saved and deleted
+when the user tries to open or create a new one (similar to the behaviour
+of Windows Write, for example). Allowing multiple documents gives behaviour
+more akin to MS Word and other Multiple Document Interface applications.
+
+
+
--- /dev/null
+\section{\class{wxDocParentFrame}}\label{wxdocparentframe}
+
+The wxDocParentFrame class provides a default top-level frame for
+applications using the document/view framework. This class can only be used for SDI (not MDI) parent frames.
+
+It cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocument}{wxdocument},
+\rtfsp\helpref{wxDocManager}{wxdocmanager} and \helpref{wxDocTemplates}{wxdoctemplate} classes.
+
+See the example application in {\tt samples/docview}.
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Document/view overview}{docviewoverview}, \helpref{wxFrame}{wxframe}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDocParentFrame::wxDocParentFrame}
+
+\func{}{wxDocParentFrame}{\param{wxFrame *}{parent},
+ \param{const wxString\& }{title}, \param{int}{ x}, \param{int}{ y}, \param{int}{ width}, \param{int}{ height},
+ \param{long}{ style}, \param{const wxString\& }{name}}
+
+Constructor.
+
+\membersection{wxDocParentFrame::\destruct{wxDocParentFrame}}
+
+\func{}{\destruct{wxDocParentFrame}}{\void}
+
+Destructor.
+
+\membersection{wxDocParentFrame::OnClose}
+
+\func{bool}{OnClose}{\void}
+
+Deletes all views and documents. If no user input cancelled the
+operation, the function returns TRUE and the application will exit.
+
+Since understanding how document/view clean-up takes place can be difficult,
+the implementation of this function is shown below.
+
+\begin{verbatim}
+bool wxDocParentFrame::OnClose(void)
+{
+ // Delete all views and documents
+ wxNode *node = docManager->GetDocuments().First();
+ while (node)
+ {
+ wxDocument *doc = (wxDocument *)node->Data();
+ wxNode *next = node->Next();
+
+ if (!doc->Close())
+ return FALSE;
+
+ // Implicitly deletes the document when the last
+ // view is removed (deleted)
+ doc->DeleteAllViews();
+
+ // Check document is deleted
+ if (docManager->GetDocuments().Member(doc))
+ delete doc;
+
+ // This assumes that documents are not connected in
+ // any way, i.e. deleting one document does NOT
+ // delete another.
+ node = next;
+ }
+ return TRUE;
+}
+\end{verbatim}
+
+
--- /dev/null
+\section{\class{wxDocTemplate}}\label{wxdoctemplate}
+
+The wxDocTemplate class is used to model the relationship between a
+document class and a view class.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDocTemplate overview}{wxdoctemplateoverview}, \helpref{wxDocument}{wxdocument}, \helpref{wxView}{wxview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDocTemplate::m\_defaultExt}
+
+\member{wxString}{m\_defaultExt}
+
+The default extension for files of this type.
+
+\membersection{wxDocTemplate::m\_description}
+
+\member{wxString}{m\_description}
+
+A short description of this template.
+
+\membersection{wxDocTemplate::m\_directory}
+
+\member{wxString}{m\_directory}
+
+The default directory for files of this type.
+
+\membersection{wxDocTemplate::m\_docClassInfo}
+
+\member{wxClassInfo* }{m\_docClassInfo}
+
+Run-time class information that allows document instances to be constructed dynamically.
+
+\membersection{wxDocTemplate::m\_docTypeName}
+
+\member{wxString}{m\_docTypeName}
+
+The named type of the document associated with this template.
+
+\membersection{wxDocTemplate::m\_documentManager}
+
+\member{wxDocTemplate*}{m\_documentManager}
+
+A pointer to the document manager for which this template was created.
+
+\membersection{wxDocTemplate::m\_fileFilter}
+
+\member{wxString}{m\_fileFilter}
+
+The file filter (such as \verb$*.txt$) to be used in file selector dialogs.
+
+\membersection{wxDocTemplate::m\_flags}
+
+\member{long}{m\_flags}
+
+The flags passed to the constructor.
+
+\membersection{wxDocTemplate::m\_viewClassInfo}
+
+\member{wxClassInfo*}{m\_viewClassInfo}
+
+Run-time class information that allows view instances to be constructed dynamically.
+
+\membersection{wxDocTemplate::m\_viewTypeName}
+
+\member{wxString}{m\_viewTypeName}
+
+The named type of the view associated with this template.
+
+\membersection{wxDocTemplate::wxDocTemplate}
+
+\func{}{wxDocTemplate}{\param{wxDocManager* }{manager}, \param{const wxString\& }{descr}, \param{const wxString\& }{filter},
+ \param{const wxString\& }{dir}, \param{const wxString\& }{ext}, \param{const wxString\& }{docTypeName},
+ \param{const wxString\& }{viewTypeName}, \param{wxClassInfo* }{docClassInfo = NULL},
+ \param{wxClassInfo* }{viewClassInfo = NULL}, \param{long}{ flags = wxDEFAULT\_TEMPLATE\_FLAGS}}
+
+Constructor. Create instances dynamically near the start of your application after creating
+a wxDocManager instance, and before doing any document or view operations.
+
+{\it manager} is the document manager object which manages this template.
+
+{\it descr} is a short description of what the template is for. This string will be displayed in the
+file filter list of Windows file selectors.
+
+{\it filter} is an appropriate file filter such as \verb$*.txt$.
+
+{\it dir} is the default directory to use for file selectors.
+
+{\it ext} is the default file extension (such as txt).
+
+{\it docTypeName} is a name that should be unique for a given type of document, used for
+gathering a list of views relevant to a particular document.
+
+{\it viewTypeName} is a name that should be unique for a given view.
+
+{\it docClassInfo} is a pointer to the run-time document class information as returned
+by the CLASSINFO macro, e.g. CLASSINFO(MyDocumentClass). If this is not supplied,
+you will need to derive a new wxDocTemplate class and override the CreateDocument
+member to return a new document instance on demand.
+
+{\it viewClassInfo} is a pointer to the run-time view class information as returned
+by the CLASSINFO macro, e.g. CLASSINFO(MyViewClass). If this is not supplied,
+you will need to derive a new wxDocTemplate class and override the CreateView
+member to return a new view instance on demand.
+
+{\it flags} is a bit list of the following:
+
+\begin{itemize}\itemsep=0pt
+\item wxTEMPLATE\_VISIBLE The template may be displayed to the user in dialogs.
+\item wxTEMPLATE\_INVISIBLE The template may not be displayed to the user in dialogs.
+\item wxDEFAULT\_TEMPLATE\_FLAGS Defined as wxTEMPLATE\_VISIBLE.
+\end{itemize}
+
+\membersection{wxDocTemplate::\destruct{wxDocTemplate}}
+
+\func{void}{\destruct{wxDocTemplate}}{\void}
+
+Destructor.
+
+\membersection{wxDocTemplate::CreateDocument}
+
+\func{wxDocument *}{CreateDocument}{\param{const wxString\& }{path}, \param{long}{ flags = 0}}
+
+Creates a new instance of the associated document class. If you have not supplied
+a wxClassInfo parameter to the template constructor, you will need to override this
+function to return an appropriate document instance.
+
+\membersection{wxDocTemplate::CreateView}
+
+\func{wxView *}{CreateView}{\param{wxDocument *}{doc}, \param{long}{ flags = 0}}
+
+Creates a new instance of the associated view class. If you have not supplied
+a wxClassInfo parameter to the template constructor, you will need to override this
+function to return an appropriate view instance.
+
+\membersection{wxDocTemplate::GetDefaultExtension}
+
+\func{wxString}{GetDefaultExtension}{\void}
+
+Returns the default file extension for the document data, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetDescription}
+
+\func{wxString}{GetDescription}{\void}
+
+Returns the text description of this template, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetDirectory}
+
+\func{wxString}{GetDirectory}{\void}
+
+Returns the default directory, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetDocumentManager}
+
+\func{wxDocManager *}{GetDocumentManager}{\void}
+
+Returns a pointer to the document manager instance for which this template was created.
+
+\membersection{wxDocTemplate::GetDocumentName}
+
+\func{wxString}{GetDocumentName}{\void}
+
+Returns the document type name, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetFileFilter}
+
+\func{wxString}{GetFileFilter}{\void}
+
+Returns the file filter, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetFlags}
+
+\func{long}{GetFlags}{\void}
+
+Returns the flags, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::GetViewName}
+
+\func{wxString}{GetViewName}{\void}
+
+Returns the view type name, as passed to the document template constructor.
+
+\membersection{wxDocTemplate::IsVisible}
+
+\func{bool}{IsVisible}{\void}
+
+Returns TRUE if the document template can be shown in user dialogs, FALSE otherwise.
+
+\membersection{wxDocTemplate::SetDefaultExtension}
+
+\func{void}{SetDefaultExtension}{\param{const wxString\& }{ext}}
+
+Sets the default file extension.
+
+\membersection{wxDocTemplate::SetDescription}
+
+\func{void}{SetDescription}{\param{const wxString\& }{descr}}
+
+Sets the template description.
+
+\membersection{wxDocTemplate::SetDirectory}
+
+\func{void}{SetDirectory}{\param{const wxString\& }{dir}}
+
+Sets the default directory.
+
+\membersection{wxDocTemplate::SetDocumentManager}
+
+\func{void}{SetDocumentManager}{\param{wxDocManager *}{manager}}
+
+Sets the pointer to the document manager instance for which this template was created.
+Should not be called by the application.
+
+\membersection{wxDocTemplate::SetFileFilter}
+
+\func{void}{SetFileFilter}{\param{const wxString\& }{filter}}
+
+Sets the file filter.
+
+\membersection{wxDocTemplate::SetFlags}
+
+\func{void}{SetFlags}{\param{long }{flags}}
+
+Sets the internal document template flags (see the constructor description for more details).
+
+
--- /dev/null
+\section{\class{wxDocument}}\label{wxdocument}
+
+The document class can be used to model an application's file-based
+data. It is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate}\rtfsp
+and \helpref{wxDocManager}{wxdocmanager} classes.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDocument overview}{wxdocumentoverview}, \helpref{wxView}{wxview},\rtfsp
+\helpref{wxDocTemplate}{wxdoctemplate}, \helpref{wxDocManager}{wxdocmanager}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDocument::m\_commandProcessor}
+
+\member{wxCommandProcessor*}{m\_commandProcessor}
+
+A pointer to the command processor associated with this document.
+
+\membersection{wxDocument::m\_documentFile}
+
+\member{wxString}{m\_documentFile}
+
+Filename associated with this document (``" if none).
+
+\membersection{wxDocument::m\_documentModified}
+
+\member{bool}{m\_documentModified}
+
+TRUE if the document has been modified, FALSE otherwise.
+
+\membersection{wxDocument::m\_documentTemplate}
+
+\member{wxDocTemplate *}{m\_documentTemplate}
+
+A pointer to the template from which this document was created.
+
+\membersection{wxDocument::m\_documentTitle}
+
+\member{wxString}{m\_documentTitle}
+
+Document title. The document title is used for an associated
+frame (if any), and is usually constructed by the framework from
+the filename.
+
+\membersection{wxDocument::m\_documentTypeName}\label{documenttypename}
+
+\member{wxString}{m\_documentTypeName}
+
+The document type name given to the wxDocTemplate constructor, copied to this
+variable when the document is created. If several document templates are
+created that use the same document type, this variable is used in wxDocManager::CreateView
+to collate a list of alternative view types that can be used on this kind of
+document. Do not change the value of this variable.
+
+\membersection{wxDocument::m\_documentViews}
+
+\member{wxList}{m\_documentViews}
+
+List of wxView instances associated with this document.
+
+\membersection{wxDocument::wxDocument}
+
+\func{}{wxDocument}{\void}
+
+Constructor. Define your own default constructor to initialize application-specific
+data.
+
+\membersection{wxDocument::\destruct{wxDocument}}
+
+\func{}{\destruct{wxDocument}}{\void}
+
+Destructor. Removes itself from the document manager.
+
+\membersection{wxDocument::AddView}
+
+\func{virtual bool}{AddView}{\param{wxView *}{view}}
+
+If the view is not already in the list of views, adds the view and calls OnChangedViewList.
+
+\membersection{wxDocument::Close}
+
+\func{virtual bool}{Close}{\void}
+
+Closes the document, by calling OnSaveModified and then (if this returned TRUE) OnCloseDocument.
+This does not normally delete the document object: use DeleteAllViews to do this implicitly.
+
+\membersection{wxDocument::DeleteAllViews}
+
+\func{virtual bool}{DeleteAllViews}{\void}
+
+Calls wxView::Close and deletes each view. Deleting the final view will implicitly
+delete the document itself, because the wxView destructor calls RemoveView. This
+in turns calls wxDocument::OnChangedViewList, whose default implemention is to
+save and delete the document if no views exist.
+
+\membersection{wxDocument::GetCommandProcessor}
+
+\constfunc{wxCommandProcessor*}{GetCommandProcessor}{\void}
+
+Returns a pointer to the command processor associated with this document.
+
+See \helpref{wxCommandProcessor}{wxcommandprocessor}.
+
+\membersection{wxDocument::GetDocumentTemplate}
+
+\constfunc{wxDocTemplate*}{GetDocumentTemplate}{\void}
+
+Gets a pointer to the template that created the document.
+
+\membersection{wxDocument::GetDocumentManager}
+
+\constfunc{wxDocManager*}{GetDocumentManager}{\void}
+
+Gets a pointer to the associated document manager.
+
+\membersection{wxDocument::GetDocumentName}
+
+\constfunc{wxString}{GetDocumentName}{\void}
+
+Gets the document type name for this document. See the comment for \helpref{documentTypeName}{documenttypename}.
+
+\membersection{wxDocument::GetDocumentWindow}
+
+\constfunc{wxWindow*}{GetDocumentWindow}{\void}
+
+Intended to return a suitable window for using as a parent for document-related
+dialog boxes. By default, uses the frame associated with the first view.
+
+\membersection{wxDocument::GetFilename}
+
+\constfunc{wxString}{GetFilename}{\void}
+
+Gets the filename associated with this document, or NULL if none is
+associated.
+
+\membersection{wxDocument::GetFirstView}
+
+\constfunc{wxView*}{GetFirstView}{\void}
+
+A convenience function to get the first view for a document, because
+in many cases a document will only have a single view.
+
+\membersection{wxDocument::GetPrintableName}
+
+\constfunc{virtual void}{GetPrintableName}{\param{wxString\& }{name}}
+
+Copies a suitable document name into the supplied {\it name} buffer. The default
+function uses the title, or if there is no title, uses the filename; or if no
+filename, the string {\bf unnamed}.
+
+\membersection{wxDocument::GetTitle}
+
+\constfunc{wxString}{GetTitle}{\void}
+
+Gets the title for this document. The document title is used for an associated
+frame (if any), and is usually constructed by the framework from
+the filename.
+
+\membersection{wxDocument::IsModified}\label{wxdocumentismodified}
+
+\constfunc{virtual bool}{IsModified}{\void}
+
+Returns TRUE if the document has been modified since the last save, FALSE otherwise.
+You may need to override this if your document view maintains its own
+record of being modified (for example if using wxTextWindow to view and edit the document).
+
+See also \helpref{Modify}{wxdocumentmodify}.
+
+\membersection{wxDocument::LoadObject}
+
+\func{virtual istream\&}{LoadObject}{\param{istream\& }{stream}}
+
+Override this function and call it from your own LoadObject before
+streaming your own data. LoadObject is called by the framework
+automatically when the document contents need to be loaded.
+
+\membersection{wxDocument::Modify}\label{wxdocumentmodify}
+
+\func{virtual void}{Modify}{\param{bool}{ modify}}
+
+Call with TRUE to mark the document as modified since the last save, FALSE otherwise.
+You may need to override this if your document view maintains its own
+record of being modified (for example if using wxTextWindow to view and edit the document).
+
+See also \helpref{IsModified}{wxdocumentismodified}.
+
+\membersection{wxDocument::OnChangedViewList}
+
+\func{virtual void}{OnChangedViewList}{\void}
+
+Called when a view is added to or deleted from this document. The default
+implementation saves and deletes the document if no views exist (the last
+one has just been removed).
+
+\membersection{wxDocument::OnCloseDocument}
+
+\func{virtual bool}{OnCloseDocument}{\void}
+
+The default implementation calls DeleteContents (an empty implementation)
+sets the modified flag to FALSE. Override this to
+supply additional behaviour when the document is closed with Close.
+
+\membersection{wxDocument::OnCreate}
+
+\func{virtual bool}{OnCreate}{\param{const wxString\& }{path}, \param{long}{ flags}}
+
+Called just after the document object is created to give it a chance
+to initialize itself. The default implementation uses the
+template associated with the document to create an initial view.
+If this function returns FALSE, the document is deleted.
+
+\membersection{wxDocument::OnCreateCommandProcessor}
+
+\func{virtual wxCommandProcessor*}{OnCreateCommandProcessor}{\void}
+
+Override this function if you want a different (or no) command processor
+to be created when the document is created. By default, it returns
+an instance of wxCommandProcessor.
+
+See \helpref{wxCommandProcessor}{wxcommandprocessor}.
+
+\membersection{wxDocument::OnNewDocument}
+
+\func{virtual bool}{OnNewDocument}{\void}
+
+The default implementation calls OnSaveModified and DeleteContents, makes a default title for the
+document, and notifies the views that the filename (in fact, the title) has changed.
+
+\membersection{wxDocument::OnOpenDocument}
+
+\func{virtual bool}{OnOpenDocument}{\param{const wxString\& }{filename}}
+
+Constructs an input file stream for the given filename (which must not be NULL),
+and calls LoadObject. If LoadObject returns TRUE, the document is set to
+unmodified; otherwise, an error message box is displayed. The document's
+views are notified that the filename has changed, to give windows an opportunity
+to update their titles. All of the document's views are then updated.
+
+\membersection{wxDocument::OnSaveDocument}
+
+\func{virtual bool}{OnSaveDocument}{\param{const wxString\& }{filename}}
+
+Constructs an output file stream for the given filename (which must not be NULL),
+and calls SaveObject. If SaveObject returns TRUE, the document is set to
+unmodified; otherwise, an error message box is displayed.
+
+\membersection{wxDocument::OnSaveModified}
+
+\func{virtual bool}{OnSaveModified}{\void}
+
+If the document has been modified, prompts the user to ask if the changes should
+be changed. If the user replies Yes, the Save function is called. If No, the
+document is marked as unmodified and the function succeeds. If Cancel, the
+function fails.
+
+\membersection{wxDocument::RemoveView}
+
+\func{virtual bool}{RemoveView}{\param{wxView* }{view}}
+
+Removes the view from the document's list of views, and calls OnChangedViewList.
+
+\membersection{wxDocument::Save}
+
+\func{virtual bool}{Save}{\void}
+
+Saves the document by calling OnSaveDocument if there is an associated filename,
+or SaveAs if there is no filename.
+
+\membersection{wxDocument::SaveAs}
+
+\func{virtual bool}{SaveAs}{\void}
+
+Prompts the user for a file to save to, and then calls OnSaveDocument.
+
+\membersection{wxDocument::SaveObject}
+
+\func{virtual ostream\&}{SaveObject}{\param{ostream\& }{stream}}
+
+Override this function and call it from your own SaveObject before
+streaming your own data. SaveObject is called by the framework
+automatically when the document contents need to be saved.
+
+\membersection{wxDocument::SetCommandProcessor}
+
+\func{virtual void}{SetCommandProcessor}{\param{wxCommandProcessor *}{processor}}
+
+Sets the command processor to be used for this document. The document will then be responsible
+for its deletion. Normally you should not call this; override OnCreateCommandProcessor
+instead.
+
+See \helpref{wxCommandProcessor}{wxcommandprocessor}.
+
+\membersection{wxDocument::SetDocumentName}
+
+\func{void}{SetDocumentName}{\param{const wxString\& }{name}}
+
+Sets the document type name for this document. See the comment for \helpref{documentTypeName}{documenttypename}.
+
+\membersection{wxDocument::SetDocumentTemplate}
+
+\func{void}{SetDocumentTemplate}{\param{wxDocTemplate* }{templ}}
+
+Sets the pointer to the template that created the document. Should only be called by the
+framework.
+
+\membersection{wxDocument::SetFilename}
+
+\func{void}{SetFilename}{\param{const wxString\& }{filename}}
+
+Sets the filename for this document. Usually called by the framework.
+
+\membersection{wxDocument::SetTitle}
+
+\func{void}{SetTitle}{\param{const wxString\& }{title}}
+
+Sets the title for this document. The document title is used for an associated
+frame (if any), and is usually constructed by the framework from
+the filename.
+
+
--- /dev/null
+\section{\class{wxDropFilesEvent}}\label{wxdropfilesevent}
+
+This class is used for drop files events, that is, when files have been dropped
+onto the window. This functionality is currently only available under Windows.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a drop files event, use these event handler macros to direct input to a member
+function that takes a wxDropFilesEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_DROP\_FILES(func)}}{Process a wxEVT\_DROP\_FILES event.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnDropFiles}{wxwindowondropfiles}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxDropFilesEvent::wxDropFilesEvent}
+
+\func{}{wxDropFilesEvent}{\param{WXTYPE }{id = 0}, \param{int }{noFiles = 0},\rtfsp
+\param{wxString* }{files = NULL}}
+
+Constructor.
+
+\membersection{wxDropFilesEvent::m\_files}
+
+\member{wxString*}{m\_files}
+
+An array of filenames.
+
+\membersection{wxDropFilesEvent::m\_noFiles}
+
+\member{int}{m\_noFiles}
+
+The number of files dropped.
+
+\membersection{wxDropFilesEvent::m\_pos}
+
+\member{wxPoint}{m\_pos}
+
+The point at which the drop took place.
+
+\membersection{wxDropFilesEvent::GetFiles}\label{wxdropfileseventgetfiles}
+
+\constfunc{wxString*}{GetFiles}{\void}
+
+Returns an array of filenames.
+
+\membersection{wxDropFilesEvent::GetNumberOfFiles}\label{wxdropfileseventgetnumberoffiles}
+
+\constfunc{int}{GetNumberOfFiles}{\void}
+
+Returns the number of files dropped.
+
+\membersection{wxDropFilesEvent::GetPosition}\label{wxdropfileseventgetposition}
+
+\constfunc{wxPoint}{GetPosition}{\void}
+
+Returns the position at which the files were dropped.
+
+Returns an array of filenames.
+
+
--- /dev/null
+\section{\class{wxEraseEvent}}\label{wxeraseevent}
+
+An erase event is sent when a window's background needs to be repainted.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process an erase event, use this event handler macro to direct input to a member
+function that takes a wxEraseEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_ERASE(func)}}{Process a wxEVT\_ERASE\_BACKGROUND event.}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+If the {\bf m\_DC} member is non-NULL, draw into this device context.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnEraseBackground}{wxwindowonerasebackground}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxEraseEvent::wxEraseEvent}
+
+\func{}{wxEraseEvent}{\param{int }{id = 0}, \param{wxDC* }{dc = NULL}}
+
+Constructor.
+
+\membersection{wxEraseEvent::m\_dc}
+
+\member{wxDC*}{m\_dc}
+
+The device context associated with the erase event (may be NULL).
+
+\membersection{wxEraseEvent::GetDC}\label{wxeraseeventgetdc}
+
+\constfunc{wxDC*}{GetDC}{\void}
+
+Returns the device context to draw into. If this is non-NULL, you should draw
+into it to perform the erase operation.
+
--- /dev/null
+\section{\class{wxEvent}}\label{wxevent}
+
+An event is a structure holding information about an event passed to a
+callback or member function. {\bf wxEvent} used to be a multipurpose
+event object, and is an abstract base class for other event classes (see below).
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxCommandEvent}{wxcommandevent},\rtfsp
+\helpref{wxMouseEvent}{wxmouseevent}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxEvent::wxEvent}
+
+\func{}{wxEvent}{\param{int }{id = 0}}
+
+Constructor. Should not need to be used directly by an application.
+
+\membersection{wxEvent::m\_eventHandle}
+
+\member{char*}{m\_eventHandle}
+
+Handle of an underlying windowing system event handle, such as
+XEvent. Not guaranteed to be instantiated.
+
+\membersection{wxEvent::m\_eventObject}
+
+\member{wxObject*}{m\_eventObject}
+
+The object (usually a window) that the event was generated from,
+or should be sent to.
+
+\membersection{wxEvent::m\_eventType}
+
+\member{WXTYPE}{m\_eventType}
+
+The type of the event, such as wxEVENT\_TYPE\_BUTTON\_COMMAND.
+
+\membersection{wxEvent::m\_id}
+
+\member{int}{m\_id}
+
+Identifier for the window.
+
+\membersection{wxEvent::m\_skipped}
+
+\member{bool}{m\_skipped}
+
+Set to TRUE by {\bf Skip} if this event should be skipped.
+
+\membersection{wxEvent::m\_timeStamp}
+
+\member{long}{m\_timeStamp}
+
+Timestamp for this event.
+
+\membersection{wxEvent::GetEventClass}
+
+\func{WXTYPE}{GetEventClass}{\void}
+
+Returns the identifier of the given event class,
+such as wxTYPE\_MOUSE\_EVENT.
+
+\membersection{wxEvent::GetEventObject}
+
+\func{wxObject*}{GetEventObject}{\void}
+
+Returns the object associated with the
+event, if any.
+
+\membersection{wxEvent::GetEventType}
+
+\func{WXTYPE}{GetEventType}{\void}
+
+Returns the identifier of the given event type,
+such as wxEVENT\_TYPE\_BUTTON\_COMMAND.
+
+\membersection{wxEvent::GetId}
+
+\func{int}{GetId}{\void}
+
+Returns the identifier associated with this event, such as a button command id.
+
+\membersection{wxEvent::GetObjectType}
+
+\func{WXTYPE}{GetObjectType}{\void}
+
+Returns the type of the object associated with the
+event, such as wxTYPE\_BUTTON.
+
+\membersection{wxEvent::GetSkipped}
+
+\func{bool}{GetSkipped}{\void}
+
+Returns TRUE if the event handler should be skipped, FALSE otherwise.
+
+\membersection{wxEvent::GetTimestamp}
+
+\func{long}{GetTimestamp}{\void}
+
+Gets the timestamp for the event.
+
+\membersection{wxEvent::SetEventObject}
+
+\func{void}{SetEventObject}{\param{wxObject* }{object}}
+
+Sets the originating object.
+
+\membersection{wxEvent::SetEventType}
+
+\func{void}{SetEventType}{\param{WXTYPE }{typ}}
+
+Sets the event type.
+
+\membersection{wxEvent::SetId}
+
+\func{void}{SetId}{\param{int}{ id}}
+
+Sets the identifier associated with this event, such as a button command id.
+
+\membersection{wxEvent::SetTimestamp}
+
+\func{void}{SetTimestamp}{\param{long }{timeStamp}}
+
+Sets the timestamp for the event.
+
+Sets the originating object.
+
+\membersection{wxEvent::Skip}\label{wxeventskip}
+
+\func{void}{Skip}{\param{bool}{ skip = TRUE}}
+
+Called by an event handler to tell the event system that the
+event handler should be skipped, and the next valid handler used
+instead.
+
--- /dev/null
+\section{\class{wxEvtHandler}}\label{wxevthandler}
+
+A class that can handle events from the windowing system.
+wxWindow (and therefore all window classes) are derived from
+this class.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxEvtHandler::wxEvtHandler}
+
+\func{}{wxEvtHandler}{\void}
+
+Constructor.
+
+\membersection{wxEvtHandler::\destruct{wxEvtHandler}}
+
+\func{}{\destruct{wxEvtHandler}}{\void}
+
+Destructor. If the handler is part of a chain, the destructor will
+unlink itself and restore the previous and next handlers so that they point to
+each other.
+
+\membersection{wxEvtHandler::Default}\label{wxevthandlerdefault}
+
+\func{virtual long}{Default}{\void}
+
+Invokes default processing if this event handler is a window.
+
+\wxheading{Return value}
+
+System dependent.
+
+\wxheading{Remarks}
+
+A generic way of delegating processing to the default system behaviour. It calls a platform-dependent
+default function, with parameters dependent on the event or message parameters
+originally sent from the windowing system.
+
+Normally the application should call a base member, such as \helpref{wxWindow::OnChar}{wxwindowonchar}, which itself
+may call {\bf Default}.
+
+\membersection{wxEvtHandler::GetClientData}\label{wxevthandlergetclientdata}
+
+\func{char* }{GetClientData}{\void}
+
+Gets user-supplied client data.
+
+\wxheading{Remarks}
+
+Normally, any extra data the programmer wishes to associate with the object
+should be made available by deriving a new class
+with new data members.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::SetClientData}{wxevthandlersetclientdata}
+
+\membersection{wxEvtHandler::GetEvtHandlerEnabled}\label{wxevthandlergetevthandlerenabled}
+
+\func{bool}{GetEvtHandlerEnabled}{\void}
+
+Returns TRUE if the event handler is enabled, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::SetEvtHandlerEnabled}{wxevthandlersetevthandlerenabled}
+
+\membersection{wxEvtHandler::GetNextHandler}\label{wxevthandlergetnexthandler}
+
+\func{wxEvtHandler*}{GetNextHandler}{\void}
+
+Gets the pointer to the next handler in the chain.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetPreviousHandler}{wxevthandlergetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::SetPreviousHandler}{wxevthandlersetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::SetNextHandler}{wxevthandlersetnexthandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpopeventhandler}
+
+\membersection{wxEvtHandler::GetPreviousHandler}\label{wxevthandlergetprevioushandler}
+
+\func{wxEvtHandler*}{GetPreviousHandler}{\void}
+
+Gets the pointer to the previous handler in the chain.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetPreviousHandler}{wxevthandlergetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::SetPreviousHandler}{wxevthandlersetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::SetPreviousHandler}{wxevthandlersetprevioushandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpopeventhandler}
+
+\membersection{wxEvtHandler::ProcessEvent}\label{wxevthandlerprocessevent}
+
+\func{virtual bool}{ProcessEvent}{\param{wxEvent\& }{event}}
+
+Processes an event, searching event tables and calling zero or more suitable event handler function(s).
+
+\wxheading{Parameters}
+
+\docparam{event}{Event to process.}
+
+\wxheading{Return value}
+
+TRUE if a suitable event handler function was found and executed, and the function did not
+call \helpref{wxEvent::Skip}{wxeventskip}.
+
+\wxheading{Remarks}
+
+Normally, your application would not call this function: it is called in the wxWindows
+implementation to dispatch incoming user interface events to the framework (and application).
+
+However, you might need to call it if implementing new functionality (such as a new control) where
+you define new event types, as opposed to allowing the user to override virtual functions.
+
+An instance where you might actually override the {\bf ProcessEvent} function is where you want
+to direct event processing to event handlers not normally noticed by wxWindows. For example,
+in the document/view architecture, documents and views are potential event handlers.
+When an event reaches a frame, {\bf ProcessEvent} will need to be called on the associated
+document and view in case event handler functions are associated with these objects.
+The property classes library (wxProperty) also overrides {\bf ProcessEvent} for similar reasons.
+
+The normal order of event table searching is as follows:
+
+\begin{enumerate}\itemsep=0pt
+\item If the object is disabled (via a call to \helpref{wxEvtHandler::SetEvtHandlerEnabled}{wxevthandlersetevthandlerenabled})
+the function skips to step (6).
+\item If the object is a wxWindow, {\bf ProcessEvent} is recursively called on the window's\rtfsp
+\helpref{wxValidator}{wxvalidator}. If this returns TRUE, the function exits.
+\item {\bf SearchEventTable} is called for this event handler. If this fails, the base
+class table is tried, and so on until no more tables exist or an appropriate function was found,
+in which case the function exits.
+\item The search is applied down the entire chain of event handlers (usually the chain has a length
+of one). If this succeeds, the function exits.
+\item If the object is a wxWindow and the event is a wxCommandEvent, {\bf ProcessEvent} is
+recursively applied to the parent window's event handler. If this returns TRUE, the function exits.
+\item Finally, {\bf ProcessEvent} is called on the wxApp object.
+\end{enumerate}
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::SearchEventTable}{wxevthandlersearcheventtable}
+
+\membersection{wxEvtHandler::SearchEventTable}\label{wxevthandlersearcheventtable}
+
+\func{bool}{SearchEventTable}{\param{wxEventTable\& }{table}, \param{wxEvent\& }{event}}
+
+Searches the event table, executing an event handler function if an appropriate one
+is found.
+
+\wxheading{Parameters}
+
+\docparam{table}{Event table to be searched.}
+
+\docparam{event}{Event to be matched against an event table entry.}
+
+\wxheading{Return value}
+
+TRUE if a suitable event handler function was found and executed, and the function did not
+call \helpref{wxEvent::Skip}{wxeventskip}.
+
+\wxheading{Remarks}
+
+This function looks through the object's event table and tries to find an entry
+that will match the event.
+
+An entry will match if:
+
+\begin{enumerate}\itemsep=0pt
+\item The event type matches, and
+\item the identifier or identifier range matches, or the event table entry's identifier is zero.
+\end{enumerate}
+
+If a suitable function is called but calls \helpref{wxEvent::Skip}{wxeventskip}, this function will
+fail, and searching will continue.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent}
+
+\membersection{wxEvtHandler::SetClientData}\label{wxevthandlersetclientdata}
+
+\func{void}{SetClientData}{\param{char* }{data}}
+
+Sets user-supplied client data.
+
+\wxheading{Parameters}
+
+\docparam{data}{Data to be associated with the event handler.}
+
+\wxheading{Remarks}
+
+Normally, any extra data the programmer wishes
+to associate with the object should be made available by deriving a new class
+with new data members.
+
+TODO: make this void*, char* only in compatibility mode.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetClientData}{wxevthandlergetclientdata}
+
+\membersection{wxEvtHandler::SetEvtHandlerEnabled}\label{wxevthandlersetevthandlerenabled}
+
+\func{void}{SetEvtHandlerEnabled}{\param{bool }{enabled}}
+
+Enables or disables the event handler.
+
+\wxheading{Parameters}
+
+\docparam{enabled}{TRUE if the event handler is to be enabled, FALSE if it is to be disabled.}
+
+\wxheading{Remarks}
+
+You can use this function to avoid having to remove the event handler from the chain, for example
+when implementing a dialog editor and changing from edit to test mode.
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetEvtHandlerEnabled}{wxevthandlergetevthandlerenabled}
+
+\membersection{wxEvtHandler::SetNextHandler}\label{wxevthandlersetnexthandler}
+
+\func{void}{SetNextHandler}{\param{wxEvtHandler* }{handler}}
+
+Sets the pointer to the next handler.
+
+\wxheading{Parameters}
+
+\docparam{handler}{Event handler to be set as the next handler.}
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetNextHandler}{wxevthandlergetnexthandler},\rtfsp
+\helpref{wxEvtHandler::SetPreviousHandler}{wxevthandlersetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::GetPreviousHandler}{wxevthandlergetprevioushandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpopeventhandler}
+
+\membersection{wxEvtHandler::SetPreviousHandler}\label{wxevthandlersetprevioushandler}
+
+\func{void}{SetPreviousHandler}{\param{wxEvtHandler* }{handler}}
+
+Sets the pointer to the previous handler.
+
+\wxheading{Parameters}
+
+\docparam{handler}{Event handler to be set as the previous handler.}
+
+\wxheading{See also}
+
+\helpref{wxEvtHandler::GetPreviousHandler}{wxevthandlergetprevioushandler},\rtfsp
+\helpref{wxEvtHandler::SetNextHandler}{wxevthandlersetnexthandler},\rtfsp
+\helpref{wxEvtHandler::GetNextHandler}{wxevthandlergetnexthandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpopeventhandler}
+
+
--- /dev/null
+\section{\class{wxExpr}}\label{wxexpr}
+
+The {\bf wxExpr} class is the building brick of expressions similar to Prolog
+clauses, or objects. It can represent an expression of type long integer, float, string, word,
+or list, and lists can be nested.
+
+\wxheading{Derived from}
+
+None
+
+\wxheading{See also}
+
+\helpref{wxExpr overview}{exproverview}, \helpref{wxExprDatabase}{wxexprdatabase}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxExpr::wxExpr}\label{wxexprconstr}
+
+\func{}{wxExpr}{\param{const wxString\&}{functor}}
+
+Construct a new clause with this form, supplying the functor name. A clause is an object
+that will appear in the data file, with a list of attribute/value pairs.
+
+\func{}{wxExpr}{\param{wxExprType}{ type}, \param{const wxString\&}{ wordOrString = ``"}}
+
+Construct a new empty list, or a word (will be output with no quotes), or a string, depending on the
+value of {\it type}.
+
+{\it type} can be {\bf wxExprList}, {\bf wxExprWord}, or {\bf wxExprString}. If {\it type} is wxExprList,
+the value of {\it wordOrString} will be ignored.
+
+\func{}{wxExpr}{\param{long}{ value}}
+
+Construct an integer expression.
+
+\func{}{wxExpr}{\param{float}{ value}}
+
+Construct a floating point expression.
+
+\func{}{wxExpr}{\param{wxList* }{value}}
+
+Construct a list expression. The list's nodes' data should
+themselves be {\bf wxExpr}s.
+
+The current version of this library no longer uses the {\bf wxList}
+internally, so this constructor turns the list into its internal
+format (assuming a non-nested list) and then deletes the supplied
+list.
+
+\membersection{wxExpr::\destruct{wxExpr}}
+
+\func{}{\destruct{wxExpr}}{\void}
+
+Destructor.
+
+\membersection{wxExpr::AddAttributeValue}\label{wxexpraddattributevalue}
+
+Use these on clauses ONLY. Note that the functions for adding strings
+and words must be differentiated by function name which is why
+they are missing from this group (see \helpref{wxExpr::AddAttributeValueString}{wxexpraddattributevaluestring} and
+\rtfsp\helpref{wxExpr::AddAttributeValueWord}{wxexpraddattributevalueword}).
+
+\func{void}{AddAttributeValue}{\param{const wxString\&}{ attribute}, \param{float }{value}}
+
+Adds an attribute and floating point value pair to the clause.
+
+\func{void}{AddAttributeValue}{\param{const wxString\&}{ attribute}, \param{long }{value}}
+
+Adds an attribute and long integer value pair to the clause.
+
+\func{void}{AddAttributeValue}{\param{const wxString\&}{ attribute}, \param{wxList* }{value}}
+
+Adds an attribute and list value pair to the clause, converting the list into
+internal form and then deleting {\bf value}. Note that the list should not contain
+nested lists (except if in internal {\bf wxExpr} form.)
+
+\func{void}{AddAttributeValue}{\param{const wxString\&}{ attribute}, \param{wxExpr* }{value}}
+
+Adds an attribute and wxExpr value pair to the clause. Do not delete\rtfsp
+{\it value} once this function has been called.
+
+\membersection{wxExpr::AddAttributeValueString}\label{wxexpraddattributevaluestring}
+
+\func{void}{AddAttributeValueString}{\param{const wxString\&}{ attribute}, \param{const wxString\&}{ value}}
+
+Adds an attribute and string value pair to the clause.
+
+\membersection{wxExpr::AddAttributeValueStringList}\label{wxexpraddattributevaluestringlist}
+
+\func{void}{AddAttributeValueStringList}{\param{const wxString\&}{ attribute}, \param{wxList* }{value}}
+
+Adds an attribute and string list value pair to the clause.
+
+Note that the list passed to this function is a list of strings, NOT a list
+of {\bf wxExpr}s; it gets turned into a list of {\bf wxExpr}s
+automatically. This is a convenience function, since lists of strings
+are often manipulated in C++.
+
+\membersection{wxExpr::AddAttributeValueWord}\label{wxexpraddattributevalueword}
+
+\func{void}{AddAttributeValueWord}{\param{const wxString\&}{ attribute}, \param{const wxString\&}{ value}}
+
+Adds an attribute and word value pair to the clause.
+
+\membersection{wxExpr::Append}\label{wxexprappend}
+
+\func{void}{Append}{\param{wxExpr*}{ value}}
+
+Append the {\bf value} to the end of the list. `this' must be a list.
+
+\membersection{wxExpr::Arg}\label{wxexprarg}
+
+\constfunc{wxExpr* }{Arg}{\param{wxExprType}{ type}, \param{int}{ n}}
+
+Get nth arg of the given clause (starting from 1). NULL is returned if
+the expression is not a clause, or {\it n} is invalid, or the given type
+does not match the actual type. See also \helpref{wxExpr::Nth}{wxexprnth}.
+
+\membersection{wxExpr::Insert}\label{wxexprinsert}
+
+\func{void}{Insert}{\param{wxExpr* }{value}}
+
+Insert the {\bf value} at the start of the list. `this' must be a list.
+
+\membersection{wxExpr::GetAttributeValue}\label{wxexprgetattributevalue}
+
+These functions are the easiest way to retrieve attribute values, by
+passing a pointer to variable. If the attribute is present, the
+variable will be filled with the appropriate value. If not, the
+existing value is left alone. This style of retrieving attributes
+makes it easy to set variables to default values before calling these
+functions; no code is necessary to check whether the attribute is
+present or not.
+
+\constfunc{bool}{GetAttributeValue}{\param{const wxString\&}{ attribute}, \param{wxString\&}{ value}}
+
+Retrieve a string (or word) value.
+
+\constfunc{bool}{GetAttributeValue}{\param{const wxString\&}{ attribute}, \param{float\& }{value}}
+
+Retrieve a floating point value.
+
+\constfunc{bool}{GetAttributeValue}{\param{const wxString\&}{ attribute}, \param{int\& }{value}}
+
+Retrieve an integer value.
+
+\constfunc{bool}{GetAttributeValue}{\param{const wxString\&}{ attribute}, \param{long\& }{value}}
+
+Retrieve a long integer value.
+
+\constfunc{bool}{GetAttributeValue}{\param{const wxString\&}{ attribute}, \param{wxExpr**}{ value}}
+
+Retrieve a wxExpr pointer.
+
+\membersection{wxExpr::GetAttributeValueStringList}\label{wxexprgetattributestringlist}
+
+\constfunc{void}{GetAttributeValueStringList}{\param{const wxString\&}{attribute}, \param{wxList* }{value}}
+
+Use this on clauses ONLY. See above for comments on this style of
+attribute value retrieval. This function expects to receive a pointer to
+a new list (created by the calling application); it will append strings
+to the list if the attribute is present in the clause.
+
+\membersection{wxExpr::AttributeValue}\label{wxexprattributevalue}
+
+\constfunc{wxExpr*}{AttributeValue}{\param{const wxString\&}{ word}}
+
+Use this on clauses ONLY. Searches the clause for an attribute
+matching {\it word}, and returns the value associated with it.
+
+\membersection{wxExpr::Copy}\label{wxexprcopy}
+
+\constfunc{wxExpr*}{Copy}{\void}
+
+Recursively copies the expression, allocating new storage space.
+
+\membersection{wxExpr::DeleteAttributeValue}\label{wxexprdeletattributevalue}
+
+\func{void}{DeleteAttributeValue}{\param{const wxString\&}{ attribute}}
+
+Use this on clauses only. Deletes the attribute and its value (if any) from the
+clause.
+
+\membersection{wxExpr::Functor}\label{wxexprfunctor}
+
+\constfunc{wxString}{Functor}{\void}
+
+Use this on clauses only. Returns the clause's functor (object name).
+
+\membersection{wxExpr::GetClientData}\label{wxexprgetclientdata}
+
+\constfunc{wxObject*}{GetClientData}{\void}
+
+Retrieve arbitrary data stored with this clause. This can be useful when
+reading in data for storing a pointer to the C++ object, so when another
+clause makes a reference to this clause, its C++ object can be retrieved.
+See \helpref{wxExpr::SetClientData}{wxexprsetclientdata}.
+
+\membersection{wxExpr::GetFirst}\label{wxexprgetfirst}
+
+\constfunc{wxExpr*}{GetFirst}{\void}
+
+If this is a list expression (or clause), gets the first element in the list.
+
+See also \helpref{wxExpr::GetLast}{wxexprgetlast}, \helpref{wxExpr::GetNext}{wxexprgetnext}, \helpref{wxExpr::Nth}{wxexprnth}.
+
+\membersection{wxExpr::GetLast}\label{wxexprgetlast}
+
+\constfunc{wxExpr*}{GetLast}{\void}
+
+If this is a list expression (or clause), gets the last element in the list.
+
+See also \helpref{wxExpr::GetFirst}{wxexprgetfirst}, \helpref{wxExpr::GetNext}{wxexprgetnext}, \helpref{wxExpr::Nth}{wxexprnth}.
+
+\membersection{wxExpr::GetNext}\label{wxexprgetnext}
+
+\constfunc{wxExpr*}{GetNext}{\void}
+
+If this is a node in a list (any wxExpr may be a node in a list), gets the
+next element in the list.
+
+See also \helpref{wxExpr::GetFirst}{wxexprgetfirst}, \helpref{wxExpr::GetLast}{wxexprgetlast}, \helpref{wxExpr::Nth}{wxexprnth}.
+
+\membersection{wxExpr::IntegerValue}\label{wxexprintegervalue}
+
+\constfunc{long}{IntegerValue}{\void}
+
+Returns the integer value of the expression.
+
+\membersection{wxExpr::Nth}\label{wxexprnth}
+
+\constfunc{wxExpr*}{Nth}{\param{int}{ n}}
+
+Get nth arg of the given list expression (starting from 0). NULL is returned if
+the expression is not a list expression, or {\it n} is invalid. See also \helpref{wxExpr::Arg}{wxexprarg}.
+
+Normally, you would use attribute-value pairs to add and retrieve data
+from objects (clauses) in a data file. However, if the data gets complex,
+you may need to store attribute values as lists, and pick them apart
+yourself.
+
+\membersection{wxExpr::RealValue}\label{wxexprrealvalue}
+
+\constfunc{float}{RealValue}{\void}
+
+Returns the floating point value of the expression.
+
+\membersection{wxExpr::SetClientData}\label{wxexprsetclientdata}
+
+\func{void}{SetClientData}{\param{wxObject *}{data}}
+
+Associate arbitrary data with this clause. This can be useful when
+reading in data for storing a pointer to the C++ object, so when another
+clause makes a reference to this clause, its C++ object can be retrieved.
+See \helpref{wxExpr::GetClientData}{wxexprgetclientdata}.
+
+\membersection{wxExpr::StringValue}\label{wxexprstringvalue}
+
+\constfunc{wxString}{StringValue}{\void}
+
+Returns the string value of the expression.
+
+\membersection{wxExpr::Type}\label{wxexprtype}
+
+\constfunc{wxExprType}{Type}{\void}
+
+Returns the type of the expression. {\bf wxExprType} is defined as follows:
+
+\begin{verbatim}
+typedef enum {
+ wxExprNull,
+ wxExprInteger,
+ wxExprReal,
+ wxExprWord,
+ wxExprString,
+ wxExprList
+} wxExprType;
+\end{verbatim}
+
+\membersection{wxExpr::WordValue}\label{wxexprwordvalue}
+
+\constfunc{wxString}{WordValue}{\void}
+
+Returns the word value of the expression.
+
+\membersection{wxExpr::WriteLispExpr}\label{wxexprwritelistexpr}
+
+\func{void}{WriteLispExpr}{\param{ostream\&}{ stream}}
+
+Writes the expression or clause to the given stream in LISP format.
+Not normally needed, since the whole {\bf wxExprDatabase} will usually
+be written at once. Lists are enclosed in parentheses will no commas.
+
+\membersection{wxExpr::WritePrologClause}\label{wxexprwriteprologclause}
+
+\func{void}{WritePrologClause}{\param{ostream\&}{ stream}}
+
+Writes the clause to the given stream in Prolog format. Not normally needed, since
+the whole {\bf wxExprDatabase} will usually be written at once. The format is:
+functor, open parenthesis, list of comma-separated expressions, close parenthesis,
+full stop.
+
+\membersection{wxExpr::WriteExpr}\label{wxexprwriteexpr}
+
+\func{void}{WriteExpr}{\param{ostream\&}{ stream}}
+
+Writes the expression (not clause) to the given stream in Prolog
+format. Not normally needed, since the whole {\bf wxExprDatabase} will
+usually be written at once. Lists are written in square bracketed,
+comma-delimited format.
+
+\membersection{Functions and macros}
+
+Below are miscellaneous functions and macros associated with wxExpr objects.
+
+\func{bool}{wxExprIsFunctor}{\param{wxExpr *}{expr}, \param{const wxString\&}{ functor}}
+
+Checks that the functor of {\it expr} is {\it functor}.
+
+\func{void}{wxExprCleanUp}{\void}
+
+Cleans up the wxExpr system (YACC/LEX buffers) to avoid memory-checking warnings as the program exits.
+
+\begin{verbatim}
+#define wxMakeInteger(x) (new wxExpr((long)x))
+#define wxMakeReal(x) (new wxExpr((float)x))
+#define wxMakeString(x) (new wxExpr(PrologString, x))
+#define wxMakeWord(x) (new wxExpr(PrologWord, x))
+#define wxMake(x) (new wxExpr(x))
+\end{verbatim}
+
+Macros to help make wxExpr objects.
+
+\section{\class{wxExprDatabase}}\label{wxexprdatabase}
+
+The {\bf wxExprDatabase} class represents a database, or list,
+of Prolog-like expressions. Instances of this class are used for reading,
+writing and creating data files.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxExpr overview}{exproverview}, \helpref{wxExpr}{wxexpr}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxExprDatabase::wxExprDatabase}\label{wxexprdatabaseconstr}
+
+\func{void}{wxExprDatabase}{\param{proioErrorHandler}{ handler = 0}}
+
+Construct a new, unhashed database, with an optional error handler. The
+error handler must be a function returning a bool and taking an integer and a string
+argument. When an error occurs when reading or writing a database, this function is
+called. The error is given as the first argument (currently one of WXEXPR\_ERROR\_GENERAL,
+WXEXPR\_ERROR\_SYNTAX) and an error message is given as the second argument. If FALSE
+is returned by the error handler, processing of the wxExpr operation stops.
+
+Another way of handling errors is simply to call \helpref{wxExprDatabase::GetErrorCount}{wxexprdatabasegeterrorcount} after
+the operation, to check whether errors have occurred, instead of installing an error handler.
+If the error count is more than zero, \helpref{wxExprDatabase::Write}{wxexprdatabasewrite} and
+\rtfsp\helpref{wxExprDatabase::Read}{wxexprdatabaseread} will return FALSE to
+the application.
+
+For example:
+
+\begin{verbatim}
+bool myErrorHandler(int err, chat *msg)
+{
+ if (err == WXEXPR_ERROR_SYNTAX)
+ {
+ wxMessageBox(msg, "Syntax error");
+ }
+ return FALSE;
+}
+
+wxExprDatabase database(myErrorHandler);
+\end{verbatim}
+
+
+\func{}{wxExprDatabase}{\param{wxExprType}{ type}, \param{const wxString\&}{attribute},
+\rtfsp\param{int}{ size = 500}, \param{proioErrorHandler}{ handler = 0}}
+
+Construct a new database hashed on a combination of the clause functor and
+a named attribute (often an integer identification).
+
+See above for an explanation of the error handler.
+
+\membersection{wxExprDatabase::\destruct{wxExprDatabase}}
+
+\func{}{\destruct{wxExprDatabase}}{\void}
+
+Delete the database and contents.
+
+\membersection{wxExprDatabase::Append}\label{wxexprdatabaseappend}
+
+\func{void}{Append}{\param{wxExpr* }{clause}}
+
+Append a clause to the end of the database. If the database is hashing,
+the functor and a user-specified attribute will be hashed upon, giving the
+option of random access in addition to linear traversal of the database.
+
+\membersection{wxExprDatabase::BeginFind}\label{wxexprdatabasebeginfind}
+
+\func{void}{BeginFind}{\void}
+
+Reset the current position to the start of the database. Subsequent
+\rtfsp\helpref{wxExprDatabase::FindClause}{wxexprdatabasefindclause} calls will move the pointer.
+
+\membersection{wxExprDatabase::ClearDatabase}\label{wxexprdatabasecleardatabase}
+
+\func{void}{ClearDatabase}{\void}
+
+Clears the contents of the database.
+
+\membersection{wxExprDatabase::FindClause}\label{wxexprdatabasefindclause}
+
+Various ways of retrieving clauses from the database. A return
+value of NULL indicates no (more) clauses matching the given criteria.
+Calling the functions repeatedly retrieves more matching clauses, if any.
+
+\func{wxExpr* }{FindClause}{\param{long}{ id}}
+
+Find a clause based on the special ``id'' attribute.
+
+\func{wxExpr* }{FindClause}{\param{const wxString\&}{ attribute}, \param{const wxString\&}{ value}}
+
+Find a clause which has the given attribute set to the given string or word value.
+
+\func{wxExpr*}{FindClause}{\param{const wxString\&}{ attribute}, \param{long}{ value}}
+
+Find a clause which has the given attribute set to the given integer value.
+
+\func{wxExpr*}{FindClause}{\param{const wxString\&}{ attribute}, \param{float}{ value}}
+
+Find a clause which has the given attribute set to the given floating point value.
+
+\membersection{wxExprDatabase::FindClauseByFunctor}\label{wxexprdatabasefindclausebyfunctor}
+
+\func{wxExpr*}{FindClauseByFunctor}{\param{const wxString\&}{ functor}}
+
+Find the next clause with the specified functor.
+
+\membersection{wxExprDatabase::GetErrorCount}\label{wxexprdatabasegeterrorcount}
+
+\constfunc{int}{GetErrorCount}{\void}
+
+Returns the number of errors encountered during the last read or write operation.
+
+\membersection{wxExprDatabase::HashFind}\label{wxexprdatabasehashfind}
+
+\constfunc{wxExpr*}{HashFind}{\param{const wxString\&}{ functor}, \param{long}{ value}}
+
+Finds the clause with the given functor and with the attribute specified
+in the database constructor having the given integer value.
+
+For example,
+
+\begin{verbatim}
+// Hash on a combination of functor and integer "id" attribute when reading in
+wxExprDatabase db(wxExprInteger, "id");
+
+// Read it in
+db.ReadProlog("data");
+
+// Retrieve a clause with specified functor and id
+wxExpr *clause = db.HashFind("node", 24);
+\end{verbatim}
+
+This would retrieve a clause which is written: {\tt node(id = 24, ..., )}.
+
+\func{wxExpr*}{HashFind}{\param{const wxString\&}{ functor}, \param{const wxString\&}{ value}}
+
+Finds the clause with the given functor and with the attribute specified
+in the database constructor having the given string value.
+
+\membersection{wxExprDatabase::Read}\label{wxexprdatabaseread}
+
+\func{bool}{Read}{\param{const wxString\&}{ filename}}
+
+Reads in the given file, returning TRUE if successful.
+
+\membersection{wxExprDatabase::ReadFromString}\label{wxexprdatabasereadfromstring}
+
+\func{bool}{ReadFromString}{\param{const wxString\&}{ buffer}}
+
+Reads a Prolog database from the given string buffer, returning TRUE if
+successful.
+
+\membersection{wxExprDatabase::WriteLisp}\label{wxexprdatabasewritelisp}
+
+\func{bool}{WriteLisp}{\param{ostream\& }{stream}}
+
+Writes the database as a LISP-format file.
+
+\membersection{wxExprDatabase::Write}\label{wxexprdatabasewrite}
+
+\func{bool}{Write}{\param{ostream\& }{stream}}
+
+Writes the database as a Prolog-format file.
+
+
--- /dev/null
+\section{\class{wxFile}}\label{wxfile}
+
+A wxFile performs raw file I/O. Note that wxFile::Flush is not implemented on some Windows compilers
+due to a missing fsync function, which reduces the usefulness of this class.
+
+\wxheading{Derived from}
+
+None.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFile::wxFile}\label{wxfileconstr}
+
+\func{}{wxFile}{\void}
+
+Default constructor.
+
+\func{}{wxFile}{\param{const char*}{ filename}, \param{wxFile::OpenMode}{ mode = wxFile::read}}
+
+Opens a file with the given mode.
+
+\func{}{wxFile}{\param{int}{ fd}}
+
+Opens a file with the given file descriptor, which has already been opened.
+
+\wxheading{Parameters}
+
+\docparam{filename}{The filename.}
+
+\docparam{mode}{The mode in which to open the file. May be one of {\bf wxFile::read}, {\bf wxFile::write} and {\bf wxFile::read\_write}.}
+
+\docparam{fd}{An existing file descriptor.}
+
+\membersection{wxFile::\destruct{wxFile}}
+
+\func{}{\destruct{wxFile}}{\void}
+
+Destructor. This is not virtual, for efficiency.
+
+\membersection{wxFile::Attach}\label{wxfileattach}
+
+\func{void}{Attach}{\param{int}{ fd}}
+
+Attaches an existing file descriptor to the wxFile object.
+
+\membersection{wxFile::Close}\label{wxfileclose}
+
+\func{void}{Close}{\void}
+
+Closes the file.
+
+\membersection{wxFile::Create}\label{wxfilecreate}
+
+\func{bool}{Create}{\param{const char*}{ filename}, \param{bool}{ overwrite = FALSE}}
+
+Creates a file for writing. If the file already exists, setting {\bf overwrite} to TRUE
+will ensure it is overwritten.
+
+\membersection{wxFile::Eof}\label{wxfileeof}
+
+\constfunc{bool}{Eof}{\void}
+
+Returns TRUE if the end of the file has been reached.
+
+\membersection{wxFile::Exists}\label{wxfileexists}
+
+\func{static bool}{Exists}{\param{const char*}{ filename}}
+
+Returns TRUE if the file exists.
+
+\membersection{wxFile::Flush}\label{wxfileflush}
+
+\func{bool}{Flush}{\void}
+
+Flushes the file descriptor. Not implemented for some Windows compilers.
+
+\membersection{wxFile::IsOpened}\label{wxfileisopened}
+
+\constfunc{bool}{IsOpened}{\void}
+
+Returns TRUE if the file has been opened.
+
+\membersection{wxFile::Length}\label{wxfilelength}
+
+\constfunc{off\_t}{Length}{\void}
+
+Returns the length of the file.
+
+\membersection{wxFile::Open}\label{wxfileopen}
+
+\func{bool}{Open}{\param{const char*}{ filename}, \param{wxFile::OpenMode}{ mode = wxFile::read}}
+
+Opens the file, returning TRUE if successful.
+
+\wxheading{Parameters}
+
+\docparam{filename}{The filename.}
+
+\docparam{mode}{The mode in which to open the file. May be one of {\bf wxFile::read}, {\bf wxFile::write} and {\bf wxFile::read\_write}.}
+
+\membersection{wxFile::Read}\label{wxfileread}
+
+\func{off\_t}{Read}{\param{void*}{ buffer}, \param{off\_t}{ count}}
+
+Reads the specified number of bytes into a buffer, returning the actual number read.
+
+\wxheading{Parameters}
+
+\docparam{buffer}{A buffer to receive the data.}
+
+\docparam{count}{The number of bytes to read.}
+
+\wxheading{Return value}
+
+The number of bytes read, or the symbol {\bf ofsInvalid} (-1) if there was an error.
+
+\membersection{wxFile::Seek}\label{wxfileseek}
+
+\func{off\_t}{Seek}{\param{off\_t }{ofs}, \param{wxFile::SeekMode }{mode = wxFile::FromStart}}
+
+Seeks to the specified position.
+
+\wxheading{Parameters}
+
+\docparam{ofs}{Offset to seek to.}
+
+\docparam{mode}{One of {\bf wxFile::FromStart}, {\bf wxFile::FromEnd}, {\bf wxFile::FromCurrent}.}
+
+\wxheading{Return value}
+
+The actual offset position achieved, or ofsInvalid on failure.
+
+\membersection{wxFile::SeekEnd}\label{wxfileseekend}
+
+\func{off\_t}{SeekEnd}{\param{off\_t }{ofs = 0}}
+
+Moves the file pointer to the specified number of bytes before the end of the file.
+
+\wxheading{Parameters}
+
+\docparam{ofs}{Number of bytes before the end of the file.}
+
+\wxheading{Return value}
+
+The actual offset position achieved, or ofsInvalid on failure.
+
+\membersection{wxFile::Tell}\label{wxfiletell}
+
+\constfunc{off\_t}{Tell}{\void}
+
+Returns the current position.
+
+\membersection{wxFile::Write}\label{wxfilewrite}
+
+\func{bool}{Write}{\param{const void*}{ buffer}, \param{off\_t}{ count}}
+
+Writes the specified number of bytes from a buffer.
+
+\wxheading{Parameters}
+
+\docparam{buffer}{A buffer containing the data.}
+
+\docparam{count}{The number of bytes to write.}
+
+\wxheading{Return value}
+
+TRUE if the operation was successful.
+
+
--- /dev/null
+\section{\class{wxFileDialog}}\label{wxfiledialog}
+
+This class represents the file chooser dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxFileDialog overview}{wxfiledialogoverview}, \helpref{wxFileSelector}{wxfileselector}
+%\rtfsp\helpref{wxFileSelectorEx}{wxfileselectorex}
+%\helpref{wxLoadFileSelector}{wxloadfileselector},\rtfsp
+%\helpref{wxSaveFileSelector}{wxsavefileselector}
+
+\wxheading{Remarks}
+
+Pops up a file selector box. In Windows, this is the common file selector
+dialog. In X, this is a file selector box with somewhat less functionality.
+The path and filename are distinct elements of a full file pathname.
+If path is ``", the current directory will be used. If filename is ``",
+no default filename will be supplied. The wildcard determines what files
+are displayed in the file selector, and file extension supplies a type
+extension for the required filename. Flags may be a combination of wxOPEN,
+wxSAVE, wxOVERWRITE\_PROMPT, wxHIDE\_READONLY, or 0. They are only significant
+at present in Windows.
+
+Both the X and Windows versions implement a wildcard filter. Typing a
+filename containing wildcards (*, ?) in the filename text item, and
+clicking on Ok, will result in only those files matching the pattern being
+displayed. In the X version, supplying no default name will result in the
+wildcard filter being inserted in the filename text item; the filter is
+ignored if a default name is supplied.
+
+Under Windows (only), the wildcard may be a specification for multiple
+types of file with a description for each, such as:
+
+\begin{verbatim}
+ "BMP files (*.bmp) | *.bmp | GIF files (*.gif) | *.gif"
+\end{verbatim}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFileDialog::wxFileDialog}\label{wxfiledialogconstr}
+
+\func{}{wxFileDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message = "Choose a file"},\rtfsp
+\param{const wxString\& }{defaultDir = ""}, \param{const wxString\& }{defaultFile = ``"},\rtfsp
+\param{const wxString\& }{wildcard = ``*.*"}, \param{long }{style = 0}, \param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor. Use \helpref{wxFileDialog::ShowModal}{wxfiledialogshowmodal} to show the dialog.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{message}{Message to show on the dialog.}
+
+\docparam{defaultDir}{The default directory, or the empty string.}
+
+\docparam{defaultFile}{The default filename, or the empty string.}
+
+\docparam{wildcard}{A wildcard, such as ``*.*".}
+
+\docparam{style}{A dialog style. A bitlist of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxOPEN}}{This is an open dialog (Windows only).}
+\twocolitem{{\bf wxSAVE}}{This is a save dialog (Windows only).}
+\twocolitem{{\bf wxHIDE\_READONLY}}{Hide read-only files (Windows only).}
+\twocolitem{{\bf wxOVERWRITE\_PROMPT}}{Prompt for a conformation if a file will be overridden (Windows only).}
+\end{twocollist}%
+}
+
+\docparam{pos}{Dialog position. Not implemented.}
+
+\membersection{wxFileDialog::\destruct{wxFileDialog}}
+
+\func{}{\destruct{wxFileDialog}}{\void}
+
+Destructor.
+
+\membersection{wxFileDialog::GetDirectory}\label{wxfiledialoggetdirectory}
+
+\constfunc{wxString}{GetDirectory}{\void}
+
+Returns the default directory.
+
+\membersection{wxFileDialog::GetFilename}\label{wxfiledialoggetfilename}
+
+\constfunc{wxString}{GetFilename}{\void}
+
+Returns the default filename.
+
+\membersection{wxFileDialog::GetFilterIndex}\label{wxfiledialoggetfilterindex}
+
+\constfunc{int}{GetFilterIndex}{\void}
+
+Returns the index into the list of filters supplied, optionally, in the wildcard parameter.
+Before the dialog is shown, this is the index which will be used when the dialog is first displayed.
+After the dialog is shown, this is the index selected by the user.
+
+\membersection{wxFileDialog::GetMessage}\label{wxfiledialoggetmessage}
+
+\constfunc{wxString}{GetMessage}{\void}
+
+Returns the message that will be displayed on the dialog.
+
+\membersection{wxFileDialog::GetPath}\label{wxfiledialoggetpath}
+
+\constfunc{wxString}{GetPath}{\void}
+
+Returns the full path (directory and filename) of the selected file.
+
+\membersection{wxFileDialog::GetStyle}\label{wxfiledialoggetstyle}
+
+\constfunc{long}{GetStyle}{\void}
+
+Returns the dialog style.
+
+\membersection{wxFileDialog::GetWildcard}\label{wxfiledialoggetwildcard}
+
+\constfunc{wxString}{GetWildcard}{\void}
+
+Returns the file dialog wildcard.
+
+\membersection{wxFileDialog::SetDirectory}\label{wxfiledialogsetdirectory}
+
+\func{void}{SetDirectory}{\param{const wxString\& }{directory}}
+
+Sets the default directory.
+
+\membersection{wxFileDialog::SetFilename}\label{wxfiledialogsetfilename}
+
+\func{void}{SetFilename}{\param{const wxString\& }{setfilename}}
+
+Sets the default filename.
+
+\membersection{wxFileDialog::SetFilterIndex}\label{wxfiledialogsetfilterindex}
+
+\func{void}{SetFilterIndex}{\param{int }{filterIndex}}
+
+Sets the default filter index, starting from zero. Windows only.
+
+\membersection{wxFileDialog::SetMessage}\label{wxfiledialogsetmessage}
+
+\func{void}{SetMessage}{\param{const wxString\& }{message}}
+
+Sets the message that will be displayed on the dialog.
+
+\membersection{wxFileDialog::SetPath}\label{wxfiledialogsetpath}
+
+\func{void}{SetPath}{\param{const wxString\& }{path}}
+
+Sets the path (the combined directory and filename that will be returned when the dialog is dismissed).
+
+\membersection{wxFileDialog::SetStyle}\label{wxfiledialogsetstyle}
+
+\func{void}{SetStyle}{\param{long }{style}}
+
+Sets the dialog style. See \helpref{wxFileDialog::wxFileDialog}{wxfiledialogconstr} for details.
+
+\membersection{wxFileDialog::SetWildcard}\label{wxfiledialogsetwildcard}
+
+\func{void}{SetWildcard}{\param{const wxString\& }{wildCard}}
+
+Sets the wildcard, which in Windows can contain multiple file types.
+
+\membersection{wxFileDialog::ShowModal}\label{wxfiledialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxOK\_CANCEL
+otherwise.
+
+
--- /dev/null
+\section{\class{wxFileHistory}}\label{wxfilehistory}
+
+The wxFileHistory encapsulates a user interface convenience, the
+list of most recently visited files as shown on a menu (usually the File menu).
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{wxFileHistory overview}{wxfilehistoryoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFileHistory::m\_fileHistory}
+
+\member{char**}{m\_fileHistory}
+
+A character array of strings corresponding to the most recently opened
+files.
+
+\membersection{wxFileHistory::m\_fileHistoryN}
+
+\member{int}{m\_fileHistoryN}
+
+The number of files stored in the history array.
+
+\membersection{wxFileHistory::m\_fileMaxFiles}
+
+\member{int}{m\_fileMaxFiles}
+
+The maximum number of files to be stored and displayed on the menu.
+
+\membersection{wxFileHistory::m\_fileMenu}
+
+\member{wxMenu*}{m\_fileMenu}
+
+The file menu used to display the file history list (if enabled).
+
+\membersection{wxFileHistory::wxFileHistory}
+
+\func{}{wxFileHistory}{\param{int}{ maxFiles = 9}}
+
+Constructor. Pass the maximum number of files that should be stored and displayed.
+
+\membersection{wxFileHistory::\destruct{wxFileHistory}}
+
+\func{}{\destruct{wxFileHistory}}{\void}
+
+Destructor.
+
+\membersection{wxFileHistory::AddFileToHistory}
+
+\func{void}{AddFileToHistory}{\param{const wxString\& }{filename}}
+
+Adds a file to the file history list, if the object has a pointer to an appropriate file menu.
+
+\membersection{wxFileHistory::FileHistoryLoad}
+
+\func{void}{FileHistoryLoad}{\param{const wxString\& }{resourceFile}, \param{const wxString\& }{sectionName}}
+
+Loads the file history from a resource file, using the given section. This must be called
+explicitly by the application.
+
+\membersection{wxFileHistory::FileHistorySave}
+
+\func{void}{FileHistorySave}{\param{const wxString\& }{resourceFile}, \param{const wxString\& }{sectionName}}
+
+Saves the file history into a resource file, using the given section. This must be called
+explicitly by the application.
+
+\membersection{wxFileHistory::FileHistoryUseMenu}
+
+\func{void}{FileHistoryUseMenu}{\param{wxMenu* }{menu}}
+
+Use this menu for appending recently-visited document filenames, for convenient
+access. Calling this function with a valid menu pointer enables the history
+list functionality.
+
+\membersection{wxFileHistory::GetMaxFiles}
+
+\func{int}{GetMaxFiles}{\void}
+
+Returns the maximum number of files that can be stored.
+
+\membersection{wxFileHistory::GetNoHistoryFiles}
+
+\func{int}{GetNoHistoryFiles}{\void}
+
+Returns the number of files currently stored in the file history.
+
+
--- /dev/null
+\section{\class{wxFocusEvent}}\label{wxfocusevent}
+
+A focus event is sent when a window's focus changes.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a focus event, use these event handler macros to direct input to a member
+function that takes a wxFocusEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_SET\_FOCUS(func)}}{Process a wxEVT\_SET\_FOCUS event.}
+\twocolitem{{\bf EVT\_KILL\_FOCUS(func)}}{Process a wxEVT\_KILL\_FOCUS event.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnSetFocus}{wxwindowonsetfocus},\rtfsp
+\helpref{wxWindow::OnKillFocus}{wxwindowonkillfocus},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFocusEvent::wxFocusEvent}
+
+\func{}{wxFocusEvent}{\param{WXTYPE }{eventType = 0}, \param{int }{id = 0}}
+
+Constructor.
+
--- /dev/null
+\section{\class{wxFont}}\label{wxfont}
+
+A font is an object which determines the appearance of text. Fonts are
+used for drawing text to a device context, and setting the appearance of
+a window's text.
+
+\wxheading{Derived from}
+
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxFont overview}{wxfontoverview}, \helpref{wxDC::SetFont}{wxdcsetfont},\rtfsp
+\helpref{wxDC::DrawText}{wxdcdrawtext}, \helpref{wxDC::GetTextExtent}{wxdcgettextextent},\rtfsp
+\helpref{wxFontDialog}{wxfontdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFont::wxFont}\label{wxfontconstr}
+
+\func{}{wxFont}{\void}
+
+Default constructor.
+
+\func{}{wxFont}{\param{const int}{ pointSize}, \param{const int}{ family}, \param{const int}{ style}, \param{const int}{ weight},
+ \param{const bool}{ underline = FALSE}, \param{const wxString\& }{faceName = ""}}
+
+Creates a font object.
+
+\wxheading{Parameters}
+
+\docparam{pointSize}{Size in points.}
+
+\docparam{family}{Font family, a generic way of referring to fonts without specifying actual facename. One of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxDEFAULT}}{Chooses a default font.}
+\twocolitem{{\bf wxDECORATIVE}}{A decorative font.}
+\twocolitem{{\bf wxROMAN}}{A formal, serif font.}
+\twocolitem{{\bf wxSCRIPT}}{A handwriting font.}
+\twocolitem{{\bf wxSWISS}}{A sans-serif font.}
+\twocolitem{{\bf wxMODERN}}{A fixed pitch font.}
+\end{twocollist}}
+
+\docparam{style}{One of {\bf wxNORMAL}, {\bf wxSLANT} and {\bf wxITALIC}.}
+
+\docparam{weight}{One of {\bf wxNORMAL}, {\bf wxLIGHT} and {\bf wxBOLD}.}
+
+\docparam{underline}{The value can be TRUE or FALSE. At present this has an effect on Windows only.}
+
+\docparam{faceName}{An optional string specifying the actual typeface to be used. If the empty string,
+a default typeface will chosen based on the family.}
+
+\wxheading{Remarks}
+
+If the desired font does not exist, the closest match will be chosen.
+Under Windows, only scaleable TrueType fonts are used.
+
+Underlining only works under Windows at present.
+
+See also \helpref{wxDC::SetFont}{wxdcsetfont}, \helpref{wxDC::DrawText}{wxdcdrawtext}
+and \helpref{wxDC::GetTextExtent}{wxdcgettextextent}.
+
+\membersection{wxFont::\destruct{wxFont}}
+
+\func{}{\destruct{wxFont}}{\void}
+
+Destructor.
+
+\wxheading{Remarks}
+
+The destructor may not delete the underlying font object of the native windowing
+system, since wxBrush uses a reference counting system for efficiency.
+
+Although all remaining fonts are deleted when the application exits,
+the application should try to clean up all fonts itself. This is because
+wxWindows cannot know if a pointer to the font object is stored in an
+application data structure, and there is a risk of double deletion.
+
+\membersection{wxFont::GetFaceName}\label{wxfontgetfacename}
+
+\constfunc{wxString}{GetFaceName}{\void}
+
+Returns the typeface name associated with the font, or the empty string if there is no
+typeface information.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetFaceName}{wxfontsetfacename}
+
+\membersection{wxFont::GetFamily}\label{wxfontgetfamily}
+
+\constfunc{int}{GetFamily}{\void}
+
+Gets the font family. See \helpref{wxFont::wxFont}{wxfontconstr} for a list of valid
+family identifiers.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetFamily}{wxfontsetfamily}
+
+\membersection{wxFont::GetFontId}\label{wxfontgetfontid}
+
+\constfunc{int}{GetFontId}{\void}
+
+Returns the font id, if the portable font system is in operation. See \helpref{Font overview}{wxfontoverview} for
+further details.
+
+\membersection{wxFont::GetPointSize}\label{wxfontgetpointsize}
+
+\constfunc{int}{GetPointSize}{\void}
+
+Gets the point size.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetPointSize}{wxfontsetpointsize}
+
+\membersection{wxFont::GetStyle}\label{wxfontgetstyle}
+
+\constfunc{int}{GetStyle}{\void}
+
+Gets the font style. See \helpref{wxFont::wxFont}{wxfontconstr} for a list of valid
+styles.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetStyle}{wxfontsetstyle}
+
+\membersection{wxFont::GetUnderlined}\label{wxfontgetunderlined}
+
+\constfunc{bool}{GetUnderlined}{\void}
+
+Returns TRUE if the font is underlined, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetUnderlined}{wxfontsetunderlined}
+
+\membersection{wxFont::GetWeight}\label{wxfontgetweight}
+
+\constfunc{int}{GetWeight}{\void}
+
+Gets the font weight. See \helpref{wxFont::wxFont}{wxfontconstr} for a list of valid
+weight identifiers.
+
+\wxheading{See also}
+
+\helpref{wxFont::SetWeight}{wxfontsetweight}
+
+\membersection{wxFont::SetFaceName}\label{wxfontsetfacename}
+
+\func{void}{SetFaceName}{\param{const wxString\& }{faceName}}
+
+Sets the facename for the font.
+
+\wxheading{Parameters}
+
+\docparam{faceName}{A valid facename, which should be on the end-user's system.}
+
+\wxheading{Remarks}
+
+To avoid portability problems, don't rely on a specific face, but specify the font family
+instead or as well. A suitable font will be found on the end-user's system. If both the
+family and the facename are specified, wxWindows will first search for the specific face,
+and then for a font belonging to the same family.
+
+\wxheading{See also}
+
+\helpref{wxFont::GetFaceName}{wxfontgetfacename}, \helpref{wxFont::SetFamily}{wxfontsetfamily}
+
+\membersection{wxFont::SetFamily}\label{wxfontsetfamily}
+
+\func{void}{SetFamily}{\param{const int}{ family}}
+
+Sets the font family.
+
+\wxheading{Parameters}
+
+\docparam{family}{One of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxDEFAULT}}{Chooses a default font.}
+\twocolitem{{\bf wxDECORATIVE}}{A decorative font.}
+\twocolitem{{\bf wxROMAN}}{A formal, serif font.}
+\twocolitem{{\bf wxSCRIPT}}{A handwriting font.}
+\twocolitem{{\bf wxSWISS}}{A sans-serif font.}
+\twocolitem{{\bf wxMODERN}}{A fixed pitch font.}
+\end{twocollist}}
+
+\wxheading{See also}
+
+\helpref{wxFont::GetFamily}{wxfontgetfamily}, \helpref{wxFont::SetFaceName}{wxfontsetfacename}
+
+\membersection{wxFont::SetPointSize}\label{wxfontsetpointsize}
+
+\func{void}{SetPointSize}{\param{const int}{ pointSize}}
+
+Sets the point size.
+
+\wxheading{Parameters}
+
+\docparam{pointSize}{Size in points.}
+
+\wxheading{See also}
+
+\helpref{wxFont::GetPointSize}{wxfontgetpointsize}
+
+\membersection{wxFont::SetStyle}\label{wxfontsetstyle}
+
+\func{void}{SetStyle}{\param{const int}{ style}}
+
+Sets the font style.
+
+\wxheading{Parameters}
+
+\docparam{style}{One of {\bf wxNORMAL}, {\bf wxSLANT} and {\bf wxITALIC}.}
+
+\wxheading{See also}
+
+\helpref{wxFont::GetStyle}{wxfontgetstyle}
+
+\membersection{wxFont::SetUnderlined}\label{wxfontsetunderlined}
+
+\func{void}{SetUnderlined}{\param{const bool}{ underlined}}
+
+Sets underlining.
+
+\wxheading{Parameters}
+
+\docparam{underlining}{TRUE to underline, FALSE otherwise.}
+
+\wxheading{See also}
+
+\helpref{wxFont::GetUnderlined}{wxfontgetunderlined}
+
+\membersection{wxFont::SetWeight}\label{wxfontsetweight}
+
+\func{void}{SetWeight}{\param{const int}{ weight}}
+
+Sets the font weight.
+
+\wxheading{Parameters}
+
+\docparam{weight}{One of {\bf wxNORMAL}, {\bf wxLIGHT} and {\bf wxBOLD}.}
+
+\wxheading{See also}
+
+\helpref{wxFont::GetWeight}{wxfontgetweight}
+
+\membersection{wxFont::operator $=$}\label{wxfontassignment}
+
+\func{wxFont\&}{operator $=$}{\param{const wxFont\& }{font}}
+
+Assignment operator, using reference counting. Returns a reference
+to `this'.
+
+\membersection{wxFont::operator $==$}\label{wxfontequals}
+
+\func{bool}{operator $==$}{\param{const wxFont\& }{font}}
+
+Equality operator. Two fonts are equal if they contain pointers
+to the same underlying font data. It does not compare each attribute,
+so two indefontdently-created fonts using the same parameters will
+fail the test.
+
+\membersection{wxFont::operator $!=$}\label{wxfontnotequals}
+
+\func{bool}{operator $!=$}{\param{const wxFont\& }{font}}
+
+Inequality operator. Two fonts are not equal if they contain pointers
+to different underlying font data. It does not compare each attribute.
+
+
--- /dev/null
+\section{\class{wxFontData}}\label{wxfontdata}
+
+\overview{wxFontDialog overview}{wxfontdialogoverview}
+
+This class holds a variety of information related to font dialogs.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Overview}{wxfontdialogoverview}, \helpref{wxFontDialog}{wxfontdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFontData::wxFontData}
+
+\func{}{wxFontData}{\void}
+
+Constructor. Initializes {\it fontColour} to black, {\it showHelp} to black,
+\rtfsp{\it allowSymbols} to TRUE, {\it enableEffects} to TRUE,
+\rtfsp{\it minSize} to 0 and {\it maxSize} to 0.
+
+\membersection{wxFontData::\destruct{wxFontData}}
+
+\func{}{\destruct{wxFontData}}{\void}
+
+Destructor.
+
+\membersection{wxFontData::EnableEffects}
+
+\func{void}{EnableEffects}{\param{bool}{ enable}}
+
+Enables or disables `effects' under MS Windows only. This refers to the
+controls for manipulating colour, strikeout and underline properties.
+
+The default value is TRUE.
+
+\membersection{wxFontData::GetAllowSymbols}
+
+\func{bool}{GetAllowSymbols}{\void}
+
+Under MS Windows, returns a flag determining whether symbol fonts can be selected. Has no
+effect on other platforms.
+
+The default value is TRUE.
+
+\membersection{wxFontData::GetColour}
+
+\func{wxColour\&}{GetColour}{\void}
+
+Gets the colour associated with the font dialog.
+
+The default value is black.
+
+\membersection{wxFontData::GetChosenFont}
+
+\func{wxFont}{GetChosenFont}{\void}
+
+Gets the font chosen by the user. If the user pressed OK (wxFontDialog::Show returned TRUE), this returns
+a new font which is now `owned' by the application, and should be deleted
+if not required. If the user pressed Cancel (wxFontDialog::Show returned FALSE) or
+the colour dialog has not been invoked yet, this will return NULL.
+
+\membersection{wxFontData::GetEnableEffects}
+
+\func{bool}{GetEnableEffects}{\void}
+
+Determines whether `effects' are enabled under Windows. This refers to the
+controls for manipulating colour, strikeout and underline properties.
+
+The default value is TRUE.
+
+\membersection{wxFontData::GetInitialFont}
+
+\func{wxFont}{GetInitialFont}{\void}
+
+Gets the font that will be initially used by the font dialog. This should have
+previously been set by the application.
+
+\membersection{wxFontData::GetShowHelp}
+
+\func{bool}{GetShowHelp}{\void}
+
+Returns TRUE if the Help button will be shown (Windows only).
+
+The default value is FALSE.
+
+\membersection{wxFontData::SetAllowSymbols}
+
+\func{void}{SetAllowSymbols}{\param{bool}{ allowSymbols}}
+
+Under MS Windows, determines whether symbol fonts can be selected. Has no
+effect on other platforms.
+
+The default value is TRUE.
+
+\membersection{wxFontData::SetChosenFont}
+
+\func{void}{SetChosenFont}{\param{const wxFont\& }{font}}
+
+Sets the font that will be returned to the user (for internal use only).
+
+\membersection{wxFontData::SetColour}
+
+\func{void}{SetColour}{\param{const wxColour\&}{ colour}}
+
+Sets the colour that will be used for the font foreground colour.
+
+The default colour is black.
+
+\membersection{wxFontData::SetInitialFont}
+
+\func{void}{SetInitialFont}{\param{const wxFont\&}{font}}
+
+Sets the font that will be initially used by the font dialog.
+
+\membersection{wxFontData::SetRange}
+
+\func{void}{SetRange}{\param{int}{ min}, \param{int}{ max}}
+
+Sets the valid range for the font point size (Windows only).
+
+The default is 0, 0 (unrestricted range).
+
+\membersection{wxFontData::SetShowHelp}
+
+\func{void}{SetShowHelp}{\param{bool}{ showHelp}}
+
+Determines whether the Help button will be displayed in the font dialog (Windows only).
+
+The default value is FALSE.
+
+\membersection{wxFontData::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxFontData\&}{ data}}
+
+Assingment operator for the font data.
+
+\section{\class{wxFontDialog}}\label{wxfontdialog}
+
+This class represents the font chooser dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Overview}{wxfontdialogoverview}, \helpref{wxFontData}{wxfontdata}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFontDialog::wxFontDialog}
+
+\func{}{wxFontDialog}{\param{wxWindow* }{parent}, \param{wxFontData* }{data = NULL}}
+
+Constructor. Pass a parent window, and optionally a pointer to a block of font
+data, which will be copied to the font dialog's font data.
+
+\membersection{wxFontDialog::\destruct{wxFontDialog}}
+
+\func{}{\destruct{wxFontDialog}}{\void}
+
+Destructor.
+
+\membersection{wxFontDialog::GetFontData}
+
+\func{wxFontData\&}{GetFontData}{\void}
+
+Returns the \helpref{font data}{wxfontdata} associated with the font dialog.
+
+\membersection{wxFontDialog::ShowModal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed Ok, and wxID\_CANCEL
+otherwise.
+
+If the user cancels the dialog (ShowModal returns wxID\_CANCEL), no font will be
+created. If the user presses OK (ShowModal returns wxID\_OK), a new wxFont will
+be created and stored in the font dialog's wxFontData structure.
+
--- /dev/null
+\section{\class{wxFontList}}\label{wxfontlist}
+
+A font list is a list containing all fonts which have been created. There
+is only one instance of this class: {\bf wxTheFontList}. Use this object to search
+for a previously created font of the desired type and create it if not already found.
+In some windowing systems, the font may be a scarce resource, so it is best to
+reuse old resources if possible. When an application finishes, all fonts will be
+deleted and their resources freed, eliminating the possibility of `memory leaks'.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxFont}{wxfont}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFontList::wxFontList}
+
+\func{}{wxFontList}{\void}
+
+Constructor. The application should not construct its own font list:
+use the object pointer {\bf wxTheFontList}.
+
+\membersection{wxFontList::AddFont}
+
+\func{void}{AddFont}{\param{wxFont *}{font}}
+
+Used by wxWindows to add a font to the list, called in the font constructor.
+
+\membersection{wxFontList::FindOrCreateFont}\label{findorcreatefont}
+
+\func{wxFont *}{FindOrCreateFont}{\param{int}{ point\_size}, \param{int}{ family}, \param{int}{ style}, \param{int}{ weight}, \param{bool}{ underline = FALSE},
+ \param{const wxString\& }{facename = NULL}}
+
+Finds a font of the given specification, or creates one and adds it to the list. See the \helpref{wxFont constructor}{wxfontconstr} for
+details of the arguments.
+
+\membersection{wxFontList::RemoveFont}
+
+\func{void}{RemoveFont}{\param{wxFont *}{font}}
+
+Used by wxWindows to remove a font from the list.
+
+
--- /dev/null
+\section{\class{wxFrame}}\label{wxframe}
+
+A frame is a window whose size and position can (usually) be changed by the user. It usually has
+thick borders and a title bar, and can optionally contain a menu bar, toolbar and
+status bar. A frame can contain any window that is not a frame or dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxICONIZE}}{Display the frame iconized (minimized) (Windows only).}
+\twocolitem{\windowstyle{wxCAPTION}}{Puts a caption on the frame.}
+\twocolitem{\windowstyle{wxDEFAULT\_FRAME\_STYLE}}{Defined as {\bf wxMINIMIZE\_BOX \pipe wxMAXIMIZE\_BOX \pipe wxTHICK\_FRAME \pipe wxSYSTEM\_MENU \pipe wxCAPTION}.}
+\twocolitem{\windowstyle{wxMINIMIZE}}{Identical to {\bf wxICONIZE}.}
+\twocolitem{\windowstyle{wxMINIMIZE\_BOX}}{Displays a minimize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxMAXIMIZE}}{Displays the frame maximized (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE\_BOX}}{Displays a maximize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows (Windows only).}
+\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu (Windows and Motif only).}
+\twocolitem{\windowstyle{wxTHICK\_FRAME}}{Displays a thick frame around the window (Windows and Motif only).}
+\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window (Motif only).}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+An application should normally define an \helpref{OnCloseWindow}{wxwindowonclosewindow} handler for the
+frame to respond to system close events, for example so that related data and subwindows can be cleaned up.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame}{wxmdiparentframe}, \helpref{wxMDIChildFrame}{wxmdichildframe},\rtfsp
+\helpref{wxMiniFrame}{wxminiframe}, \helpref{wxDialog}{wxdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxFrame::wxFrame}\label{wxframeconstr}
+
+\func{}{wxFrame}{\void}
+
+Default constructor.
+
+\func{}{wxFrame}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent. This may be NULL. If it is non-NULL, the frame will
+always be displayed on top of the parent window on Windows.}
+
+\docparam{id}{The window identifier. It may take a value of -1 to indicate a default value.}
+
+\docparam{title}{The caption to be displayed on the frame's title bar.}
+
+\docparam{pos}{The window position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The window size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxFrame}{wxframe}.}
+
+\docparam{name}{The name of the window. This parameter is used to associate a name with the item,
+allowing the application user to set Motif resource values for
+individual windows.}
+
+\wxheading{Remarks}
+
+For Motif, MWM (the Motif Window Manager) should be running for any window styles to work
+(otherwise all styles take effect).
+
+\wxheading{See also}
+
+\helpref{wxFrame::Create}{wxframecreate}
+
+\membersection{wxFrame::\destruct{wxFrame}}
+
+\func{void}{\destruct{wxFrame}}{\void}
+
+Destructor. Destroys all child windows and menu bar if present.
+
+\membersection{wxFrame::Centre}\label{wxframecentre}
+
+\func{void}{Centre}{\param{const int}{ direction = wxBOTH}}
+
+Centres the frame on the display.
+
+\wxheading{Parameters}
+
+\docparam{direction}{The parameter may be {\tt wxHORIZONTAL}, {\tt wxVERTICAL} or {\tt wxBOTH}.}
+
+\membersection{wxFrame::Command}\label{wxframecommand}
+
+\func{void}{Command}{\param{int }{id}}
+
+Simulate a menu command.
+
+\wxheading{Parameters}
+
+\docparam{id}{The identifier for a menu item.}
+
+\membersection{wxFrame::Create}\label{wxframecreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Used in two-step frame construction. See \helpref{wxFrame::wxFrame}{wxframeconstr}\rtfsp
+for further details.
+
+\membersection{wxFrame::CreateStatusBar}\label{wxframecreatestatusbar}
+
+\func{virtual bool}{CreateStatusBar}{\param{const int}{ number = 1}}
+
+Creates a status bar at the bottom of the frame.
+
+\wxheading{Parameters}
+
+\docparam{number}{The number of fields to create. Specify a
+value greater than 1 to create a multi-field status bar.}
+
+\wxheading{Return value}
+
+TRUE if the status bar was created successfully.
+
+\wxheading{Remarks}
+
+The width of the status bar is the whole width of the frame (adjusted automatically when
+resizing), and the height and text size are chosen by the host windowing system.
+
+By default, the status bar is an instance of wxStatusBar. To use a different class,
+override \helpref{wxFrame::OnCreateStatusBar}{wxframeoncreatestatusbar}.
+
+Note that you can put controls and other windows on the status bar if you wish.
+
+\wxheading{See also}
+
+\helpref{wxFrame::SetStatusText}{wxframesetstatustext},\rtfsp
+\helpref{wxFrame::OnCreateStatusBar}{wxframeoncreatestatusbar},\rtfsp
+\helpref{wxFrame::GetStatusBar}{wxframegetstatusbar}
+
+\membersection{wxFrame::GetMenuBar}\label{wxframegetmenubar}
+
+\constfunc{wxMenuBar*}{GetMenuBar}{\void}
+
+Returns a pointer to the menubar currently associated with the frame (if any).
+
+\wxheading{See also}
+
+\helpref{wxFrame::SetMenuBar}{wxframesetmenubar}, \helpref{wxMenuBar}{wxmenubar}, \helpref{wxMenu}{wxmenu}
+
+\membersection{wxFrame::GetStatusBar}\label{wxframegetstatusbar}
+
+\func{wxStatusBar*}{GetStatusBar}{\void}
+
+Returns a pointer to the status bar currently associated with the frame (if any).
+
+\wxheading{See also}
+
+\helpref{wxFrame::CreateStatusBar}{wxframecreatestatusbar}, \helpref{wxStatusBar}{wxstatusbar}
+
+\membersection{wxFrame::GetTitle}\label{wxframegettitle}
+
+\func{wxString\&}{GetTitle}{\void}
+
+Gets a temporary pointer to the frame title. See
+\helpref{wxFrame::SetTitle}{wxframesettitle}.
+
+\membersection{wxFrame::Iconize}\label{wxframeiconize}
+
+\func{void}{Iconize}{\param{const bool}{ iconize}}
+
+Iconizes or restores the frame.
+
+\wxheading{Parameters}
+
+\docparam{izonize}{If TRUE, iconizes the frame; if FALSE, shows and restores it.}
+
+\wxheading{See also}
+
+\helpref{wxFrame::IsIconized}{wxframeisiconized}, \helpref{wxFrame::Maximize}{wxframemaximize}.
+
+\membersection{wxFrame::IsIconized}\label{wxframeisiconized}
+
+\func{bool}{IsIconized}{\void}
+
+Returns TRUE if the frame is iconized.
+
+\membersection{wxFrame::LoadAccelerators}\label{wxframeloadaccelerators}
+
+\func{void}{LoadAccelerators}{\param{const wxString\& }{table}}
+
+Loads a keyboard accelerator table for this frame.
+
+\wxheading{Parameters}
+
+\docparam{table}{Accelerator table to load.}
+
+\wxheading{Return value}
+
+TRUE if the operation was successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+Accelerator tables map keystrokes onto control and menu identifiers, so the
+programmer does not have to explicitly program this correspondence.
+
+See the hello demo ({\tt hello.cpp} and {\tt hello.rc}) for
+an example of accelerator usage. This is a fragment from {\tt hello.rc}:
+
+\begin{verbatim}
+#define HELLO_LOAD_FILE 111
+
+menus_accel ACCELERATORS
+{
+
+"^L", HELLO_LOAD_FILE
+
+}
+\end{verbatim}
+
+This function only works under Windows.
+
+% huh? If you call LoadAccelerators, you need to override wxFrame::OnActivate to do nothing.
+
+\membersection{wxFrame::Maximize}\label{wxframemaximize}
+
+\func{void}{Maximize}{\param{const bool }{maximize}}
+
+Maximizes or restores the frame.
+
+\wxheading{Parameters}
+
+\docparam{maximize}{If TRUE, maximizes the frame, otherwise it restores it}.
+
+\wxheading{Remarks}
+
+This function only works under Windows.
+
+\wxheading{See also}
+
+\helpref{wxFrame::Iconize}{wxframeiconize}
+
+\membersection{wxFrame::OnActivate}
+
+\func{void}{OnActivate}{\param{bool}{ active}}
+
+Called when a window is activated or deactivated (MS Windows
+only). If the window is being activated, {\it active} is TRUE, else it
+is FALSE.
+
+If you call wxFrame::LoadAccelerators, you need to override this function e.g.
+
+\begin{verbatim}
+ void OnActivate(bool) {};
+\end{verbatim}
+
+\membersection{wxFrame::OnCreateStatusBar}\label{wxframeoncreatestatusbar}
+
+\func{virtual wxStatusBar*}{OnCreateStatusBar}{\param{const int }{number}}
+
+Virtual function called when a status bar is requested by \helpref{wxFrame::CreateStatusBar}{wxframecreatestatusbar}.
+
+\wxheading{Parameters}
+
+\docparam{number}{The number of fields to create.}
+
+\wxheading{Return value}
+
+A status bar object.
+
+\wxheading{Remarks}
+
+An application can override this function to return a different kind of status bar. The default
+implementation returns an instance of \helpref{wxStatusBar}{wxstatusbar}.
+
+\wxheading{See also}
+
+\helpref{wxFrame::CreateStatusBar}{wxframecreatestatusbar}, \helpref{wxStatusBar}{wxstatusbar}.
+
+\membersection{wxFrame::OnMenuCommand}\label{wxframeonmenucommand}
+
+\func{void}{OnMenuCommand}{\param{wxCommandEvent\&}{ event}}
+
+See \helpref{wxWindow::OnMenuCommand}{wxwindowonmenucommand}.
+
+\membersection{wxFrame::OnMenuHighlight}\label{wxframeonmenuhighlight}
+
+\func{void}{OnMenuHighlight}{\param{wxMenuEvent\&}{ event}}
+
+See \helpref{wxWindow::OnMenuHighlight}{wxwindowonmenuhighlight}.
+
+\membersection{wxFrame::OnSize}\label{wxframeonsize}
+
+\func{void}{OnSize}{\param{wxSizeEvent\& }{event}}
+
+See \helpref{wxWindow::OnSize}{wxwindowonsize}.
+
+The default {\bf wxFrame::OnSize} implementation looks for a single subwindow,
+and if one is found, resizes it to fit
+inside the frame. Override this member if more complex behaviour
+is required (for example, if there are several subwindows).
+
+\membersection{wxFrame::SetIcon}\label{wxframeseticon}
+
+\func{void}{SetIcon}{\param{const wxIcon\& }{icon}}
+
+Sets the icon for this frame.
+
+\wxheading{Parameters}
+
+\docparam{icon}{The icon to associate with this frame.}
+
+\wxheading{Remarks}
+
+The frame takes a `copy' of {\it icon}, but since it uses reference
+counting, the copy is very quick. It is safe to delete {\it icon} after
+calling this function.
+
+Under Windows, instead of using {\bf SetIcon}, you can add the
+following lines to your MS Windows resource file:
+
+\begin{verbatim}
+wxSTD_MDIPARENTFRAME ICON icon1.ico
+wxSTD_MDICHILDFRAME ICON icon2.ico
+wxSTD_FRAME ICON icon3.ico
+\end{verbatim}
+
+where icon1.ico will be used for the MDI parent frame, icon2.ico
+will be used for MDI child frames, and icon3.ico will be used for
+non-MDI frames.
+
+If these icons are not supplied, and {\bf SetIcon} is not called either,
+then the following defaults apply if you have included wx.rc.
+
+\begin{verbatim}
+wxDEFAULT_FRAME ICON std.ico
+wxDEFAULT_MDIPARENTFRAME ICON mdi.ico
+wxDEFAULT_MDICHILDFRAME ICON child.ico
+\end{verbatim}
+
+You can replace std.ico, mdi.ico and child.ico with your own defaults
+for all your wxWindows application. Currently they show the same icon.
+
+{\it Note:} a wxWindows application linked with subsystem equal to 4.0
+(i.e. marked as a Windows 95 application) doesn't respond properly
+to wxFrame::SetIcon. To work around this until a solution is found,
+mark your program as a 3.5 application. This will also ensure
+that Windows provides small icons for the application automatically.
+
+See also \helpref{wxIcon}{wxicon}.
+
+\membersection{wxFrame::SetMenuBar}\label{wxframesetmenubar}
+
+\func{void}{SetMenuBar}{\param{wxMenuBar* }{menuBar}}
+
+Tells the frame to show the given menu bar.
+
+\wxheading{Parameters}
+
+\docparam{menuBar}{The menu bar to associate with the frame.}
+
+\wxheading{Remarks}
+
+If the frame is destroyed, the
+menu bar and its menus will be destroyed also, so do not delete the menu
+bar explicitly (except by resetting the frame's menu bar to another
+frame or NULL).
+
+Under Windows, a call to \helpref{wxFrame::OnSize}{wxframeonsize} is generated, so be sure to initialize
+data members properly before calling {\bf SetMenuBar}.
+
+Note that it is not possible to call this function twice for the same frame object.
+
+\wxheading{See also}
+
+\helpref{wxFrame::GetMenuBar}{wxframegetmenubar}, \helpref{wxMenuBar}{wxmenubar}, \helpref{wxMenu}{wxmenu}.
+
+\membersection{wxFrame::SetStatusText}\label{wxframesetstatustext}
+
+\func{virtual void}{SetStatusText}{\param{const wxString\& }{ text}, \param{const int}{ number = 0}}
+
+Sets the status bar text and redraws the status bar.
+
+\wxheading{Parameters}
+
+\docparam{text}{The text for the status field.}
+
+\docparam{number}{The status field (starting from zero).}
+
+\wxheading{Remarks}
+
+Use an empty string to clear the status bar.
+
+\wxheading{See also}
+
+\helpref{wxFrame::CreateStatusBar}{wxframecreatestatusbar}, \helpref{wxStatusBar}{wxstatusbar}
+
+\membersection{wxFrame::SetStatusWidths}\label{wxframesetstatuswidths}
+
+\func{virtual void}{SetStatusWidths}{\param{const int}{ n}, \param{const int *}{widths}}
+
+Sets the widths of the fields in the status bar.
+
+\wxheading{Parameters}
+
+\wxheading{n}{The number of fields in the status bar. It must be the
+same used in \helpref{CreateStatusBar}{wxframecreatestatusbar}.}
+
+\docparam{widths}{Must contain an array of {\it n} integers, each of which is a status field width
+in pixels. A value of -1 indicates that the field is variable width; at least one
+field must be -1. You should delete this array after calling {\bf SetStatusWidths}.}
+
+\wxheading{Remarks}
+
+The widths of the variable fields are calculated from the total width of all fields,
+minus the sum of widths of the non-variable fields, divided by the number of
+variable fields.
+
+\membersection{wxFrame::SetTitle}\label{wxframesettitle}
+
+\func{virtual void}{SetTitle}{\param{const wxString\& }{ title}}
+
+Sets the frame title.
+
+\wxheading{Parameters}
+
+\docparam{title}{The frame title.}
+
+\wxheading{See also}
+
+\helpref{wxFrame::GetTitle}{wxframegettitle}
+
--- /dev/null
+\chapter{Functions}\label{functions}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}
+
+The functions defined in wxWindows are described here.
+
+\section{File functions}\label{filefunctions}
+
+See also \helpref{wxPathList}{wxpathlist}.
+
+\membersection{::wxDirExists}
+
+\func{bool}{wxDirExists}{\param{const wxString\& }{dirname}}
+
+Returns TRUE if the directory exists.
+
+\membersection{::wxDos2UnixFilename}
+
+\func{void}{Dos2UnixFilename}{\param{const wxString\& }{s}}
+
+Converts a DOS to a UNIX filename by replacing backslashes with forward
+slashes.
+
+\membersection{::wxFileExists}
+
+\func{bool}{wxFileExists}{\param{const wxString\& }{filename}}
+
+Returns TRUE if the file exists.
+
+\membersection{::wxFileNameFromPath}
+
+\func{wxString}{wxFileNameFromPath}{\param{const wxString\& }{path}}
+
+Returns a temporary pointer to the filename for a full path.
+Copy this pointer for long-term use.
+
+\membersection{::wxFindFirstFile}\label{wxfindfirstfile}
+
+\func{wxString}{wxFindFirstFile}{\param{const wxString\& }{spec}, \param{int}{ flags = 0}}
+
+This function does directory searching; returns the first file
+that matches the path {\it spec}, or NULL. Use \helpref{wxFindNextFile}{wxfindnextfile} to
+get the next matching file.
+
+{\it spec} may contain wildcards.
+
+{\it flags} is reserved for future use.
+
+The returned filename is a pointer to static memory so should
+not be freed.
+
+For example:
+
+\begin{verbatim}
+ wxString f = wxFindFirstFile("/home/project/*.*");
+ while (f)
+ {
+ ...
+ f = wxFindNextFile();
+ }
+\end{verbatim}
+
+\membersection{::wxFindNextFile}\label{wxfindnextfile}
+
+\func{wxString}{wxFindFirstFile}{\void}
+
+Returns the next file that matches the path passed to \helpref{wxFindFirstFile}{wxfindfirstfile}.
+
+\membersection{::wxIsAbsolutePath}
+
+\func{bool}{wxIsAbsolutePath}{\param{const wxString\& }{filename}}
+
+Returns TRUE if the argument is an absolute filename, i.e. with a slash
+or drive name at the beginning.
+
+\membersection{::wxPathOnly}
+
+\func{wxString}{wxPathOnly}{\param{const wxString\& }{path}}
+
+Returns a temporary pointer to the directory part of the filename. Copy this
+pointer for long-term use.
+
+\membersection{::wxUnix2DosFilename}
+
+\func{void}{wxUnix2DosFilename}{\param{const wxString\& }{s}}
+
+Converts a UNIX to a DOS filename by replacing forward
+slashes with backslashes.
+
+\membersection{::wxConcatFiles}
+
+\func{bool}{wxConcatFiles}{\param{const wxString\& }{file1}, \param{const wxString\& }{file2},
+\param{const wxString\& }{file3}}
+
+Concatenates {\it file1} and {\it file2} to {\it file3}, returning
+TRUE if successful.
+
+\membersection{::wxCopyFile}
+
+\func{bool}{wxCopyFile}{\param{const wxString\& }{file1}, \param{const wxString\& }{file2}}
+
+Copies {\it file1} to {\it file2}, returning TRUE if successful.
+
+\membersection{::wxGetHostName}\label{wxgethostname}
+
+\func{bool}{wxGetHostName}{\param{const wxString\& }{buf}, \param{int }{sz}}
+
+Copies the current host machine's name into the supplied buffer.
+
+Under Windows or NT, this function first looks in the environment
+variable SYSTEM\_NAME; if this is not found, the entry {\bf HostName}\rtfsp
+in the {\bf wxWindows} section of the WIN.INI file is tried.
+
+Returns TRUE if successful, FALSE otherwise.
+
+\membersection{::wxGetEmailAddress}\label{wxgetemailaddress}
+
+\func{bool}{wxGetEmailAddress}{\param{const wxString\& }{buf}, \param{int }{sz}}
+
+Copies the user's email address into the supplied buffer, by
+concatenating the values returned by \helpref{wxGetHostName}{wxgethostname}\rtfsp
+and \helpref{wxGetUserId}{wxgetuserid}.
+
+Returns TRUE if successful, FALSE otherwise.
+
+\membersection{::wxGetUserId}\label{wxgetuserid}
+
+\func{bool}{wxGetUserId}{\param{const wxString\& }{buf}, \param{int }{sz}}
+
+Copies the current user id into the supplied buffer.
+
+Under Windows or NT, this function first looks in the environment
+variables USER and LOGNAME; if neither of these is found, the entry {\bf UserId}\rtfsp
+in the {\bf wxWindows} section of the WIN.INI file is tried.
+
+Returns TRUE if successful, FALSE otherwise.
+
+\membersection{::wxGetUserName}\label{wxgetusername}
+
+\func{bool}{wxGetUserName}{\param{const wxString\& }{buf}, \param{int }{sz}}
+
+Copies the current user name into the supplied buffer.
+
+Under Windows or NT, this function looks for the entry {\bf UserName}\rtfsp
+in the {\bf wxWindows} section of the WIN.INI file. If PenWindows
+is running, the entry {\bf Current} in the section {\bf User} of
+the PENWIN.INI file is used.
+
+Returns TRUE if successful, FALSE otherwise.
+
+\membersection{::wxGetWorkingDirectory}
+
+\func{wxString}{wxGetWorkingDirectory}{\param{const wxString\& }{buf=NULL}, \param{int }{sz=1000}}
+
+Copies the current working directory into the buffer if supplied, or
+copies the working directory into new storage (which you must delete yourself)
+if the buffer is NULL.
+
+{\it sz} is the size of the buffer if supplied.
+
+\membersection{::wxGetTempFileName}
+
+\func{wxString}{wxGetTempFileName}{\param{const wxString\& }{prefix}, \param{const wxString\& }{buf=NULL}}
+
+Makes a temporary filename based on {\it prefix}, opens and closes the file,
+and places the name in {\it buf}. If {\it buf} is NULL, new store
+is allocated for the temporary filename using {\it new}.
+
+Under Windows, the filename will include the drive and name of the
+directory allocated for temporary files (usually the contents of the
+TEMP variable). Under UNIX, the {\tt /tmp} directory is used.
+
+It is the application's responsibility to create and delete the file.
+
+\membersection{::wxIsWild}\label{wxiswild}
+
+\func{bool}{wxIsWild}{\param{const wxString\& }{pattern}}
+
+Returns TRUE if the pattern contains wildcards. See \helpref{wxMatchWild}{wxmatchwild}.
+
+\membersection{::wxMatchWild}\label{wxmatchwild}
+
+\func{bool}{wxMatchWild}{\param{const wxString\& }{pattern}, \param{const wxString\& }{text}, \param{bool}{ dot\_special}}
+
+Returns TRUE if the {\it pattern}\/ matches the {\it text}\/; if {\it
+dot\_special}\/ is TRUE, filenames beginning with a dot are not matched
+with wildcard characters. See \helpref{wxIsWild}{wxiswild}.
+
+\membersection{::wxMkdir}
+
+\func{bool}{wxMkdir}{\param{const wxString\& }{dir}}
+
+Makes the directory {\it dir}, returning TRUE if successful.
+
+\membersection{::wxRemoveFile}
+
+\func{bool}{wxRemoveFile}{\param{const wxString\& }{file}}
+
+Removes {\it file}, returning TRUE if successful.
+
+\membersection{::wxRenameFile}
+
+\func{bool}{wxRenameFile}{\param{const wxString\& }{file1}, \param{const wxString\& }{file2}}
+
+Renames {\it file1} to {\it file2}, returning TRUE if successful.
+
+\membersection{::wxRmdir}
+
+\func{bool}{wxRmdir}{\param{const wxString\& }{dir}, \param{int}{ flags=0}}
+
+Removes the directory {\it dir}, returning TRUE if successful. Does not work under VMS.
+
+The {\it flags} parameter is reserved for future use.
+
+\membersection{::wxSetWorkingDirectory}
+
+\func{bool}{wxSetWorkingDirectory}{\param{const wxString\& }{dir}}
+
+Sets the current working directory, returning TRUE if the operation succeeded.
+Under MS Windows, the current drive is also changed if {\it dir} contains a drive specification.
+
+\section{String functions}
+
+\membersection{::copystring}
+
+\func{char*}{copystring}{\param{const char* }{s}}
+
+Makes a copy of the string {\it s} using the C++ new operator, so it can be
+deleted with the {\it delete} operator.
+
+\membersection{::wxStringMatch}
+
+\func{bool}{wxStringMatch}{\param{const wxString\& }{s1}, \param{const wxString\& }{s2},\\
+ \param{bool}{ subString = TRUE}, \param{bool}{ exact = FALSE}}
+
+Returns TRUE if the substring {\it s1} is found within {\it s2},
+ignoring case if {\it exact} is FALSE. If {\it subString} is FALSE,
+no substring matching is done.
+
+\membersection{::wxStringEq}\label{wxstringeq}
+
+\func{bool}{wxStringEq}{\param{const wxString\& }{s1}, \param{const wxString\& }{s2}}
+
+A macro defined as:
+
+\begin{verbatim}
+#define wxStringEq(s1, s2) (s1 && s2 && (strcmp(s1, s2) == 0))
+\end{verbatim}
+
+\membersection{::wxTransferFileToStream}\label{wxtransferfiletostream}
+
+\func{bool}{wxTransferFileToStream}{\param{const wxString\& }{filename}, \param{ostream\& }{stream}}
+
+Copies the given file to {\it stream}. Useful when converting an old application to
+use streams (within the document/view framework, for example).
+
+Use of this function requires the file wx\_doc.h to be included.
+
+\membersection{::wxTransferStreamToFile}\label{wxtransferstreamtofile}
+
+\func{bool}{wxTransferStreamToFile}{\param{istream\& }{stream} \param{const wxString\& }{filename}}
+
+Copies the given stream to the file {\it filename}. Useful when converting an old application to
+use streams (within the document/view framework, for example).
+
+Use of this function requires the file wx\_doc.h to be included.
+
+\section{Dialog functions}\label{dialogfunctions}
+
+Below are a number of convenience functions for getting input from the
+user or displaying messages. Note that in these functions the last three
+parameters are optional. However, it is recommended to pass a parent frame
+parameter, or (in MS Windows or Motif) the wrong window frame may be brought to
+the front when the dialog box is popped up.
+
+\membersection{::wxFileSelector}\label{wxfileselector}
+
+\func{wxString}{wxFileSelector}{\param{const wxString\& }{message}, \param{const wxString\& }{default\_path = NULL},\\
+ \param{const wxString\& }{default\_filename = NULL}, \param{const wxString\& }{default\_extension = NULL},\\
+ \param{const wxString\& }{wildcard = ``*.*''}, \param{int }{flags = 0}, \param{wxWindow *}{parent = NULL},\\
+ \param{int}{ x = -1}, \param{int}{ y = -1}}
+
+Pops up a file selector box. In Windows, this is the common file selector
+dialog. In X, this is a file selector box with somewhat less functionality.
+The path and filename are distinct elements of a full file pathname.
+If path is NULL, the current directory will be used. If filename is NULL,
+no default filename will be supplied. The wildcard determines what files
+are displayed in the file selector, and file extension supplies a type
+extension for the required filename. Flags may be a combination of wxOPEN,
+wxSAVE, wxOVERWRITE\_PROMPT, wxHIDE\_READONLY, or 0. They are only significant
+at present in Windows.
+
+Both the X and Windows versions implement a wildcard filter. Typing a
+filename containing wildcards (*, ?) in the filename text item, and
+clicking on Ok, will result in only those files matching the pattern being
+displayed. In the X version, supplying no default name will result in the
+wildcard filter being inserted in the filename text item; the filter is
+ignored if a default name is supplied.
+
+Under Windows (only), the wildcard may be a specification for multiple
+types of file with a description for each, such as:
+
+\begin{verbatim}
+ "BMP files (*.bmp) | *.bmp | GIF files (*.gif) | *.gif"
+\end{verbatim}
+
+The application must check for a NULL return value (the user pressed
+Cancel). For example:
+
+\begin{verbatim}
+const wxString\& s = wxFileSelector("Choose a file to open");
+if (s)
+{
+ ...
+}
+\end{verbatim}
+
+Remember that the returned pointer is temporary and should be copied
+if other wxWindows calls will be made before the value is to be used.
+
+\membersection{::wxGetTextFromUser}\label{wxgettextfromuser}
+
+\func{wxString}{wxGetTextFromUser}{\param{const wxString\& }{message}, \param{const wxString\& }{caption = ``Input text"},\\
+ \param{const wxString\& }{default\_value = ``"}, \param{wxWindow *}{parent = NULL},\\
+ \param{int}{ x = -1}, \param{int}{ y = -1}, \param{bool}{ centre = TRUE}}
+
+Pop up a dialog box with title set to {\it caption}, message {\it message}, and a
+\rtfsp{\it default\_value}. The user may type in text and press OK to return this text,
+or press Cancel to return NULL.
+
+If {\it centre} is TRUE, the message text (which may include new line characters)
+is centred; if FALSE, the message is left-justified.
+
+\membersection{::wxGetMultipleChoice}\label{wxgetmultiplechoice}
+
+\func{int}{wxGetMultipleChoice}{\param{const wxString\& }{message}, \param{const wxString\& }{caption}, \param{int}{ n}, \param{const wxString\& }{choices[]},\\
+ \param{int }{nsel}, \param{int *}{selection},
+ \param{wxWindow *}{parent = NULL}, \param{int}{ x = -1}, \param{int}{ y = -1},\\
+ \param{bool}{ centre = TRUE}, \param{int }{width=150}, \param{int }{height=200}}
+
+Pops up a dialog box containing a message, OK/Cancel buttons and a multiple-selection
+listbox. The user may choose one or more item(s) and press OK or Cancel.
+
+The number of initially selected choices, and array of the selected indices,
+are passed in; this array will contain the user selections on exit, with
+the function returning the number of selections. {\it selection} must be
+as big as the number of choices, in case all are selected.
+
+If Cancel is pressed, -1 is returned.
+
+{\it choices} is an array of {\it n} strings for the listbox.
+
+If {\it centre} is TRUE, the message text (which may include new line characters)
+is centred; if FALSE, the message is left-justified.
+
+\membersection{::wxGetSingleChoice}\label{wxgetsinglechoice}
+
+\func{wxString}{wxGetSingleChoice}{\param{const wxString\& }{message}, \param{const wxString\& }{caption}, \param{int}{ n}, \param{const wxString\& }{choices[]},\\
+ \param{wxWindow *}{parent = NULL}, \param{int}{ x = -1}, \param{int}{ y = -1},\\
+ \param{bool}{ centre = TRUE}, \param{int }{width=150}, \param{int }{height=200}}
+
+Pops up a dialog box containing a message, OK/Cancel buttons and a single-selection
+listbox. The user may choose an item and press OK to return a string or
+Cancel to return NULL.
+
+{\it choices} is an array of {\it n} strings for the listbox.
+
+If {\it centre} is TRUE, the message text (which may include new line characters)
+is centred; if FALSE, the message is left-justified.
+
+\membersection{::wxGetSingleChoiceIndex}\label{wxgetsinglechoiceindex}
+
+\func{int}{wxGetSingleChoiceIndex}{\param{const wxString\& }{message}, \param{const wxString\& }{caption}, \param{int}{ n}, \param{const wxString\& }{choices[]},\\
+ \param{wxWindow *}{parent = NULL}, \param{int}{ x = -1}, \param{int}{ y = -1},\\
+ \param{bool}{ centre = TRUE}, \param{int }{width=150}, \param{int }{height=200}}
+
+As {\bf wxGetSingleChoice} but returns the index representing the selected string.
+If the user pressed cancel, -1 is returned.
+
+\membersection{::wxGetSingleChoiceData}\label{wxgetsinglechoicedata}
+
+\func{wxString}{wxGetSingleChoiceData}{\param{const wxString\& }{message}, \param{const wxString\& }{caption}, \param{int}{ n}, \param{const wxString\& }{choices[]},\\
+ \param{const wxString\& }{client\_data[]}, \param{wxWindow *}{parent = NULL}, \param{int}{ x = -1},\\
+ \param{int}{ y = -1}, \param{bool}{ centre = TRUE}, \param{int }{width=150}, \param{int }{height=200}}
+
+As {\bf wxGetSingleChoice} but takes an array of client data pointers
+corresponding to the strings, and returns one of these pointers.
+
+\membersection{::wxMessageBox}\label{wxmessagebox}
+
+\func{int}{wxMessageBox}{\param{const wxString\& }{message}, \param{const wxString\& }{caption = ``Message"}, \param{int}{ style = wxOK \pipe wxCENTRE},\\
+ \param{wxWindow *}{parent = NULL}, \param{int}{ x = -1}, \param{int}{ y = -1}}
+
+General purpose message dialog. {\it style} may be a bit list of the
+following identifiers:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxYES\_NO}{Puts Yes and No buttons on the message box. May be combined with
+wxCANCEL.}
+\twocolitem{wxCANCEL}{Puts a Cancel button on the message box. May be combined with
+wxYES\_NO or wxOK.}
+\twocolitem{wxOK}{Puts an Ok button on the message box. May be combined with wxCANCEL.}
+\twocolitem{wxCENTRE}{Centres the text.}
+\twocolitem{wxICON\_EXCLAMATION}{Under Windows, displays an exclamation mark symbol.}
+\twocolitem{wxICON\_HAND}{Under Windows, displays a hand symbol.}
+\twocolitem{wxICON\_QUESTION}{Under Windows, displays a question mark symbol.}
+\twocolitem{wxICON\_INFORMATION}{Under Windows, displays an information symbol.}
+\end{twocollist}
+
+The return value is one of: wxYES, wxNO, wxCANCEL, wxOK.
+
+For example:
+
+\begin{verbatim}
+ ...
+ int answer = wxMessageBox("Quit program?", "Confirm",
+ wxYES_NO | wxCANCEL, main_frame);
+ if (answer == wxYES)
+ delete main_frame;
+ ...
+\end{verbatim}
+
+{\it message} may contain newline characters, in which case the
+message will be split into separate lines, to cater for large messages.
+
+Under Windows, the native MessageBox function is used unless wxCENTRE
+is specified in the style, in which case a generic function is used.
+This is because the native MessageBox function cannot centre text.
+The symbols are not shown when the generic function is used.
+
+\section{GDI functions}\label{gdifunctions}
+
+The following are relevant to the GDI (Graphics Device Interface).
+
+\membersection{::wxColourDisplay}
+
+\func{bool}{wxColourDisplay}{\void}
+
+Returns TRUE if the display is colour, FALSE otherwise.
+
+\membersection{::wxDisplayDepth}
+
+\func{int}{wxDisplayDepth}{\void}
+
+Returns the depth of the display (a value of 1 denotes a monochrome display).
+
+\membersection{::wxMakeMetaFilePlaceable}\label{wxmakemetafileplaceable}
+
+\func{bool}{wxMakeMetaFilePlaceable}{\param{const wxString\& }{filename}, \param{int }{minX}, \param{int }{minY},
+ \param{int }{maxX}, \param{int }{maxY}, \param{float }{scale=1.0}}
+
+Given a filename for an existing, valid metafile (as constructed using \helpref{wxMetaFileDC}{wxmetafiledc})
+makes it into a placeable metafile by prepending a header containing the given
+bounding box. The bounding box may be obtained from a device context after drawing
+into it, using the functions wxDC::MinX, wxDC::MinY, wxDC::MaxX and wxDC::MaxY.
+
+In addition to adding the placeable metafile header, this function adds
+the equivalent of the following code to the start of the metafile data:
+
+\begin{verbatim}
+ SetMapMode(dc, MM_ANISOTROPIC);
+ SetWindowOrg(dc, minX, minY);
+ SetWindowExt(dc, maxX - minX, maxY - minY);
+\end{verbatim}
+
+This simulates the MM\_TEXT mapping mode, which wxWindows assumes.
+
+Placeable metafiles may be imported by many Windows applications, and can be
+used in RTF (Rich Text Format) files.
+
+{\it scale} allows the specification of scale for the metafile.
+
+This function is only available under Windows.
+
+\membersection{::wxSetCursor}\label{wxsetcursor}
+
+\func{void}{wxSetCursor}{\param{wxCursor *}{cursor}}
+
+Globally sets the cursor; only has an effect in MS Windows.
+See also \helpref{wxCursor}{wxcursor}, \helpref{wxWindow::SetCursor}{wxwindowsetcursor}.
+
+\section{System event functions}
+
+The wxWindows system event implementation is incomplete and
+experimental, but is intended to be a platform-independent way of
+intercepting and sending events, including defining
+application-specific events and handlers.
+
+Ultimately it is intended to be used as a way of testing wxWindows
+applications using scripts, although there are currently
+problems with this (especially with modal dialogs).
+
+All this is documented more to provoke comments and suggestions, and
+jog my own memory, rather than to be used, since it has not been
+tested. However {\bf wxSendEvent} will probably work if you
+instantiate the event structure properly for a command event type (see
+the code in {\tt wb\_panel.cpp} for \helpref{wxWindow::OnDefaultAction}{wxwindowondefaultaction}\rtfsp
+which uses {\bf wxSendEvent} to send a command to the default button).
+
+\membersection{::wxAddPrimaryEventHandler}
+
+\func{bool}{wxAddPrimaryEventHandler}{\param{wxEventHandler}{ handlerFunc}}
+
+Add a primary event handler---the normal event handler for this
+event. For built-in events, these would include moving and resizing
+windows. User-defined primary events might include the code to
+select an image in a diagram (which could of course be achieved by a series
+of external events for mouse-clicking, but would be more difficult to specify
+and less robust).
+
+Returns TRUE if it succeeds.
+
+An event handler takes a pointer to a wxEvent and a boolean flag which is
+TRUE if the event was externally generated, and returns a boolean which is
+TRUE if that event was handled.
+
+\membersection{::wxAddSecondaryEventHandler}
+
+\func{bool}{wxAddSecondaryEventHandler}{\param{wxEventHandler}{ handlerFunc}, \param{bool}{ pre},\\
+ \param{bool}{ override}, \param{bool }{append}}
+
+Add a secondary event handler, pre = TRUE iff it should be called before the
+event is executed. override = TRUE iff the handler is allowed to override
+all subsequent events by returning TRUE. Returns TRUE if succeeds.
+
+A secondary event handler is an application-defined handler that may
+intercept normal events, possibly overriding them. A primary event handler
+provides the normal behaviour for the event.
+
+An event handler takes a pointer to a wxEvent and a boolean flag which is
+TRUE if the event was externally generated, and returns a boolean which is
+TRUE if that event was handled.
+
+\membersection{::wxNotifyEvent}
+
+\func{bool}{wxNotifyEvent}{\param{wxEvent\&}{ event}, \param{bool}{ pre}}
+
+Notify the system of the event you are about to execute/have just
+executed. If TRUE is returned and pre = TRUE, the calling code should
+not execute the event (since it has been intercepted by a handler and
+vetoed).
+
+These events are always internal, because they're generated from within
+the main application code.
+
+\membersection{::wxRegisterEventClass}
+
+\func{void}{wxRegisterEventClass}{\param{WXTYPE}{ eventClassId},\param{WXTYPE}{ superClassId},\\
+ \param{wxEventConstructor}{ constructor}, \param{const wxString\& }{description}}
+
+Register a new event class (derived from wxEvent), giving the new
+event class type, its superclass, a function for creating a new event
+object of this class, and an optional description.
+
+\membersection{::wxRegisterEventName}
+
+\func{void}{wxRegisterEventName}{\param{WXTYPE}{ eventTypeId},\param{WXTYPE}{ eventClassId},\\
+ \param{const wxString\& }{eventName}}
+
+Register the name of the event. This will allow a simple command
+language where giving the event type name and some arguments will
+cause a new event of class {\it eventClassId} to be created, with given
+event type, and some arguments, allows an event to be dynamically
+constructed and sent.
+
+\membersection{::wxRegisterExternalEventHandlers}
+
+\func{void}{wxRegisterExternalEventHandlers}{\void}
+
+Define this and link before wxWindows library to allow registering
+events from `outside' the main application.
+
+\membersection{::wxRemoveSecondaryEventHandler}
+
+\func{bool}{wxRemoveSecondaryEventHandler}{\param{wxEventHandler}{ handlerFunc}, \param{bool}{ pre}}
+
+Remove a secondary event handler. Returns TRUE if it succeeds.
+
+\membersection{::wxSendEvent}\label{wxsendevent}
+
+\func{bool}{wxSendEvent}{\param{wxEvent\&}{ event}, \param{bool}{ external}}
+
+Send an event to the system; usually it will be external, but set
+external to FALSE if calling from within the main application in
+response to other events.
+
+Returns TRUE if the event was processed.
+
+\section{Printer settings}\label{printersettings}
+
+The following functions are used to control PostScript printing. Under
+Windows, PostScript output can only be sent to a file.
+
+\membersection{::wxGetPrinterCommand}
+
+\func{wxString}{wxGetPrinterCommand}{\void}
+
+Gets the printer command used to print a file. The default is {\tt lpr}.
+
+\membersection{::wxGetPrinterFile}
+
+\func{wxString}{wxGetPrinterFile}{\void}
+
+Gets the PostScript output filename.
+
+\membersection{::wxGetPrinterMode}
+
+\func{int}{wxGetPrinterMode}{\void}
+
+Gets the printing mode controlling where output is sent (PS\_PREVIEW, PS\_FILE or PS\_PRINTER).
+The default is PS\_PREVIEW.
+
+\membersection{::wxGetPrinterOptions}
+
+\func{wxString}{wxGetPrinterOptions}{\void}
+
+Gets the additional options for the print command (e.g. specific printer). The default is nothing.
+
+\membersection{::wxGetPrinterOrientation}
+
+\func{int}{wxGetPrinterOrientation}{\void}
+
+Gets the orientation (PS\_PORTRAIT or PS\_LANDSCAPE). The default is PS\_PORTRAIT.
+
+\membersection{::wxGetPrinterPreviewCommand}
+
+\func{wxString}{wxGetPrinterPreviewCommand}{\void}
+
+Gets the command used to view a PostScript file. The default depends on the platform.
+
+\membersection{::wxGetPrinterScaling}
+
+\func{void}{wxGetPrinterScaling}{\param{float *}{x}, \param{float *}{y}}
+
+Gets the scaling factor for PostScript output. The default is 1.0, 1.0.
+
+\membersection{::wxGetPrinterTranslation}
+
+\func{void}{wxGetPrinterTranslation}{\param{float *}{x}, \param{float *}{y}}
+
+Gets the translation (from the top left corner) for PostScript output. The default is 0.0, 0.0.
+
+\membersection{::wxSetPrinterCommand}
+
+\func{void}{wxSetPrinterCommand}{\param{const wxString\& }{command}}
+
+Sets the printer command used to print a file. The default is {\tt lpr}.
+
+\membersection{::wxSetPrinterFile}
+
+\func{void}{wxSetPrinterFile}{\param{const wxString\& }{filename}}
+
+Sets the PostScript output filename.
+
+\membersection{::wxSetPrinterMode}
+
+\func{void}{wxSetPrinterMode}{\param{int }{mode}}
+
+Sets the printing mode controlling where output is sent (PS\_PREVIEW, PS\_FILE or PS\_PRINTER).
+The default is PS\_PREVIEW.
+
+\membersection{::wxSetPrinterOptions}
+
+\func{void}{wxSetPrinterOptions}{\param{const wxString\& }{options}}
+
+Sets the additional options for the print command (e.g. specific printer). The default is nothing.
+
+\membersection{::wxSetPrinterOrientation}
+
+\func{void}{wxSetPrinterOrientation}{\param{int}{ orientation}}
+
+Sets the orientation (PS\_PORTRAIT or PS\_LANDSCAPE). The default is PS\_PORTRAIT.
+
+\membersection{::wxSetPrinterPreviewCommand}
+
+\func{void}{wxSetPrinterPreviewCommand}{\param{const wxString\& }{command}}
+
+Sets the command used to view a PostScript file. The default depends on the platform.
+
+\membersection{::wxSetPrinterScaling}
+
+\func{void}{wxSetPrinterScaling}{\param{float }{x}, \param{float }{y}}
+
+Sets the scaling factor for PostScript output. The default is 1.0, 1.0.
+
+\membersection{::wxSetPrinterTranslation}
+
+\func{void}{wxSetPrinterTranslation}{\param{float }{x}, \param{float }{y}}
+
+Sets the translation (from the top left corner) for PostScript output. The default is 0.0, 0.0.
+
+\section{Clipboard functions}\label{clipsboard}
+
+These clipboard functions are implemented for Windows only.
+
+\membersection{::wxClipboardOpen}
+
+\func{bool}{wxClipboardOpen}{\void}
+
+Returns TRUE if this application has already opened the clipboard.
+
+\membersection{::wxCloseClipboard}
+
+\func{bool}{wxCloseClipboard}{\void}
+
+Closes the clipboard to allow other applications to use it.
+
+\membersection{::wxEmptyClipboard}
+
+\func{bool}{wxEmptyClipboard}{\void}
+
+Empties the clipboard.
+
+\membersection{::wxEnumClipboardFormats}
+
+\func{int}{wxEnumClipboardFormats}{\param{int}{dataFormat}}
+
+Enumerates the formats found in a list of available formats that belong
+to the clipboard. Each call to this function specifies a known
+available format; the function returns the format that appears next in
+the list.
+
+{\it dataFormat} specifies a known format. If this parameter is zero,
+the function returns the first format in the list.
+
+The return value specifies the next known clipboard data format if the
+function is successful. It is zero if the {\it dataFormat} parameter specifies
+the last format in the list of available formats, or if the clipboard
+is not open.
+
+Before it enumerates the formats function, an application must open the clipboard by using the
+wxOpenClipboard function.
+
+\membersection{::wxGetClipboardData}
+
+\func{wxObject *}{wxGetClipboardData}{\param{int}{dataFormat}}
+
+Gets data from the clipboard.
+
+{\it dataFormat} may be one of:
+
+\begin{itemize}\itemsep=0pt
+\item wxCF\_TEXT or wxCF\_OEMTEXT: returns a pointer to new memory containing a null-terminated text string.
+\item wxCF\_BITMAP: returns a new wxBitmap.
+\end{itemize}
+
+The clipboard must have previously been opened for this call to succeed.
+
+\membersection{::wxGetClipboardFormatName}
+
+\func{bool}{wxGetClipboardFormatName}{\param{int}{dataFormat}, \param{const wxString\& }{formatName}, \param{int}{maxCount}}
+
+Gets the name of a registered clipboard format, and puts it into the buffer {\it formatName} which is of maximum
+length {\it maxCount}. {\it dataFormat} must not specify a predefined clipboard format.
+
+\membersection{::wxIsClipboardFormatAvailable}
+
+\func{bool}{wxIsClipboardFormatAvailable}{\param{int}{dataFormat}}
+
+Returns TRUE if the given data format is available on the clipboard.
+
+\membersection{::wxOpenClipboard}
+
+\func{bool}{wxOpenClipboard}{\void}
+
+Opens the clipboard for passing data to it or getting data from it.
+
+\membersection{::wxRegisterClipboardFormat}
+
+\func{int}{wxRegisterClipboardFormat}{\param{const wxString\& }{formatName}}
+
+Registers the clipboard data format name and returns an identifier.
+
+\membersection{::wxSetClipboardData}
+
+\func{bool}{wxSetClipboardData}{\param{int}{dataFormat}, \param{wxObject *}{data}, \param{int}{width}, \param{int}{height}}
+
+Passes data to the clipboard.
+
+{\it dataFormat} may be one of:
+
+\begin{itemize}\itemsep=0pt
+\item wxCF\_TEXT or wxCF\_OEMTEXT: {\it data} is a null-terminated text string.
+\item wxCF\_BITMAP: {\it data} is a wxBitmap.
+\item wxCF\_DIB: {\it data} is a wxBitmap. The bitmap is converted to a DIB (device independent bitmap).
+\item wxCF\_METAFILE: {\it data} is a wxMetaFile. {\it width} and {\it height} are used to give recommended dimensions.
+\end{itemize}
+
+The clipboard must have previously been opened for this call to succeed.
+
+\section{Miscellaneous functions}\label{miscellany}
+
+\membersection{::NewId}
+
+\func{long}{NewId}{\void}
+
+Generates an integer identifier unique to this run of the program.
+
+\membersection{::RegisterId}
+
+\func{void}{RegisterId}{\param{long}{ id}}
+
+Ensures that ids subsequently generated by {\bf NewId} do not clash with
+the given {\bf id}.
+
+\membersection{::wxBeginBusyCursor}\label{wxbeginbusycursor}
+
+\func{void}{wxBeginBusyCursor}{\param{wxCursor *}{cursor = wxHOURGLASS\_CURSOR}}
+
+Changes the cursor to the given cursor for all windows in the application.
+Use \helpref{wxEndBusyCursor}{wxendbusycursor} to revert the cursor back
+to its previous state. These two calls can be nested, and a counter
+ensures that only the outer calls take effect.
+
+See also \helpref{wxIsBusy}{wxisbusy}.
+
+\membersection{::wxBell}
+
+\func{void}{wxBell}{\void}
+
+Ring the system bell.
+
+\membersection{::wxCleanUp}\label{wxcleanup}
+
+\func{void}{wxCleanUp}{\void}
+
+Normally, wxWindows will call this cleanup function for you. However, if
+you call \helpref{wxEntry}{wxentry} in order to initialize wxWindows
+manually, then you should also call wxCleanUp before terminating wxWindows,
+if wxWindows does not get a chance to do it.
+
+\membersection{::wxCreateDynamicObject}\label{wxcreatedynamicobject}
+
+\func{wxObject *}{wxCreateDynamicObject}{\param{const wxString\& }{className}}
+
+Creates and returns an object of the given class, if the class has been
+registered with the dynamic class system using DECLARE... and IMPLEMENT... macros.
+
+\membersection{::wxDebugMsg}
+
+\func{void}{wxDebugMsg}{\param{const wxString\& }{fmt}, \param{...}{}}
+
+Display a debugging message; under Windows, this will appear on the
+debugger command window, and under UNIX, it will be written to standard
+error.
+
+The syntax is identical to {\bf printf}: pass a format string and a
+variable list of arguments.
+
+Note that under Windows, you can see the debugging messages without a
+debugger if you have the DBWIN debug log application that comes with
+Microsoft C++.
+
+{\bf Tip:} under Windows, if your application crashes before the
+message appears in the debugging window, put a wxYield call after
+each wxDebugMsg call. wxDebugMsg seems to be broken under WIN32s
+(at least for Watcom C++): preformat your messages and use OutputDebugString
+instead.
+
+\membersection{::wxDisplaySize}
+
+\func{void}{wxDisplaySize}{\param{int *}{width}, \param{int *}{height}}
+
+Gets the physical size of the display in pixels.
+
+\membersection{::wxEntry}\label{wxentry}
+
+This initializes wxWindows in a platform-dependent way. Use this if you
+are not using the default wxWindows entry code (e.g. main or WinMain). For example,
+you can initialize wxWindows from an Microsoft Foundation Classes application using
+this function. See also \helpref{wxCleanUp}{wxcleanup}.
+
+\func{void}{wxEntry}{\param{HANDLE}{ hInstance}, \param{HANDLE}{ hPrevInstance},
+ \param{const wxString\& }{commandLine}, \param{int}{ cmdShow}, \param{bool}{ enterLoop = TRUE}}
+
+wxWindows initialization under Windows (non-DLL). If {\it enterLoop} is FALSE, the
+function will return immediately after calling wxApp::OnInit. Otherwise, the wxWindows
+message loop will be entered.
+
+\func{void}{wxEntry}{\param{HANDLE}{ hInstance}, \param{HANDLE}{ hPrevInstance},
+ \param{WORD}{ wDataSegment}, \param{WORD}{ wHeapSize}, \param{const wxString\& }{ commandLine}}
+
+wxWindows initialization under Windows (for applications constructed as a DLL).
+
+\func{int}{wxEntry}{\param{int}{ argc}, \param{const wxString\& *}{argv}}
+
+wxWindows initialization under UNIX.
+
+\membersection{::wxError}\label{wxerror}
+
+\func{void}{wxError}{\param{const wxString\& }{msg}, \param{const wxString\& }{title = "wxWindows Internal Error"}}
+
+Displays {\it msg} and continues. This writes to standard error under
+UNIX, and pops up a message box under Windows. Used for internal
+wxWindows errors. See also \helpref{wxFatalError}{wxfatalerror}.
+
+\membersection{::wxEndBusyCursor}\label{wxendbusycursor}
+
+\func{void}{wxEndBusyCursor}{\void}
+
+Changes the cursor back to the original cursor, for all windows in the application.
+Use with \helpref{wxBeginBusyCursor}{wxbeginbusycursor}.
+
+See also \helpref{wxIsBusy}{wxisbusy}.
+
+\membersection{::wxExecute}\label{wxexecute}
+
+\func{long}{wxExecute}{\param{const wxString\& }{command}, \param{bool }{sync = FALSE}}
+
+\func{long}{wxExecute}{\param{const wxString\& *}{argv}, \param{bool }{sync = FALSE}}
+
+Executes another program in UNIX or Windows.
+
+The first form takes a command string, such as {\tt "emacs file.txt"}.
+
+The second form takes an array of values: a command, any number of
+arguments, terminated by NULL.
+
+If {\it sync} is FALSE (the default), flow of control immediately returns.
+If TRUE, the current application waits until the other program has terminated.
+
+If execution is asynchronous, the return value is the process id,
+otherwise it is a status value. A zero value indicates that the command could not
+be executed.
+
+See also \helpref{wxShell}{wxshell}.
+
+\membersection{::wxExit}\label{wxexit}
+
+\func{void}{wxExit}{\void}
+
+Exits application after calling \helpref{wxApp::OnExit}{wxapponexit}.
+Should only be used in an emergency: normally the top-level frame
+should be deleted (after deleting all other frames) to terminate the
+application. See \helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow} and \helpref{wxApp}{wxapp}.
+
+\membersection{::wxFatalError}\label{wxfatalerror}
+
+\func{void}{wxFatalError}{\param{const wxString\& }{msg}, \param{const wxString\& }{title = "wxWindows Fatal Error"}}
+
+Displays {\it msg} and exits. This writes to standard error under UNIX,
+and pops up a message box under Windows. Used for fatal internal
+wxWindows errors. See also \helpref{wxError}{wxerror}.
+
+\membersection{::wxFindMenuItemId}
+
+\func{int}{wxFindMenuItemId}{\param{wxFrame *}{frame}, \param{const wxString\& }{menuString}, \param{const wxString\& }{itemString}}
+
+Find a menu item identifier associated with the given frame's menu bar.
+
+\membersection{::wxFindWindowByLabel}
+
+\func{wxWindow *}{wxFindWindowByLabel}{\param{const wxString\& }{label}, \param{wxWindow *}{parent=NULL}}
+
+Find a window by its label. Depending on the type of window, the label may be a window title
+or panel item label. If {\it parent} is NULL, the search will start from all top-level
+frames and dialog boxes; if non-NULL, the search will be limited to the given window hierarchy.
+The search is recursive in both cases.
+
+\membersection{::wxFindWindowByName}\label{wxfindwindowbyname}
+
+\func{wxWindow *}{wxFindWindowByName}{\param{const wxString\& }{name}, \param{wxWindow *}{parent=NULL}}
+
+Find a window by its name (as given in a window constructor or {\bf Create} function call).
+If {\it parent} is NULL, the search will start from all top-level
+frames and dialog boxes; if non-NULL, the search will be limited to the given window hierarchy.
+The search is recursive in both cases.
+
+If no such named window is found, {\bf wxFindWindowByLabel} is called.
+
+\membersection{::wxGetActiveWindow}\label{wxgetactivewindow}
+
+\func{wxWindow *}{wxGetActiveWindow}{\void}
+
+Gets the currently active window (Windows only).
+
+\membersection{::wxGetDisplayName}\label{wxgetdisplayname}
+
+\func{wxString}{wxGetDisplayName}{\void}
+
+Under X only, returns the current display name. See also \helpref{wxSetDisplayName}{wxsetdisplayname}.
+
+\membersection{::wxGetHomeDir}
+
+\func{wxString}{wxGetHomeDir}{\param{const wxString\& }{buf}}
+
+Fills the buffer with a string representing the user's home directory (UNIX only).
+
+\membersection{::wxGetHostName}
+
+\func{bool}{wxGetHostName}{\param{const wxString\& }{buf}, \param{int}{ bufSize}}
+
+Copies the host name of the machine the program is running on into the
+buffer {\it buf}, of maximum size {\it bufSize}, returning TRUE if
+successful. Under UNIX, this will return a machine name. Under Windows,
+this returns ``windows''.
+
+\membersection{::wxGetElapsedTime}\label{wxgetelapsedtime}
+
+\func{long}{wxGetElapsedTime}{\param{bool}{ resetTimer = TRUE}}
+
+Gets the time in milliseconds since the last \helpref{::wxStartTimer}{wxstarttimer}.
+
+If {\it resetTimer} is TRUE (the default), the timer is reset to zero
+by this call.
+
+See also \helpref{wxTimer}{wxtimer}.
+
+\membersection{::wxGetFreeMemory}
+
+\func{long}{wxGetFreeMemory}{\void}
+
+Returns the amount of free memory in Kbytes under environments which
+support it, and -1 if not supported. Currently, returns a positive value
+under Windows, and -1 under UNIX.
+
+\membersection{::wxGetMousePosition}
+
+\func{void}{wxGetMousePosition}{\param{int* }{x}, \param{int* }{y}}
+
+Returns the mouse position in screen coordinates.
+
+\membersection{::wxGetOsVersion}
+
+\func{int}{wxGetOsVersion}{\param{int *}{major = NULL}, \param{int *}{minor = NULL}}
+
+Gets operating system version information.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitemruled{Platform}{Return tyes}
+\twocolitem{Macintosh}{Return value is wxMACINTOSH.}
+\twocolitem{Motif}{Return value is wxMOTIF\_X, {\it major} is X version, {\it minor} is X revision.}
+\twocolitem{OS/2}{Return value is wxOS2\_PM.}
+\twocolitem{Windows 3.1}{Return value is wxWINDOWS, {\it major} is 3, {\it minor} is 1.}
+\twocolitem{Windows NT}{Return value is wxWINDOWS\_NT, {\it major} is 3, {\it minor} is 1.}
+\twocolitem{Windows 95}{Return value is wxWIN95, {\it major} is 3, {\it minor} is 1.}
+\twocolitem{Win32s (Windows 3.1)}{Return value is wxWIN32S, {\it major} is 3, {\it minor} is 1.}
+\twocolitem{Watcom C++ 386 supervisor mode (Windows 3.1)}{Return value is wxWIN386, {\it major} is 3, {\it minor} is 1.}
+\end{twocollist}
+
+\membersection{::wxGetResource}\label{wxgetresource}
+
+\func{bool}{wxGetResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{const wxString\& *}{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxGetResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{float *}{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxGetResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{long *}{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxGetResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{int *}{value}, \param{const wxString\& }{file = NULL}}
+
+Gets a resource value from the resource database (for example, WIN.INI, or
+.Xdefaults). If {\it file} is NULL, WIN.INI or .Xdefaults is used,
+otherwise the specified file is used.
+
+Under X, if an application class (wxApp::wx\_class) has been defined,
+it is appended to the string /usr/lib/X11/app-defaults/ to try to find
+an applications default file when merging all resource databases.
+
+The reason for passing the result in an argument is that it
+can be convenient to define a default value, which gets overridden
+if the value exists in the resource file. It saves a separate
+test for that resource's existence, and it also allows
+the overloading of the function for different types.
+
+See also \helpref{wxWriteResource}{wxwriteresource}.
+
+\membersection{::wxGetUserId}
+
+\func{bool}{wxGetUserId}{\param{const wxString\& }{buf}, \param{int}{ bufSize}}
+
+Copies the user's login identity (such as ``jacs'') into the buffer {\it
+buf}, of maximum size {\it bufSize}, returning TRUE if successful.
+Under Windows, this returns ``user''.
+
+\membersection{::wxGetUserName}
+
+\func{bool}{wxGetUserName}{\param{const wxString\& }{buf}, \param{int}{ bufSize}}
+
+Copies the user's name (such as ``Julian Smart'') into the buffer {\it
+buf}, of maximum size {\it bufSize}, returning TRUE if successful.
+Under Windows, this returns ``unknown''.
+
+\membersection{::wxKill}\label{wxkill}
+
+\func{int}{wxKill}{\param{long}{ pid}, \param{int}{ sig}}
+
+Under UNIX (the only supported platform), equivalent to the UNIX kill function.
+Returns 0 on success, -1 on failure.
+
+Tip: sending a signal of 0 to a process returns -1 if the process does not exist.
+It does not raise a signal in the receiving process.
+
+\membersection{::wxInitClipboard}\label{wxinitclipboard}
+
+\func{void}{wxInitClipboard}{\void}
+
+Initializes the generic clipboard system by creating an instance of
+the class \helpref{wxClipboard}{wxclipboard}.
+
+\membersection{::wxIPCCleanUp}\label{wxipccleanup}
+
+\func{void}{wxIPCCleanUp}{\void}
+
+Call this when your application is terminating, if you have
+called \helpref{wxIPCInitialize}{wxipcinitialize}.
+
+\membersection{::wxIPCInitialize}\label{wxipcinitialize}
+
+\func{void}{wxIPCInitialize}{\void}
+
+Initializes for interprocess communication operation. May
+be called multiple times without harm.
+
+See also \helpref{wxDDEServer}{wxddeserver}, \helpref{wxDDEClient}{wxddeclient}, \helpref{wxDDEConnection}{wxddeconnection}
+and the relevant section of the user manual.
+
+\membersection{::wxIsBusy}\label{wxisbusy}
+
+\func{bool}{wxIsBusy}{\void}
+
+Returns TRUE if between two \helpref{wxBeginBusyCursor}{wxbeginbusycursor} and\rtfsp
+\helpref{wxEndBusyCursor}{wxendbusycursor} calls.
+
+\membersection{::wxLoadUserResource}\label{wxloaduserresource}
+
+\func{wxString}{wxLoadUserResource}{\param{const wxString\& }{resourceName}, \param{const wxString\& }{resourceType=``TEXT"}}
+
+Loads a user-defined Windows resource as a string. If the resource is found, the function creates
+a new character array and copies the data into it. A pointer to this data is returned. If unsuccessful, NULL is returned.
+
+The resource must be defined in the {\tt .rc} file using the following syntax:
+
+\begin{verbatim}
+myResource TEXT file.ext
+\end{verbatim}
+
+where {\tt file.ext} is a file that the resource compiler can find.
+
+One use of this is to store {\tt .wxr} files instead of including the data in the C++ file; some compilers
+cannot cope with the long strings in a {\tt .wxr} file. The resource data can then be parsed
+using \helpref{wxResourceParseString}{wxresourceparsestring}.
+
+This function is available under Windows only.
+
+\membersection{::wxNow}\label{wxnow}
+
+\func{wxString}{wxNow}{\void}
+
+Returns a string representing the current date and time.
+
+\membersection{::wxPostDelete}\label{wxpostdelete}
+
+\func{void}{wxPostDelete}{\param{wxObject *}{object}}
+
+Under X, tells the system to delete the specified object when
+all other events have been processed. In some environments, it is
+necessary to use this instead of deleting a frame directly with the
+delete operator, because X will still send events to the window.
+
+Now obsolete: use \helpref{wxWindow::Close}{wxwindowclose} instead.
+
+\membersection{::wxSetDisplayName}\label{wxsetdisplayname}
+
+\func{void}{wxSetDisplayName}{\param{const wxString\& }{displayName}}
+
+Under X only, sets the current display name. This is the X host and display name such
+as ``colonsay:0.0", and the function indicates which display should be used for creating
+windows from this point on. Setting the display within an application allows multiple
+displays to be used.
+
+See also \helpref{wxGetDisplayName}{wxgetdisplayname}.
+
+\membersection{::wxShell}\label{wxshell}
+
+\func{bool}{wxShell}{\param{const wxString\& }{command = NULL}}
+
+Executes a command in an interactive shell window. If no command is
+specified, then just the shell is spawned.
+
+See also \helpref{wxExecute}{wxexecute}.
+
+\membersection{::wxSleep}
+
+\func{void}{wxSleep}{\param{int}{ secs}}
+
+Under X, sleeps for the specified number of seconds.
+
+\membersection{::wxStripMenuCodes}
+
+\func{void}{wxStripMenuCodes}{\param{const wxString\& }{in}, \param{const wxString\& }{out}}
+
+Strips any menu codes from {\it in} and places the result
+in {\it out}. Menu codes include \& (mark the next character with an underline
+as a keyboard shortkey in Windows and Motif) and $\backslash$t (tab in Windows).
+
+\membersection{::wxStartTimer}\label{wxstarttimer}
+
+\func{void}{wxStartTimer}{\void}
+
+Starts a stopwatch; use \helpref{::wxGetElapsedTime}{wxgetelapsedtime} to get the elapsed time.
+
+See also \helpref{wxTimer}{wxtimer}.
+
+\membersection{::wxToLower}\label{wxtolower}
+
+\func{char}{wxToLower}{\param{char }{ch}}
+
+Converts the character to lower case. This is implemented as a macro for efficiency.
+
+\membersection{::wxToUpper}\label{wxtoupper}
+
+\func{char}{wxToUpper}{\param{char }{ch}}
+
+Converts the character to upper case. This is implemented as a macro for efficiency.
+
+\membersection{::wxTrace}\label{wxtrace}
+
+\func{void}{wxTrace}{\param{const wxString\& }{fmt}, \param{...}{}}
+
+Takes printf-style variable argument syntax. Output
+is directed to the current output stream (see \helpref{wxDebugContext}{wxdebugcontextoverview}).
+
+\membersection{::wxTraceLevel}\label{wxtracelevel}
+
+\func{void}{wxTraceLevel}{\param{int}{ level}, \param{const wxString\& }{fmt}, \param{...}{}}
+
+Takes printf-style variable argument syntax. Output
+is directed to the current output stream (see \helpref{wxDebugContext}{wxdebugcontextoverview}).
+The first argument should be the level at which this information is appropriate.
+It will only be output if the level returned by wxDebugContext::GetLevel is equal to or greater than
+this value.
+
+\membersection{::wxWriteResource}\label{wxwriteresource}
+
+\func{bool}{wxWriteResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{const wxString\& }{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxWriteResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{float }{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxWriteResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{long }{value}, \param{const wxString\& }{file = NULL}}
+
+\func{bool}{wxWriteResource}{\param{const wxString\& }{section}, \param{const wxString\& }{entry},
+ \param{int }{value}, \param{const wxString\& }{file = NULL}}
+
+Writes a resource value into the resource database (for example, WIN.INI, or
+.Xdefaults). If {\it file} is NULL, WIN.INI or .Xdefaults is used,
+otherwise the specified file is used.
+
+Under X, the resource databases are cached until the internal function
+\rtfsp{\bf wxFlushResources} is called automatically on exit, when
+all updated resource databases are written to their files.
+
+Note that it is considered bad manners to write to the .Xdefaults
+file under UNIX, although the WIN.INI file is fair game under Windows.
+
+See also \helpref{wxGetResource}{wxgetresource}.
+
+\membersection{::wxYield}
+
+\func{bool}{wxYield}{\void}
+
+Yields control to pending messages in the windowing system. This can be useful, for example, when a
+time-consuming process writes to a text window. Without an occasional
+yield, the text window will not be updated properly, and (since Windows
+multitasking is cooperative) other processes will not respond.
+
+Caution should be exercised, however, since yielding may allow the
+user to perform actions which are not compatible with the current task.
+Disabling menu items or whole menus during processing can avoid unwanted
+reentrance of code.
+
+\section{Macros}\label{macros}
+
+These macros are defined in wxWindows.
+
+\membersection{CLASSINFO}\label{classinfo}
+
+\func{wxClassInfo *}{CLASSINFO}{className}
+
+Returns a pointer to the wxClassInfo object associated with this class.
+
+\membersection{WXDEBUG\_NEW}\label{debugnew}
+
+\func{}{WXDEBUG\_NEW}{arg}
+
+This is defined in debug mode to be call the redefined new operator
+with filename and line number arguments. The definition is:
+
+\begin{verbatim}
+#define WXDEBUG_NEW new(__FILE__,__LINE__)
+\end{verbatim}
+
+In non-debug mode, this is defined as the normal new operator.
+
+\membersection{DECLARE\_ABSTRACT\_CLASS}
+
+\func{}{DECLARE\_ABSTRACT\_CLASS}{className}
+
+Used inside a class declaration to declare that the class should be
+made known to the class hierarchy, but objects of this class cannot be created
+dynamically. The same as DECLARE\_CLASS.
+
+Example:
+
+\begin{verbatim}
+class wxCommand: public wxObject
+{
+ DECLARE_ABSTRACT_CLASS(wxCommand)
+
+ private:
+ ...
+ public:
+ ...
+};
+\end{verbatim}
+
+\membersection{DECLARE\_APP}\label{declareapp}
+
+\func{}{DECLARE\_APP}{className}
+
+This is used in headers to create a forward declaration of the wxGetApp function implemented
+by IMPLEMENT\_APP. It creates the declaration {\tt className\& wxGetApp(void)}.
+
+Example:
+
+\begin{verbatim}
+ DECLARE_APP(MyApp)
+\end{verbatim}
+
+\membersection{DECLARE\_CLASS}
+
+\func{}{DECLARE\_CLASS}{className}
+
+Used inside a class declaration to declare that the class should be
+made known to the class hierarchy, but objects of this class cannot be created
+dynamically. The same as DECLARE\_ABSTRACT\_CLASS.
+
+\membersection{DECLARE\_DYNAMIC\_CLASS}
+
+\func{}{DECLARE\_DYNAMIC\_CLASS}{className}
+
+Used inside a class declaration to declare that the objects of this class should be dynamically
+createable from run-time type information.
+
+Example:
+
+\begin{verbatim}
+class wxFrame: public wxWindow
+{
+ DECLARE_DYNAMIC_CLASS(wxFrame)
+
+ private:
+ const wxString\& frameTitle;
+ public:
+ ...
+};
+\end{verbatim}
+
+\membersection{IMPLEMENT\_ABSTRACT\_CLASS}
+
+\func{}{IMPLEMENT\_ABSTRACT\_CLASS}{className, baseClassName}
+
+Used in a C++ implementation file to complete the declaration of
+a class that has run-time type information. The same as IMPLEMENT\_CLASS.
+
+Example:
+
+\begin{verbatim}
+IMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject)
+
+wxCommand::wxCommand(void)
+{
+...
+}
+\end{verbatim}
+
+\membersection{IMPLEMENT\_ABSTRACT\_CLASS2}
+
+\func{}{IMPLEMENT\_ABSTRACT\_CLASS2}{className, baseClassName1, baseClassName2}
+
+Used in a C++ implementation file to complete the declaration of
+a class that has run-time type information and two base classes. The same as IMPLEMENT\_CLASS2.
+
+\membersection{IMPLEMENT\_APP}\label{implementapp}
+
+\func{}{IMPLEMENT\_APP}{className}
+
+This is used in the application class implementation file to make the application class known to
+wxWindows for dynamic construction. You use this instead of
+
+Old form:
+
+\begin{verbatim}
+ MyApp myApp;
+\end{verbatim}
+
+New form:
+
+\begin{verbatim}
+ IMPLEMENT_APP(MyApp)
+\end{verbatim}
+
+See also \helpref{DECLARE\_APP}{declareapp}.
+
+\membersection{IMPLEMENT\_CLASS}
+
+\func{}{IMPLEMENT\_CLASS}{className, baseClassName}
+
+Used in a C++ implementation file to complete the declaration of
+a class that has run-time type information. The same as IMPLEMENT\_ABSTRACT\_CLASS.
+
+\membersection{IMPLEMENT\_CLASS2}
+
+\func{}{IMPLEMENT\_CLASS2}{className, baseClassName1, baseClassName2}
+
+Used in a C++ implementation file to complete the declaration of a
+class that has run-time type information and two base classes. The
+same as IMPLEMENT\_ABSTRACT\_CLASS2.
+
+\membersection{IMPLEMENT\_DYNAMIC\_CLASS}
+
+\func{}{IMPLEMENT\_DYNAMIC\_CLASS}{className, baseClassName}
+
+Used in a C++ implementation file to complete the declaration of
+a class that has run-time type information, and whose instances
+can be created dynamically.
+
+Example:
+
+\begin{verbatim}
+IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
+
+wxFrame::wxFrame(void)
+{
+...
+}
+\end{verbatim}
+
+\membersection{IMPLEMENT\_DYNAMIC\_CLASS2}
+
+\func{}{IMPLEMENT\_DYNAMIC\_CLASS2}{className, baseClassName1, baseClassName2}
+
+Used in a C++ implementation file to complete the declaration of
+a class that has run-time type information, and whose instances
+can be created dynamically. Use this for classes derived from two
+base classes.
+
+\membersection{WXTRACE}\label{trace}
+
+\func{}{WXTRACE}{formatString, ...}
+
+Calls wxTrace with printf-style variable argument syntax. Output
+is directed to the current output stream (see \helpref{wxDebugContext}{wxdebugcontextoverview}).
+
+\membersection{WXTRACELEVEL}\label{tracelevel}
+
+\func{}{WXTRACELEVEL}{level, formatString, ...}
+
+Calls wxTraceLevel with printf-style variable argument syntax. Output
+is directed to the current output stream (see \helpref{wxDebugContext}{wxdebugcontextoverview}).
+The first argument should be the level at which this information is appropriate.
+It will only be output if the level returned by wxDebugContext::GetLevel is equal to or greater than
+this value.
+
+\section{wxWindows resource functions}\label{resourcefuncs}
+
+\overview{wxWindows resource system}{resourceformats}
+
+This section details functions for manipulating wxWindows (.WXR) resource
+files and loading user interface elements from resources.
+
+\normalbox{Please note that this use of the word `resource' is different from that used when talking
+about initialisation file resource reading and writing, using such functions
+as wxWriteResource and wxGetResource. It's just an unfortunate clash of terminology.}
+
+\helponly{For an overview of the wxWindows resource mechanism, see \helpref{the wxWindows resource system}{resourceformats}.}
+
+See also \helpref{wxWindow::LoadFromResource}{wxwindowloadfromresource} for
+loading from resource data.
+
+\membersection{::wxResourceAddIdentifier}\label{wxresourceaddidentifier}
+
+\func{bool}{wxResourceAddIdentifier}{\param{const wxString\& }{name}, \param{int }{value}}
+
+Used for associating a name with an integer identifier (equivalent to dynamically\rtfsp
+\verb$#$defining a name to an integer). Unlikely to be used by an application except
+perhaps for implementing resource functionality for interpreted languages.
+
+\membersection{::wxResourceClear}
+
+\func{void}{wxResourceClear}{\void}
+
+Clears the wxWindows resource table.
+
+\membersection{::wxResourceCreateBitmap}
+
+\func{wxBitmap *}{wxResourceCreateBitmap}{\param{const wxString\& }{resource}}
+
+Creates a new bitmap from a file, static data, or Windows resource, given a valid
+wxWindows bitmap resource identifier. For example, if the .WXR file contains
+the following:
+
+\begin{verbatim}
+static const wxString\& aiai_resource = "bitmap(name = 'aiai_resource',\
+ bitmap = ['aiai', wxBITMAP_TYPE_BMP_RESOURCE, 'WINDOWS'],\
+ bitmap = ['aiai.xpm', wxBITMAP_TYPE_XPM, 'X']).";
+\end{verbatim}
+
+then this function can be called as follows:
+
+\begin{verbatim}
+ wxBitmap *bitmap = wxResourceCreateBitmap("aiai_resource");
+\end{verbatim}
+
+\membersection{::wxResourceCreateIcon}
+
+\func{wxIcon *}{wxResourceCreateIcon}{\param{const wxString\& }{resource}}
+
+Creates a new icon from a file, static data, or Windows resource, given a valid
+wxWindows icon resource identifier. For example, if the .WXR file contains
+the following:
+
+\begin{verbatim}
+static const wxString\& aiai_resource = "icon(name = 'aiai_resource',\
+ icon = ['aiai', wxBITMAP_TYPE_ICO_RESOURCE, 'WINDOWS'],\
+ icon = ['aiai', wxBITMAP_TYPE_XBM_DATA, 'X']).";
+\end{verbatim}
+
+then this function can be called as follows:
+
+\begin{verbatim}
+ wxIcon *icon = wxResourceCreateIcon("aiai_resource");
+\end{verbatim}
+
+\membersection{::wxResourceCreateMenuBar}
+
+\func{wxMenuBar *}{wxResourceCreateMenuBar}{\param{const wxString\& }{resource}}
+
+Creates a new menu bar given a valid wxWindows menubar resource
+identifier. For example, if the .WXR file contains the following:
+
+\begin{verbatim}
+static const wxString\& menuBar11 = "menu(name = 'menuBar11',\
+ menu = \
+ [\
+ ['&File', 1, '', \
+ ['&Open File', 2, 'Open a file'],\
+ ['&Save File', 3, 'Save a file'],\
+ [],\
+ ['E&xit', 4, 'Exit program']\
+ ],\
+ ['&Help', 5, '', \
+ ['&About', 6, 'About this program']\
+ ]\
+ ]).";
+\end{verbatim}
+
+then this function can be called as follows:
+
+\begin{verbatim}
+ wxMenuBar *menuBar = wxResourceCreateMenuBar("menuBar11");
+\end{verbatim}
+
+
+\membersection{::wxResourceGetIdentifier}
+
+\func{int}{wxResourceGetIdentifier}{\param{const wxString\& }{name}}
+
+Used for retrieving the integer value associated with an identifier.
+A zero value indicates that the identifier was not found.
+
+See \helpref{wxResourceAddIdentifier}{wxresourceaddidentifier}.
+
+\membersection{::wxResourceParseData}\label{wxresourcedata}
+
+\func{bool}{wxResourceParseData}{\param{const wxString\& }{resource}, \param{wxResourceTable *}{table = NULL}}
+
+Parses a string containing one or more wxWindows resource objects. If
+the resource objects are global static data that are included into the
+C++ program, then this function must be called for each variable
+containing the resource data, to make it known to wxWindows.
+
+{\it resource} should contain data in the following form:
+
+\begin{verbatim}
+dialog(name = 'dialog1',
+ style = 'wxCAPTION | wxDEFAULT_DIALOG_STYLE',
+ title = 'Test dialog box',
+ x = 312, y = 234, width = 400, height = 300,
+ modal = 0,
+ control = [wxGroupBox, 'Groupbox', '0', 'group6', 5, 4, 380, 262,
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0]],
+ control = [wxMultiText, 'Multitext', 'wxVERTICAL_LABEL', 'multitext3',
+ 156, 126, 200, 70, 'wxWindows is a multi-platform, GUI toolkit.',
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0],
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0]]).
+\end{verbatim}
+
+This function will typically be used after including a {\tt .wxr} file into
+a C++ program as follows:
+
+\begin{verbatim}
+#include "dialog1.wxr"
+\end{verbatim}
+
+Each of the contained resources will declare a new C++ variable, and each
+of these variables should be passed to wxResourceParseData.
+
+\membersection{::wxResourceParseFile}
+
+\func{bool}{wxResourceParseFile}{\param{const wxString\& }{filename}, \param{wxResourceTable *}{table = NULL}}
+
+Parses a file containing one or more wxWindows resource objects
+in C++-compatible syntax. Use this function to dynamically load
+wxWindows resource data.
+
+\membersection{::wxResourceParseString}\label{wxresourceparsestring}
+
+\func{bool}{wxResourceParseString}{\param{const wxString\& }{resource}, \param{wxResourceTable *}{table = NULL}}
+
+Parses a string containing one or more wxWindows resource objects. If
+the resource objects are global static data that are included into the
+C++ program, then this function must be called for each variable
+containing the resource data, to make it known to wxWindows.
+
+{\it resource} should contain data with the following form:
+
+\begin{verbatim}
+static const wxString\& dialog1 = "dialog(name = 'dialog1',\
+ style = 'wxCAPTION | wxDEFAULT_DIALOG_STYLE',\
+ title = 'Test dialog box',\
+ x = 312, y = 234, width = 400, height = 300,\
+ modal = 0,\
+ control = [wxGroupBox, 'Groupbox', '0', 'group6', 5, 4, 380, 262,\
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0]],\
+ control = [wxMultiText, 'Multitext', 'wxVERTICAL_LABEL', 'multitext3',\
+ 156, 126, 200, 70, 'wxWindows is a multi-platform, GUI toolkit.',\
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0],\
+ [11, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0]]).";
+\end{verbatim}
+
+This function will typically be used after calling \helpref{wxLoadUserResource}{wxloaduserresource} to
+load an entire {\tt .wxr file} into a string.
+
+\membersection{::wxResourceRegisterBitmapData}\label{registerbitmapdata}
+
+\func{bool}{wxResourceRegisterBitmapData}{\param{const wxString\& }{name}, \param{const wxString\& }{xbm\_data}, \param{int }{width},
+\param{int }{height}, \param{wxResourceTable *}{table = NULL}}
+
+\func{bool}{wxResourceRegisterBitmapData}{\param{const wxString\& }{name}, \param{const wxString\& *}{xpm\_data}}
+
+Makes \verb$#$included XBM or XPM bitmap data known to the wxWindows resource system.
+This is required if other resources will use the bitmap data, since otherwise there
+is no connection between names used in resources, and the global bitmap data.
+
+\membersection{::wxResourceRegisterIconData}
+
+Another name for \helpref{wxResourceRegisterBitmapData}{registerbitmapdata}.
+
--- /dev/null
+\section{\class{wxGauge}}\label{wxgauge}
+
+A gauge is a horizontal or vertical bar which shows a quantity (often time).
+There are no user commands for the gauge.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxEvtHandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxGA\_HORIZONTAL}}{Creates a horizontal gauge.}
+\twocolitem{\windowstyle{wxGA\_VERTICAL}}{Creates a vertical gauge.}
+\twocolitem{\windowstyle{wxGA\_PROGRESSBAR}}{Under Windows 95, creates a horizontal progress bar.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxSlider}{wxslider}, \helpref{wxScrollBar}{wxscrollbar}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxGauge::wxGauge}\label{wxgaugeconstr}
+
+\func{}{wxGauge}{\void}
+
+Default constructor.
+
+\func{}{wxGauge}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const int}{ range}, \param{const wxPoint\& }{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxGA\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``gauge"}}
+
+Constructor, creating and showing a gauge.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Window parent.}
+
+\docparam{id}{Window identifier.}
+
+\docparam{range}{Integer range (maximum value) of the gauge.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size.}
+
+\docparam{style}{Gauge style. See \helpref{wxGauge}{wxgauge}.}
+
+\docparam{name}{Window name.}
+
+\wxheading{Remarks}
+
+Under Windows 95, there are two different styles of gauge: normal gauge, and progress bar (when
+the {\bf wxGA\_PROGRESSBAR} style is used). A progress bar is always horizontal.
+
+\wxheading{See also}
+
+\helpref{wxGauge::Create}{wxgaugecreate}
+
+\membersection{wxGauge::\destruct{wxGauge}}
+
+\func{}{\destruct{wxGauge}}{\void}
+
+Destructor, destroying the gauge.
+
+\membersection{wxGauge::Create}\label{wxgaugecreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const int}{ range}, \param{const wxPoint\& }{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxGA\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``gauge"}}
+
+Creates the gauge for two-step construction. See \helpref{wxGauge::wxGauge}{wxgaugeconstr}\rtfsp
+for further details.
+
+\membersection{wxGauge::GetBezelFace}\label{wxgaugegetbezelface}
+
+\constfunc{int}{GetBezelFace}{\void}
+
+Returns the width of the 3D bezel face.
+
+\wxheading{Remarks}
+
+Windows only, not for {\bf wxGA\_PROGRESSBAR}.
+
+\wxheading{See also}
+
+\helpref{wxGauge::SetBezelFace}{wxgaugesetbezelface}
+
+\membersection{wxGauge::GetRange}\label{wxgaugegetrange}
+
+\constfunc{int}{GetRange}{\void}
+
+Returns the maximum position of the gauge.
+
+\wxheading{See also}
+
+\helpref{wxGauge::SetRange}{wxgaugesetrange}
+
+\membersection{wxGauge::GetShadowWidth}\label{wxgaugegetshadowwidth}
+
+\constfunc{int}{GetShadowWidth}{\void}
+
+Returns the 3D shadow margin width.
+
+\wxheading{Remarks}
+
+Windows only, not for {\bf wxGA\_PROGRESSBAR}.
+
+\wxheading{See also}
+
+\helpref{wxGauge::SetShadowWidth}{wxgaugesetshadowwidth}
+
+\membersection{wxGauge::GetValue}\label{wxgaugegetvalue}
+
+\constfunc{int}{GetValue}{\void}
+
+Returns the current position of the gauge.
+
+\wxheading{See also}
+
+\helpref{wxGauge::SetValue}{wxgaugesetvalue}
+
+\membersection{wxGauge::SetBezelFace}\label{wxgaugesetbezelface}
+
+\func{void}{SetBezelFace}{\param{const int }{width}}
+
+Sets the 3D bezel face width.
+
+\wxheading{Remarks}
+
+Windows only, not for {\bf wxGA\_PROGRESSBAR}.
+
+\wxheading{See also}
+
+\helpref{wxGauge::GetBezelFace}{wxgaugegetbezelface}
+
+\membersection{wxGauge::SetRange}\label{wxgaugesetrange}
+
+\func{void}{SetRange}{\param{const int }{range}}
+
+Sets the range (maximum value) of the gauge.
+
+\wxheading{See also}
+
+\helpref{wxGauge::GetRange}{wxgaugegetrange}
+
+\membersection{wxGauge::SetShadowWidth}\label{wxgaugesetshadowwidth}
+
+\func{void}{SetShadowWidth}{\param{const int }{width}}
+
+Sets the 3D shadow width.
+
+\wxheading{Remarks}
+
+Windows only, not for {\bf wxGA\_PROGRESSBAR}.
+
+\membersection{wxGauge::SetValue}\label{wxgaugesetvalue}
+
+\func{void}{SetValue}{\param{const int }{pos}}
+
+Sets the position of the gauge.
+
+\wxheading{Parameters}
+
+\docparam{pos}{Position for the gauge level.}
+
+\wxheading{See also}
+
+\helpref{wxGauge::GetValue}{wxgaugegetvalue}
+
+
--- /dev/null
+\section{\class{wxGDIObject}}\label{wxgdiobject}
+
+This class allows platforms to implement functionality to optimise GDI objects, such
+as wxPen, wxBrush and wxFont. On Windows, the underling GDI objects are a scarce resource
+and are cleaned up when a usage count goes to zero. On some platforms this
+class may not have any special functionality.
+
+Since the functionality of this class is platform-specific, it is not documented here in detail.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPen}{wxpen}, \helpref{wxBrush}{wxbrush}, \helpref{wxFont}{wxfont}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxGDIObject::wxGDIObject}\label{wxgdiobjectconstr}
+
+\func{}{wxGDIObject}{\void}
+
+Default constructor.
+
+
--- /dev/null
+\section{\class{wxGrid}}\label{wxgrid}
+
+wxGrid is a class for displaying and editing tabular information.
+
+\wxheading{Derived from}
+
+\helpref{wxPanel}{wxpanel}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no specific window styles for this class.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxGrid classes overview}{gridoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxGrid::wxGrid}\label{wxgridconstr}
+
+\func{void}{wxGrid}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id}, \param{const wxPoint\&}{ pos},
+\rtfsp\param{const wxSize\&}{ size}, \param{const long}{ style=0}, \param{const wxString\& }{name="grid"}}
+
+Constructor. Before using a wxGrid object, you must call CreateGrid to set up the required rows and columns.
+
+\membersection{wxGrid::AdjustScrollbars}\label{wxgridadjustscrollbars}
+
+\func{void}{AdjustScrollbars}{\void}
+
+Call this function whenever a change has been made via the API that might alter the scrollbar characteristics:
+particularly when adding or deleting rows, or changing row or column dimensions. For example,
+removing rows might make it unnecessary to show the vertical scrollbar.
+
+\membersection{wxGrid::AppendCols}\label{wxgridappendcols}
+
+\func{bool}{AppendCols}{\param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Appends {\it n} columns to the grid. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::AppendRows}\label{wxgridappendrows}
+
+\func{bool}{AppendRows}{\param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Appends {\it n} rows to the grid. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::BeginBatch}\label{wxgridbeginbatch}
+
+\func{void}{BeginBatch}{\void}
+
+Start a BeginBatch/EndBatch pair between which, calls to SetCellValue or
+SetCellBitmap will not cause a refresh. This allows you to speed up some operations
+(for example, setting several hundred cell values). You can nest, but not overlap,
+these two functions.
+
+See also \helpref{wxGrid::EndBatch}{wxgridendbatch}, \helpref{wxGrid::GetBatchCount}{wxgridgetbatchcount}.
+
+\membersection{wxGrid::CellHitTest}\label{wxgridcellhittest}
+
+\func{bool}{CellHitTest}{\param{int}{ x}, \param{int}{ y}, \param{int *}{row}, \param{int *}{col}}
+
+Returns TRUE if the x, y panel position coincides with a cell. If so, {\it row} and {\it col} are
+returned.
+
+\membersection{wxGrid::CreateGrid}\label{wxgridcreategrid}
+
+\func{bool}{CreateGrid}{\param{int}{ rows}, \param{int}{ cols}, \param{wxString **}{cellValues=NULL},
+ \param{short *}{widths=NULL}, \param{short}{ defaultWidth=wxGRID\_DEFAULT\_CELL\_WIDTH},
+ \param{short}{ defaultHeight=wxGRID\_DEFAULT\_CELL\_HEIGHT}}
+
+Creates a grid {\it rows} high and {\it cols} wide. You can optionally specify an array of initial values
+and widths, and/or default cell width and height.
+
+Call this function after creating the wxGrid object.
+
+\membersection{wxGrid::CurrentCellVisible}\label{wxgridcurrentcellvisible}
+
+\func{bool}{CurrentCellVisible}{\void}
+
+Returns TRUE if the currently selected cell is visible, FALSE otherwise.
+
+\membersection{wxGrid::DeleteCols}\label{wxgriddeletecols}
+
+\func{bool}{DeleteCols}{\param{int}{ pos=0}, \param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Deletes {\it n} columns from the grid at position {\it pos}. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::DeleteRows}\label{wxgriddeleterows}
+
+\func{bool}{DeleteRows}{\param{int}{ pos=0}, \param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Deletes {\it n} rows from the grid at position {\it pos}. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::EndBatch}\label{wxgridendbatch}
+
+\func{void}{EndBatch}{\void}
+
+End a BeginBatch/EndBatch pair between which, calls to SetCellValue or
+SetCellBitmap will not cause a refresh. This allows you to speed up some operations
+(for example, setting several hundred cell values). You can nest, but not overlap,
+these two functions.
+
+See also \helpref{wxGrid::BeginBatch}{wxgridbeginbatch}, \helpref{wxGrid::GetBatchCount}{wxgridgetbatchcount}.
+
+\membersection{wxGrid::GetBatchCount}\label{wxgridgetbatchcount}
+
+\func{void}{GetBatchCount}{\void}
+
+Return the level of batch nesting. This is initially zero, and will be incremented
+every time BeginBatch is called, and decremented when EndBatch is called. When the
+batch count is more zero, some functions (such as SetCellValue and SetCellBitmap) will
+not refresh the cell.
+
+See also \helpref{wxGrid::BeginBatch}{wxgridbeginbatch}, \helpref{wxGrid::EndBatch}{wxgridendbatch}.
+
+\membersection{wxGrid::GetCell}\label{wxgridgetcell}
+
+\func{wxGridCell *}{GetCell}{\param{int}{ row}, \param{int}{ col}}
+
+Returns the grid cell object associated with this position.
+
+wxGenericGrid implementation only.
+
+\membersection{wxGrid::GetCellAlignment}\label{wxgridgetcellalignment}
+
+\func{int}{GetCellAlignment}{\param{int}{ row}, \param{int}{ col}}
+
+\func{int}{GetCellAlignment}{\void}
+
+Sets the text alignment for the cell at the given position, or the global alignment value.
+The return value is wxLEFT, wxRIGHT or wxCENTRE.
+
+\membersection{wxGrid::GetCellBackgroundColour}\label{wxgridgetcellbackgroundcolour}
+
+\func{wxColour\&}{GetCellBackgroundColour}{\param{int}{ row}, \param{int}{ col}}
+
+\func{wxColour\&}{GetCellBackgroundColour}{\void}
+
+Gets the background colour for the cell at the given position, or the global background colour.
+
+\membersection{wxGrid::GetCells}\label{wxgridgetcells}
+
+\func{wxGridCell ***}{GetCells}{\void}
+
+Returns the array of grid cell object associated with this wxGrid.
+
+\membersection{wxGrid::GetCellTextColour}\label{wxgridgetcelltextcolour}
+
+\func{wxColour\&}{GetCellTextColour}{\param{int}{ row}, \param{int}{ col}}
+
+\func{wxColour\&}{GetCellTextColour}{\void}
+
+Gets the text colour for the cell at the given position, or the global text colour.
+
+\membersection{wxGrid::GetCellTextFont}\label{wxgridgetcelltextfont}
+
+\func{wxFont *}{GetCellTextFont}{\param{int}{ row}, \param{int}{ col}}
+
+\func{wxFont *}{GetCellTextFont}{\void}
+
+Gets the text font for the cell at the given position, or the global text font.
+
+\membersection{wxGrid::GetCellValue}\label{wxgridgetcellvalue}
+
+\func{wxString\&}{GetCellValue}{\param{int}{ row}, \param{int}{ col}}
+
+Returns the cell value at the given position.
+
+\membersection{wxGrid::GetCols}\label{wxgridgetcols}
+
+\func{int}{GetCols}{\void}
+
+Returns the number of columns in the grid.
+
+\membersection{wxGrid::GetColumnWidth}\label{wxgridcolumnwidth}
+
+\func{int}{GetColumnWidth}{\param{int}{ col}}
+
+Gets the width in pixels for column {\it col}.
+
+\membersection{wxGrid::GetCurrentRect}\label{wxgridgetcurrentrect}
+
+\func{wxRectangle *}{GetCurrentRect}{\void}
+
+Returns a pointer to the rectangle enclosing the currently selected cell.
+Do not delete this pointer.
+
+\membersection{wxGrid::GetCursorColumn}\label{wxgridgetcursorcolumn}
+
+\func{int}{GetCursorColumn}{\void}
+
+Returns the column position of the currently selected cell.
+
+\membersection{wxGrid::GetCursorRow}\label{wxgridgetcursorrow}
+
+\func{int}{GetCursorRow}{\void}
+
+Returns the row position of the currently selected cell.
+
+\membersection{wxGrid::GetEditable}\label{wxgridgeteditable}
+
+\func{bool}{GetEditable}{\void}
+
+Returns TRUE if the grid cells can be edited.
+
+\membersection{wxGrid::GetHorizScrollBar}\label{wxgridgethorizscrollbar}
+
+\func{wxScrollBar *}{GetHorizScrollBar}{\void}
+
+Returns a pointer to the horizontal scrollbar.
+
+\membersection{wxGrid::GetLabelAlignment}\label{wxgridgetlabelalignment}
+
+\func{int}{GetLabelAlignment}{\param{int}{ orientation}}
+
+Gets the row or column label alignment. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.\rtfsp
+{\it alignment} should be wxCENTRE, wxLEFT or wxRIGHT.
+
+\membersection{wxGrid::GetLabelBackgroundColour}\label{wxgridgetlabelbackgroundcolour}
+
+\func{wxColour\&}{GetLabelBackgroundColour}{\void}
+
+Gets a row and column label text colour.
+
+\membersection{wxGrid::GetLabelSize}\label{wxgridgetlabelsize}
+
+\func{int}{GetLabelSize}{\param{int}{ orientation}}
+
+Gets the row label height, or column label width, in pixels. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.
+
+\membersection{wxGrid::GetLabelTextColour}\label{wxgridgetlabeltextcolour}
+
+\func{wxColour\&}{GetLabelTextColour}{\void}
+
+Gets a row and column label text colour.
+
+\membersection{wxGrid::GetLabelTextFont}\label{wxgridgetlabeltextfont}
+
+\func{wxFont *}{GetLabelTextFont}{\void}
+
+Gets the font to be used for the row and column labels.
+
+\membersection{wxGrid::GetLabelValue}\label{wxgridgetlabelvalue}
+
+\func{wxString\&}{GetLabelValue}{\param{int}{ orientation}, \param{int}{ pos}}
+
+Gets a row or column label value. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.\rtfsp
+{\it pos} is the label position.
+
+\membersection{wxGrid::GetRowHeight}\label{wxgridgetrowheight}
+
+\func{int}{GetRowHeight}{\param{int}{ row}}
+
+Gets the height in pixels for row {\it row}.
+
+\membersection{wxGrid::GetRows}\label{wxgridgetrows}
+
+\func{int}{GetRows}{\void}
+
+Returns the number of rows in the grid.
+
+\membersection{wxGrid::GetScrollPosX}\label{wxgridgetscrollposx}
+
+\func{int}{GetScrollPosX}{\void}
+
+Returns the column scroll position.
+
+\membersection{wxGrid::GetScrollPosY}\label{wxgridgetscrollposy}
+
+\func{int}{GetScrollPosY}{\void}
+
+Returns the row scroll position.
+
+\membersection{wxGrid::GetTextItem}\label{wxgridgettextitem}
+
+\func{wxText *}{GetTextItem}{\void}
+
+Returns a pointer to the text item used for entering text into a cell.
+
+\membersection{wxGrid::GetVertScrollBar}\label{wxgridgetvertscrollbar}
+
+\func{wxScrollBar *}{GetVertScrollBar}{\void}
+
+Returns a pointer to the vertical scrollbar.
+
+\membersection{wxGrid::InsertCols}\label{wxgridinsertcols}
+
+\func{bool}{InsertCols}{\param{int}{ pos=0}, \param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Inserts {\it n} number of columns before position {\it pos}. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::InsertRows}\label{wxgridinsertrows}
+
+\func{bool}{InsertRows}{\param{int}{ pos=0}, \param{int}{ n=1}, \param{bool}{ updateLabels=TRUE}}
+
+Inserts {\it n} number of rows before position {\it pos}. If {\it updateLabels} is TRUE,
+the function OnChangeLabels is called to give the application the opportunity to relabel.
+
+\membersection{wxGrid::OnActivate}\label{wxgridonactivate}
+
+\func{void}{OnActivate}{\param{bool}{ active}}
+
+Sets the text item to have the focus. Call this function when the wxGrid window should have the
+focus, for example from wxFrame::OnActivate.
+
+\membersection{wxGrid::OnChangeLabels}\label{wxgridonchangelabels}
+
+\func{void}{OnChangeLabels}{\void}
+
+Called when rows and columns are created or deleted, to allow the application an
+opportunity to update the labels. By default, columns are labelled alphabetically,
+and rows numerically.
+
+\membersection{wxGrid::OnChangeSelectionLabel}\label{wxgridonchangeselectionlabel}
+
+\func{void}{OnChangeSelectionLabel}{\void}
+
+Called when a cell is selected, to allow the application an
+opportunity to update the selection label (the label of the wxText item
+used for entering cell text). By default, the cell column letter and row
+number are concatenated to form the selection label.
+
+\membersection{wxGrid::OnCreateCell}\label{wxgridoncreatecell}
+
+\func{wxGridCell *}{OnCreateCell}{\void}
+
+Override this virtual function if you want to replace the normal wxGridCell with a derived
+class.
+
+\membersection{wxGrid::OnCellLeftClick}\label{wxgridoncellleftclick}
+
+\func{void}{OnLeftClick}{\param{int}{ row}, \param{int}{ col}, \param{int}{ x}, \param{int}{ y}, \param{bool}{ control}, \param{bool}{ shift}}
+
+Virtual function called when the left button is depressed within a cell, just after OnSelectCell is called.
+
+\membersection{wxGrid::OnCellRightClick}\label{wxgridoncellrightclick}
+
+\func{void}{OnRightClick}{\param{int}{ row}, \param{int}{ col}, \param{int}{ x}, \param{int}{ y}, \param{bool}{ control}, \param{bool}{ shift}}
+
+Virtual function called when the right button is depressed within a cell, just after OnSelectCell is called.
+
+\membersection{wxGrid::OnLabelLeftClick}\label{wxgridonlabelleftclick}
+
+\func{void}{OnLeftClick}{\param{int}{ row}, \param{int}{ col}, \param{int}{ x}, \param{int}{ y}, \param{bool}{ control}, \param{bool}{ shift}}
+
+Virtual function called when the left button is depressed within a
+label.
+
+{\it row} will be {\it -1} if the click is in the top labels.
+
+{\it col} will be {\it -1} if the click is in the left labels.
+
+{\it row} and {\it col} will be {\it -1} if the click is in the upper
+left corner.
+
+\membersection{wxGrid::OnLabelRightClick}\label{wxgridonlabelrightclick}
+
+\func{void}{OnRightClick}{\param{int}{ row}, \param{int}{ col}, \param{int}{ x}, \param{int}{ y}, \param{bool}{ control}, \param{bool}{ shift}}
+
+Virtual function called when the right button is depressed within a label.
+
+{\it row} will be {\it -1} if the click is in the top labels.
+
+{\it col} will be {\it -1} if the click is in the left labels.
+
+{\it row} and {\it col} will be {\it -1} if the click is in the upper
+left corner.
+
+\membersection{wxGrid::OnSelectCell}\label{wxgridonselectcell}
+
+\func{void}{OnSelectCell}{\param{int}{ row}, \param{int}{ col}}
+
+Virtual function called when the user left-clicks on a cell.
+
+\membersection{wxGrid::OnSelectCellImplementation}\label{wxgridonselectcellimplementation}
+
+\func{void}{OnSelectCellImplementation}{\param{wxDC *}{dc}, \param{int}{ row}, \param{int}{ col}}
+
+Virtual function called when the user left-clicks on a cell. If you override this function,
+call wxGrid::OnSelectCell to apply the default behaviour.
+
+\membersection{wxGrid::SetCellAlignment}\label{wxgridsetcellalignment}
+
+\func{void}{SetCellAlignment}{\param{int}{ alignment}, \param{int}{ row}, \param{int}{ col}}
+
+\func{void}{SetCellAlignment}{\param{int}{ alignment}}
+
+Sets the text alignment for the cell at the given position, or for the whole grid. {\it alignment} may be wxLEFT, wxRIGHT or wxCENTRE.
+
+\membersection{wxGrid::SetCellBackgroundColour}\label{wxgridsetcellbackgroundcolour}
+
+\func{void}{SetCellBackgroundColour}{\param{const wxColour\&}{ colour}, \param{int}{ row}, \param{int}{ col}}
+
+\func{void}{SetCellBackgroundColour}{\param{const wxColour\&}{ colour}}
+
+Sets the background colour for the cell at the given position, or for the whole grid.
+
+\membersection{wxGrid::SetCellTextColour}\label{wxgridsetcelltextcolour}
+
+\func{void}{SetCellTextColour}{\param{const wxColour\&}{ colour}, \param{int}{ row}, \param{int}{ col}}
+
+\func{void}{SetCellTextColour}{\param{const wxColour\&}{ colour}}
+
+Sets the text colour for the cell at the given position, or for the whole grid.
+
+\membersection{wxGrid::SetCellTextFont}\label{wxgridsetcelltextfont}
+
+\func{void}{SetCellTextFont}{\param{wxFont *}{font}, \param{int}{ row}, \param{int}{ col}}
+
+\func{void}{SetCellTextFont}{\param{wxFont *}{font}}
+
+Sets the text font for the cell at the given position, or for the whole grid.
+
+\membersection{wxGrid::SetCellValue}\label{wxgridsetcellvalue}
+
+\func{void}{SetCellValue}{\param{const wxString\&}{ val}, \param{int}{ row}, \param{int}{ col}}
+
+Sets the cell value at the given position.
+
+\membersection{wxGrid::SetColumnWidth}\label{wxgridsetcolumnwidth}
+
+\func{void}{SetColumnWidth}{\param{int}{ col}, \param{int}{ width}}
+
+Sets the width in pixels for column {\it col}.
+
+\membersection{wxGrid::SetDividerPen}\label{wxgridsetdividerpen}
+
+\func{void}{SetDividerPen}{\param{wxPen *}{pen}}
+
+Specifies the pen to be used for drawing the divisions between cells. The default
+is a light grey. If NULL is specified, the divisions will not be drawn.
+
+\membersection{wxGrid::SetEditable}\label{wxgridseteditable}
+
+\func{void}{SetEditable}{\param{bool}{ editable}}
+
+If {\it editable} is TRUE (the default), the grid cells will be editable by means of the
+text edit control. If FALSE, the text edit control will be hidden and the user will not
+be able to edit the cell contents.
+
+\membersection{wxGrid::SetGridCursor}\label{wxgridsetgridcursor}
+
+\func{void}{SetGridCursor}{\param{int }{row}, \param{int}{ col}}
+
+Sets the position of the selected cell.
+
+\membersection{wxGrid::SetLabelAlignment}\label{wxgridsetlabelalignment}
+
+\func{void}{SetLabelAlignment}{\param{int}{ orientation}, \param{int}{ alignment}}
+
+Sets the row or column label alignment. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.\rtfsp
+{\it alignment} should be wxCENTRE, wxLEFT or wxRIGHT.
+
+\membersection{wxGrid::SetLabelBackgroundColour}\label{wxgridsetlabelbackgroundcolour}
+
+\func{void}{SetLabelBackgroundColour}{\param{const wxColour\&}{ value}}
+
+Sets a row or column label background colour.
+
+\membersection{wxGrid::SetLabelSize}\label{wxgridsetlabelsize}
+
+\func{void}{SetLabelSize}{\param{int}{ orientation}, \param{int}{ size}}
+
+Sets the row label height, or column label width, in pixels. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.
+
+If a dimension of zero is specified, the row or column labels will not be
+shown.
+
+\membersection{wxGrid::SetLabelTextColour}\label{wxgridsetlabeltextcolour}
+
+\func{void}{SetLabelTextColour}{\param{const wxColour\&}{ value}}
+
+Sets a row and column label text colour.
+
+\membersection{wxGrid::SetLabelTextFont}\label{wxgridsetlabeltextfont}
+
+\func{void}{SetLabelTextFont}{\param{wxFont *}{font}}
+
+Sets the font to be used for the row and column labels.
+
+\membersection{wxGrid::SetLabelValue}\label{wxgridsetlabelvalue}
+
+\func{void}{SetLabelValue}{\param{int}{ orientation}, \param{const wxString\&}{ value}, \param{int}{ pos}}
+
+Sets a row or column label value. {\it orientation} should
+be wxHORIZONTAL to specify column label, wxVERTICAL to specify row label.\rtfsp
+{\it pos} is the label position.
+
+\membersection{wxGrid::SetRowHeight}\label{wxgridsetrowheight}
+
+\func{void}{SetRowHeight}{\param{int}{ row}, \param{int}{ height}}
+
+Sets the height in pixels for row {\it row}.
+
+\membersection{wxGrid::UpdateDimensions}\label{wxgridupdatedimensions}
+
+\func{void}{UpdateDimensions}{\void}
+
+Call this function whenever a change has been made via the API that
+might alter size characteristics. You may also need to follow it with
+a call to AdjustScrollbars.
+
+
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /home/jacs/wx/utils/wxgrid/docs/grid1.eps
+%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
+%%BoundingBox: 36 216 576 576
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% define space for color conversions
+/grays 450 string def % space for gray scale line
+/npixls 0 def
+/rgbindx 0 def
+
+% lower left corner
+36 216 translate
+
+% size of image (on paper, in 1/72inch coords)
+540.00000 360.00000 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays 0 npixls getinterval
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 39 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 bf0000 00bf00 bfbf00 0000bf 00bfbf c0c0c0 808080 ff0000 00ff00
+ffff00 00ffff ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+450 300 8 % dimensions of data
+[450 0 0 -300 0 300] % mapping matrix
+rlecmapimage
+
+7f067f067f0640060000
+81060c7f0c7f0c7f0c3d0c810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c068106047f047f047f0438040106810700
+82060c068106048204060c820c060783070c0702010203098102047f047f047f04260401
+06810700
+82060c068106048104060106830001020781070283020702098109028102047f047f0472
+040e0c81000c0d0c81000481040c0d0c81000481040682060700
+82060c06810604810406010601008102078507020902070201028109047f047f04720481
+0c060b068307000c060b068207000482040c060b068207000481040682060700
+82060c0681060481040601068300040307820702098409020702098109041104040c0604
+010c0404010c0504030c1904010c7f047f042504810c060b068307000c06810600070001
+068207000482040c060b068207000481040682060700
+82060c0681060481040601068304000a0789070209020002070209041004010c0204010c
+0c04010c0404010c0104010c1804010c7f047f042504810c060b068307000c0681060007
+0001068207000482040c06010601000306010001068207000481040682060700
+82060c068106048204070681060001000107010286000209020702041004010c1104010c
+0404010c1c04010c7f047f042504810c060b068307000c06820600060506810006830607
+000482040c06020601000106010002068207000481040682060700
+82060c0681060485040c0607060c010c8407020002090109820200040104010c81040c82
+0c040c820c040c820c040c820c040c810c040504020c81040c810c0481040c030c040401
+0c0604030c0104060c0104040c0104010c0104030c7f047f041f04810c060b068307000c
+06820600060506810006830607000482040c060306030003068207000481040682060700
+
+82060c068106048104070507010006020204010c81040c820c040c820c040c820c040c82
+0c040c820c040c020c0104010c0104010c81040c810c0481040c810c040404030c060401
+0c81040c820c040c820c040c820c040c810c0481040c820c040c820c040c810c0481040c
+810c047f047f041d04810c060b068307000c06820600060506810006830607000482040c
+060406010004068207000481040682060700
+82060c068106048104050505010006030204070c0104020c0104010c0204010c0104010c
+0104010c81040c810c0481040c810c040704010c0204040c81040c820c040c820c040c82
+0c040c810c0481040c820c040c820c040c040c7f047f041e04810c060b068307000c0682
+0600060506810006830607000482040c060306030003068207000481040682060700
+82060c0681060481040b010b8205010b830b05030a020a81030a810a040104070c010402
+0c0104010c0204010c0104010c0104010c81040c810c0481040c810c040704010c010401
+0c0104010c81040c820c040c820c040c820c040c810c0481040c820c040c820c040c810c
+047f047f042104810c060b068307000c06820600060506810006830607000482040c0602
+0601000106010002068207000481040682060700
+82060c068106048c040b05070507050b05030a030a840a03000a040204010c0104010c01
+04010c81040c820c040c810c0481040c010c0104010c0104010c81040c810c0481040c81
+0c040304010c0104010c0104010c0104010c81040c820c040c820c040c820c040c810c04
+81040c820c040c820c040c810c0481040c810c047f047f041d04810c0601060500030683
+07000c06820600060506810006830607000482040c060106010003060100010682070004
+81040682060700
+82060c0681060482040b08020886070b05030a030a010a82030a040204010c0104010c01
+04010c81040c810c0481040c040c0104010c0104010c0104040c0504030c0304040c8104
+0c820c040c820c040c820c040c030c0104010c0104030c7f047f041f04810c0601060500
+03068307000c06810600070001068207000482040c060b068207000481040682060700
+82060c0681060482040b080208010b8205030a810a0384030a030a044304010c7f047f04
+2c04810c060b068307000c060b068207000482040c060b068207000481040682060700
+82060c0681060482040b080308850b05030a030a010a82000a044304010c7f047f042c04
+810c070c0782000c070c0781000482040c070c0781000481040682060700
+82060c068106048c040b05080108010b05030a030a810a0382030a047f047f0472041f00
+01040f0001040106810700
+82060c0681060481040b050b8205030a050a7f047f047f0427040106810700
+82060c068106047f047f047f0438040106810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c0607060400840600060006120602000e068100067f067f067f060306810700
+82060c0607068100060506810006110681000601068100060606810006820600067f067f
+067f060606810700
+82060c060706810006050681000611068100060a06810006820600067f067f067f060606
+810700
+82060c0607068100060306830006000681060001000d0681000605060200010601008106
+00860006000600060081000601060300010601007f067f067406810700
+82060c060706030001068500060006000601068100060c06020002068100060106830006
+000682060006830600060081000684060006000601068300060006820600067f067f0672
+06810700
+82060c060706810006030684000600060003001006810006810600030082060006820600
+06840600060006010683000600060106810006820600067f067f067406810700
+82060c060706810006030685000600060006130681000682060006030681000682060006
+84060006000601068300060006010681000601068100067f067f067306810700
+82060c06070681000603068500060006000601068100060b068100060106810006820600
+060106830006000682060006840600060006010683000600060106830006000682060006
+7f067f067206810700
+82060c0607068100060306830006000681060001000e0602000306020002068100068606
+00060006000601068100068106000200010601007f067f067406810700
+82060c0642068100067f067f067706810700
+82060c060606050015060600140603007f067f067906810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c061b067f077f077f071e070106810700
+82060c061b068107007f007f007f001b000206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c810c000200820c000c0a0c81000c0f0c81000c820c000c7f0c7f
+0c700c0206810700
+82060c060806810006040681000609068207000c820c000c0f0c81000c0f0c81000c820c
+000c7f0c7f0c700c0206810700
+82060c0607068300060006020601000a068207000c820c000c020c81000c810c00010001
+0c0600040c0200020c0200010c81000c820c000c7f0c7f0c700c0206810700
+82060c06070683000600060106830006000609068207000c810c000200820c000c820c00
+0c010c81000c030c81000c030c81000c010c83000c000c010c83000c000c820c000c7f0c
+7f0c700c0206810700
+82060c0606068100060106810006020681000609068207000c820c000c020c81000c820c
+000c020c0200010c81000c030c81000c030c0400820c000c820c000c7f0c7f0c700c0206
+810700
+82060c0606060400030681000609068207000c820c000c020c81000c820c000c050c8300
+0c000c030c81000c010c83000c000c030c81000c820c000c7f0c7f0c700c0206810700
+82060c0606068100060106810006020681000609068207000c820c000c020c81000c820c
+000c010c0300010c0100040c0200020c0300820c000c820c000c7f0c7f0c700c02068107
+00
+82060c0605068100060306810006010681000609068207000c7f0c7f0c7f0c1a0c020681
+0700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068207000c7f0c7f0c7f0c1a0c0206810700
+82060c061b068107067f067f067f061e06810700
+82060c061b067f0c7f0c7f0c1e0c0106810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+82060c068106007f007f007f0028000e0681000682060700
+82060c0682060006250681000c4d0c81000c4d0c81000c4d0c81000c7f0c0f0c81060c0b
+0c8207000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+810c060a068207000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+810c060a068207000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+810c060a068207000682060700
+82060c0682060006250682000c0624060200240682000c0622060500230682000c062406
+0400220682000c065e0604002b06810c060a068207000682060700
+82060c0682060006250682000c0624060200240682000c06220601000206010022068200
+0c062306010002060100210682000c065e060100010601002a06810c0603068100060406
+8207000682060700
+82060c0682060006250682000c0623060100810600810006220682000c06220601000206
+0100220682000c0622060100270682000c065e060100020601002906810c060206020004
+068207000682060700
+82060c0682060006250682000c0623060100810600810006220682000c06220601000206
+0100220682000c0622060100270682000c065e060100020601002906810c060106040003
+068207000682060700
+82060c0682060006250682000c0623060100810600810006220682000c06220605002306
+82000c0622060100270682000c065e060100020601002906810c06810600050002068207
+000682060700
+82060c0682060006250682000c062206010002060100220682000c062206010002060100
+220682000c0622060100270682000c065e060100020601002906810c060a068207000682
+060700
+82060c0682060006250682000c062206010002060100220682000c062206010002060100
+220682000c0622060100270682000c065e060100020601002906810c060a068207000682
+060700
+82060c0682060006250682000c0622060600220682000c06220601000206010022068200
+0c0622060100270682000c065e060100020601002906810c060a068207000682060700
+82060c0682060006250682000c062106010004060100210682000c062206010002060100
+220682000c062306010002060100210682000c065e060100010601002a06810c060a0682
+07000682060700
+82060c0682060006250682000c062106010004060100210682000c062206050023068200
+0c0624060400220682000c065e0604002b060d0781000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060e06
+0f000106810700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f061d06
+81000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+0c0c8207000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+810c060a068207000682060700
+82060c0682060006250682000c064c0682000c064c0682000c064c0682000c067f060f06
+810c060a068207000682060700
+82060c068106007f007f007f00280082060c060a068207000682060700
+82060c068206000c250c4f0081060c4d0c81060c4d0c81060c7f0c0f0c82060c060a0682
+07000682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c0624060100030c0700210c0100010c0100180c8200060c4d0c81060c
+4d0c81060c7f0c0f0c82060c060a068207000682060700
+82060c068306000c061006010011060100040c81000c030c83000c000c0b0c81000c110c
+81000c010c81000c170c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c060a068207
+000682060700
+82060c068306000c060f06020011060100040c81000c820c000c820c000c0d0c81000c11
+0c81000c010c81000c170c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c060a0682
+07000682060700
+82060c068306000c060e06030011060100040c81000c820c000c010c0100810c0082000c
+0082000c000100810c000200050c0200020c0200020c81000c010c81000c170c8200060c
+4d0c81060c4d0c81060c7f0c0f0c82060c060a068207000682060700
+82060c068306000c060e068200060081000610060100040c0300030c81000c840c000c00
+0c820c000c020c81000c050c81000c820c000c820c000c820c000c820c000c010c81000c
+180c8200060c4d0c81060c4d0c81060c7f0c0f0c82060c060a068207000682060700
+82060c068306000c061006010011060100030c81000c820c000c020c81000c010c010002
+0c81000c020c81000c050c81000c020c81000c010c81000c820c000c010c81000c180c82
+00060c4d0c81060c4d0c81060c7f0c0f0c8106070c0781000682060700
+82060c068306000c061006010011060100030c81000c820c000c020c81000c010c81000c
+030c81000c010c81000c040c81000c030c81000c820c000c010c81000c010c81000c180c
+8200060c4d0c81060c4d0c81060c7f0c0f0c0f000106810700
+82060c068306000c061006010011060100030c81000c050c81000c010c81000c040c8100
+0c820c000c040c81000c030c0200030c81000c010c81000c180c8200060c4d0c81060c4d
+0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c061006010011060100020c81000c050c81000c010c81000c020c8100
+0c860c000c000c000c030c81000c820c000c820c000c010c83000c000c010c81000c190c
+8200060c4d0c81060c4d0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c061006010011060100010c0200050c0100010c81000c020c0200010c
+0100060c0100030c0200010c0100010c0100190c8200060c4d0c81060c4d0c81060c7f0c
+0f0c8107060c0681070682060700
+82060c068306000c0610060100110601004c0c8200060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240601004c0c8200060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068206000625064f0081060c4d0c81060c4d0c81060c7f0c0f0c8107060c068107
+0682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c050c81080c150c81080c210c81080c820c
+080c060c81060c4d0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c040c83080c080c100c81080c01
+0c81080c210c81080c820c080c060c81060c4d0c81060c7f0c0f0c8107060c0681070682
+060700
+82060c068306000c060d06010001060100100681000c4d0c81060c040c83080c080c100c
+81080c010c81080c210c81080c820c080c060c81060c4d0c81060c7f0c0f0c8107060c06
+81070682060700
+82060c068306000c0611060100100681000c4d0c81060c040c83080c080c020c82080c08
+81080c020c0208010c0208010c82080c0881080c020c0208020c83080c080c040c020803
+0c0208020c81080c820c080c060c81060c4d0c81060c7f0c0f0c8107060c068107068206
+0700
+82060c068306000c0611060100100681000c4d0c81060c030c81080c010c81080c010c01
+08010c81080c820c080c010c81080c820c080c010c0108010c81080c820c080c010c8108
+0c810c0881080c040c81080c010c81080c820c080c010c81080c820c080c820c080c060c
+81060c4d0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c030c81080c010c81080c010c81
+080c010c81080c820c080c010c81080c820c080c010c81080c010c81080c820c080c010c
+81080c820c080c050c81080c040c81080c010c81080c820c080c820c080c060c81060c4d
+0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060f060200110681000c4d0c81060c020c0608010c81080c010c8108
+0c820c080c010c81080c820c080c010c81080c010c81080c810c080308010c81080c050c
+81080c040c0408010c81080c820c080c060c81060c4d0c81060c7f0c0f0c8107060c0681
+070682060700
+82060c068306000c060f060100120681000c4d0c81060c020c81080c030c81080c820c08
+0c010c81080c820c080c010c81080c820c080c010c81080c010c81080c820c080c040c81
+080c050c81080c040c81080c040c81080c820c080c060c81060c4d0c81060c7f0c0f0c81
+07060c0681070682060700
+82060c068306000c060e060100130681000c4d0c81060c010c81080c050c83080c080c01
+0c81080c820c080c010c81080c820c080c010c81080c010c81080c820c080c010c81080c
+820c080c050c81080c010c81080c820c080c010c81080c820c080c820c080c060c81060c
+4d0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d060100140681000c4d0c81060c010c81080c050c83080c080c01
+0c81080c010c0208020c0108010c81080c010c81080c010c0208020c81080c060c020803
+0c0208020c81080c820c080c060c81060c4d0c81060c7f0c0f0c8107060c068107068206
+0700
+82060c068306000c060d060500100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b020b81000b030b81000b280b
+81000b170b81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060b030b81000b010b81
+000b080b81000b1a0b81000b010b81000b170b81060c7f0c0f0c8107060c068107068206
+0700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060b030b8100
+0b010b81000b080b81000b1a0b81000b010b81000b170b81060c7f0c0f0c8107060c0681
+070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060b040b83000b000b03
+0b0200010b0200060b0200020b82000b0081000b020b0200010b0200010b82000b008100
+0b020b0200020b83000b000b040b81000b820b060c7f0c0f0c8107060c06810706820607
+00
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060b040b83000b000b02
+0b81000b010b81000b820b000b050b81000b010b81000b810b0081000b820b000b820b00
+0b010b81000b820b000b010b0100010b81000b820b000b010b81000b810b0081000b040b
+81000b010b81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060f060200110681000c4d0c81060c4d0c81060b050b81000b030b81
+000b010b81000b820b000b090b81000b820b000b010b81000b820b000b010b81000b820b
+000b010b81000b010b81000b820b000b010b81000b820b000b050b81000b010b81060c7f
+0c0f0c8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060b050b81000b030b04
+00010b81000b060b0300010b81000b010b81000b820b000b010b81000b820b000b010b81
+000b010b81000b810b000300010b81000b050b81000b010b81060c7f0c0f0c8107060c06
+81070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060b050b81000b030b81
+000b040b81000b050b81000b010b81000b820b000b010b81000b820b000b010b81000b82
+0b000b010b81000b010b81000b820b000b040b81000b050b81000b010b81060c7f0c0f0c
+8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060b050b81000b030b81
+000b010b81000b820b000b050b81000b810b0081000b820b000b010b81000b820b000b01
+0b81000b820b000b010b81000b010b81000b820b000b010b81000b820b000b050b81000b
+010b81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060b050b8100
+0b040b0200020b0100060b0100820b000b820b000b010b81000b010b0200020b0100010b
+81000b010b81000b010b0200020b81000b060b81000b820b060c7f0c0f0c8107060c0681
+070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060b4d0b81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060f060200110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060f060200110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e0682000600810006100681000c4d0c81060c4d0c81060c4d0c81
+060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e0682000600810006100681000c4d0c81060c4d0c81060c4d0c81
+060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06810006810600810006100681000c4d0c81060c4d0c81060c4d
+0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d060500100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c060e060400100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e060100130681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d060100140681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d060400110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c060f060200110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e068100068106008100060f0681000c4d0c81060c4d0c81060c4d
+0c81060c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d060100140681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d060100140681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d060400110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c060d060500100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0611060100100681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c0610060100110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060f060100120681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060f060100120681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060f060100120681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e060100130681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e060100130681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060e060100130681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c0681060027007f067f067f06820607060c0681070682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c8107060c
+0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c810706
+0c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c8107060c0681070682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c0e0681000682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c81060c0b0c8207000682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c82060c060a068207000682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c82060c060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+06810600050002068207000682060700
+82060c0682060006250681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c06
+0106040003068207000682060700
+82060c0681060027007f067f067f060106810c060206020004068207000682060700
+82060c068206000c250c81000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c06
+030681000604068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c06240681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f0c82060c
+060a068207000682060700
+82060c068306000c060e060300110681000c4d0c81060c4d0c81060c4d0c81060c7f0c0f
+0c8106070c0781000682060700
+82060c068306000c060d06010001060100100681000c4d0c81060c4d0c81060c4d0c8106
+0c7f0c0f0c0f000106810700
+82060c060f068100060d068100077f077f0778070e068100061006810700
+82060c0601060c0c830700060c0b0c820700067f067f0679060c0c820700061006810700
+
+82060c060106810c060a06840700060c060a06820700067f067f067906810c060a068207
+00061006810700
+82060c060106810c060a06840700060c060a06820700067f067f067906810c060a068207
+00061006810700
+82060c060106810c0604068100060306840700060c060a06820700067f067f067906810c
+0602068100060506820700061006810700
+82060c060106810c06030601000406840700060c060a06820700067f067f067906810c06
+020601000506820700061006810700
+82060c060106810c06020602000406840700060c060a06820700067f067f067906810c06
+020602000406820700061006810700
+82060c060106810c06010603000406840700060c060a06820700067f067f067906810c06
+020603000306820700061006810700
+82060c060106810c06020602000406840700060c060a06820700067f067f067906810c06
+020602000406820700061006810700
+82060c060106810c06030601000406840700060c060a06820700067f067f067906810c06
+020601000506820700061006810700
+82060c060106810c0604068100060306840700060c060a06820700067f067f067906810c
+0602068100060506820700061006810700
+82060c060106810c060a06840700060c060a06820700067f067f067906810c060a068207
+00061006810700
+82060c060106810c060a06840700060c060a06820700067f067f067906810c060a068207
+00061006810700
+82060c060106810c060a06840700060c060a06820700067f067f067906810c060a068207
+00061006810700
+82060c0601060d07820006070c078100067f067f0679060d078100061006810700
+82060c068106001e007f077f0779070f001106810700
+82060c067f067f067f063c06810700
+82060c067f067f067f063c06810700
+8106077f077f077f073e070000
+7f007f007f004100
+
+%
+% Compression made this file 3.88% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\section{\class{wxHashTable}}\label{wxhashtable}
+
+This class provides hash table functionality for wxWindows, and for an
+application if it wishes. Data can be hashed on an integer or string
+key.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{Example}
+
+Below is an example of using a hash table.
+
+\begin{verbatim}
+ wxHashTable table(KEY_STRING);
+
+ wxPoint *point = new wxPoint(100, 200);
+ table.Put("point 1", point);
+
+ ....
+
+ wxPoint *found_point = (wxPoint *)table.Get("point 1");
+\end{verbatim}
+
+A hash table is implemented as an array of pointers to lists. When no
+data has been stored, the hash table takes only a little more space than
+this array (default size is 1000). When a data item is added, an
+integer is constructed from the integer or string key that is within the
+bounds of the array. If the array element is NULL, a new (keyed) list is
+created for the element. Then the data object is appended to the list,
+storing the key in case other data objects need to be stored in the list
+also (when a `collision' occurs).
+
+Retrieval involves recalculating the array index from the key, and searching
+along the keyed list for the data object whose stored key matches the passed
+key. Obviously this is quicker when there are fewer collisions, so hashing
+will become inefficient if the number of items to be stored greatly exceeds
+the size of the hash table.
+
+\wxheading{See also}
+
+\helpref{wxList}{wxlist}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxHashTable::wxHashTable}
+
+\func{}{wxHashTable}{\param{unsigned int}{ key\_type}, \param{int}{ size = 1000}}
+
+Constructor. {\it key\_type} is one of wxKEY\_INTEGER, or wxKEY\_STRING,
+and indicates what sort of keying is required. {\it size} is optional.
+
+\membersection{wxHashTable::\destruct{wxHashTable}}
+
+\func{}{\destruct{wxHashTable}}{\void}
+
+Destroys the hash table.
+
+\membersection{wxHashTable::BeginFind}
+
+\func{void}{BeginFind}{\void}
+
+The counterpart of {\it Next}. If the application wishes to iterate
+through all the data in the hash table, it can call {\it BeginFind} and
+then loop on {\it Next}.
+
+\membersection{wxHashTable::Clear}
+
+\func{void}{Clear}{\void}
+
+Clears the hash table of all nodes (but as usual, doesn't delete user data).
+
+\membersection{wxHashTable::Delete}
+
+\func{wxObject *}{Delete}{\param{long}{ key}}
+
+\func{wxObject *}{Delete}{\param{const wxString\& }{ key}}
+
+Deletes entry in hash table and returns the user's data (if found).
+
+\membersection{wxHashTable::Get}
+
+\func{wxObject *}{Get}{\param{long}{ key}}
+
+\func{wxObject *}{Get}{\param{const wxString\& }{ key}}
+
+Gets data from the hash table, using an integer or string key (depending on which
+has table constructor was used).
+
+\membersection{wxHashTable::MakeKey}
+
+\func{long}{MakeKey}{\param{const wxString\& }{string}}
+
+Makes an integer key out of a string. An application may wish to make a key
+explicitly (for instance when combining two data values to form a key).
+
+\membersection{wxHashTable::Next}
+
+\func{wxNode *}{Next}{\void}
+
+If the application wishes to iterate through all the data in the hash
+table, it can call {\it BeginFind} and then loop on {\it Next}. This function
+returns a {\bf wxNode} pointer (or NULL if there are no more nodes). See the
+description for \helpref{wxNode}{wxnode}. The user will probably only wish to use the
+{\bf wxNode::Data} function to retrieve the data; the node may also be deleted.
+
+\membersection{wxHashTable::Put}
+
+\func{void}{Put}{\param{long}{ key}, \param{wxObject *}{object}}
+
+\func{void}{Put}{\param{const wxString\& }{ key}, \param{wxObject *}{object}}
+
+Inserts data into the hash table, using an integer or string key (depending on which
+has table constructor was used). The key string is copied and stored by the hash
+table implementation.
+
+
--- /dev/null
+\section{\class{wxHelpInstance}}\label{wxhelpinstance}
+
+NOTE: this documentation is out of date (see comments below).
+
+The {\bf wxHelpInstance} class implements the interface by which
+applications may invoke wxHelp to provide on-line help. Each instance
+of the class maintains one connection to an instance of wxHelp which
+belongs to the application, and which is shut down when the Quit
+member of {\bf wxHelpInstance} is called (for example in the {\bf
+OnClose} member of an application's main frame). Under MS Windows,
+there is currently only one instance of wxHelp which is used by all
+applications.
+
+Since there is a DDE link between the two programs, each subsequent
+request to display a file or section uses the existing instance of
+wxHelp, rather than starting a new instance each time. wxHelp thus
+appears to the user to be an extension of the current application.
+wxHelp may also be invoked independently of a client application.
+
+Normally an application will create an instance of {\bf
+wxHelpInstance} when it starts, and immediately call {\bf Initialize}\rtfsp
+to associate a filename with it. wxHelp will only get run, however,
+just before the first call to display something. See the test program
+supplied with the wxHelp source.
+
+Include the file {\tt wx\_help.h} to use this API, even if you have
+included {\tt wx.h}.
+
+If you give TRUE to the constructor, you can use the native help system
+where appropriate (currently under Windows only). Omit the file extension
+to allow wxWindows to choose the appropriate file for the platform.
+
+TODO: no longer derive this from a client class, but maybe have several implementations,
+e.g. wxHelpInstanceBase, wxHelpInstanceDDE, wxHelpInstanceWinHelp, wxHelpInstanceHTML, etc.
+
+\wxheading{Derivation}
+
+TODO
+
+\wxheading{See also}
+
+TODO
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxHelpInstance::wxHelpInstance}
+
+\func{}{wxHelpInstance}{\param{bool}{ native}}
+
+Constructs a help instance object, but does not invoke wxHelp.
+If {\it native} is TRUE, tries to use the native help system where
+possible (Windows Help under MS Windows, wxHelp on other platforms).
+
+\membersection{wxHelpInstance::\destruct{wxHelpInstance}}
+
+\func{}{\destruct{wxHelpInstance}}{\void}
+
+Destroys the help instance, closing down wxHelp for this application
+if it is running.
+
+\membersection{wxHelpInstance::Initialize}
+
+\func{void}{Initialize}{\param{const wxString\& }{file}, \param{int}{ server = -1}}
+
+Initializes the help instance with a help filename, and optionally a server (socket)
+number (one is chosen at random if this parameter is omitted). Does not invoke wxHelp.
+This must be called directly after the help instance object is created and before
+any attempts to communicate with wxHelp.
+
+You may omit the file extension, and in fact this is recommended if you
+wish to support .xlp files under X and .hlp under Windows.
+
+\membersection{wxHelpInstance::DisplayBlock}
+
+\func{bool}{DisplayBlock}{\param{long}{ blockNo}}
+
+If wxHelp is not running, runs wxHelp and displays the file at the given block number.
+If using Windows Help, displays the file at the given context number.
+
+\membersection{wxHelpInstance::DisplayContents}
+
+\func{bool}{DisplayContents}{\void}
+
+If wxHelp is not running, runs wxHelp (or Windows Help) and displays the
+contents (the first section of the file).
+
+\membersection{wxHelpInstance::DisplaySection}
+
+\func{bool}{DisplaySection}{\param{int}{ sectionNo}}
+
+If wxHelp is not running, runs wxHelp and displays the given section.
+Sections are numbered starting from 1, and section numbers may be viewed by running
+wxHelp in edit mode.
+
+\membersection{wxHelpInstance::KeywordSearch}
+
+\func{bool}{KeywordSearch}{\param{const wxString\& }{keyWord}}
+
+If wxHelp (or Windows Help) is not running, runs wxHelp (or Windows
+Help), and searches for sections matching the given keyword. If one
+match is found, the file is displayed at this section. If more than one
+match is found, the Search dialog is displayed with the matches (wxHelp)
+or the first topic is displayed (Windows Help).
+
+\membersection{wxHelpInstance::LoadFile}
+
+\func{bool}{LoadFile}{\param{const wxString\& }{file = NULL}}
+
+If wxHelp (or Windows Help) is not running, runs wxHelp (or Windows
+Help), and loads the given file. If the filename is not supplied or is
+NULL, the file specified in {\bf Initialize} is used. If wxHelp is
+already displaying the specified file, it will not be reloaded. This
+member function may be used before each display call in case the user
+has opened another file.
+
+\membersection{wxHelpInstance::OnQuit}
+
+\func{bool}{OnQuit}{\void}
+
+Overridable member called when this application's wxHelp is quit
+(no effect if Windows Help is being used instead).
+
+\membersection{wxHelpInstance::Quit}
+
+\func{bool}{Quit}{\void}
+
+If wxHelp is running, quits wxHelp by disconnecting (no effect for Windows
+Help).
+
+
--- /dev/null
+\section{\class{wxIcon}}\label{wxicon}
+
+An icon is a small rectangular bitmap usually used for denoting a
+minimized application.
+
+\wxheading{Remarks}
+
+It is optional (but desirable) to associate a
+pertinent icon with a frame. Obviously icons in X and MS Windows are
+created in a different manner, and colour icons in X are difficult
+to arrange. Therefore, separate icons will be created for the different
+environments. Platform-specific methods for creating a {\bf wxIcon}\rtfsp
+structure are catered for, and this is an occasion where conditional
+compilation will probably be required.
+
+Note that a new icon must be created for every time the icon is to be
+used for a new window. In X, this will ensure that fresh X resources
+are allocated for this frame. In MS Windows, the icon will not be
+reloaded if it has already been used. An icon allocated to a frame will
+be deleted when the frame is deleted.
+
+The following shows the conditional compilation required to define an
+icon in X and in MS Windows. The alternative is to use the string
+version of the icon constructor, which loads a file under X and a
+resource under MS Windows, but has the disadvantage of requiring the
+X icon file to be available at run-time.
+
+\begin{verbatim}
+#ifdef wx_x
+#include "aiai.xbm"
+#endif
+#ifdef wx_msw
+ wxIcon *icon = new wxIcon("aiai");
+#endif
+#ifdef wx_x
+ wxIcon *icon = new wxIcon(aiai_bits, aiai_width, aiai_height);
+#endif
+\end{verbatim}
+
+\wxheading{Derived from}
+
+\helpref{wxBitmap}{wxbitmap}\\
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxIcon overview}{wxiconoverview}, \helpref{wxDC::DrawIcon}{wxdcdrawicon}, \helpref{wxCursor}{wxcursor}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxIcon::wxIcon}\label{wxiconconstr}
+
+\func{}{wxIcon}{\void}
+
+Default constructor.
+
+\func{}{wxIcon}{\param{const wxIcon\& }{icon}}
+
+\func{}{wxIcon}{\param{const wxIcon* }{icon}}
+
+Copy constructors.
+
+\func{}{wxIcon}{\param{void*}{ data}, \param{const int}{ type}, \param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates an icon from the given data, which can be of arbitrary type.
+
+\func{}{wxIcon}{\param{const char}{ bits[]}, \param{const int}{ width}, \param{const int}{ height}\\
+ \param{const int}{ depth = 1}}
+
+Creates an icon from an array of bits.
+
+\func{}{wxIcon}{\param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a new icon.
+
+\func{}{wxIcon}{\param{const char**}{ bits}}
+
+Creates an icon from XPM data.
+
+\func{}{wxIcon}{\param{const wxString\& }{name}, \param{const long}{ type}}
+
+Loads an icon from a file or resource.
+
+\wxheading{Parameters}
+
+\docparam{bits}{Specifies an array of pixel values.}
+
+\docparam{width}{Specifies the width of the icon.}
+
+\docparam{height}{Specifies the height of the icon.}
+
+\docparam{depth}{Specifies the depth of the icon. If this is omitted, the display depth of the
+screen is used.}
+
+\docparam{name}{This can refer to a resource name under MS Windows, or a filename under MS Windows and X.
+Its meaning is determined by the {\it flags} parameter.}
+
+\docparam{type}{May be one of the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_ICO}}}{Load a Windows icon file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_ICO\_RESOURCE}}}{Load a Windows icon from the resource database.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_GIF}}}{Load a GIF bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_XBM}}}{Load an X bitmap file.}
+\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_XPM}}}{Load an XPM bitmap file.}
+%\twocolitem{{\bf \indexit{wxBITMAP\_TYPE\_RESOURCE}}}{Load a Windows resource name.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.
+If all possible wxWindows settings are used, the Windows platform supports ICO, ICO\_RESOURCE,
+XPM\_DATA, and XPM. Under X, the available formats are BMP, GIF, XBM, and XPM.}
+
+\wxheading{Remarks}
+
+The first form constructs an icon object with no data; an assignment or another member function such as Create
+or LoadFile must be called subsequently.
+
+The second and third forms provide copy constructors. Note that these do not copy the
+icon data, but instead a pointer to the data, keeping a reference count. They are therefore
+very efficient operations.
+
+The fourth form constructs an icon from data whose type and value depends on
+the value of the {\it type} argument.
+
+The fifth form constructs a (usually monochrome) icon from an array of pixel values, under both
+X and Windows.
+
+The sixth form constructs a new icon.
+
+The seventh form constructs an icon from pixmap (XPM) data, if wxWindows has been configured
+to incorporate this feature.
+
+To use this constructor, you must first include an XPM file. For
+example, assuming that the file {\tt mybitmap.xpm} contains an XPM array
+of character pointers called mybitmap:
+
+\begin{verbatim}
+#include "mybitmap.xpm"
+
+...
+
+wxIcon *icon = new wxIcon(mybitmap);
+\end{verbatim}
+
+The eighth form constructs an icon from a file or resource. {\it name} can refer
+to a resource name under MS Windows, or a filename under MS Windows and X.
+
+Under Windows, {\it type} defaults to wxBITMAP\_TYPE\_ICO\_RESOURCE.
+Under X, {\it type} defaults to wxBITMAP\_TYPE\_XBM.
+
+\wxheading{See also}
+
+\helpref{wxIcon::LoadFile}{wxiconloadfile}
+
+\membersection{wxIcon::\destruct{wxIcon}}
+
+\func{}{\destruct{wxIcon}}{\void}
+
+Destroys the wxIcon object and possibly the underlying icon data.
+Because reference counting is used, the icon may not actually be
+destroyed at this point - only when the reference count is zero will the
+data be deleted.
+
+If the application omits to delete the icon explicitly, the icon will be
+destroyed automatically by wxWindows when the application exits.
+
+Do not delete an icon that is selected into a memory device context.
+
+\begin{comment}
+\membersection{wxIcon::Create}\label{wxiconcreate}
+
+\func{virtual bool}{Create}{\param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates a fresh icon. If the final argument is omitted, the display depth of
+the screen is used.
+
+\func{virtual bool}{Create}{\param{void*}{ data}, \param{const int}{ type}, \param{const int}{ width}, \param{const int}{ height}, \param{const int}{ depth = -1}}
+
+Creates an icon from the given data, which can be of arbitrary type.
+
+\wxheading{Parameters}
+
+\docparam{width}{The width of the icon in pixels.}
+
+\docparam{height}{The height of the icon in pixels.}
+
+\docparam{depth}{The depth of the icon in pixels. If this is -1, the screen depth is used.}
+
+\docparam{data}{Data whose type depends on the value of {\it type}.}
+
+\docparam{type}{An icon type identifier - see \helpref{wxIcon::wxIcon}{wxiconconstr} for a list
+of possible values.}
+
+\wxheading{Return value}
+
+TRUE if the call succeeded, FALSE otherwise.
+
+\wxheading{Remarks}
+
+The first form works on all platforms. The portability of the second form depends on the
+type of data.
+
+\wxheading{See also}
+
+\helpref{wxIcon::wxIcon}{wxiconconstr}
+
+\end{comment}
+
+\membersection{wxIcon::GetDepth}
+
+\constfunc{int}{GetDepth}{\void}
+
+Gets the colour depth of the icon. A value of 1 indicates a
+monochrome icon.
+
+\membersection{wxIcon::GetHeight}\label{wxicongetheight}
+
+\constfunc{int}{GetHeight}{\void}
+
+Gets the height of the icon in pixels.
+
+\membersection{wxIcon::GetWidth}\label{wxicongetwidth}
+
+\constfunc{int}{GetWidth}{\void}
+
+Gets the width of the icon in pixels.
+
+\wxheading{See also}
+
+\helpref{wxIcon::GetHeight}{wxicongetheight}
+
+\membersection{wxIcon::LoadFile}\label{wxiconloadfile}
+
+\func{bool}{LoadFile}{\param{const wxString\&}{ name}, \param{const long}{ type}}
+
+Loads an icon from a file or resource.
+
+\wxheading{Parameters}
+
+\docparam{name}{Either a filename or a Windows resource name.
+The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{One of the following values:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxBITMAP\_TYPE\_ICO}}{Load a Windows icon file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_ICO\_RESOURCE}}{Load a Windows icon from the resource database.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_GIF}}{Load a GIF bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XBM}}{Load an X bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Load an XPM bitmap file.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxIcon::wxIcon}{wxiconconstr}
+
+\membersection{wxIcon::Ok}\label{wxiconok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if icon data is present.
+
+\begin{comment}
+\membersection{wxIcon::SaveFile}\label{wxiconsavefile}
+
+\func{bool}{SaveFile}{\param{const wxString\& }{name}, \param{int}{ type}, \param{wxPalette* }{palette = NULL}}
+
+Saves an icon in the named file.
+
+\wxheading{Parameters}
+
+\docparam{name}{A filename. The meaning of {\it name} is determined by the {\it type} parameter.}
+
+\docparam{type}{One of the following values:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxBITMAP\_TYPE\_ICO}}{Save a Windows icon file.}
+%\twocolitem{{\bf wxBITMAP\_TYPE\_GIF}}{Save a GIF icon file.}
+%\twocolitem{{\bf wxBITMAP\_TYPE\_XBM}}{Save an X bitmap file.}
+\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Save an XPM bitmap file.}
+\end{twocollist}
+
+The validity of these flags depends on the platform and wxWindows configuration.}
+
+\docparam{palette}{An optional palette used for saving the icon. TODO: this parameter should
+probably be eliminated; instead the app should set the palette before saving.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, FALSE otherwise.
+
+\wxheading{Remarks}
+
+Depending on how wxWindows has been configured, not all formats may be available.
+
+\wxheading{See also}
+
+\helpref{wxIcon::LoadFile}{wxiconloadfile}
+\end{comment}
+
+\membersection{wxIcon::SetDepth}\label{wxiconsetdepth}
+
+\func{void}{SetDepth}{\param{int }{depth}}
+
+Sets the depth member (does not affect the icon data).
+
+\wxheading{Parameters}
+
+\docparam{depth}{Icon depth.}
+
+\membersection{wxIcon::SetHeight}\label{wxiconsetheight}
+
+\func{void}{SetHeight}{\param{int }{height}}
+
+Sets the height member (does not affect the icon data).
+
+\wxheading{Parameters}
+
+\docparam{height}{Icon height in pixels.}
+
+\membersection{wxIcon::SetOk}
+
+\func{void}{SetOk}{\param{int }{isOk}}
+
+Sets the validity member (does not affect the icon data).
+
+\wxheading{Parameters}
+
+\docparam{isOk}{Validity flag.}
+
+\membersection{wxIcon::SetWidth}
+
+\func{void}{SetWidth}{\param{int }{width}}
+
+Sets the width member (does not affect the icon data).
+
+\wxheading{Parameters}
+
+\docparam{width}{Icon width in pixels.}
+
+\membersection{wxIcon::operator $=$}
+
+\func{wxIcon\& }{operator $=$}{\param{const wxIcon\& }{icon}}
+
+Assignment operator. This operator does not copy any data, but instead
+passes a pointer to the data in {\it icon} and increments a reference
+counter. It is a fast operation.
+
+\wxheading{Parameters}
+
+\docparam{icon}{Icon to assign.}
+
+\wxheading{Return value}
+
+Returns 'this' object.
+
+\membersection{wxIcon::operator $==$}
+
+\func{bool}{operator $==$}{\param{const wxIcon\& }{icon}}
+
+Equality operator. This operator tests whether the internal data pointers are
+equal (a fast test).
+
+\wxheading{Parameters}
+
+\docparam{icon}{Icon to compare with 'this'}
+
+\wxheading{Return value}
+
+Returns TRUE if the icons were effectively equal, FALSE otherwise.
+
+\membersection{wxIcon::operator $!=$}
+
+\func{bool}{operator $!=$}{\param{const wxIcon\& }{icon}}
+
+Inequality operator. This operator tests whether the internal data pointers are
+unequal (a fast test).
+
+\wxheading{Parameters}
+
+\docparam{icon}{Icon to compare with 'this'}
+
+\wxheading{Return value}
+
+Returns TRUE if the icons were unequal, FALSE otherwise.
+
+
--- /dev/null
+\section{\class{wxIdleEvent}}\label{wxidleevent}
+
+This class is used for idle events, which are generated when the system is idle.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process an idle event, use this event handler macro to direct input to a member
+function that takes a wxIdleEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_IDLE(func)}}{Process a wxEVT\_IDLE event.}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+Idle events can be caught by the wxApp class, or by top-level window classes.
+
+\wxheading{See also}
+
+\helpref{wxApp::OnIdle}{wxapponidle}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxIdleEvent::wxIdleEvent}
+
+\func{}{wxIdleEvent}{\void}
+
+Constructor.
+
+\membersection{wxIdleEvent::RequestMore}\label{wxidleeventrequestmore}
+
+\func{void}{RequestMore}{\param{bool}{ needMore = TRUE}}
+
+Tells wxWindows that more processing is required. This function can be called by an OnIdle
+handler for a window or window event handler to indicate that wxApp::OnIdle should
+forward the OnIdle event once more to the application windows. If no window calls this function
+during OnIdle, then the application will remain in a passive event loop (not calling OnIdle) until a
+new event is posted to the application by the windowing system.
+
+\wxheading{See also}
+
+\helpref{wxIdleEvent::MoreRequested}{wxidleeventmorerequested}, \helpref{wxApp::OnIdle}{wxapponidle}
+
+\membersection{wxIdleEvent::MoreRequested}\label{wxidleeventmorerequested}
+
+\constfunc{bool}{MoreRequested}{\void}
+
+Returns TRUE if the OnIdle function processing this event requested more processing time.
+
+\wxheading{See also}
+
+\helpref{wxIdleEvent::RequestMore}{wxidleeventrequestmore}, \helpref{wxApp::OnIdle}{wxapponidle}
+
--- /dev/null
+\section{\class{wxIndividualLayoutConstraint}}\label{wxindividuallayoutconstraint}
+
+Objects of this class are stored in the wxIndividualLayoutConstraint class
+as one of eight possible constraints that a window can be involved in.
+
+Constraints are initially set to have the relationship wxUnconstrained,
+which means that their values should be calculated by looking at known constraints.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Overview and examples}{constraintsoverview},\rtfsp
+\helpref{wxLayoutConstraints}{wxlayoutconstraints}, \helpref{wxWindow::SetConstraints}{wxwindowsetconstraints}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\subsection{Edges and relationships}
+
+TODO: put this in a different section.
+
+The {\it wxEdge}\index{wxEdge} enumerated type specifies the type of edge or dimension of a window.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLeft}{The left edge.}
+\twocolitem{wxTop}{The top edge.}
+\twocolitem{wxRight}{The right edge.}
+\twocolitem{wxBottom}{The bottom edge.}
+\twocolitem{wxCentreX}{The x-coordinate of the centre of the window.}
+\twocolitem{wxCentreY}{The y-coordinate of the centre of the window.}
+\end{twocollist}
+
+The {\it wxRelationship}\index{wxRelationship} enumerated type specifies the relationship that
+this edge or dimension has with another specified edge or dimension. Normally, the user
+doesn't use these directly because functions such as {\it Below} and {\it RightOf} are a convenience
+for using the more general {\it Set} function.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxUnconstrained}{The edge or dimension is unconstrained (the default for edges.}
+\twocolitem{wxAsIs}{The edge or dimension is to be taken from the current window position or size (the
+default for dimensions.}
+\twocolitem{wxAbove}{The edge should be above another edge.}
+\twocolitem{wxBelow}{The edge should be below another edge.}
+\twocolitem{wxLeftOf}{The edge should be to the left of another edge.}
+\twocolitem{wxRightOf}{The edge should be to the right of another edge.}
+\twocolitem{wxSameAs}{The edge or dimension should be the same as another edge or dimension.}
+\twocolitem{wxPercentOf}{The edge or dimension should be a percentage of another edge or dimension.}
+\twocolitem{wxAbsolute}{The edge or dimension should be a given absolute value.}
+\end{twocollist}
+
+\membersection{wxIndividualLayoutConstraint::wxIndividualLayoutConstraint}
+
+\func{void}{wxIndividualLayoutConstraint}{\void}
+
+Constructor. Not used by the end-user.
+
+\membersection{wxIndividualLayoutConstraint::Above}
+
+\func{void}{Above}{\param{wxWindow *}{otherWin}, \param{int}{ margin = 0}}
+
+Constrains this edge to be above the given window, with an
+optional margin. Implicitly, this is relative to the top edge of the other window.
+
+\membersection{wxIndividualLayoutConstraint::Absolute}
+
+\func{void}{Absolute}{\param{int}{ value}}
+
+Constrains this edge or dimension to be the given absolute value.
+
+\membersection{wxIndividualLayoutConstraint::AsIs}
+
+\func{void}{AsIs}{\void}
+
+Sets this edge or constraint to be whatever the window's value is
+at the moment. If either of the width and height constraints
+are {\it as is}, the window will not be resized, but moved instead.
+This is important when considering panel items which are intended
+to have a default size, such as a button, which may take its size
+from the size of the button label.
+
+\membersection{wxIndividualLayoutConstraint::Below}
+
+\func{void}{Below}{\param{wxWindow *}{otherWin}, \param{int}{ margin = 0}}
+
+Constrains this edge to be below the given window, with an
+optional margin. Implicitly, this is relative to the bottom edge of the other window.
+
+\membersection{wxIndividualLayoutConstraint::Unconstrained}
+
+\func{void}{Unconstrained}{\void}
+
+Sets this edge or dimension to be unconstrained, that is, dependent on
+other edges and dimensions from which this value can be deduced.
+
+\membersection{wxIndividualLayoutConstraint::LeftOf}
+
+\func{void}{LeftOf}{\param{wxWindow *}{otherWin}, \param{int}{ margin = 0}}
+
+Constrains this edge to be to the left of the given window, with an
+optional margin. Implicitly, this is relative to the left edge of the other window.
+
+\membersection{wxIndividualLayoutConstraint::PercentOf}
+
+\func{void}{PercentOf}{\param{wxWindow *}{otherWin}, \param{wxEdge}{ edge}, \param{int}{ margin = 0}}
+
+Constrains this edge or dimension to be to a percentage of the given window, with an
+optional margin.
+
+\membersection{wxIndividualLayoutConstraint::RightOf}
+
+\func{void}{RightOf}{\param{wxWindow *}{otherWin}, \param{int}{ margin = 0}}
+
+Constrains this edge to be to the right of the given window, with an
+optional margin. Implicitly, this is relative to the right edge of the other window.
+
+\membersection{wxIndividualLayoutConstraint::SameAs}
+
+\func{void}{SameAs}{\param{wxWindow *}{otherWin}, \param{wxEdge}{ edge}, \param{int}{ margin = 0}}
+
+Constrains this edge or dimension to be to the same as the edge of the given window, with an
+optional margin.
+
+\membersection{wxIndividualLayoutConstraint::Set}
+
+\func{void}{Set}{\param{wxRelationship}{ rel}, \param{wxWindow *}{otherWin}, \param{wxEdge}{ otherEdge},
+ \param{int}{ value = 0}, \param{int}{ margin = 0}}
+
+Sets the properties of the constraint. Normally called by one of the convenience
+functions such as Above, RightOf, SameAs.
+
+
--- /dev/null
+\section{\class{wxImageList}}\label{wximagelist}
+
+A wxImageList contains a list of images, which are stored in
+an unspecified form. Images can have masks for transparent
+drawing, and can be made from a variety of sources including bitmaps
+and icons.
+
+wxImageList is used principally in conjunction with \helpref{wxTreeCtrl}{wxtreectrl} and
+\rtfsp\helpref{wxListCtrl}{wxlistctrl} classes.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxTreeCtrl}{wxtreectrl}, \helpref{wxListCtrl}{wxlistctrl}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxImageList::wxImageList}\label{wximagelistconstr}
+
+\func{}{wxImageList}{\void}
+
+Default constructor.
+
+\func{}{wxImageList}{\param{const int }{width}, \param{const int }{height}, \param{const bool }{mask = TRUE},\rtfsp
+\param{const int }{initialCount = 1}}
+
+Constructor specifying the image size, whether image masks should be created, and the initial size of the list.
+
+\wxheading{Parameters}
+
+\docparam{width}{Width of the images in the list.}
+
+\docparam{height}{Height of the images in the list.}
+
+\docparam{mask}{TRUE if masks should be created for all images.}
+
+\docparam{initialCount}{The initial size of the list.}
+
+\wxheading{See also}
+
+\helpref{wxImageList::Create}{wximagelistcreate}
+
+\membersection{wxImageList::Add}\label{wximagelistadd}
+
+\func{int}{Add}{\param{const wxBitmap\&}{ bitmap}, \param{const wxBitmap\&}{ mask = wxNullBitmap}}
+
+Adds a new image using a bitmap and optional mask bitmap.
+
+\func{int}{Add}{\param{const wxBitmap\&}{ bitmap}, \param{const wxColour\&}{ maskColour}}
+
+Adds a new image using a bitmap and mask colour.
+
+\func{int}{Add}{\param{const wxBitmap\&}{ icon}}
+
+Adds a new image using an icon.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{Bitmap representing the opaque areas of the image.}
+
+\docparam{mask}{Monochrome mask bitmap, representing the transparent areas of the image.}
+
+\docparam{maskColour}{Colour indicating which parts of the image are transparent.}
+
+\docparam{icon}{Icon to use as the image.}
+
+\wxheading{Return value}
+
+The new zero-based image index.
+
+\wxheading{Remarks}
+
+The original bitmap or icon is not affected by the {\bf Add} operation, and can be deleted afterwards.
+
+\membersection{wxImageList::Create}\label{wximagelistcreate}
+
+\func{bool}{Create}{\param{const int }{width}, \param{const int }{height}, \param{const bool }{mask = TRUE},\rtfsp
+\param{const int }{initialCount = 1}}
+
+Initializes the list. See \helpref{wxImageList::wxImageList}{wximagelistconstr} for details.
+
+\membersection{wxImageList::Draw}\label{wximagelistdraw}
+
+\func{bool}{Draw}{\param{const int}{ index}, \param{wxDC\&}{ dc}, \param{const int }{x},\rtfsp
+\param{const int }{x}, \param{const int }{flags = wxIMAGELIST\_DRAW\_NORMAL},\rtfsp
+\param{const bool }{solidBackground = FALSE}}
+
+Draws a specified image onto a device context.
+
+\wxheading{Parameters}
+
+\docparam{index}{Image index, starting from zero.}
+
+\docparam{dc}{Device context to draw on.}
+
+\docparam{x}{X position on the device context.}
+
+\docparam{y}{Y position on the device context.}
+
+\docparam{flags}{How to draw the image. A bitlist of a selection of the following:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxIMAGELIST\_DRAW\_NORMAL}}{Draw the image normally.}
+\twocolitem{{\bf wxIMAGELIST\_DRAW\_TRANSPARENT}}{Draw the image with transparency.}
+\twocolitem{{\bf wxIMAGELIST\_DRAW\_SELECTED}}{Draw the image in selected state.}
+\twocolitem{{\bf wxIMAGELIST\_DRAW\_FOCUSED}}{Draw the image in a focussed state.}
+\end{twocollist}
+}
+
+\docparam{solidBackground}{For optimisation - drawing can be faster if the function is told
+that the background is solid.}
+
+\membersection{wxImageList::GetImageCount}\label{wximagelistgetimagecount}
+
+\constfunc{int}{GetImageCount}{\void}
+
+Returns the number of images in the list.
+
+\membersection{wxImageList::Remove}\label{wximagelistremove}
+
+\func{bool}{Remove}{\param{const int}{ index}}
+
+Removes the image at the given position.
+
+\membersection{wxImageList::RemoveAll}\label{wximagelistremoveall}
+
+\func{bool}{RemoveAll}{\void}
+
+Removes all the images in the list.
+
+\membersection{wxImageList::Replace}\label{wximagelistreplace}
+
+\func{bool}{Replace}{\param{const int}{ index}, \param{const wxBitmap\&}{ bitmap}, \param{const wxBitmap\&}{ mask = wxNullBitmap}}
+
+Replaces the existing image with the new image.
+
+\func{bool}{Replace}{\param{const int}{ index}, \param{const wxIcon\&}{ icon}}
+
+Replaces the existing image with the new image.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{Bitmap representing the opaque areas of the image.}
+
+\docparam{mask}{Monochrome mask bitmap, representing the transparent areas of the image.}
+
+\docparam{icon}{Icon to use as the image.}
+
+\wxheading{Return value}
+
+TRUE if the replacement was successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+The original bitmap or icon is not affected by the {\bf Replace} operation, and can be deleted afterwards.
+
+
--- /dev/null
+\section{\class{wxInitDialogEvent}}\label{wxinitdialogevent}
+
+A wxInitDialogEvent is sent as a dialog or panel is being initialised.
+Handlers for this event can transfer data to the window.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process an activate event, use these event handler macros to direct input to a member
+function that takes a wxInitDialogEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_INIT\_DIALOG(func)}}{Process a wxEVT\_INIT\_DIALOG event.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnInitDialog}{wxwindowoninitdialog},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxInitDialogEvent::wxInitDialogEvent}
+
+\func{}{wxInitDialogEvent}{\param{int }{id = 0}}
+
+Constructor.
+
+
--- /dev/null
+\section{\class{wxKeyEvent}}\label{wxkeyevent}
+
+This event class contains information about keypress (character) events. See \helpref{wxWindow::OnChar}{wxwindowonchar}.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}
+
+\wxheading{Event table macros}
+
+To process a key event, use these event handler macros to direct input to member
+functions that take a wxKeyEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_CHAR(func)}}{Process a wxEVT\_CHAR event.}
+\twocolitem{{\bf EVT\_CHAR\_HOOK(func)}}{Process a wxEVT\_CHAR\_HOOK event.}
+\end{twocollist}%
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxKeyEvent::m\_altDown}
+
+\member{bool}{m\_altDown}
+
+TRUE if the Alt key is pressed down.
+
+\membersection{wxKeyEvent::m\_controlDown}
+
+\member{bool}{m\_controlDown}
+
+TRUE if control is pressed down.
+
+\membersection{wxKeyEvent::m\_keyCode}
+
+\member{long}{m\_keyCode}
+
+Virtual keycode. An enumerated type, one of:
+
+\begin{verbatim}
+ WXK_BACK = 8
+ WXK_TAB = 9
+ WXK_RETURN = 13
+ WXK_ESCAPE = 27
+ WXK_SPACE = 32
+ WXK_DELETE = 127
+
+ WXK_START = 300
+ WXK_LBUTTON
+ WXK_RBUTTON
+ WXK_CANCEL
+ WXK_MBUTTON
+ WXK_CLEAR
+ WXK_SHIFT
+ WXK_CONTROL
+ WXK_MENU
+ WXK_PAUSE
+ WXK_CAPITAL
+ WXK_PRIOR
+ WXK_NEXT
+ WXK_END
+ WXK_HOME
+ WXK_LEFT
+ WXK_UP
+ WXK_RIGHT
+ WXK_DOWN
+ WXK_SELECT
+ WXK_PRINT
+ WXK_EXECUTE
+ WXK_SNAPSHOT
+ WXK_INSERT
+ WXK_HELP
+ WXK_NUMPAD0
+ WXK_NUMPAD1
+ WXK_NUMPAD2
+ WXK_NUMPAD3
+ WXK_NUMPAD4
+ WXK_NUMPAD5
+ WXK_NUMPAD6
+ WXK_NUMPAD7
+ WXK_NUMPAD8
+ WXK_NUMPAD9
+ WXK_MULTIPLY
+ WXK_ADD
+ WXK_SEPARATOR
+ WXK_SUBTRACT
+ WXK_DECIMAL
+ WXK_DIVIDE
+ WXK_F1
+ WXK_F2
+ WXK_F3
+ WXK_F4
+ WXK_F5
+ WXK_F6
+ WXK_F7
+ WXK_F8
+ WXK_F9
+ WXK_F10
+ WXK_F11
+ WXK_F12
+ WXK_F13
+ WXK_F14
+ WXK_F15
+ WXK_F16
+ WXK_F17
+ WXK_F18
+ WXK_F19
+ WXK_F20
+ WXK_F21
+ WXK_F22
+ WXK_F23
+ WXK_F24
+ WXK_NUMLOCK
+ WXK_SCROLL
+\end{verbatim}
+
+\membersection{wxKeyEvent::m\_metaDown}
+
+\member{bool}{m\_metaDown}
+
+TRUE if the Meta key is pressed down.
+
+\membersection{wxKeyEvent::m\_shiftDown}
+
+\member{bool}{m\_shiftDown}
+
+TRUE if shift is pressed down.
+
+\membersection{wxKeyEvent::m\_x}
+
+\member{int}{m\_x}
+
+X position of the event.
+
+\membersection{wxKeyEvent::m\_y}
+
+\member{int}{m\_y}
+
+Y position of the event.
+
+\membersection{wxKeyEvent::wxKeyEvent}
+
+\func{}{wxKeyEvent}{\param{WXTYPE}{ keyEventType}}
+
+Constructor. Currently, the only valid event types are wxEVT\_CHAR and wxEVT\_CHAR\_HOOK.
+
+\membersection{wxKeyEvent::AltDown}
+
+\func{bool}{AltDown}{\void}
+
+Returns TRUE if the Alt key was down at the time of the key event.
+
+\membersection{wxKeyEvent::ControlDown}
+
+\func{bool}{ControlDown}{\void}
+
+Returns TRUE if the control key was down at the time of the key event.
+
+\membersection{wxKeyEvent::GetX}
+
+\func{float}{GetX}{\void}
+
+Returns the X position of the event.
+
+\membersection{wxKeyEvent::GetY}
+
+\func{float}{GetY}{\void}
+
+Returns the Y position of the event.
+
+\membersection{wxKeyEvent::KeyCode}
+
+\func{long}{KeyCode}{\void}
+
+Returns the virtual key code. ASCII events return normal ASCII values,
+while non-ASCII events return values such as {\bf WXK\_LEFT} for the
+left cursor key. See {\tt wx\_defs.h} for a full list of the virtual key codes.
+
+\membersection{wxKeyEvent::MetaDown}
+
+\func{bool}{MetaDown}{\void}
+
+Returns TRUE if the Meta key was down at the time of the key event.
+
+\membersection{wxKeyEvent::Position}
+
+\func{void}{Position}{\param{float *}{x}, \param{float *}{y}}
+
+Obtains the position at which the key was pressed.
+
+\membersection{wxKeyEvent::ShiftDown}
+
+\func{bool}{ShiftDown}{\void}
+
+Returns TRUE if the shift key was down at the time of the key event.
+
+
--- /dev/null
+\section{\class{wxLayoutConstraints}}\label{wxlayoutconstraints}
+
+Objects of this class can be associated with a window to define its
+layout constraints, with respect to siblings or its parent.
+
+The class consists of the following eight constraints of class wxIndividualLayoutConstraint,
+some or all of which should be accessed directly to set the appropriate
+constraints.
+
+\begin{itemize}\itemsep=0pt
+\item {\bf left:} represents the left hand edge of the window
+\item {\bf right:} represents the right hand edge of the window
+\item {\bf top:} represents the top edge of the window
+\item {\bf bottom:} represents the bottom edge of the window
+\item {\bf width:} represents the width of the window
+\item {\bf height:} represents the height of the window
+\item {\bf centreX:} represents the horizontal centre point of the window
+\item {\bf centreY:} represents the vertical centre point of the window
+\end{itemize}
+
+Most constraints are initially set to have the relationship wxUnconstrained,
+which means that their values should be calculated by looking at known constraints.
+The exceptions are {\it width} and {\it height}, which are set to wxAsIs to
+ensure that if the user does not specify a constraint, the existing
+width and height will be used, to be compatible with panel items which often
+have take a default size. If the constraint is wxAsIs, the dimension will
+not be changed.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Overview and examples}{constraintsoverview},\rtfsp
+\helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}, \helpref{wxWindow::SetConstraints}{wxwindowsetconstraints}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxLayoutConstraints::wxLayoutConstraints}
+
+\func{}{wxLayoutConstraints}{\void}
+
+Constructor.
+
+\membersection{wxLayoutConstraints::bottom}
+
+\member{wxIndividualLayoutConstraint}{bottom}
+
+Constraint for the bottom edge.
+
+\membersection{wxLayoutConstraints::centreX}
+
+\member{wxIndividualLayoutConstraint}{centreX}
+
+Constraint for the horizontal centre point.
+
+\membersection{wxLayoutConstraints::centreY}
+
+\member{wxIndividualLayoutConstraint}{centreY}
+
+Constraint for the vertical centre point.
+
+\membersection{wxLayoutConstraints::height}
+
+\member{wxIndividualLayoutConstraint}{height}
+
+Constraint for the height.
+
+\membersection{wxLayoutConstraints::left}
+
+\member{wxIndividualLayoutConstraint}{left}
+
+Constraint for the left-hand edge.
+
+\membersection{wxLayoutConstraints::right}
+
+\member{wxIndividualLayoutConstraint}{right}
+
+Constraint for the right-hand edge.
+
+\membersection{wxLayoutConstraints::top}
+
+\member{wxIndividualLayoutConstraint}{top}
+
+Constraint for the top edge.
+
+\membersection{wxLayoutConstraints::width}
+
+\member{wxIndividualLayoutConstraint}{width}
+
+Constraint for the width.
+
+
--- /dev/null
+\section{\class{wxList}}\label{wxlist}
+
+This class provides linked list functionality for wxWindows, and for an application
+if it wishes. Depending on the form of constructor used, a list can be keyed on
+integer or string keys to provide a primitive look-up ability. See \helpref{wxHashTable}{wxhashtable}\rtfsp
+for a faster method of storage when random access is required.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{Example}
+
+It is very common to iterate on a list as follows:
+
+\begin{verbatim}
+ ...
+ wxPoint *point1 = new wxPoint(100, 100);
+ wxPoint *point2 = new wxPoint(200, 200);
+
+ wxList SomeList;
+ SomeList.Append(point1);
+ SomeList.Append(point2);
+
+ ...
+
+ wxNode *node = SomeList.First();
+ while (node)
+ {
+ wxPoint *point = (wxPoint *)node->Data();
+ ...
+ node = node->Next();
+ }
+\end{verbatim}
+
+To delete nodes in a list as the list is being traversed, replace
+
+\begin{verbatim}
+ ...
+ node = node->Next();
+ ...
+\end{verbatim}
+
+with
+
+\begin{verbatim}
+ ...
+ delete point;
+ delete node;
+ node = SomeList.First();
+ ...
+\end{verbatim}
+
+See \helpref{wxNode}{wxnode} for members that retrieve the data associated with a node, and
+members for getting to the next or previous node.
+
+Note that a cast is required when retrieving the data from a node. Although a
+node is defined to store objects of type {\bf wxObject} and derived types, other
+types (such as char*) may be used with appropriate casting.
+
+\wxheading{See also}
+
+\helpref{wxNode}{wxnode}, \helpref{wxStringList}{wxstringlist}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxList::wxList}
+
+\func{}{wxList}{\void}
+
+\func{}{wxList}{\param{unsigned int}{ key\_type}}
+
+\func{}{wxList}{\param{int}{ n}, \param{wxObject *}{objects[]}}
+
+\func{}{wxList}{\param{wxObject *}{object}, ...}
+
+Constructors. {\it key\_type} is one of wxKEY\_NONE, wxKEY\_INTEGER, or wxKEY\_STRING,
+and indicates what sort of keying is required (if any).
+
+{\it objects} is an array of {\it n} objects with which to initialize the list.
+
+The variable-length argument list constructor must be supplied with a
+terminating NULL.
+
+\membersection{wxList::\destruct{wxList}}
+
+\func{}{\destruct{wxList}}{\void}
+
+Destroys the list. Also destroys any remaining nodes, but does not destroy
+client data held in the nodes.
+
+\membersection{wxList::Append}
+
+\func{wxNode *}{Append}{\param{wxObject *}{object}}
+
+\func{wxNode *}{Append}{\param{long}{ key}, \param{wxObject *}{object}}
+
+\func{wxNode *}{Append}{\param{const wxString\& }{key}, \param{wxObject *}{object}}
+
+Appends a new {\bf wxNode} to the end of the list and puts a pointer to the
+\rtfsp{\it object} in the node. The last two forms store a key with the object for
+later retrieval using the key. The new node is returned in each case.
+
+The key string is copied and stored by the list implementation.
+
+\membersection{wxList::Clear}
+
+\func{void}{Clear}{\void}
+
+Clears the list (but does not delete the client data stored with each node).
+
+\membersection{wxList::DeleteContents}
+
+\func{void}{DeleteContents}{\param{bool}{ destroy}}
+
+If {\it destroy} is TRUE, instructs the list to call {\it delete} on the client contents of
+a node whenever the node is destroyed. The default is FALSE.
+
+\membersection{wxList::DeleteNode}
+
+\func{bool}{DeleteNode}{\param{wxNode *}{node}}
+
+Deletes the given node from the list, returning TRUE if successful.
+
+\membersection{wxList::DeleteObject}
+
+\func{bool}{DeleteObject}{\param{wxObject *}{object}}
+
+Finds the given client {\it object} and deletes the appropriate node from the list, returning
+TRUE if successful. The application must delete the actual object separately.
+
+\membersection{wxList::Find}
+
+\func{wxNode *}{Find}{\param{long}{ key}}
+
+\func{wxNode *}{Find}{\param{const wxString\& }{key}}
+
+Returns the node whose stored key matches {\it key}. Use on a keyed list only.
+
+\membersection{wxList::First}
+
+\func{wxNode *}{First}{\void}
+
+Returns the first node in the list (NULL if the list is empty).
+
+\membersection{wxList::Insert}
+
+\func{wxNode *}{Insert}{\param{wxObject *}{object}}
+
+Insert object at front of list.
+
+\func{wxNode *}{Insert}{\param{wxNode *}{position}, \param{wxObject *}{object}}
+
+Insert object before {\it position}.
+
+
+\membersection{wxList::Last}
+
+\func{wxNode *}{Last}{\void}
+
+Returns the last node in the list (NULL if the list is empty).
+
+\membersection{wxList::Member}
+
+\func{wxNode *}{Member}{\param{wxObject *}{object}}
+
+Returns the node associated with {\it object} if it is in the list, NULL otherwise.
+
+\membersection{wxList::Nth}
+
+\func{wxNode *}{Nth}{\param{int}{ n}}
+
+Returns the {\it nth} node in the list, indexing from zero (NULL if the list is empty
+or the nth node could not be found).
+
+\membersection{wxList::Number}
+
+\func{int}{Number}{\void}
+
+Returns the number of elements in the list.
+
+\membersection{wxList::Sort}
+
+\func{void}{Sort}{\param{wxSortCompareFunction}{ compfunc}}
+
+\begin{verbatim}
+ // Type of compare function for list sort operation (as in 'qsort')
+ typedef int (*wxSortCompareFunction)(const void *elem1, const void *elem2);
+\end{verbatim}
+
+Allows the sorting of arbitrary lists by giving
+a function to compare two list elements. We use the system {\bf qsort} function
+for the actual sorting process. The sort function receives pointers to wxObject pointers (wxObject **),
+so be careful to dereference appropriately.
+
+Example:
+
+\begin{verbatim}
+ int listcompare(const void *arg1, const void *arg2)
+ {
+ return(compare(**(wxString **)arg1, // use the wxString 'compare'
+ **(wxString **)arg2)); // function
+ }
+
+ void main()
+ {
+ wxList list;
+
+ list.Append(new wxString("DEF"));
+ list.Append(new wxString("GHI"));
+ list.Append(new wxString("ABC"));
+ list.Sort(listcompare);
+ }
+\end{verbatim}
+
+
--- /dev/null
+\section{\class{wxListBox}}\label{wxlistbox}
+
+A listbox is used to select one or more of a list of strings. The
+strings are displayed in a scrolling box, with the selected string(s)
+marked in reverse video. A listbox can be single selection (if an item
+is selected, the previous selection is removed) or multiple selection
+(clicking an item toggles the item on or off independently of other
+selections).
+
+List box elements are numbered from zero.
+
+A listbox callback gets an event wxEVT\_COMMAND\_LISTBOX\_SELECT for single clicks, and
+wxEVT\_COMMAND\_LISTBOX\_DOUBLE\_CLICKED for double clicks. Another way of intercepting
+double clicks is to override \helpref{wxWindow::OnDefaultAction}{wxwindowondefaultaction}.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxLB\_SINGLE}}{Single-selection list.}
+\twocolitem{\windowstyle{wxLB\_MULTIPLE}}{Multiple-selection list: the user can toggle multiple
+items on and off.}
+\twocolitem{\windowstyle{wxLB\_EXTENDED}}{Extended-selection list: the user can
+select multiple items using the SHIFT key and the mouse or special key combinations.}
+\twocolitem{\windowstyle{wxLB\_HSCROLL}}{Create horizontal scrollbar if contents are too wide (Windows only).}
+\twocolitem{\windowstyle{wxLB\_ALWAYS\_SB}}{Always show a vertical scrollbar.}
+\twocolitem{\windowstyle{wxLB\_NEEDED\_SB}}{Only create a vertical scrollbar if needed.}
+\twocolitem{\windowstyle{wxLB\_SORT}}{The listbox contents are sorted in alphabetical order.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxChoice}{wxchoice}, \helpref{wxComboBox}{wxcombobox}, \helpref{wxListCtrl}{wxlistctrl}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxListBox::wxListBox}\label{wxlistboxconstr}
+
+\func{}{wxListBox}{\void}
+
+Default constructor.
+
+\func{}{wxListBox}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[] = NULL},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listBox"}}
+
+Constructor, creating and showing a list box.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then the window is sized
+appropriately.}
+
+\docparam{n}{Number of strings with which to initialise the control.}
+
+\docparam{choices}{An array of strings with which to initialise the control.}
+
+\docparam{style}{Window style. See \helpref{wxListBox}{wxlistbox}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxListBox::Create}{wxlistboxcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxListBox::\destruct{wxListBox}}
+
+\func{void}{\destruct{wxListBox}}{\void}
+
+Destructor, destroying the list box.
+
+\membersection{wxListBox::Append}\label{wxlistboxappend}
+
+\func{void}{Append}{\param{const wxString\& }{ item}}
+
+Adds the item to the end of the list box.
+
+\func{void}{Append}{\param{const wxString\& }{ item}, \param{char* }{clientData}}
+
+Adds the item to the end of the list box, associating the given data
+with the item.
+
+\wxheading{Parameters}
+
+\docparam{item}{String to add.}
+
+\docparam{clientData}{Client data to associate with the item.}
+
+\membersection{wxListBox::Clear}\label{wxlistboxclear}
+
+\func{void}{Clear}{\void}
+
+Clears all strings from the list box.
+
+\membersection{wxListBox::Create}\label{wxlistboxcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const int}{ n}, \param{const wxString }{choices[] = NULL},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listBox"}}
+
+Creates the listbox for two-step construction. See \helpref{wxListBox::wxListBox}{wxlistboxconstr}\rtfsp
+for further details.
+
+\membersection{wxListBox::Delete}\label{wxlistboxdelete}
+
+\func{void}{Delete}{\param{int}{ n}}
+
+Deletes an item from the listbox.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\membersection{wxListBox::Deselect}\label{wxlistboxdeselect}
+
+\func{void}{Deselect}{\param{int}{ n}}
+
+Deselects an item in the list box.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item to deselect.}
+
+\wxheading{Remarks}
+
+This applies to multiple selection listboxes only.
+
+\membersection{wxListBox::FindString}\label{wxlistboxfindstring}
+
+\func{int}{FindString}{\param{const wxString\& }{string}}
+
+Finds an item matching the given string.
+
+\wxheading{Parameters}
+
+\docparam{string}{String to find.}
+
+\wxheading{Return value}
+
+The zero-based position of the item, or -1 if the string was not found.
+
+\membersection{wxListBox::GetClientData}\label{wxlistboxgetclientdata}
+
+\constfunc{char*}{GetClientData}{\param{const int}{ n}}
+
+Returns a pointer to the client data associated with the given item (if any).
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based position of the item.}
+
+\wxheading{Return value}
+
+A pointer to the client data, or NULL if not present.
+
+\membersection{wxListBox::GetSelection}\label{wxlistboxgetselection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Gets the position of the selected item.
+
+\wxheading{Return value}
+
+The position of the current selection.
+
+\wxheading{Remarks}
+
+Applicable to single selection list boxes only.
+
+\wxheading{See also}
+
+\helpref{wxListBox::SetSelection}{wxlistboxsetselection},\rtfsp
+\helpref{wxListBox::GetStringSelection}{wxlistboxgetstringselection},\rtfsp
+\helpref{wxListBox::GetSelections}{wxlistboxgetselections}
+
+\membersection{wxListBox::GetSelections}\label{wxlistboxgetselections}
+
+\constfunc{int}{GetSelections}{\param{int **}{selections}}
+
+Gets an array containing the positions of the selected strings.
+
+\wxheading{Parameters}
+
+\docparam{selections}{A pointer to an integer array, which will be allocated by the function if
+selects are present. Do not deallocate the returned array - it will be deallocated by the listbox.}
+
+\wxheading{Return value}
+
+The number of selections.
+
+\wxheading{Remarks}
+
+Use this with a multiple selection listbox.
+
+\wxheading{See also}
+
+\helpref{wxListBox::GetSelection}{wxlistboxgetselection},\rtfsp
+\helpref{wxListBox::GetStringSelection}{wxlistboxgetstringselection},\rtfsp
+\helpref{wxListBox::SetSelection}{wxlistboxsetselection}
+
+\membersection{wxListBox::GetString}\label{wxlistboxgetstring}
+
+\constfunc{wxString}{GetString}{\param{const int}{ n}}
+
+Returns the string at the given position.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based position.}
+
+\wxheading{Return value}
+
+The string, or an empty string if the position was invalid.
+
+\membersection{wxListBox::GetStringSelection}\label{wxlistboxgetstringselection}
+
+\constfunc{wxString}{GetStringSelection}{\void}
+
+Gets the selected string - for single selection list boxes only. This
+must be copied by the calling program if long term use is to be made of
+it.
+
+\wxheading{See also}
+
+\helpref{wxListBox::GetSelection}{wxlistboxgetselection},\rtfsp
+\helpref{wxListBox::GetSelections}{wxlistboxgetselections},\rtfsp
+\helpref{wxListBox::SetSelection}{wxlistboxsetselection}
+
+\membersection{wxListBox::Number}\label{wxlistboxnumber}
+
+\constfunc{int}{Number}{\void}
+
+Returns the number of items in the listbox.
+
+\membersection{wxListBox::Selected}\label{wxlistboxselected}
+
+\constfunc{bool}{Selected}{\param{const int}{ n}}
+
+Determines whether an item is selected.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\wxheading{Return value}
+
+TRUE if the given item is selected, FALSE otherwise.
+
+\membersection{wxListBox::Set}\label{wxlistboxset}
+
+\func{void}{Set}{\param{const int}{ n}, \param{const wxString*}{ choices}}
+
+Clears the list box and adds the given strings.
+
+\wxheading{Parameters}
+
+\docparam{n}{The number of strings to set.}
+
+\docparam{choices}{An array of strings to set.}
+
+\wxheading{Remarks}
+
+Deallocate the array from the calling program
+after this function has been called.
+
+\membersection{wxListBox::SetClientData}\label{wxlistboxsetclientdata}
+
+\func{void}{SetClientData}{\param{const int}{ n}, \param{char* }{data}}
+
+Associates the given client data pointer with the given item.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\docparam{data}{The client data to associate with the item.}
+
+\membersection{wxListBox::SetFirstItem}\label{wxlistboxsetfirstitem}
+
+\func{void}{SetFirstItem}{\param{int}{ n}}
+
+\func{void}{SetFirstItem}{\param{const wxString\& }{string}}
+
+Set the specified item to be the first visible item.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\docparam{string}{The string that should be visible.}
+
+\membersection{wxListBox::SetSelection}\label{wxlistboxsetselection}
+
+\func{void}{SetSelection}{\param{const int}{ n}, \param{const bool }{select = TRUE}}
+
+Selects or deselects the given item.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\docparam{select}{If TRUE, will select the item. If FALSE, will deselect it.}
+
+\membersection{wxListBox::SetString}\label{wxlistboxsetstring}
+
+\func{void}{SetString}{\param{const int}{ n}, \param{const wxString\& }{ string}}
+
+Sets the string value of an item.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based item index.}
+
+\docparam{string}{The string to set.}
+
+\membersection{wxListBox::SetStringSelection}\label{wxlistboxsetstringselection}
+
+\func{void}{SetStringSelection}{\param{const wxString\& }{ string}, \param{const bool}{ select = TRUE}}
+
+Sets the current selection.
+
+\wxheading{Parameters}
+
+\docparam{string}{The item to select.}
+
+\docparam{select}{If TRUE, will select the item. If FALSE, will deselect it.}
+
--- /dev/null
+\section{\class{wxListCtrl}}\label{wxlistctrl}
+
+A list control presents lists in a number of formats: list view, report view, icon view
+and small icon view. Elements are numbered from zero.
+
+To intercept events from a list control, use the event table macros described in \helpref{wxListEvent}{wxlistevent}.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxLC\_LIST}}{multicolumn list view, with optional small icons.
+Columns are computed automatically, i.e. you don't set columns as in wxLC\_REPORT. In other words,
+the list wraps, unlike a wxListBox.}
+\twocolitem{\windowstyle{wxLC\_REPORT}}{single or multicolumn report view, with optional header.}
+\twocolitem{\windowstyle{wxLC\_ICON}}{Large icon view, with optional labels.}
+\twocolitem{\windowstyle{wxLC\_SMALL\_ICON}}{Small icon view, with optional labels.}
+\twocolitem{\windowstyle{wxLC\_ALIGN\_TOP}}{Icons align to the top (default).}
+\twocolitem{\windowstyle{wxLC\_ALIGN\_LEFT}}{Icons align to the left.}
+\twocolitem{\windowstyle{wxLC\_AUTOARRANGE}}{Icons arrange themselves.}
+\twocolitem{\windowstyle{wxLC\_USER\_TEXT}}{The application provides label text on demand, except for column headers.}
+\twocolitem{\windowstyle{wxLC\_EDIT\_LABELS}}{Labels are editable: the application will be notified when editing starts.}
+\twocolitem{\windowstyle{wxLC\_NO\_HEADER}}{No header in report mode.}
+\twocolitem{\windowstyle{wxLC\_SINGLE\_SEL}}{Single selection.}
+\twocolitem{\windowstyle{wxLC\_SORT\_ASCENDING}}{Sort in ascending order (must still supply a comparison callback in SortItems.}
+\twocolitem{\windowstyle{wxLC\_SORT\_DESCENDING}}{Sort in descending order (must still supply a comparison callback in SortItems.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxListCtrl overview}{wxlistctrloverview}, \helpref{wxListBox}{wxlistbox}, \helpref{wxTreeCtrl}{wxtreectrl},\rtfsp
+\helpref{wxImageList}{wximagelist}, \helpref{wxListEvent}{wxlistevent}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxListCtrl::wxListCtrl}\label{wxlistctrlconstr}
+
+\func{}{wxListCtrl}{\void}
+
+Default constructor.
+
+\func{}{wxListCtrl}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxLC\_ICON}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listCtrl"}}
+
+Constructor, creating and showing a list control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then the window is sized
+appropriately.}
+
+\docparam{style}{Window style. See \helpref{wxListCtrl}{wxlistctrl}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxListCtrl::Create}{wxlistctrlcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxListCtrl::\destruct{wxListCtrl}}
+
+\func{void}{\destruct{wxListCtrl}}{\void}
+
+Destructor, destroying the list control.
+
+\membersection{wxListCtrl::Arrange}\label{wxlistctrlarrange}
+
+\func{bool}{Arrange}{\param{const int }{flag = wxLIST\_ALIGN\_DEFAULT}}
+
+Arranges the items in icon or small icon view. {\it flag} is one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_ALIGN\_DEFAULT}{Default alignment.}
+\twocolitem{wxLIST\_ALIGN\_LEFT}{Align to the left side of the control.}
+\twocolitem{wxLIST\_ALIGN\_TOP}{Align to the top side of the control.}
+\twocolitem{wxLIST\_ALIGN\_SNAP\_TO\_GRID}{Snap to grid.}
+\end{twocollist}
+
+\membersection{wxListCtrl::Create}\label{wxlistctrlcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxLC\_ICON}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listCtrl"}}
+
+Creates the list control. See \helpref{wxListCtrl::wxListCtrl}{wxlistctrlconstr} for further details.
+
+\membersection{wxListCtrl::DeleteItem}\label{wxlistctrldeleteitem}
+
+\func{bool}{DeleteItem}{\param{const long }{item}}
+
+Deletes the specified item.
+
+\membersection{wxListCtrl::DeleteAllItems}\label{wxlistctrldeleteallitems}
+
+\func{bool}{DeleteAllItems}{\void}
+
+Deletes all the items in the list control.
+
+\membersection{wxListCtrl::DeleteColumn}\label{wxlistctrldeletecolumn}
+
+\func{bool}{DeleteColumn}{\param{const int }{col}}
+
+Deletes a column.
+
+\membersection{wxListCtrl::Edit}\label{wxlistctrledit}
+
+\func{wxTextCtrl\&}{Edit}{\param{const long }{item}}
+
+Starts editing a label.
+
+\membersection{wxListCtrl::EnsureVisible}\label{wxlistctrlensurevisible}
+
+\func{bool}{EnsureVisible}{\param{const long }{item}}
+
+Ensures this item is visible.
+
+\membersection{wxListCtrl::FindItem}\label{wxlistctrlfinditem}
+
+\func{long}{FindItem}{\param{const long }{start}, \param{const wxString\& }{str}, \param{const bool }{partial = FALSE}}
+
+Find an item whose label matches this string, starting from the item after {\it start} or
+the beginning if {\it start} is -1.
+
+\func{long}{FindItem}{\param{const long }{start}, \param{const long }{data}}
+
+Find an item whose data matches this data, starting from the item after {\it start} or
+the beginning if 'start' is -1.
+
+\func{long}{FindItem}{\param{const long }{start}, \param{const wxPoint\& }{pt}, \param{const int }{direction}}
+
+Find an item nearest this position in the specified direction, starting from
+the item after {\it start} or the beginning if {\it start} is -1.
+
+\membersection{wxListCtrl::GetColumn}\label{wxlistctrlgetcolumn}
+
+\constfunc{bool}{GetColumn}{\param{const int }{col}, \param{wxListItem\& }{item}}
+
+Gets information about this column. See \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem} for more
+information.
+
+\membersection{wxListCtrl::GetColumnWidth}\label{wxlistctrlgetcolumnwidth}
+
+\constfunc{int}{GetColumnWidth}{\param{const int }{col}}
+
+Gets the column width (report view only).
+
+\membersection{wxListCtrl::GetCountPerPage}\label{wxlistctrlgetcountperpage}
+
+\constfunc{int}{GetCountPerPage}{\void}
+
+Gets the number of items that can fit vertically in the
+visible area of the list control (list or report view)
+or the total number of items in the list control (icon
+or small icon view).
+
+\membersection{wxListCtrl::GetEditControl}\label{wxlistctrlgeteditcontrol}
+
+\constfunc{wxTextCtrl\&}{GetEditControl}{\void}
+
+Gets the edit control for editing labels.
+
+\membersection{wxListCtrl::GetImageList}\label{wxlistctrlgetimagelist}
+
+\constfunc{wxImageList*}{GetImageList}{\param{const int }{which}}
+
+Returns the specified image list. {\it which} may be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_NORMAL}}{The normal (large icon) image list.}
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_SMALL}}{The small icon image list.}
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_STATE}}{The user-defined state image list (unimplemented).}
+\end{twocollist}
+
+\membersection{wxListCtrl::GetItem}\label{wxlistctrlgetitem}
+
+\constfunc{bool}{GetItem}{\param{wxListItem\& }{info}}
+
+Gets information about the item. See \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem} for more
+information.
+
+\membersection{wxListCtrl::GetItemData}\label{wxlistctrlgetitemdata}
+
+\constfunc{long}{GetItemData}{\param{const long }{item}}
+
+Gets the application-defined data associated with this item.
+
+\membersection{wxListCtrl::GetItemPosition}\label{wxlistctrlgetitemposition}
+
+\constfunc{bool}{GetItemPosition}{\param{const long }{item}, \param{wxPoint\& }{pos}}
+
+Returns the position of the item, in icon or small icon view.
+
+\membersection{wxListCtrl::GetItemRect}\label{wxlistctrlgetitemrect}
+
+\constfunc{bool}{GetItemRect}{\param{const long }{item}, \param{wxRect\& }{rect}, \param{const int }{code = wxLIST\_RECT\_BOUNDS}}
+
+Returns the rectangle representing the item's size and position, in client coordinates.
+
+{\it code} is one of wxLIST\_RECT\_BOUNDS, wxLIST\_RECT\_ICON, wxLIST\_RECT\_LABEL.
+
+\membersection{wxListCtrl::GetItemState}\label{wxlistctrlgetitemstate}
+
+\constfunc{int}{GetItemState}{\param{const long }{item}, \param{const long }{stateMask}}
+
+Gets the item state. For a list of state flags, see \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem}.
+
+The {\bf stateMask} indicates which state flags are of interest.
+
+\membersection{wxListCtrl::GetItemCount}\label{wxlistctrlgetitemcount}
+
+\constfunc{int}{GetItemCount}{\void}
+
+Returns the number of items in the list control.
+
+\membersection{wxListCtrl::GetItemSpacing}\label{wxlistctrlgetitemspacing}
+
+\constfunc{int}{GetItemSpacing}{\param{bool }{isSmall}}
+
+Retrieves the spacing between icons in pixels.
+If {\it small} is TRUE, gets the spacing for the small icon
+view, otherwise the large icon view.
+
+\membersection{wxListCtrl::GetItemText}\label{wxlistctrlgetitemtext}
+
+\constfunc{wxString}{GetItemText}{\param{const long }{item}}
+
+Gets the item text for this item.
+
+\membersection{wxListCtrl::GetNextItem}\label{wxlistctrlgetnextitem}
+
+\constfunc{long}{GetNextItem}{\param{const long }{item}, \param{int }{geometry = wxLIST\_NEXT\_ALL}, \param{int }{state = wxLIST\_STATE\_DONTCARE}}
+
+Searches for an item with the given goemetry or state, starting from {\it item}. {\it item} can be -1
+to find the first item that matches the specified flags.
+
+Returns the item or -1 if unsuccessful.
+
+{\it geometry} can be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_NEXT\_ABOVE}{Searches for an item above the specified item.}
+\twocolitem{wxLIST\_NEXT\_ALL}{Searches for subsequent item by index.}
+\twocolitem{wxLIST\_NEXT\_BELOW}{Searches for an item below the specified item.}
+\twocolitem{wxLIST\_NEXT\_LEFT}{Searches for an item to the left of the specified item.}
+\twocolitem{wxLIST\_NEXT\_RIGHT}{Searches for an item to the right of the specified item.}
+\end{twocollist}
+
+{\it state} can be a bitlist of the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_STATE\_DONTCARE}{Don't care what the state is.}
+\twocolitem{wxLIST\_STATE\_DROPHILITED}{The item indicates it is a drop target.}
+\twocolitem{wxLIST\_STATE\_FOCUSED}{The item has the focus.}
+\twocolitem{wxLIST\_STATE\_SELECTED}{The item is selected.}
+\twocolitem{wxLIST\_STATE\_CUT}{The item is selected as part of a cut and paste operation.}
+\end{twocollist}
+
+\membersection{wxListCtrl::GetSelectedItemCount}\label{wxlistctrlgetselecteditemcount}
+
+\constfunc{int}{GetSelectedItemCount}{\void}
+
+Returns the number of selected items in the list control.
+
+\membersection{wxListCtrl::GetTextColour}\label{wxlistctrlgettextcolour}
+
+\constfunc{wxColour}{GetTextColour}{\void}
+
+Gets the text colour of the list control.
+
+\membersection{wxListCtrl::GetTopItem}\label{wxlistctrlgettopitem}
+
+\constfunc{long}{GetTopItem}{\void}
+
+Gets the index of the topmost visible item when in
+list or report view.
+
+\membersection{wxListCtrl::HitTest}\label{wxlistctrlhittest}
+
+\func{long}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}}
+
+Determines which item (if any) is at the specified point,
+giving details in {\it flags}. {\it flags} will be a combination of the following flags:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_HITTEST\_ABOVE}{Above the client area.}
+\twocolitem{wxLIST\_HITTEST\_BELOW}{Below the client area.}
+\twocolitem{wxLIST\_HITTEST\_NOWHERE}{In the client area but below the last item.}
+\twocolitem{wxLIST\_HITTEST\_ONITEMICON}{On the bitmap associated with an item.}
+\twocolitem{wxLIST\_HITTEST\_ONITEMLABEL}{On the label (string) associated with an item.}
+\twocolitem{wxLIST\_HITTEST\_ONITEMRIGHT}{In the area to the right of an item.}
+\twocolitem{wxLIST\_HITTEST\_ONITEMSTATEICON}{On the state icon for a tree view item that is in a user-defined state.}
+\twocolitem{wxLIST\_HITTEST\_TOLEFT}{To the right of the client area.}
+\twocolitem{wxLIST\_HITTEST\_TORIGHT}{To the left of the client area.}
+\twocolitem{wxLIST\_HITTEST\_ONITEM}{Combination of wxLIST\_HITTEST\_ONITEMICON, wxLIST\_HITTEST\_ONITEMLABEL,
+wxLIST\_HITTEST\_ONITEMSTATEICON.}
+\end{twocollist}
+
+\membersection{wxListCtrl::InsertColumn}\label{wxlistctrlinsertcolumn}
+
+\func{long}{InsertColumn}{\param{const long }{col}, \param{wxListItem\& }{info}}
+
+For list view mode (only), inserts a column. For more details, see \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem}.
+
+\func{long}{InsertColumn}{\param{const long }{col}, \param{const wxString\& }{heading}, \param{const int }{format = wxLIST\_FORMAT\_LEFT},\rtfsp
+\param{const int }{width = -1}}
+
+For list view mode (only), inserts a column. For more details, see \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem}.
+
+\membersection{wxListCtrl::InsertItem}\label{wxlistctrlinsertitem}
+
+\func{long}{InsertItem}{\param{wxListItem\& }{info}}
+
+Inserts an item, returning the index of the new item if successful,
+-1 otherwise.
+
+\func{long}{InsertItem}{\param{const long }{index}, \param{const wxString\& }{label}}
+
+Inserts a string item.
+
+\func{long}{InsertItem}{\param{const long }{index}, \param{const int }{imageIndex}}
+
+Inserts an image item.
+
+\func{long}{InsertItem}{\param{const long }{index}, \param{const wxString\& }{label}, \param{const int }{imageIndex}}
+
+Insert an image/string item.
+
+\membersection{wxListCtrl::ScrollList}\label{wxlistctrlscrolllist}
+
+\func{bool}{ScrollList}{\param{const int }{dx}, \param{const int }{dy}}
+
+Scrolls the list control. If in icon, small icon or report view mode,
+dx specifies the number of pixels to scroll. If in list view mode, dx
+specifies the number of columns to scroll.
+
+If in icon, small icon or list view mode, dy specifies the number of pixels
+to scroll. If in report view mode, dy specifies the number of lines to scroll.
+
+\membersection{wxListCtrl::SetBackgroundColour}\label{wxlistctrlsetbackgroundcolour}
+
+\func{void}{SetBackgroundColour}{\param{const wxColour\& }{col}}
+
+Sets the background colour (GetBackgroundColour already implicit in
+wxWindow class).
+
+\membersection{wxListCtrl::SetColumn}\label{wxlistctrlsetcolumn}
+
+\func{bool}{SetColumn}{\param{const int }{col}, \param{wxListItem\& }{item}}
+
+Sets information about this column. See \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem} for more
+information.
+
+\membersection{wxListCtrl::SetColumnWidth}\label{wxlistctrlsetcolumnwidth}
+
+\func{bool}{SetColumnWidth}{\param{const int }{col}, \param{const int }{width}}
+
+Sets the column width (report view only).
+
+{\it width} can be a width in pixels or wxLIST\_AUTOSIZE (-1) or wxLIST\_AUTOSIZE\_USEHEADER (-2).
+
+\membersection{wxListCtrl::SetImageList}\label{wxlistctrlsetimagelist}
+
+\func{void}{SetImageList}{\param{wxImageList*}{ imageList}, \param{const int }{which}}
+
+Sets the image list associated with the control. {\it which} is one of
+wxIMAGE\_LIST\_NORMAL, wxIMAGE\_LIST\_SMALL, wxIMAGE\_LIST\_STATE (the last is unimplemented).
+
+\membersection{wxListCtrl::SetItem}\label{wxlistctrlsetitem}
+
+\func{bool}{SetItem}{\param{wxListItem\& }{info}}
+
+Sets information about the item.
+
+wxListItem is a class with the following members:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{long m\_mask}{Indicates which fields are valid. See the list of valid mask flags below.}
+\twocolitem{long m\_itemId}{The zero-based item position.}
+\twocolitem{int m\_col}{Zero-based column, if in report mode.}
+\twocolitem{long m\_state}{The state of the item. See the list of valid state flags below.}
+\twocolitem{long m\_stateMask}{A mask indicating which state flags are valid. See the list of valid state flags below.}
+\twocolitem{wxString m\_text}{The label/header text.}
+\twocolitem{int m\_image}{The zero-based index into an image list.}
+\twocolitem{long m\_data}{Application-defined data.}
+\twocolitem{int m\_format}{For columns only: the format. Can be wxLIST\_FORMAT\_LEFT, wxLIST\_FORMAT\_RIGHT or
+wxLIST\_FORMAT\_CENTRE.}
+\twocolitem{int m\_width}{For columns only: the column width.}
+\end{twocollist}
+
+The {\bf m\_mask} member contains a bitlist specifying which of the other fields are valid. The flags are:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_MASK\_STATE}{The {\bf m\_state} field is valid.}
+\twocolitem{wxLIST\_MASK\_TEXT}{The {\bf m\_text} field is valid.}
+\twocolitem{wxLIST\_MASK\_IMAGE}{The {\bf m\_image} field is valid.}
+\twocolitem{wxLIST\_MASK\_DATA}{The {\bf m\_data} field is valid.}
+\twocolitem{wxLIST\_MASK\_WIDTH}{The {\bf m\_width} field is valid.}
+\twocolitem{wxLIST\_MASK\_FORMAT}{The {\bf m\_format} field is valid.}
+\end{twocollist}
+
+The {\bf m\_stateMask} and {\bf m\_state} members take flags from the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxLIST\_STATE\_DONTCARE}{Don't care what the state is.}
+\twocolitem{wxLIST\_STATE\_DROPHILITED}{The item is highlighted to receive a drop event.}
+\twocolitem{wxLIST\_STATE\_FOCUSED}{The item has the focus.}
+\twocolitem{wxLIST\_STATE\_SELECTED}{The item is selected.}
+\twocolitem{wxLIST\_STATE\_CUT}{The item is in the cut state.}
+\end{twocollist}
+
+\func{long}{SetItem}{\param{const long }{index}, \param{const int }{col}, \param{const wxString\& }{label}, \param{const int }{imageId = -1}}
+
+Sets a string field at a particular column.
+
+\membersection{wxListCtrl::SetItemData}\label{wxlistctrlsetitemdata}
+
+\func{bool}{SetItemData}{\param{const long }{item}, \param{long }{data}}
+
+Associates application-defined data with this item.
+
+\membersection{wxListCtrl::SetItemImage}\label{wxlistctrlsetitemimage}
+
+\func{bool}{SetItemImage}{\param{const long }{item}, \param{const int }{image}, \param{const int }{selImage}}
+
+Sets the unselected and selected images associated with the item. The images are indices into the
+image list associated with the list control.
+
+\membersection{wxListCtrl::SetItemPosition}\label{wxlistctrlsetitemposition}
+
+\func{bool}{SetItemPosition}{\param{const long }{item}, \param{const wxPoint\& }{pos}}
+
+Sets the position of the item, in icon or small icon view.
+
+\membersection{wxListCtrl::SetItemState}\label{wxlistctrlsetitemstate}
+
+\func{bool}{SetItemState}{\param{const long }{item}, \param{const long }{state}, \param{const long }{stateMask}}
+
+Sets the item state. For a list of state flags, see \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem}.
+
+The {\bf stateMask} indicates which state flags are valid.
+
+\membersection{wxListCtrl::SetItemText}\label{wxlistctrlsetitemtext}
+
+\func{void}{SetItemText}{\param{const long }{item}, \param{const wxString\& }{text}}
+
+Sets the item text for this item.
+
+\membersection{wxListCtrl::SetSingleStyle}\label{wxlistctrlsetsinglestyle}
+
+\func{void}{SetSingleStyle}{\param{const long }{style}, \param{const bool }{add = TRUE}}
+
+Adds or removes a single window style.
+
+\membersection{wxListCtrl::SetTextColour}\label{wxlistctrlsettextcolour}
+
+\func{void}{SetTextColour}{\param{const wxColour\& }{col}}
+
+Sets the text colour of the list control.
+
+\membersection{wxListCtrl::SetWindowStyleFlag}\label{wxlistctrlsetwindowstyleflag}
+
+\func{void}{SetWindowStyleFlag}{\param{const long }{style}}
+
+Sets the whole window style.
+
+\membersection{wxListCtrl::SortItems}\label{wxlistctrlsortitems}
+
+\func{bool}{SortItems}{\param{wxListCtrlCompare }{fn}, \param{long }{data}}
+
+Sorts the items in the list control.
+
+fn is a function which takes 3 long arguments: item1, item2, data.
+
+item1 is the long data associated with a first item (NOT the index).
+
+item2 is the long data associated with a second item (NOT the index).
+
+data is the same value as passed to SortItems.
+
+The return value is a negative number if the first item should precede the second
+item, a positive number of the second item should precede the first,
+or zero if the two items are equivalent.
+
+data is arbitrary data to be passed to the sort function.
+
--- /dev/null
+\section{\class{wxListEvent}}\label{wxlistevent}
+
+A list event holds information about events associated with wxListCtrl objects.
+
+\wxheading{Derived from}
+
+\helpref{wxCommandEvent}{wxcommandevent}\\
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process input from a list control, use these event handler macros to direct input to member
+functions that take a wxListEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_LIST\_BEGIN\_DRAG(id, func)}}{Begin dragging with the left mouse button.}
+\twocolitem{{\bf EVT\_LIST\_BEGIN\_RDRAG(id, func)}}{Begin dragging with the right mouse button.}
+\twocolitem{{\bf EVT\_LIST\_BEGIN\_LABEL\_EDIT(id, func)}}{Begin editing a label.}
+\twocolitem{{\bf EVT\_LIST\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label.}
+\twocolitem{{\bf EVT\_LIST\_DELETE\_ITEM(id, func)}}{Delete an item.}
+\twocolitem{{\bf EVT\_LIST\_DELETE\_ALL\_ITEMS(id, func)}}{Delete all items.}
+\twocolitem{{\bf EVT\_LIST\_GET\_INFO(id, func)}}{Request information from the application, usually the item text.}
+\twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
+\twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
+\twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
+\twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxListCtrl}{wxlistctrl}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxListEvent::wxListEvent}
+
+\func{}{wxListEvent}{\param{WXTYPE }{commandType = 0}, \param{int }{id = 0}}
+
+Constructor.
+
+\membersection{wxListEvent::m\_code}
+
+\member{int}{m\_code}
+
+Key code if the event is a keypress event.
+
+\membersection{wxListEvent::m\_itemIndex}
+
+\member{long}{m\_itemIndex}
+
+The item index.
+
+\membersection{wxListEvent::m\_oldItemIndex}
+
+\member{long}{m\_oldItemIndex}
+
+The old item index.
+
+\membersection{wxListEvent::m\_col}
+
+\member{int}{m\_col}
+
+The column position.
+
+\membersection{wxListEvent::m\_cancelled}
+
+\member{bool}{m\_cancelled}
+
+TRUE if this event is an end edit event and the user cancelled the edit.
+
+\membersection{wxListEvent::m\_pointDrag}
+
+\member{wxPoint}{m\_pointDrag}
+
+The position of the mouse pointer if the event is a drag event.
+
+\membersection{wxListEvent::m\_item}
+
+\member{wxListItem}{m\_item}
+
+An item object, used by some events. See also \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem}.
+
+
--- /dev/null
+\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
+\newcommand{\indexit}[1]{#1\index{#1}}%
+\newcommand{\pipe}[0]{$\|$\ }%
+\definecolour{black}{0}{0}{0}%
+\definecolour{cyan}{0}{255}{255}%
+\definecolour{green}{0}{255}{0}%
+\definecolour{magenta}{255}{0}{255}%
+\definecolour{red}{255}{0}{0}%
+\definecolour{blue}{0}{0}{200}%
+\definecolour{yellow}{255}{255}{0}%
+\definecolour{white}{255}{255}{255}%
+%
+\input psbox.tex
+% Remove this for processing with dvi2ps instead of dvips
+%\special{!/@scaleunit 1 def}
+\parskip=10pt
+\parindent=0pt
+\title{User Manual for wxWindows 2.0: a portable C++ GUI toolkit}
+\winhelponly{\author{by Julian Smart and Markus Holzem
+%\winhelponly{\\$$\image{1cm;0cm}{wxwin.wmf}$$}
+}}
+\winhelpignore{\author{Julian Smart and Markus Holzem}
+\date{October 21st 1997}
+}
+\makeindex
+\begin{document}
+\maketitle
+\pagestyle{fancyplain}
+\bibliographystyle{plain}
+\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\pagenumbering{roman}
+\tableofcontents
+
+% A special table of contents for the WinHelp manual
+\begin{comment}
+\winhelponly{
+\chapter*{wxWindows class library reference}\label{winhelpcontents}
+
+\center{
+%\image{}{wxwin.wmf}
+}%
+
+\sethotspotcolour{off}%
+\sethotspotunderline{on}%
+\large{
+\image{}{cpp.bmp} \helpref{Alphabetical class reference}{classref}
+
+\image{}{shelves.bmp} \helpref{Classes by category}{classesbycat}
+
+\image{}{book1.bmp} \helpref{Topic overviews}{overviews}
+
+\image{}{hand1.bmp} \helpref{Guide to wxWindows}{wxwinchapters}
+}
+\sethotspotcolour{on}%
+\sethotspotunderline{on}%
+
+\chapter*{Overview of wxWindows}\label{wxwinchapters}
+
+\helpref{Introduction}{introduction}\\
+%\helpref{Resource guide}{resguide}\\
+%\helpref{Comparison with other GUI models}{comparison}\\
+%\helpref{Multi-platform development with wxWindows}{multiplat}\\
+%\helpref{Tutorial}{tutorial}\\
+\helpref{The wxWindows resource system}{resourceformats}\\
+\helpref{Utilities}{utilities}\\
+\helpref{Programming strategies}{strategies}\\
+\helpref{Bugs and future directions}{bugs}\\
+\helpref{References}{bibliography}
+}
+\end{comment}
+
+\chapter*{Copyright notice}
+\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\begin{center}
+Copyright (c) 1997 Julian Smart and Markus Holzem\\
+Portions (c) 1996 Artificial Intelligence Applications Institute\\
+\end{center}
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose is hereby granted without fee, provided that the
+above copyright notice, author statement and this permission notice appear in
+all copies of this software and related documentation.
+
+THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
+IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL THE ARTIFICIAL INTELLIGENCE APPLICATIONS INSTITUTE OR THE
+UNIVERSITY OF EDINBURGH OR JULIAN SMART OR MARKUS HOLZEM BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF
+DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+\input{body.tex}
+\helpinput{classes.tex}
+\helpinput{category.tex}
+\helpinput{topics.tex}
+
+\newpage
+
+% Puts books in the bibliography without needing to cite them in the
+% text
+\nocite{helpbook}%
+\nocite{wong93}%
+\nocite{pree94}%
+\nocite{gamma95}%
+\nocite{smart95a}%
+\nocite{smart95b}%
+
+\bibliography{refs}
+\addcontentsline{toc}{chapter}{Bibliography}
+\setheader{{\it REFERENCES}}{}{}{}{}{{\it REFERENCES}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\newpage
+\addcontentsline{toc}{chapter}{Index}
+\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\printindex
+\end{document}
--- /dev/null
+\section{\class{wxMask}}\label{wxmask}
+
+This class encapsulates a monochrome mask bitmap, where the masked area is black and
+the unmasked area is white.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+A mask may be associated with a \helpref{wxBitmap}{wxbitmap}. It is used in \helpref{wxDC::Blit}{wxdcblit} when
+the source device context is a \helpref{wxMemoryDC}{wxmemorydc} with wxBitmap selected into it that
+contains a mask.
+
+\wxheading{See also}
+
+\helpref{wxBitmap}{wxbitmap}, \helpref{wxDC::Blit}{wxdcblit}, \helpref{wxMemoryDC}{wxmemorydc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMask::wxMask}\label{wxmaskconstr}
+
+\func{}{wxMask}{\void}
+
+Default constructor.
+
+\func{}{wxMask}{\param{const wxBitmap\& }{bitmap}}
+
+Constructs a mask from a monochrome bitmap.
+
+\func{}{wxMask}{\param{const wxBitmap\& }{bitmap}, \param{const wxColour\& }{colour}}
+
+Constructs a mask from a bitmap and a colour that indicates the background.
+
+\func{}{wxMask}{\param{const wxBitmap\& }{bitmap}, \param{int}{ index}}
+
+Constructs a mask from a bitmap and a palette index that indicates the background.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{A valid bitmap.}
+
+\docparam{colour}{A colour specifying the transparency RGB values.}
+
+\docparam{index}{Index into a palette, specifying the transparency colour.}
+
+\membersection{wxMask::\destruct{wxMask}}
+
+\func{}{\destruct{wxMask}}{\void}
+
+Destroys the wxMask object and the underlying bitmap data.
+
+\membersection{wxMask::Create}\label{wxmaskcreate}
+
+\func{bool}{Create}{\param{const wxBitmap\& }{bitmap}}
+
+Constructs a mask from a monochrome bitmap.
+
+\func{bool}{Create}{\param{const wxBitmap\& }{bitmap}, \param{const wxColour\& }{colour}}
+
+Constructs a mask from a bitmap and a colour that indicates the background.
+
+\func{bool}{Create}{\param{const wxBitmap\& }{bitmap}, \param{int}{ index}}
+
+Constructs a mask from a bitmap and a palette index that indicates the background.
+
+\wxheading{Parameters}
+
+\docparam{bitmap}{A valid bitmap.}
+
+\docparam{colour}{A colour specifying the transparency RGB values.}
+
+\docparam{index}{Index into a palette, specifying the transparency colour.}
+
+
--- /dev/null
+\section{\class{wxMDIChildFrame}}\label{wxmdichildframe}
+
+An MDI child frame is a frame that can only exist on a \helpref{wxMDIClientWindow}{wxmdiclientwindow},
+which is itself a child of \helpref{wxMDIParentFrame}{wxmdiparentframe}.
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxCAPTION}}{Puts a caption on the frame.}
+\twocolitem{\windowstyle{wxDEFAULT\_FRAME\_STYLE}}{Defined as {\bf wxMINIMIZE\_BOX \pipe wxMAXIMIZE\_BOX \pipe wxTHICK\_FRAME \pipe wxSYSTEM\_MENU \pipe wxCAPTION}.}
+\twocolitem{\windowstyle{wxICONIZE}}{Display the frame iconized (minimized) (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE}}{Displays the frame maximized (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE\_BOX}}{Displays a maximize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxMINIMIZE}}{Identical to {\bf wxICONIZE}.}
+\twocolitem{\windowstyle{wxMINIMIZE\_BOX}}{Displays a minimize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window (Motif only;
+for Windows, it is implicit in wxTHICK\_FRAME).}
+\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows (Windows only).}
+\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu (Windows and Motif only).}
+\twocolitem{\windowstyle{wxTHICK\_FRAME}}{Displays a thick frame around the window (Windows and Motif only).}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+Although internally an MDI child frame is a child of the MDI client window, in wxWindows
+you create it as a child of \helpref{wxMDIParentFrame}{wxmdiparentframe}. You can usually
+forget that the client window exists.
+
+MDI child frames are clipped to the area of the MDI client window, and may be iconized
+on the client window.
+
+You can associate a menubar with a child frame as usual, although an MDI child doesn't display
+its menubar under its own title bar. The MDI parent frame's menubar will be changed to
+reflect the currently active child frame. If there are currently no children, the parent
+frame's own menubar will be displayed.
+
+\wxheading{See also}
+
+\helpref{wxMDIClientWindow}{wxmdiclientwindow}, \helpref{wxMDIParentFrame}{wxmdiparentframe},\rtfsp
+\helpref{wxFrame}{wxframe}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMDIChildFrame::wxMDIChildFrame}\label{wxmdichildframeconstr}
+
+\func{}{wxMDIChildFrame}{\void}
+
+Default constructor.
+
+\func{}{wxMDIChildFrame}{\param{wxMDIParentFrame* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent. This should not be NULL.}
+
+\docparam{id}{The window identifier. It may take a value of -1 to indicate a default value.}
+
+\docparam{title}{The caption to be displayed on the frame's title bar.}
+
+\docparam{pos}{The window position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The window size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxMDIChildFrame}{wxmdichildframe}.}
+
+\docparam{name}{The name of the window. This parameter is used to associate a name with the item,
+allowing the application user to set Motif resource values for
+individual windows.}
+
+\wxheading{Remarks}
+
+None.
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame::Create}{wxmdichildframecreate}
+
+\membersection{wxMDIChildFrame::\destruct{wxMDIChildFrame}}
+
+\func{}{\destruct{wxMDIChildFrame}}{\void}
+
+Destructor. Destroys all child windows and menu bar if present.
+
+\membersection{wxMDIChildFrame::Activate}\label{wxmdichildframeactivate}
+
+\func{void}{Activate}{\void}
+
+Activates this MDI child frame.
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame::Maximize}{wxmdichildframemaximize},\rtfsp
+\helpref{wxMDIChildFrame::Restore}{wxmdichildframerestore}
+
+\membersection{wxMDIChildFrame::Create}\label{wxmdichildframecreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Used in two-step frame construction. See \helpref{wxMDIChildFrame::wxMDIChildFrame}{wxmdichildframeconstr}\rtfsp
+for further details.
+
+\membersection{wxMDIChildFrame::Maximize}\label{wxmdichildframemaximize}
+
+\func{void}{Maximize}{\void}
+
+Maximizes this MDI child frame.
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame::Activate}{wxmdichildframeactivate},\rtfsp
+\helpref{wxMDIChildFrame::Restore}{wxmdichildframerestore}
+
+\membersection{wxMDIChildFrame::Restore}\label{wxmdichildframerestore}
+
+\func{void}{Restore}{\void}
+
+Restores this MDI child frame (unmaximizes).
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame::Activate}{wxmdichildframeactivate},\rtfsp
+\helpref{wxMDIChildFrame::Maximize}{wxmdichildframemaximize}
+
+
+\section{\class{wxMDIClientWindow}}\label{wxmdiclientwindow}
+
+An MDI client window is a child of \helpref{wxMDIParentFrame}{wxmdiparentframe}, and manages zero or
+more \helpref{wxMDIChildFrame}{wxmdichildframe} objects.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+The client window is the area where MDI child windows exist. It doesn't have to cover the whole
+parent frame; other windows such as toolbars and a help window might coexist with it.
+There can be scrollbars on a client window, which are controlled by the parent window style.
+
+The {\bf wxMDIClientWindow} class is usually adequate without further derivation, and it is created
+automatically when the MDI parent frame is created. If the application needs to derive a new class,
+the function \helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient} must be
+overridden in order to give an opportunity to use a different class of client window.
+
+Under Windows 95, the client window will automatically have a sunken border style when
+the active child is not maximized, and no border style when a child is maximized.
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame}{wxmdichildframe}, \helpref{wxMDIParentFrame}{wxmdiparentframe},\rtfsp
+\helpref{wxFrame}{wxframe}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMDIClientWindow::wxMDIClientWindow}\label{wxmdiclientwindowconstr}
+
+\func{}{wxMDIClientWindow}{\void}
+
+Default constructor.
+
+\func{}{wxMDIClientWindow}{\param{wxMDIParentFrame* }{parent}, \param{long}{ style = 0}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent.}
+
+\docparam{style}{The window style. Currently unused.}
+
+\wxheading{Remarks}
+
+The second style of constructor is called within \helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient}.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::wxMDIParentFrame}{wxmdiparentframeconstr},\rtfsp
+\helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient}
+
+\membersection{wxMDIClientWindow::\destruct{wxMDIClientWindow}}
+
+\func{}{\destruct{wxMDIClientWindow}}{\void}
+
+Destructor.
+
+\membersection{wxMDIClientWindow::CreateClient}\label{wxmdiclientwindowcreateclient}
+
+\func{bool}{CreateClient}{\param{wxMDIParentFrame* }{parent}, \param{long}{ style = 0}}
+
+Used in two-step frame construction. See \helpref{wxMDIClientWindow::wxMDIClientWindow}{wxmdiclientwindowconstr}\rtfsp
+for further details.
+
+\section{\class{wxMDIParentFrame}}\label{wxmdiparentframe}
+
+An MDI (Multiple Document Interface) parent frame is a window which can contain
+MDI child frames in its own `desktop'. It is a convenient way to avoid window clutter,
+and is used in many popular Windows applications, such as Microsoft Word(TM).
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+There may be multiple MDI parent frames in a single application, but this probably only makes sense
+within programming development environments.
+
+Child frames may be either \helpref{wxMDIChildFrame}{wxmdichildframe}, or \helpref{wxFrame}{wxframe}.
+
+An MDI parent frame always has a \helpref{wxMDIClientWindow}{wxmdiclientwindow} associated with it, which
+is the parent for MDI client frames.
+This client window may be resized to accomodate non-MDI windows, as seen in Microsoft Visual C++ (TM) and
+Microsoft Publisher (TM), where a documentation window is placed to one side of the workspace.
+
+MDI remains popular despite dire warnings from Microsoft itself that MDI is an obsolete
+user interface style.
+
+The implementation is native in Windows, and simulated under Motif. Under Motif,
+the child window frames will often have a different appearance from other frames
+because the window decorations are simulated.
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxCAPTION}}{Puts a caption on the frame.}
+\twocolitem{\windowstyle{wxDEFAULT\_FRAME\_STYLE}}{Defined as {\bf wxMINIMIZE\_BOX \pipe wxMAXIMIZE\_BOX \pipe wxTHICK\_FRAME \pipe wxSYSTEM\_MENU \pipe wxCAPTION}.}
+\twocolitem{\windowstyle{wxHSCROLL}}{Displays a horizontal scrollbar in the {\it client window}, allowing
+the user to view child frames that are off the current view.}
+\twocolitem{\windowstyle{wxICONIZE}}{Display the frame iconized (minimized) (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE}}{Displays the frame maximized (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE\_BOX}}{Displays a maximize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxMINIMIZE}}{Identical to {\bf wxICONIZE}.}
+\twocolitem{\windowstyle{wxMINIMIZE\_BOX}}{Displays a minimize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window (Motif only;
+for Windows, it is implicit in wxTHICK\_FRAME).}
+\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows (Windows only).}
+\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu (Windows and Motif only).}
+\twocolitem{\windowstyle{wxTHICK\_FRAME}}{Displays a thick frame around the window (Windows and Motif only).}
+\twocolitem{\windowstyle{wxVSCROLL}}{Displays a vertical scrollbar in the {\it client window}, allowing
+the user to view child frames that are off the current view.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxMDIChildFrame}{wxmdichildframe}, \helpref{wxMDIClientWindow}{wxmdiclientwindow},\rtfsp
+\helpref{wxFrame}{wxframe}, \helpref{wxDialog}{wxdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMDIParentFrame::wxMDIParentFrame}\label{wxmdiparentframeconstr}
+
+\func{}{wxMDIParentFrame}{\void}
+
+Default constructor.
+
+\func{}{wxMDIParentFrame}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE \pipe wxVSCROLL \pipe wxHSCROLL},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent. This should be NULL.}
+
+\docparam{id}{The window identifier. It may take a value of -1 to indicate a default value.}
+
+\docparam{title}{The caption to be displayed on the frame's title bar.}
+
+\docparam{pos}{The window position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The window size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxMDIParentFrame}{wxmdiparentframe}.}
+
+\docparam{name}{The name of the window. This parameter is used to associate a name with the item,
+allowing the application user to set Motif resource values for
+individual windows.}
+
+\wxheading{Remarks}
+
+During the construction of the frame, the client window will be created. To use a different class
+from \helpref{wxMDIClientWindow}{wxmdiclientwindow}, override\rtfsp
+\helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient}.
+
+Under Windows 95, the client window will automatically have a sunken border style when
+the active child is not maximized, and no border style when a child is maximized.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::Create}{wxmdiparentframecreate},\rtfsp
+\helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient}
+
+\membersection{wxMDIParentFrame::\destruct{wxMDIParentFrame}}
+
+\func{}{\destruct{wxMDIParentFrame}}{\void}
+
+Destructor. Destroys all child windows and menu bar if present.
+
+\membersection{wxMDIParentFrame::ActivateNext}\label{wxmdiparentframeactivatenext}
+
+\func{void}{ActivateNext}{\void}
+
+Activates the MDI child following the currently active one.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::ActivatePrevious}{wxmdiparentframeactivateprevious}
+
+\membersection{wxMDIParentFrame::ActivatePrevious}\label{wxmdiparentframeactivateprevious}
+
+\func{void}{ActivatePrevious}{\void}
+
+Activates the MDI child preceding the currently active one.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::ActivateNext}{wxmdiparentframeactivatenext}
+
+
+\membersection{wxMDIParentFrame::ArrangeIcons}\label{wxmdiparentframearrangeicons}
+
+\func{void}{ArrangeIcons}{\void}
+
+Arranges any iconized (minimized) MDI child windows.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::Cascade}{wxmdiparentframecascade},\rtfsp
+\helpref{wxMDIParentFrame::Tile}{wxmdiparentframetile}
+
+\membersection{wxMDIParentFrame::Cascade}\label{wxmdiparentframecascade}
+
+\func{void}{Cascade}{\void}
+
+Arranges the MDI child windows in a cascade.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::Tile}{wxmdiparentframetile},\rtfsp
+\helpref{wxMDIParentFrame::ArrangeIcons}{wxmdiparentframearrangeicons}
+
+\membersection{wxMDIParentFrame::Create}\label{wxmdiparentframecreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE \pipe wxVSCROLL \pipe wxHSCROLL},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Used in two-step frame construction. See \helpref{wxMDIParentFrame::wxMDIParentFrame}{wxmdiparentframeconstr}\rtfsp
+for further details.
+
+\membersection{wxMDIParentFrame::GetClientSize}\label{wxmdiparentframegetclientsize}
+
+\constfunc{virtual void}{GetClientSize}{\param{int* }{width}, \param{int* }{height}}
+
+This gets the size of the frame `client area' in pixels.
+
+\wxheading{Parameters}
+
+\docparam{width}{Receives the client width in pixels.}
+
+\docparam{height}{Receives the client height in pixels.}
+
+\wxheading{Remarks}
+
+The client area is the area which may be drawn on by the programmer, excluding title bar, border, status bar,
+and toolbar if present.
+
+If you wish to manage your own toolbar (or perhaps you have more than one),
+provide an {\bf OnSize} event handler. Call {\bf GetClientSize} to
+find how much space there is for your windows and don't forget to set the size and position
+of the MDI client window as well as your toolbar and other windows (but not the status bar).
+
+If you have set a toolbar with \helpref{wxMDIParentFrame::SetToolbar}{wxmdiparentframesettoolbar},
+the client size returned will have subtracted the toolbar height. However, the available positions
+for the client window and other windows of the frame do not start at zero - you must add the toolbar height.
+
+The position and size of the status bar and toolbar (if known to the frame) are always managed
+by {\bf wxMDIParentFrame}, regardless of what behaviour is defined in your {\bf OnSize} event handler.
+However, the client window position and size are always set in {\bf OnSize}, so if you override this
+event handler, make sure you deal with the client window.
+
+You do not have to manage the size and position of MDI child windows, since they are managed
+automatically by the client window.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::GetToolBar}{wxmdiparentframegettoolbar},\rtfsp
+\helpref{wxMDIParentFrame::SetToolBar}{wxmdiparentframesettoolbar},\rtfsp
+\helpref{wxWindow}{wxwindowonsize},\rtfsp
+\helpref{wxMDIClientWindow}{wxmdiclientwindow}
+
+\membersection{wxMDIParentFrame::GetActiveChild}\label{wxmdiparentframegetactivechild}
+
+\constfunc{wxMDIChildFrame*}{GetActiveChild}{\void}
+
+Returns a pointer to the active MDI child, if there is one.
+
+\membersection{wxMDIParentFrame::GetClientWindow}\label{wxmdiparentframegetclientwindow}
+
+\constfunc{wxMDIClientWindow*}{GetClientWindow}{\void}
+
+Returns a pointer to the client window.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::OnCreateClient}{wxmdiparentframeoncreateclient}
+
+\membersection{wxMDIParentFrame::GetToolBar}\label{wxmdiparentframegettoolbar}
+
+\constfunc{virtual wxWindow*}{GetToolBar}{\void}
+
+Returns the window being used as the toolbar for this frame.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::SetToolBar}{wxmdiparentframesettoolbar}
+
+\membersection{wxMDIParentFrame::OnCreateClient}\label{wxmdiparentframeoncreateclient}
+
+\func{virtual wxMDIClientWindow*}{OnCreateClient}{\void}
+
+Override this to return a different kind of client window.
+
+\wxheading{Remarks}
+
+You might wish to derive from \helpref{wxMDIClientWindow}{wxmdiclientwindow} in order
+to implement different erase behaviour, for example, such as painting a bitmap
+on the background.
+
+Note that it is probably impossible to have a client window that scrolls as well as painting
+a bitmap or pattern, since in {\bf OnScroll}, the scrollbar positions always return zero.
+(Solutions to: \verb$julian.smart@ukonline.co.uk$).
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::GetClientWindow}{wxmdiparentframegetclientwindow},\rtfsp
+\helpref{wxMDIClientWindow}{wxmdiclientwindow}
+
+\membersection{wxMDIParentFrame::SetToolBar}\label{wxmdiparentframesettoolbar}
+
+\func{virtual void}{SetToolBar}{\param{wxWindow*}{ toolbar}}
+
+Sets the window to be used as a toolbar for this
+MDI parent window. It saves the application having to manage the positioning
+of the toolbar MDI client window.
+
+\wxheading{Parameters}
+
+\docparam{toolbar}{Toolbar to manage.}
+
+\wxheading{Remarks}
+
+When the frame is resized, the toolbar is resized to be the width of
+the frame client area, and the toolbar height is kept the same.
+
+The parent of the toolbar must be this frame.
+
+If you wish to manage your own toolbar (or perhaps you have more than one),
+don't call this function, and instead manage your subwindows and the MDI client window by
+providing an {\bf OnSize} event handler. Call \helpref{wxMDIParentFrame::GetClientSize}{wxmdiparentframegetclientsize} to
+find how much space there is for your windows.
+
+Note that SDI (normal) frames and MDI child windows must always have their
+toolbars managed by the application.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::GetToolBar}{wxmdiparentframegettoolbar},\rtfsp
+\helpref{wxMDIParentFrame::GetClientSize}{wxmdiparentframegetclientsize}
+
+\membersection{wxMDIParentFrame::Tile}\label{wxmdiparentframetile}
+
+\func{void}{Tile}{\void}
+
+Tiles the MDI child windows.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame::Cascade}{wxmdiparentframecascade},\rtfsp
+\helpref{wxMDIParentFrame::ArrangeIcons}{wxmdiparentframearrangeicons}
+
+
--- /dev/null
+\section{\class{wxMemoryDC}}\label{wxmemorydc}
+
+A memory device context provides a means to draw graphics onto a bitmap.
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+A bitmap must be selected into the new memory DC before it may be used
+for anything. Typical usage is as follows:
+
+\begin{verbatim}
+ // Create a memory DC
+ wxMemoryDC temp_dc;
+ temp_dc.SelectObject(test_bitmap);
+
+ // We can now draw into the memory DC...
+ // Copy from this DC to another DC.
+ old_dc.Blit(250, 50, BITMAP_WIDTH, BITMAP_HEIGHT, temp_dc, 0, 0);
+\end{verbatim}
+
+Note that the memory DC {\it must} be deleted (or the bitmap selected out of it) before a bitmap
+can be reselected into another memory DC.
+
+\wxheading{See also}
+
+\helpref{wxBitmap}{wxbitmap}, \helpref{wxDC}{wxdc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMemoryDC::wxMemoryDC}
+
+\func{}{wxMemoryDC}{\void}
+
+Constructs a new memory device context.
+
+Use the {\it Ok} member to test whether the constructor was successful
+in creating a useable device context. Don't forget to select a bitmap
+into the DC before drawing on it.
+
+\membersection{wxMemoryDC::SelectObject}
+
+\func{}{SelectObject}{\param{const wxBitmap\& }{bitmap}}
+
+Selects the given bitmap into the device context, to use as the memory
+bitmap. Selecting the bitmap into a memory DC allows you to draw into
+the DC (and therefore the bitmap) and also to use {\bf Blit} to copy
+the bitmap to a canvas. For this purpose, you may find \helpref{wxDC::DrawIcon}{wxdcdrawicon}\rtfsp
+easier to use instead.
+
+If the argument is wxNullBitmap (or some other uninitialised wxBitmap) the current bitmap is selected out of the device
+context, and the original bitmap restored, allowing the current bitmap to
+be destroyed safely.
+
--- /dev/null
+\section{\class{wxMenu}}\label{wxmenu}
+
+A menu is a popup (or pull down) list of items, one of which may be
+selected before the menu goes away (clicking elsewhere dismisses the
+menu). Menus may be used to construct either menu bars or popup menus.
+
+A menu item has an integer ID associated with it which can be used to
+identify the selection, or to change the menu item in some way.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event handling}
+
+If the menu is part of a menubar, then \helpref{wxMenuBar}{wxmenubar} event processing is used.
+
+With a popup menu, there is a variety of ways to handle a menu selection event
+(wxEVT\_COMMAND\_MENU\_SELECTED).
+
+\begin{enumerate}\itemsep=0pt
+\item Define a callback of type wxFunction, which you pass to the wxMenu constructor.
+The callback takes a reference to a window, and a reference to a \helpref{wxCommandEvent}{wxcommandevent}.
+\item Derive a new class from wxMenu and define event table entries using the EVT\_MENU macro.
+\item Set a new event handler for wxMenu, using an object whose class has EVT\_MENU entries.
+\item Provide EVT\_MENU handlers in the window which pops up the menu, or in an ancestor of
+this window.
+\end{enumerate}
+
+\wxheading{See also}
+
+\helpref{wxMenuBar}{wxmenubar}, \helpref{wxWindow::PopupMenu}{wxwindowpopupmenu},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMenu::wxMenu}\label{wxmenuconstr}
+
+\func{}{wxMenu}{\param{const wxString\& }{title = ""}, \param{const wxFunction}{ func = NULL}}
+
+Constructs a wxMenu object.
+
+\wxheading{Parameters}
+
+\docparam{title}{A title for the popup menu: the empty string denotes no title.}
+
+\docparam{func}{A callback function if the menu is used as a popup using \helpref{wxWindow::PopupMenu}{wxwindowpopupmenu}.}
+
+\membersection{wxMenu::\destruct{wxMenu}}
+
+\func{}{\destruct{wxMenu}}{\void}
+
+Destructor, destroying the menu.
+
+\membersection{wxMenu::Append}\label{wxmenuappend}
+
+\func{void}{Append}{\param{const int}{ id}, \param{const wxString\& }{ item}, \param{const wxString\& }{helpString = ""},\rtfsp
+\param{const bool}{ checkable = FALSE}}
+
+Adds a string item to the end of the menu.
+
+\func{void}{Append}{\param{const int}{ id}, \param{const wxString\& }{ item}, \param{wxMenu *}{subMenu},\rtfsp
+\param{const wxString\& }{helpString = ""}}
+
+Adds a pull-right submenu to the end of the menu.
+
+\func{void}{Append}{\param{wxMenuItem*}{ menuItem}}
+
+Adds a menu item object. You can specify various extra properties of a menu item this way,
+such as bitmaps and fonts.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu command identifier.}
+
+\docparam{item}{The string to appear on the menu item.}
+
+\docparam{menu}{Pull-right submenu.}
+
+\docparam{checkable}{If TRUE, this item is checkable.}
+
+\docparam{helpString}{An optional help string associated with the item.
+By default, \helpref{wxFrame::OnMenuHighlight}{wxframeonmenuhighlight} displays
+this string in the status line.}
+
+\docparam{menuItem}{A menuitem object. It will be owned by the wxMenu object after this function
+is called, so do not delete it yourself.}
+
+\wxheading{Remarks}
+
+This command can be used after the menu has been shown, as well as on initial
+creation of a menu or menubar.
+
+\wxheading{See also}
+
+\helpref{wxMenu::AppendSeparator}{wxmenuappendseparator}, \helpref{wxMenu::SetLabel}{wxmenusetlabel}, \helpref{wxMenu::GetHelpString}{wxmenugethelpstring},\rtfsp
+\helpref{wxMenu::SetHelpString}{wxmenusethelpstring}, \helpref{wxMenuItem}{wxmenuitem}
+
+\membersection{wxMenu::AppendSeparator}\label{wxmenuappendseparator}
+
+\func{void}{AppendSeparator}{\void}
+
+Adds a separator to the end of the menu.
+
+\wxheading{See also}
+
+\helpref{wxMenu::Append}{wxmenuappend}
+
+\membersection{wxMenu::Break}\label{wxmenubreak}
+
+\func{void}{Break}{\void}
+
+Inserts a break in a menu, causing the next appended item to appear in a new column.
+
+\membersection{wxMenu::Check}\label{wxmenucheck}
+
+\func{void}{Check}{\param{const int}{ id}, \param{const bool}{ check}}
+
+Checks or unchecks the menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{check}{If TRUE, the item will be checked, otherwise it will be unchecked.}
+
+\wxheading{See also}
+
+\helpref{wxMenu::IsChecked}{wxmenuischecked}
+
+\membersection{wxMenu::Enable}\label{wxmenuenable}
+
+\func{void}{Enable}{\param{const int}{ id}, \param{const bool}{ enable}}
+
+Enables or disables (greys out) a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{enable}{TRUE to enable the menu item, FALSE to disable it.}
+
+\wxheading{See also}
+
+\helpref{wxMenu::IsEnabled}{wxmenuisenabled}
+
+\membersection{wxMenu::FindItem}\label{wxmenufinditem}
+
+\constfunc{int}{FindItem}{\param{const wxString\& }{itemString}}
+
+Finds the menu item id for a menu item string.
+
+\wxheading{Parameters}
+
+\docparam{itemString}{Menu item string to find.}
+
+\wxheading{Return value}
+
+Menu item identifier, or -1 if none is found.
+
+\wxheading{Remarks}
+
+Any special menu codes are stripped out of source and target strings
+before matching.
+
+\wxheading{See also}
+
+\helpref{wxMenu::FindItemForId}{wxmenufinditemforid}
+
+\membersection{wxMenu::FindItemForId}\label{wxmenufinditemforid}
+
+\constfunc{wxMenuItem*}{FindItemForId}{\param{const int}{ id}}
+
+Finds the menu item object associated with the given menu item identifier.
+
+\wxheading{Parameters}
+
+\docparam{id}{Menu item identifier.}
+
+\wxheading{Return value}
+
+Returns the menu item object, or NULL if it is not found.
+
+\wxheading{See also}
+
+\helpref{wxMenu::FindItem}{wxmenufinditem}
+
+\membersection{wxMenu::GetHelpString}\label{wxmenugethelpstring}
+
+\constfunc{wxString}{GetHelpString}{\param{const int}{ id}}
+
+Returns the help string associated with a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+The help string, or the empty string if there is no help string or the
+item was not found.
+
+\wxheading{See also}
+
+\helpref{wxMenu::SetHelpString}{wxmenusethelpstring}, \helpref{wxMenu::Append}{wxmenuappend}
+
+\membersection{wxMenu::GetLabel}\label{wxmenugetlabel}
+
+\constfunc{wxString}{GetLabel}{\param{const int}{ id}}
+
+Returns a menu item label.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+The item label, or the empty string if the item was not found.
+
+\wxheading{See also}
+
+\helpref{wxMenu::SetLabel}{wxmenusetlabel}
+
+\membersection{wxMenu::GetTitle}\label{wxmenugettitle}
+
+\constfunc{wxString}{GetTitle}{\void}
+
+Returns the title of the menu.
+
+\wxheading{Remarks}
+
+This is relevant only to popup menus.
+
+\wxheading{See also}
+
+\helpref{wxMenu::SetTitle}{wxmenusettitle}
+
+\membersection{wxMenu::IsChecked}\label{wxmenuischecked}
+
+\constfunc{bool}{IsChecked}{\param{const int}{ id}}
+
+Determines whether a menu item is checked.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+TRUE if the menu item is checked, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxMenu::Check}{wxmenucheck}
+
+\membersection{wxMenu::IsEnabled}\label{wxmenuisenabled}
+
+\constfunc{bool}{IsEnabled}{\param{const int}{ id}}
+
+Determines whether a menu item is enabled.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+TRUE if the menu item is enabled, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxMenu::Enable}{wxmenuenable}
+
+\membersection{wxMenu::SetHelpString}\label{wxmenusethelpstring}
+
+\func{void}{SetHelpString}{\param{const int}{ id}, \param{const wxString\& }{helpString}}
+
+Sets an item's help string.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{helpString}{The help string to set.}
+
+\wxheading{See also}
+
+\helpref{wxMenu::GetHelpString}{wxmenugethelpstring}
+
+\membersection{wxMenu::SetLabel}\label{wxmenusetlabel}
+
+\func{void}{SetLabel}{\param{const int}{ id}, \param{const wxString\& }{label}}
+
+Sets the label of a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{label}{The menu item label to set.}
+
+\wxheading{See also}
+
+\helpref{wxMenu::Append}{wxmenuappend}, \helpref{wxMenu::GetLabel}{wxmenugetlabel}
+
+\membersection{wxMenu::SetTitle}\label{wxmenusettitle}
+
+\func{void}{SetTitle}{\param{const wxString\& }{title}}
+
+Sets the title of the menu.
+
+\wxheading{Parameters}
+
+\docparam{title}{The title to set.}
+
+\wxheading{Remarks}
+
+This is relevant only to popup menus.
+
+\wxheading{See also}
+
+\helpref{wxMenu::SetTitle}{wxmenusettitle}
+
+\section{\class{wxMenuBar}}\label{wxmenubar}
+
+A menu bar is a series of menus accessible from the top of a frame.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event handling}
+
+To respond to a menu selection, provide a handler for EVT\_MENU, in the frame
+that contains the menu bar.
+
+\wxheading{See also}
+
+\helpref{wxMenu}{wxmenu}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMenuBar::wxMenuBar}\label{wxmenubarconstr}
+
+\func{void}{wxMenuBar}{\void}
+
+Default constructor.
+
+\func{void}{wxMenuBar}{\param{const int}{ n}, \param{wxMenu*}{ menus[]}, \param{const wxString }{titles[]}}
+
+Construct a menu bar from arrays of menus and titles.
+
+\wxheading{Parameters}
+
+\docparam{n}{The number of menus.}
+
+\docparam{menus}{An array of menus. Do not use this array again - it now belongs to the
+menu bar.}
+
+\docparam{titles}{An array of title strings. Deallocate this array after creating the menu bar.}
+
+\membersection{wxMenuBar::\destruct{wxMenuBar}}
+
+\func{void}{\destruct{wxMenuBar}}{\void}
+
+Destructor, destroying the menu bar and removing it from the parent frame (if any).
+
+\membersection{wxMenuBar::Append}\label{wxmenubarappend}
+
+\func{void}{Append}{\param{wxMenu *}{menu}, \param{const wxString\& }{title}}
+
+Adds the item to the end of the menu bar.
+
+\wxheading{Parameters}
+
+\docparam{menu}{The menu to add. Do not deallocate this menu after calling {\bf Append}.}
+
+\docparam{title}{The title of the menu.}
+
+\membersection{wxMenuBar::Check}\label{wxmenubarcheck}
+
+\func{void}{Check}{\param{const int}{ id}, \param{const bool}{ check}}
+
+Checks or unchecks a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{check}{If TRUE, checks the menu item, otherwise the item is unchecked.}
+
+\wxheading{Remarks}
+
+Only use this when the menu bar has been associated
+with a frame; otherwise, use the wxMenu equivalent call.
+
+\membersection{wxMenuBar::Enable}\label{wxmenubarenable}
+
+\func{void}{Enable}{\param{const int}{ id}, \param{const bool}{ enable}}
+
+Enables or disables (greys out) a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\docparam{enable}{TRUE to enable the item, FALSE to disable it.}
+
+\wxheading{Remarks}
+
+Only use this when the menu bar has been
+associated with a frame; otherwise, use the wxMenu equivalent call.
+
+\membersection{wxMenuBar::EnableTop}\label{wxmenubarenabletop}
+
+\func{void}{EnableTop}{\param{const int}{ pos}, \param{const bool}{ enable}}
+
+Enables or disables a whole menu.
+
+\wxheading{Parameters}
+
+\docparam{pos}{The position of the menu, starting from zero.}
+
+\docparam{enable}{TRUE to enable the menu, FALSE to disable it.}
+
+\wxheading{Remarks}
+
+Only use this when the menu bar has been
+associated with a frame.
+
+\membersection{wxMenuBar::FindMenuItem}\label{wxmenubarfindmenuitem}
+
+\constfunc{int}{FindMenuItem}{\param{const wxString\& }{menuString}, \param{const wxString\& }{itemString}}
+
+Finds the menu item id for a menu name/menu item string pair.
+
+\wxheading{Parameters}
+
+\docparam{menuString}{Menu title to find.}
+
+\docparam{itemString}{Item to find.}
+
+\wxheading{Return value}
+
+The menu item identifier, or -1 if none was found.
+
+\wxheading{Remarks}
+
+Any special menu codes are stripped out of source and target strings
+before matching.
+
+\membersection{wxMenuBar::FindItemById}\label{wxmenubarfinditembyid}
+
+\constfunc{wxMenuItem *}{FindItemById}{\param{const int}{ id}}
+
+Finds the menu item object associated with the given menu item identifier,
+
+\wxheading{Parameters}
+
+\docparam{id}{Menu item identifier.}
+
+\wxheading{Return value}
+
+The found menu item object, or NULL if one was not found.
+
+\membersection{wxMenuBar::GetHelpString}\label{wxmenubargethelpstring}
+
+\constfunc{wxString}{GetHelpString}{\param{const int}{ id}}
+
+Gets the help string associated with the menu item identifer.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+The help string, or the empty string if there was no help string or the menu item
+was not found.
+
+\wxheading{See also}
+
+\helpref{wxMenuBar::SetHelpString}{wxmenubarsethelpstring}
+
+\membersection{wxMenuBar::GetLabel}\label{wxmenubargetlabel}
+
+\constfunc{wxString}{GetLabel}{\param{const int}{ id}}
+
+Gets the label associated with a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+The menu item label, or the empty string if the item was not found.
+
+\wxheading{Remarks}
+
+Use only after the menubar has been associated with a frame.
+
+\membersection{wxMenuBar::GetLabelTop}\label{wxmenubargetlabeltop}
+
+\constfunc{wxString}{GetLabelTop}{\param{const int}{ pos}}
+
+Returns the label of a top-level menu.
+
+\wxheading{Parameters}
+
+\docparam{pos}{Position of the menu on the menu bar, starting from zero.}
+
+\wxheading{Return value}
+
+The menu label, or the empty string if the menu was not found.
+
+\wxheading{Remarks}
+
+Use only after the menubar has been associated with a frame.
+
+\wxheading{See also}
+
+\helpref{wxMenuBar::SetLabelTop}{wxmenubarsetlabeltop}
+
+\membersection{wxMenuBar::IsChecked}\label{wxmenubarischecked}
+
+\constfunc{bool}{IsChecked}{\param{const int}{ id}}
+
+Determines whether an item is checked.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+TRUE if the item was found and is checked, FALSE otherwise.
+
+\membersection{wxMenuBar::IsEnabled}\label{wxmenubarisenabled}
+
+\constfunc{bool}{IsEnabled}{\param{const int}{ id}}
+
+Determines whether an item is enabled.
+
+\wxheading{Parameters}
+
+\docparam{id}{The menu item identifier.}
+
+\wxheading{Return value}
+
+TRUE if the item was found and is enabled, FALSE otherwise.
+
+\membersection{wxMenuBar::SetHelpString}\label{wxmenubarsethelpstring}
+
+\func{void}{SetHelpString}{\param{const int}{ id}, \param{const wxString\& }{helpString}}
+
+Sets the help string associated with a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{Menu item identifier.}
+
+\docparam{helpString}{Help string to associate with the menu item.}
+
+\wxheading{See also}
+
+\helpref{wxMenuBar::GetHelpString}{wxmenubargethelpstring}
+
+\membersection{wxMenuBar::SetLabel}\label{wxmenubarsetlabel}
+
+\func{void}{SetLabel}{\param{const int}{ id}, \param{const wxString\& }{label}}
+
+Sets the label of a menu item.
+
+\wxheading{Parameters}
+
+\docparam{id}{Menu item identifier.}
+
+\docparam{label}{Menu item label.}
+
+\wxheading{Remarks}
+
+Use only after the menubar has been associated with a frame.
+
+\wxheading{See also}
+
+\helpref{wxMenuBar::GetLabel}{wxmenubargetlabel}
+
+\membersection{wxMenuBar::SetLabelTop}\label{wxmenubarsetlabeltop}
+
+\func{void}{SetLabelTop}{\param{const int}{ pos}, \param{const wxString\& }{label}}
+
+Sets the label of a top-level menu.
+
+\wxheading{Parameters}
+
+\docparam{pos}{The position of a menu on the menu bar, starting from zero.}
+
+\docparam{label}{The menu label.}
+
+\wxheading{Remarks}
+
+Use only after the menubar has been associated with a frame.
+
+\wxheading{See also}
+
+\helpref{wxMenuBar::GetLabelTop}{wxmenubargetlabeltop}
+
--- /dev/null
+\section{\class{wxMenuEvent}}\label{wxmenuevent}
+
+This class is used for a variety of menu-related events. Note that
+these do not include menu command events.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a menu event, use these event handler macros to direct input to member
+functions that take a wxMenuEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_MENU\_CHAR(func)}}{Process a wxEVT\_MENU\_CHAR event (a keypress
+when a menu is showing). Windows only. TODO}
+\twocolitem{{\bf EVT\_MENU\_INIT(func)}}{Process a wxEVT\_MENU\_INIT event (the menu
+is about to pop up). Windows only. TODO}
+\twocolitem{{\bf EVT\_MENU\_HIGHLIGHT(func)}}{Process a wxEVT\_MENU\_HIGHLIGHT event (a menu
+item is being highlighted). Windows only.}
+\twocolitem{{\bf EVT\_POPUP\_MENU(func)}}{Process a wxEVT\_POPUP\_MENU event (a menu
+item is being highlighted). Windows only. TODO}
+\twocolitem{{\bf EVT\_CONTEXT\_MENU(func)}}{Process a wxEVT\_CONTEXT\_MENU event (F1 has
+been pressed with a particular menu item highlighted). Windows only. TODO}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnMenuHighlight}{wxwindowonmenuhighlight}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMenuEvent::wxMenuEvent}
+
+\func{}{wxMenuEvent}{\param{WXTYPE }{id = 0}, \param{int }{id = 0}, \param{wxDC* }{dc = NULL}}
+
+Constructor.
+
+\membersection{wxMenuEvent::m\_menuId}
+
+\member{int}{m\_menuId}
+
+The relevant menu identifier.
+
+\membersection{wxMenuEvent::GetMenuId}\label{wxmenueventgetmenuid}
+
+\constfunc{int}{GetMenuId}{\void}
+
+Returns the menu identifier associated with the event.
+
--- /dev/null
+\section{\class{wxMenuItem}}\label{wxmenuitem}
+
+A menu item represents an item in a popup menu. Note that the majority of this
+class is only implemented under Windows so far, but everything except fonts, colours and
+bitmaps can be achieved via wxMenu on all platforms.
+
+\wxheading{Derived from}
+
+wxOwnerDrawn (Windows only)\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxMenuBar}{wxmenubar}, \helpref{wxMenu}{wxmenu}, \helpref{wxOwnerDrawn}{wxownerdrawn}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMenuItem::wxMenuItem}\label{wxmenuitemconstr}
+
+\func{}{wxMenuItem}{\param{wxMenu*}{ parentMenu = NULL}, \param{int}{ id = ID\_SEPARATOR},
+ \param{const wxString\& }{text = ""}, \param{const wxString\& }{helpString = ""},
+ \param{bool }{checkable = FALSE}, \param{wxMenu*}{ subMenu = NULL}, }
+
+Constructs a wxMenuItem object.
+
+\wxheading{Parameters}
+
+\docparam{parentMenu}{Menu that the menu item belongs to.}
+
+\docparam{id}{Identifier for this menu item, or ID\_SEPARATOR to indicate a separator.}
+
+\docparam{text}{Text for the menu item, as shown on the menu.}
+
+\docparam{helpString}{Optional help string that will be shown on the status bar.}
+
+\docparam{checkable}{TRUE if this menu item is checkable.}
+
+\docparam{subMenu}{If non-NULL, indicates that the menu item is a submenu.}
+
+\membersection{wxMenuItem::\destruct{wxMenuItem}}
+
+\func{}{\destruct{wxMenuItem}}{\void}
+
+Destructor.
+
+\membersection{wxMenuItem::Check}\label{wxmenuitemcheck}
+
+\func{void}{Check}{\param{bool}{ check}}
+
+Checks or unchecks the menu item.
+
+\membersection{wxMenuItem::DeleteSubMenu}\label{wxmenuitemdeletesubmenu}
+
+\func{void}{DeleteSubMenu}{\void}
+
+Deletes the submenu, if any.
+
+\membersection{wxMenuItem::Enable}\label{wxmenuitemenable}
+
+\func{void}{Enable}{\param{bool}{ enable}}
+
+Enables or disables the menu item.
+
+\membersection{wxMenuItem::GetBackgroundColour}\label{wxmenuitemgetbackgroundcolour}
+
+\constfunc{wxColour\&}{GetBackgroundColour}{\void}
+
+Returns the background colour associated with the menu item (Windows only).
+
+\membersection{wxMenuItem::GetBitmap}\label{wxmenuitemgetbitmap}
+
+\constfunc{wxBitmap\&}{GetBitmap}{\param{bool}{ checked = TRUE}}
+
+Returns the checked or unchecked bitmap (Windows only).
+
+\membersection{wxMenuItem::GetFont}\label{wxmenuitemgetfont}
+
+\constfunc{wxFont\&}{GetFont}{\void}
+
+Returns the font associated with the menu item (Windows only).
+
+\membersection{wxMenuItem::GetHelp}\label{wxmenuitemgethelp}
+
+\constfunc{wxString}{GetHelp}{\void}
+
+Returns the help string associated with the menu item.
+
+\membersection{wxMenuItem::GetId}\label{wxmenuitemgetid}
+
+\constfunc{int}{GetId}{\void}
+
+Returns the menu item identifier.
+
+\membersection{wxMenuItem::GetMarginWidth}\label{wxmenuitemgetmarginwidth}
+
+\constfunc{int}{GetMarginWidth}{\void}
+
+Gets the width of the menu item checkmark bitmap (Windows only).
+
+\membersection{wxMenuItem::GetName}\label{wxmenuitemgetname}
+
+\constfunc{wxString}{GetName}{\void}
+
+Returns the text associated with the menu item.
+
+\membersection{wxMenuItem::GetSubMenu}\label{wxmenuitemgetsubmenu}
+
+\constfunc{wxMenu*}{GetSubMenu}{\void}
+
+Returns the submenu associated with the menu item, or NULL if there isn't one.
+
+\membersection{wxMenuItem::GetTextColour}\label{wxmenuitemgettextcolour}
+
+\constfunc{wxColour\&}{GetTextColour}{\void}
+
+Returns the text colour associated with the menu item (Windows only).
+
+\membersection{wxMenuItem::IsCheckable}\label{wxmenuitemischeckable}
+
+\constfunc{bool}{IsCheckable}{\void}
+
+Returns TRUE if the item is checkable.
+
+\membersection{wxMenuItem::IsChecked}\label{wxmenuitemischecked}
+
+\constfunc{bool}{IsChecked}{\void}
+
+Returns TRUE if the item is checked.
+
+\membersection{wxMenuItem::IsEnabled}\label{wxmenuitemisenabled}
+
+\constfunc{bool}{IsEnabled}{\void}
+
+Returns TRUE if the item is enabled.
+
+\membersection{wxMenuItem::IsSeparator}\label{wxmenuitemisseparator}
+
+\constfunc{bool}{IsSeparator}{\void}
+
+Returns TRUE if the item is a separator.
+
+\membersection{wxMenuItem::SetBackgroundColour}\label{wxmenuitemsetbackgroundcolour}
+
+\constfunc{void}{SetBackgroundColour}{\param{const wxColour& }{colour}}
+
+Sets the background colour associated with the menu item (Windows only).
+
+\membersection{wxMenuItem::SetBitmaps}\label{wxmenuitemsetbitmaps}
+
+\constfunc{void}{SetBitmaps}{\param{const wxBitmap& }{checked},
+ \param{const wxBitmap& }{unchecked = wxNullBitmap}}
+
+Sets the checked/unchecked bitmaps for the menu item (Windows only). The first bitmap
+is also used as the single bitmap for uncheckable menu items.
+
+\membersection{wxMenuItem::SetFont}\label{wxmenuitemsetfont}
+
+\constfunc{void}{SetFont}{\param{const wxFont& }{font}}
+
+Sets the font associated with the menu item (Windows only).
+
+\membersection{wxMenuItem::SetHelp}\label{wxmenuitemsethelp}
+
+\constfunc{void}{SetHelp}{\param{const wxString& }{helpString}}
+
+Sets the help string.
+
+\membersection{wxMenuItem::SetMarginWidth}\label{wxmenuitemsetmarginwidth}
+
+\constfunc{void}{SetMarginWidth}{\param{int}{ width}}
+
+Sets the width of the menu item checkmark bitmap (Windows only).
+
+\membersection{wxMenuItem::SetName}\label{wxmenuitemsetname}
+
+\constfunc{void}{SetName}{\param{const wxString& }{text}}
+
+Sets the text associated with the menu item.
+
+\membersection{wxMenuItem::SetTextColour}\label{wxmenuitemsettextcolour}
+
+\constfunc{void}{SetTextColour}{\param{const wxColour& }{colour}}
+
+Sets the text colour associated with the menu item (Windows only).
+
+
--- /dev/null
+
+\section{\class{wxMetaFile}}\label{wxmetafile}
+
+A {\bf wxMetaFile} represents the MS Windows metafile object, so metafile
+operations have no effect in X. In wxWindows, only sufficient functionality
+has been provided for copying a graphic to the clipboard; this may be extended
+in a future version. Presently, the only way of creating a metafile
+is to use a wxMetafileDC.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxMetaFileDC}{wxmetafiledc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMetaFile::wxMetaFile}
+
+\func{}{wxMetaFile}{\param{const wxString\& }{filename = ""}}
+
+Constructor. If a filename is given, the Windows disk metafile is
+read in. Check whether this was performed successfully by
+using the \helpref{wxMetaFile::Ok}{wxmetafileok} member.
+
+\membersection{wxMetaFile::\destruct{wxMetaFile}}
+
+\func{}{\destruct{wxMetaFile}}{\void}
+
+Destructor.
+
+\membersection{wxMetaFile::Ok}\label{wxmetafileok}
+
+\func{bool}{Ok}{\void}
+
+Returns TRUE if the metafile is valid.
+
+\membersection{wxMetaFile::Play}\label{wxmetafileplay}
+
+\func{bool}{Play}{\param{wxDC *}{dc}}
+
+Plays the metafile into the given device context, returning
+TRUE if successful.
+
+\membersection{wxMetaFile::SetClipboard}
+
+\func{bool}{SetClipboard}{\param{int}{ width = 0}, \param{int}{ height = 0}}
+
+Passes the metafile data to the clipboard. The metafile can no longer be
+used for anything, but the wxMetaFile object must still be destroyed by
+the application.
+
+Below is a example of metafle, metafile device context and clipboard use
+from the {\tt hello.cpp} example. Note the way the metafile dimensions
+are passed to the clipboard, making use of the device context's ability
+to keep track of the maximum extent of drawing commands.
+
+\begin{verbatim}
+ wxMetaFileDC dc;
+ if (dc.Ok())
+ {
+ Draw(dc, FALSE);
+ wxMetaFile *mf = dc.Close();
+ if (mf)
+ {
+ bool success = mf->SetClipboard((int)(dc.MaxX() + 10), (int)(dc.MaxY() + 10));
+ delete mf;
+ }
+ }
+\end{verbatim}
+
+\section{\class{wxMetaFileDC}}\label{wxmetafiledc}
+
+This is a type of device context that allows a metafile object to be
+created (Windows only), and has most of the characteristics of a normal
+\rtfsp{\bf wxDC}. The \helpref{wxMetaFileDC::Close}{wxmetafiledcclose} member must be called after drawing into the
+device context, to return a metafile. The only purpose for this at
+present is to allow the metafile to be copied to the clipboard (see \helpref{wxMetaFile}{wxmetafile}).
+
+Adding metafile capability to an application should be easy if you
+already write to a wxDC; simply pass the wxMetaFileDC to your drawing
+function instead. You may wish to conditionally compile this code so it
+is not compiled under X (although no harm will result if you leave it
+in).
+
+Note that a metafile saved to disk is in standard Windows metafile format,
+and cannot be imported into most applications. To make it importable,
+call the function \helpref{::wxMakeMetaFilePlaceable}{wxmakemetafileplaceable} after
+closing your disk-based metafile device context.
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxMetaFile}{wxmetafile}, \helpref{wxDC}{wxdc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMetaFileDC::wxMetaFileDC}
+
+\func{}{wxMetaFileDC}{\param{const wxString\& }{filename = ""}}
+
+Constructor. If no filename is passed, the metafile is created
+in memory.
+
+\membersection{wxMetaFileDC::\destruct{wxMetaFileDC}}
+
+\func{}{\destruct{wxMetaFileDC}}{\void}
+
+Destructor.
+
+\membersection{wxMetaFileDC::Close}\label{wxmetafiledcclose}
+
+\func{wxMetaFile *}{Close}{\void}
+
+This must be called after the device context is finished with. A
+metafile is returned, and ownership of it passes to the calling
+application (so it should be destroyed explicitly).
+
+
--- /dev/null
+\section{\class{wxMiniFrame}}\label{wxminiframe}
+
+A miniframe is a frame with a small title bar. It is suitable for floating toolbars that must not
+take up too much screen area.
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxICONIZE}}{Display the frame iconized (minimized) (Windows only).}
+\twocolitem{\windowstyle{wxCAPTION}}{Puts a caption on the frame.}
+\twocolitem{\windowstyle{wxDEFAULT\_FRAME\_STYLE}}{Defined as {\bf wxMINIMIZE\_BOX \pipe wxMAXIMIZE\_BOX \pipe wxTHICK\_FRAME \pipe wxSYSTEM\_MENU \pipe wxCAPTION}.}
+\twocolitem{\windowstyle{wxMINIMIZE}}{Identical to {\bf wxICONIZE}.}
+\twocolitem{\windowstyle{wxMINIMIZE\_BOX}}{Displays a minimize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxMAXIMIZE}}{Displays the frame maximized (Windows only).}
+\twocolitem{\windowstyle{wxMAXIMIZE\_BOX}}{Displays a maximize box on the frame (Windows and Motif only).}
+\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows (Windows only).}
+\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu (Windows and Motif only).}
+\twocolitem{\windowstyle{wxTHICK\_FRAME}}{Displays a thick frame around the window (Windows and Motif only).}
+\twocolitem{\windowstyle{wxTINY\_CAPTION\_HORIZ}}{Displays a small horizontal caption. Use instead of
+wxCAPTION.}
+\twocolitem{\windowstyle{wxTINY\_CAPTION\_VERT}}{Under Windows, displays a small vertical caption. Use instead of
+wxCAPTION.}
+\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window (Motif only;
+for Windows, it is implicit in {\bf wxTHICK\_FRAME}).}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+This class has miniframe functionality only under Windows. On other platforms,
+it behaves like a normal frame.
+
+\wxheading{See also}
+
+\helpref{wxMDIParentFrame}{wxmdiparentframe}, \helpref{wxMDIChildFrame}{wxmdichildframe},\rtfsp
+\helpref{wxFrame}{wxframe}, \helpref{wxDialog}{wxdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMiniFrame::wxMiniFrame}\label{wxminiframeconstr}
+
+\func{}{wxMiniFrame}{\void}
+
+Default constructor.
+
+\func{}{wxMiniFrame}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent. This may be NULL. If it is non-NULL, the frame will
+always be displayed on top of the parent window on Windows.}
+
+\docparam{id}{The window identifier. It may take a value of -1 to indicate a default value.}
+
+\docparam{title}{The caption to be displayed on the frame's title bar.}
+
+\docparam{pos}{The window position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The window size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxMiniFrame}{wxminiframe}.}
+
+\docparam{name}{The name of the window. This parameter is used to associate a name with the item,
+allowing the application user to set Motif resource values for
+individual windows.}
+
+\wxheading{Remarks}
+
+The frame behaves like a normal frame on non-Windows platforms.
+
+\wxheading{See also}
+
+\helpref{wxMiniFrame::Create}{wxminiframecreate}
+
+\membersection{wxMiniFrame::\destruct{wxMiniFrame}}
+
+\func{void}{\destruct{wxMiniFrame}}{\void}
+
+Destructor. Destroys all child windows and menu bar if present.
+
+\membersection{wxMiniFrame::Create}\label{wxminiframecreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxString\& }{title}, \param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = wxDEFAULT\_FRAME\_STYLE},\rtfsp
+\param{const wxString\& }{name = ``frame"}}
+
+Used in two-step frame construction. See \helpref{wxMiniFrame::wxMiniFrame}{wxminiframeconstr}\rtfsp
+for further details.
+
+
+
--- /dev/null
+\section{\class{wxMultipleChoiceDialog}}\label{wxmultiplechoicedialog}
+
+This class represents a dialog that shows a list of strings, and allows
+the user to select one or more.
+
+TODO.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxMultipleChoiceDialog overview}{wxmultiplechoicedialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
--- /dev/null
+\section{\class{wxModule}}\label{wxmodule}
+
+The module system is a very simple mechanism to allow applications (and parts of wxWindows itself) to
+define initialization and cleanup functions that are automatically called on wxWindows
+startup and exit.
+
+To define a new kind of module, derive a class from wxModule, override the OnInit and OnExit functions,
+and add the DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS to header and implementation files
+(which can be the same file). On initialization, wxWindows will find all classes derived from wxModule,
+create an instance of each, and call each OnInit function. On exit, wxWindows will call the OnExit
+function for each module instance.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxModule::wxModule}\label{wxmoduleconstr}
+
+\func{}{wxModule}{\void}
+
+Constructs a wxModule object.
+
+\membersection{wxModule::\destruct{wxModule}}
+
+\func{}{\destruct{wxModule}}{\void}
+
+Destructor.
+
+\membersection{wxModule::CleanupModules}\label{wxmodulecleanupmodules}
+
+\func{static void}{CleanupModules}{\void}
+
+Calls Exit for each module instance. Called by wxWindows on exit, so there is no
+need for an application to call it.
+
+\membersection{wxModule::Exit}\label{wxmoduleexit}
+
+\func{void}{Exit}{\void}
+
+Calls OnExit. This function is called by wxWindows and should not need to be called
+by an application.
+
+\membersection{wxModule::Init}\label{wxmoduleinit}
+
+\func{bool}{Init}{\void}
+
+Calls OnInit. This function is called by wxWindows and should not need to be called
+by an application.
+
+\membersection{wxModule::InitializeModules}\label{wxmoduleinitializemodules}
+
+\func{static bool}{InitializeModules}{\void}
+
+Calls Init for each module instance. Called by wxWindows on startup, so there is no
+need for an application to call it.
+
+\membersection{wxModule::OnExit}\label{wxmoduleonexit}
+
+\func{virtual bool}{OnExit}{\void}
+
+Provide this function with appropriate cleanup for your module.
+
+\membersection{wxModule::OnInit}\label{wxmoduleoninit}
+
+\func{virtual bool}{OnInit}{\void}
+
+Provide this function with appropriate initialization for your module. If the function
+returns FALSE, wxWindows will exit immediately.
+
+\membersection{wxModule::RegisterModule}\label{wxmoduleregistermodule}
+
+\func{static void}{RegisterModule}{\param{wxModule*}{ module}}
+
+Registers this module with wxWindows. Called by wxWindows on startup, so there is no
+need for an application to call it.
+
+\membersection{wxModule::RegisterModules}\label{wxmoduleregistermodules}
+
+\func{static bool}{RegisterModules}{\void}
+
+Creates instances of and registers all modules. Called by wxWindows on startup, so there is no
+need for an application to call it.
+
--- /dev/null
+\section{\class{wxMouseEvent}}\label{wxmouseevent}
+
+This event class contains information about mouse events, particularly
+events received by canvases. See \helpref{wxWindow::OnMouseEvent}{wxwindowonmouseevent}.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}
+
+\wxheading{Event table macros}
+
+To process a mouse event, use these event handler macros to direct input to member
+functions that take a wxMouseEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_LEFT\_DOWN(func)}}{Process a wxEVT\_LEFT\_DOWN event.}
+\twocolitem{{\bf EVT\_LEFT\_UP(func)}}{Process a wxEVT\_LEFT\_UP event.}
+\twocolitem{{\bf EVT\_LEFT\_DCLICK(func)}}{Process a wxEVT\_LEFT\_DCLICK event.}
+\twocolitem{{\bf EVT\_MIDDLE\_DOWN(func)}}{Process a wxEVT\_MIDDLE\_DOWN event.}
+\twocolitem{{\bf EVT\_MIDDLE\_UP(func)}}{Process a wxEVT\_MIDDLE\_UP event.}
+\twocolitem{{\bf EVT\_MIDDLE\_DCLICK(func)}}{Process a wxEVT\_MIDDLE\_DCLICK event.}
+\twocolitem{{\bf EVT\_RIGHT\_DOWN(func)}}{Process a wxEVT\_RIGHT\_DOWN event.}
+\twocolitem{{\bf EVT\_RIGHT\_UP(func)}}{Process a wxEVT\_RIGHT\_UP event.}
+\twocolitem{{\bf EVT\_RIGHT\_DCLICK(func)}}{Process a wxEVT\_RIGHT\_DCLICK event.}
+\twocolitem{{\bf EVT\_MOTION(func)}}{Process a wxEVT\_MOTION event.}
+\twocolitem{{\bf EVT\_ENTER\_WINDOW(func)}}{Process a wxEVT\_ENTER\_WINDOW event.}
+\twocolitem{{\bf EVT\_LEAVE\_WINDOW(func)}}{Process a wxEVT\_LEAVE\_WINDOW event.}
+\end{twocollist}%
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMouseEvent::m\_altDown}
+
+\member{bool}{m\_altDown}
+
+TRUE if the Alt key is pressed down.
+
+\membersection{wxMouseEvent::m\_controlDown}
+
+\member{bool}{m\_controlDown}
+
+TRUE if control key is pressed down.
+
+\membersection{wxMouseEvent::m\_leftDown}
+
+\member{bool}{m\_leftDown}
+
+TRUE if the left mouse button is currently pressed down.
+
+\membersection{wxMouseEvent::m\_middleDown}
+
+\member{bool}{m\_middleDown}
+
+TRUE if the middle mouse button is currently pressed down.
+
+\membersection{wxMouseEvent::m\_rightDown}
+
+\member{bool}{m\_rightDown}
+
+TRUE if the right mouse button is currently pressed down.
+
+\membersection{wxMouseEvent::m\_leftDown}
+
+\member{bool}{m\_leftDown}
+
+TRUE if the left mouse button is currently pressed down.
+
+\membersection{wxMouseEvent::m\_metaDown}
+
+\member{bool}{m\_metaDown}
+
+TRUE if the Meta key is pressed down.
+
+\membersection{wxMouseEvent::m\_shiftDown}
+
+\member{bool}{m\_shiftDown}
+
+TRUE if shift is pressed down.
+
+\membersection{wxMouseEvent::m\_x}
+
+\member{float}{m\_x}
+
+X-coordinate of the event.
+
+\membersection{wxMouseEvent::m\_y}
+
+\member{float}{m\_y}
+
+Y-coordinate of the event.
+
+\membersection{wxMouseEvent::wxMouseEvent}
+
+\func{}{wxMouseEvent}{\param{WXTYPE}{ mouseEventType = 0}, \param{int}{ id = 0}}
+
+Constructor. Valid event types are:
+
+\begin{itemize}
+\itemsep=0pt
+\item {\bf wxEVT\_ENTER\_WINDOW}
+\item {\bf wxEVT\_LEAVE\_WINDOW}
+\item {\bf wxEVT\_LEFT\_DOWN}
+\item {\bf wxEVT\_LEFT\_UP}
+\item {\bf wxEVT\_LEFT\_DCLICK}
+\item {\bf wxEVT\_MIDDLE\_DOWN}
+\item {\bf wxEVT\_MIDDLE\_UP}
+\item {\bf wxEVT\_MIDDLE\_DCLICK}
+\item {\bf wxEVT\_RIGHT\_DOWN}
+\item {\bf wxEVT\_RIGHT\_UP}
+\item {\bf wxEVT\_RIGHT\_DCLICK}
+\item {\bf wxEVT\_MOTION}
+\end{itemize}
+
+\membersection{wxMouseEvent::AltDown}
+
+\func{bool}{AltDown}{\void}
+
+Returns TRUE if the Alt key was down at the time of the event.
+
+\membersection{wxMouseEvent::Button}
+
+\func{bool}{Button}{\param{int}{ button}}
+
+Returns TRUE if the identified mouse button is changing state. Valid
+values of {\it button} are 1, 2 or 3 for left, middle and right
+buttons respectively.
+
+Not all mice have middle buttons so a portable application should avoid
+this one.
+
+\membersection{wxMouseEvent::ButtonDClick}\label{buttondclick}
+
+\func{bool}{ButtonDClick}{\param{int}{ but = -1}}
+
+If the argument is omitted, this returns TRUE if the event was a mouse
+double click event. Otherwise the argument specifies which double click event
+was generated (1, 2 or 3 for left, middle and right buttons respectively).
+
+\membersection{wxMouseEvent::ButtonDown}
+
+\func{bool}{ButtonDown}{\param{int}{ but = -1}}
+
+If the argument is omitted, this returns TRUE if the event was a mouse
+button down event. Otherwise the argument specifies which button-down event
+was generated (1, 2 or 3 for left, middle and right buttons respectively).
+
+\membersection{wxMouseEvent::ButtonUp}
+
+\func{bool}{ButtonUp}{\param{int}{ but = -1}}
+
+If the argument is omitted, this returns TRUE if the event was a mouse
+button up event. Otherwise the argument specifies which button-up event
+was generated (1, 2 or 3 for left, middle and right buttons respectively).
+
+\membersection{wxMouseEvent::ControlDown}
+
+\func{bool}{ControlDown}{\void}
+
+Returns TRUE if the control key was down at the time of the event.
+
+\membersection{wxMouseEvent::Dragging}
+
+\func{bool}{Dragging}{\void}
+
+Returns TRUE if this was a dragging event (motion while a button is depressed).
+
+\membersection{wxMouseEvent::Entering}\label{wxmouseevententering}
+
+\func{bool}{Entering}{\void}
+
+Returns TRUE if the mouse was entering the canvas (MS Windows and Motif).
+
+See also \helpref{wxMouseEvent::Leaving}{wxmouseeventleaving}.
+
+\membersection{wxMouseEvent::GetX}\label{wxmouseeventgetx}
+
+\func{float}{GetX}{\void}
+
+Returns X coordinate of the mouse event position.
+
+\membersection{wxMouseEvent::GetY}\label{wxmouseeventgety}
+
+\func{float}{GetY}{\void}
+
+Returns Y coordinate of the mouse event position.
+
+\membersection{wxMouseEvent::IsButton}
+
+\func{bool}{IsButton}{\void}
+
+Returns TRUE if the event was a mouse button event (not necessarily a button down event -
+that may be tested using {\it ButtonDown}).
+
+\membersection{wxMouseEvent::Leaving}\label{wxmouseeventleaving}
+
+\func{bool}{Leaving}{\void}
+
+Returns TRUE if the mouse was leaving the canvas (MS Windows and Motif).
+
+See also \helpref{wxMouseEvent::Entering}{wxmouseevententering}.
+
+\membersection{wxMouseEvent::LeftDClick}
+
+\func{bool}{LeftDClick}{\void}
+
+Returns TRUE if the event was a left double click.
+
+\membersection{wxMouseEvent::LeftDown}
+
+\func{bool}{LeftDown}{\void}
+
+Returns TRUE if the left mouse button changed to down.
+
+\membersection{wxMouseEvent::LeftIsDown}
+
+\func{bool}{LeftIsDown}{\void}
+
+Returns TRUE if the left mouse button is currently down, independent
+of the current event type.
+
+\membersection{wxMouseEvent::LeftUp}
+
+\func{bool}{LeftUp}{\void}
+
+Returns TRUE if the left mouse button changed to up.
+
+\membersection{wxMouseEvent::MetaDown}
+
+\func{bool}{MetaDown}{\void}
+
+Returns TRUE if the Meta key was down at the time of the event.
+
+\membersection{wxMouseEvent::MiddleDClick}
+
+\func{bool}{MiddleDClick}{\void}
+
+Returns TRUE if the event was a middle double click.
+
+\membersection{wxMouseEvent::MiddleDown}
+
+\func{bool}{MiddleDown}{\void}
+
+Returns TRUE if the middle mouse button changed to down.
+
+\membersection{wxMouseEvent::MiddleIsDown}
+
+\func{bool}{MiddleIsDown}{\void}
+
+Returns TRUE if the middle mouse button is currently down, independent
+of the current event type.
+
+\membersection{wxMouseEvent::MiddleUp}
+
+\func{bool}{MiddleUp}{\void}
+
+Returns TRUE if the middle mouse button changed to up.
+
+\membersection{wxMouseEvent::Moving}
+
+\func{bool}{Moving}{\void}
+
+Returns TRUE if this was a motion event (no buttons depressed).
+
+\membersection{wxMouseEvent::Position}
+
+\func{void}{Position}{\param{float *}{x}, \param{float *}{y}}
+
+Sets *x and *y to the position at which the event occurred. If the
+window is a canvas, the position is converted to logical units
+(according to the current mapping mode) with scrolling taken into
+account. To get back to device units (for example to calculate where on the
+screen to place a dialog box associated with a canvas mouse event), use
+\rtfsp{\bf wxDC::LogicalToDeviceX} and {\bf wxDC::LogicalToDeviceY}.
+
+For example, the following code calculates screen pixel coordinates
+from the frame position, canvas view start (assuming the canvas is the only
+subwindow on the frame and therefore at the top left of it), and the
+logical event position. A menu is popped up at the position where the
+mouse click occurred. (Note that the application should also check that
+the dialog box will be visible on the screen, since the click could have
+occurred near the screen edge!)
+
+\begin{verbatim}
+ float event_x, event_y;
+ event.Position(&event_x, &event_y);
+ frame->GetPosition(&x, &y);
+ canvas->ViewStart(&x1, &y1);
+ int mouse_x = (int)(canvas->GetDC()->LogicalToDeviceX(event_x + x - x1);
+ int mouse_y = (int)(canvas->GetDC()->LogicalToDeviceY(event_y + y - y1);
+
+ char *choice = wxGetSingleChoice("Menu", "Pick a node action",
+ no_choices, choices, frame, mouse_x, mouse_y);
+\end{verbatim}
+
+\membersection{wxMouseEvent::RightDClick}
+
+\func{bool}{RightDClick}{\void}
+
+Returns TRUE if the event was a right double click.
+
+\membersection{wxMouseEvent::RightDown}
+
+\func{bool}{RightDown}{\void}
+
+Returns TRUE if the right mouse button changed to down.
+
+\membersection{wxMouseEvent::RightIsDown}
+
+\func{bool}{RightIsDown}{\void}
+
+Returns TRUE if the right mouse button is currently down, independent
+of the current event type.
+
+\membersection{wxMouseEvent::RightUp}
+
+\func{bool}{RightUp}{\void}
+
+Returns TRUE if the right mouse button changed to up.
+
+
+\membersection{wxMouseEvent::ShiftDown}
+
+\func{bool}{ShiftDown}{\void}
+
+Returns TRUE if the shift key was down at the time of the event.
+
--- /dev/null
+\section{\class{wxMoveEvent}}\label{wxmoveevent}
+
+A move event holds information about move change events.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a move event, use this event handler macro to direct input to a member
+function that takes a wxMoveEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_MOVE(func)}}{Process a wxEVT\_MOVE event, which is generated
+when a window is moved.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnMove}{wxwindowonmove}, \helpref{wxPoint}{wxpoint}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMoveEvent::wxMoveEvent}
+
+\func{}{wxMoveEvent}{\param{const wxPoint\& }{pt}, \param{int }{id = 0}}
+
+Constructor.
+
+\membersection{wxMoveEvent::GetPosition}\label{wxmoveeventgetposition}
+
+\constfunc{wxPoint}{GetPosition}{\void}
+
+Returns the position of the window generating the move change event.
+
--- /dev/null
+\section{\class{wxMessageDialog}}\label{wxmessagedialog}
+
+This class represents a dialog that shows a single or multi-line message,
+with a choice of OK, Yes, No and Cancel buttons.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxMessageDialog overview}{wxmessagedialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxMessageDialog::wxMessageDialog}\label{wxmessagedialogconstr}
+
+\func{}{wxMessageDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message},\rtfsp
+\param{const wxString\& }{caption = "Message box"}, \param{long }{style = wxOK \pipe wxCANCEL \pipe wxCENTRE},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor. Use \helpref{wxMessageDialog::ShowModal}{wxmessagedialogshowmodal} to show the dialog.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{message}{Message to show on the dialog.}
+
+\docparam{caption}{The dialog caption.}
+
+\docparam{style}{A dialog style (bitlist) containing flags chosen from the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxOK}}{Show an OK button.}
+\twocolitem{{\bf wxCANCEL}}{Show a Cancel button.}
+\twocolitem{{\bf wxYES\_NO}}{Show Yes and No buttons.}
+\twocolitem{{\bf wxCENTRE}}{Centre the message. Not Windows.}
+\twocolitem{{\bf wxICON\_EXCLAMATION}}{Shows an exclamation mark icon. Windows only.}
+\twocolitem{{\bf wxICON\_HAND}}{Shows a hand icon. Windows only.}
+\twocolitem{{\bf wxICON\_QUESTION}}{Shows a question mark icon. Windows only.}
+\twocolitem{{\bf wxICON\_INFORMATION}}{Shows an information (i) icon. Windows only.}
+\end{twocollist}
+}
+
+\docparam{pos}{Dialog position. Not Windows.}
+
+\membersection{wxMessageDialog::\destruct{wxMessageDialog}}
+
+\func{}{\destruct{wxMessageDialog}}{\void}
+
+Destructor.
+
+\membersection{wxMessageDialog::ShowModal}\label{wxmessagedialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning one of wxID\_OK, wxID\_CANCEL, wxID\_YES, wxID\_NO.
+
--- /dev/null
+\section{\class{wxNode}}\label{wxnode}
+
+A node structure used in linked lists (see \helpref{wxList}{wxlist}).
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxList}{wxlist}, \helpref{wxHashTable}{wxhashtable}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxNode::Data}
+
+\func{wxObject *}{Data}{\void}
+
+Retrieves the client data pointer associated with the node. This will
+have to be cast to the correct type.
+
+\membersection{wxNode::Next}
+
+\func{wxNode *}{Next}{\void}
+
+Retrieves the next node (NULL if at end of list).
+
+\membersection{wxNode::Previous}
+
+\func{wxNode *}{Previous}{\void}
+
+Retrieves the previous node (NULL if at start of list).
+
+\membersection{wxNode::SetData}
+
+\func{void}{SetData}{\param{wxObject *}{data}}
+
+Sets the data associated with the node (usually the pointer will have been
+set when the node was created).
+
+
--- /dev/null
+\section{\class{wxObject}}\label{wxobject}
+
+This is the root class of all wxWindows classes.
+It declares a virtual destructor which ensures that
+destructors get called for all derived class objects where necessary.
+
+wxObject is the hub of a dynamic object creation
+scheme, enabling a program to create instances of a class only knowing
+its string class name, and to query the class hierarchy.
+
+The class contains optional debugging versions
+of {\bf new} and {\bf delete}, which can help trace memory allocation
+and deallocation problems.
+
+wxObject can be used to implement reference counted objects, such as
+wxPen, wxBitmap and others.
+
+\wxheading{See also}
+
+\helpref{wxClassInfo}{wxclassinfo}, \helpref{Debugging overview}{debuggingoverview},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxObject::wxObject}\label{wxobjectconstr}
+
+\func{}{wxObject}{\void}
+
+Default constructor.
+
+\membersection{wxObject::\destruct{wxObject}}
+
+\func{}{wxObject}{\void}
+
+Destructor. Performs dereferencing, for those objects
+that use reference counting.
+
+\membersection{wxObject::m\_refData}\label{wxobjectmrefdata}
+
+\member{wxObjectRefData* }{m\_refData}
+
+Pointer to an object which is the object's reference-counted data.
+
+\wxheading{See also}
+
+\helpref{wxObject::Ref}{wxobjectref}, \helpref{wxObject::UnRef}{wxobjectunref},\rtfsp
+\helpref{wxObject::SetRefData}{wxobjectsetrefdata},\rtfsp
+\helpref{wxObject::GetRefData}{wxobjectgetrefdata},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\membersection{wxObject::Dump}\label{wxobjectdump}
+
+\func{void}{Dump}{\param{ostream\&}{ stream}}
+
+A virtual function that should be redefined by derived classes to allow dumping of
+memory states.
+
+\wxheading{Parameters}
+
+\docparam{stream}{Stream on which to output dump information.}
+
+\wxheading{Remarks}
+
+Currently wxWindows does not define Dump for derived classes, but
+programmers may wish to use it for their own applications. Be sure to
+call the Dump member of the class's base class to allow all information to be dumped.
+
+The implementation of this function just writes the class name of the object.
+If DEBUG is undefined or zero, the implementation is empty.
+
+\membersection{wxObject::GetClassInfo}\label{wxobjectgetclassinfo}
+
+\func{wxClassInfo *}{GetClassInfo}{\void}
+
+This virtual function is redefined for every class that requires run-time
+type information, when using DECLARE\_CLASS macros.
+
+\membersection{wxObject::GetRefData}\label{wxobjectgetrefdata}
+
+\constfunc{wxObjectRefData*}{GetRefData}{\void}
+
+Returns the {\bf m\_refData} pointer.
+
+\wxheading{See also}
+
+\helpref{wxObject::Ref}{wxobjectref}, \helpref{wxObject::UnRef}{wxobjectunref}, \helpref{wxObject::m\_refData}{wxobjectmrefdata},\rtfsp
+\helpref{wxObject::SetRefData}{wxobjectsetrefdata},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\membersection{wxObject::IsKindOf}\label{wxobjectiskindof}
+
+\func{bool}{IsKindOf}{\param{wxClassInfo *}{info}}
+
+Determines whether this class is a subclass of (or the same class as)
+the given class.
+
+\wxheading{Parameters}
+
+\docparam{info}{A pointer to a class information object, which may be obtained
+by using the CLASSINFO macro.}
+
+\wxheading{Return value}
+
+TRUE if the class represented by {\it info} is the same class as
+this one or is derived from it.
+
+\wxheading{Example}
+
+\begin{verbatim}
+ bool tmp = obj->IsKindOf(CLASSINFO(wxFrame));
+\end{verbatim}
+
+\membersection{wxObject::Ref}\label{wxobjectref}
+
+\func{void}{Ref}{\param{const wxObject\& }{clone}}
+
+Makes this object refer to the data in {\it clone}.
+
+\wxheading{Parameters}
+
+\docparam{clone}{The object to `clone'.}
+
+\wxheading{Remarks}
+
+First this function calls \helpref{wxObject::UnRef}{wxobjectunref} on itself
+to decrement (and perhaps free) the data it is currently referring to.
+
+It then sets its own m\_refData to point to that of {\it clone}, and increments the reference count
+inside the data.
+
+\wxheading{See also}
+
+\helpref{wxObject::UnRef}{wxobjectunref}, \helpref{wxObject::m\_refData}{wxobjectmrefdata},\rtfsp
+\helpref{wxObject::SetRefData}{wxobjectsetrefdata}, \helpref{wxObject::GetRefData}{wxobjectgetrefdata},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\membersection{wxObject::SetRefData}\label{wxobjectsetrefdata}
+
+\func{void}{SetRefData}{\param{wxObjectRefData*}{ data}}
+
+Sets the {\bf m\_refData} pointer.
+
+\wxheading{See also}
+
+\helpref{wxObject::Ref}{wxobjectref}, \helpref{wxObject::UnRef}{wxobjectunref}, \helpref{wxObject::m\_refData}{wxobjectmrefdata},\rtfsp
+\helpref{wxObject::GetRefData}{wxobjectgetrefdata},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\membersection{wxObject::UnRef}\label{wxobjectunref}
+
+\func{void}{UnRef}{\void}
+
+Decrements the reference count in the associated data, and if it is zero, deletes the data.
+The {\bf m\_refData} member is set to NULL.
+
+\wxheading{See also}
+
+\helpref{wxObject::Ref}{wxobjectref}, \helpref{wxObject::m\_refData}{wxobjectmrefdata},\rtfsp
+\helpref{wxObject::SetRefData}{wxobjectsetrefdata}, \helpref{wxObject::GetRefData}{wxobjectgetrefdata},\rtfsp
+\helpref{wxObjectRefData}{wxobjectrefdata}
+
+\membersection{wxObject::operator new}\label{wxobjectnew}
+
+\func{void *}{new}{\param{size\_t }{size}, \param{const wxString\& }{filename = NULL}, \param{int}{ lineNum = 0}}
+
+The {\it new} operator is defined for debugging versions of the library only, when
+the identifier DEBUG is defined and is more than zero. It takes over memory allocation, allowing
+wxDebugContext operations.
+
+\membersection{wxObject::operator delete}\label{wxobjectdelete}
+
+\func{void}{delete}{\param{void }{buf}}
+
+The {\it delete} operator is defined for debugging versions of the library only, when
+the identifier DEBUG is defined and is more than zero. It takes over memory deallocation, allowing
+wxDebugContext operations.
+
+\section{\class{wxObjectRefData}}\label{wxobjectrefdata}
+
+This class is used to store reference-counted data. Derive classes from this to
+store your own data. When retrieving information from a {\bf wxObject}'s reference data,
+you will need to cast to your own derived class.
+
+\wxheading{Friends}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxObjectRefData::m\_count}
+
+\member{int}{m\_count}
+
+Reference count. When this goes to zero during a \helpref{wxObject::UnRef}{wxobjectunref}, an object
+can delete the {\bf wxObjectRefData} object.
+
+\membersection{wxObjectRefData::wxObjectRefData}\label{wxobjectrefdataconstr}
+
+\func{}{wxObjectRefData}{\void}
+
+Default constructor. Initialises the {\bf m\_count} member to 1.
+
+\membersection{wxObjectRefData::\destruct{wxObjectRefData}}
+
+\func{}{wxObjectRefData}{\void}
+
+Destructor.
+
+
--- /dev/null
+\section{\class{wxPageSetupData}}\label{wxpagesetupdata}
+
+This class holds a variety of information related to \helpref{wxPageSetupDialog}{wxpagesetupdialog}.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPageSetupDialog}{wxpagesetupdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPageSetupData::wxPageSetupData}
+
+\func{}{wxPageSetupData}{\void}
+
+Constructor.
+
+\membersection{wxPageSetupData::\destruct{wxPageSetupData}}
+
+\func{}{\destruct{wxPageSetupData}}{\void}
+
+Destructor.
+
+\membersection{wxPageSetupData::EnableHelp}\label{wxpagesetupdataenablehelp}
+
+\func{void}{EnableHelp}{\param{bool }{flag}}
+
+Enables or disables the `Help' button (Windows only).
+
+\membersection{wxPageSetupData::EnableMargins}\label{wxpagesetupdataenablemargins}
+
+\func{void}{EnableMargins}{\param{bool }{flag}}
+
+Enables or disables the margin controls (Windows only).
+
+\membersection{wxPageSetupData::EnableOrientation}\label{wxpagesetupdataenableorientation}
+
+\func{void}{EnableOrientation}{\param{bool }{flag}}
+
+Enables or disables the orientation control (Windows only).
+
+\membersection{wxPageSetupData::EnablePaper}\label{wxpagesetupdataenablepaper}
+
+\func{void}{EnablePaper}{\param{bool }{flag}}
+
+Enables or disables the paper size control (Windows only).
+
+\membersection{wxPageSetupData::EnablePrinter}\label{wxpagesetupdataenableprinter}
+
+\func{void}{EnablePrinter}{\param{bool }{flag}}
+
+Enables or disables the {\bf Printer} button, which invokes a printer setup dialog.
+
+\membersection{wxPageSetupData::GetPaperSize}\label{wxpagesetupdatagetpapersize}
+
+\func{wxPoint}{GetPaperSize}{\void}
+
+Returns the paper size in millimetres.
+
+\membersection{wxPageSetupData::GetMarginTopLeft}\label{wxpagesetupdatagetmargintopleft}
+
+\func{wxPoint}{GetMarginTopLeft}{\void}
+
+Returns the left (x) and top (y) margins.
+
+\membersection{wxPageSetupData::GetMarginBottomRight}\label{wxpagesetupdatagetmarginbottomright}
+
+\func{wxPoint}{GetMarginBottomRight}{\void}
+
+Returns the right (x) and bottom (y) margins.
+
+\membersection{wxPageSetupData::GetMinMarginTopLeft}\label{wxpagesetupdatagetminmargintopleft}
+
+\func{wxPoint}{GetMinMarginTopLeft}{\void}
+
+Returns the left (x) and top (y) minimum margins the user can enter (Windows only).
+
+\membersection{wxPageSetupData::GetMinMarginBottomRight}\label{wxpagesetupdatagetminmarginbottomright}
+
+\func{wxPoint}{GetMinMarginBottomRight}{\void}
+
+Returns the right (x) and bottom (y) minimum margins the user can enter (Windows only).
+
+\membersection{wxPageSetupData::GetOrientation}\label{wxpagesetupdatagetorientation}
+
+\func{int}{GetOrientation}{\void}
+
+Returns the orientation, which can be wxPORTRAIT or wxLANDSCAPE.
+
+\membersection{wxPageSetupData::GetDefaultMinMargins}\label{wxpagesetupdatagetdefaultminmargins}
+
+\func{bool}{GetDefaultMinMargins}{\void}
+
+Returns TRUE if the page setup dialog will take its minimum margin values from the currently
+selected printer properties. Windows only.
+
+\membersection{wxPageSetupData::GetEnableMargins}\label{wxpagesetupdatagetenablemargins}
+
+\func{bool}{GetEnableMargins}{\void}
+
+Returns TRUE if the margin controls are enabled (Windows only).
+
+\membersection{wxPageSetupData::GetEnableOrientation}\label{wxpagesetupdatagetenableorientation}
+
+\func{bool}{GetEnableOrientation}{\void}
+
+Returns TRUE if the orientation control is enabled (Windows only).
+
+\membersection{wxPageSetupData::GetEnablePaper}\label{wxpagesetupdatagetenablepaper}
+
+\func{bool}{GetEnablePaper}{\void}
+
+Returns TRUE if the paper size control is enabled (Windows only).
+
+\membersection{wxPageSetupData::GetEnablePrinter}\label{wxpagesetupdatagetenableprinter}
+
+\func{bool}{GetEnablePrinter}{\void}
+
+Returns TRUE if the printer setup button is enabled.
+
+\membersection{wxPageSetupData::GetEnableHelp}\label{wxpagesetupdatagetenablehelp}
+
+\func{bool}{GetEnableHelp}{\void}
+
+Returns TRUE if the printer setup button is enabled.
+
+\membersection{wxPageSetupData::GetDefaultInfo}\label{wxpagesetupdatagetdefaultinfo}
+
+\func{bool}{GetDefaultInfo}{\void}
+
+Returns TRUE if the dialog will simply return default printer information (such as orientation)
+instead of showing a dialog. Windows only.
+
+\membersection{wxPageSetupData::SetPaperSize}\label{wxpagesetupdatasetpapersize}
+
+\func{void}{SetPaperSize}{\param{const wxPoint\& }{size}}
+
+Sets the paper size in millimetres.
+
+\membersection{wxPageSetupData::SetMarginTopLeft}\label{wxpagesetupdatasetmargintopleft}
+
+\func{void}{GetMarginTopLeft}{\param{const wxPoint\& }{pt}}
+
+Sets the left (x) and top (y) margins.
+
+\membersection{wxPageSetupData::SetMarginBottomRight}\label{wxpagesetupdatasetmarginbottomright}
+
+\func{void}{SetMarginBottomRight}{\param{const wxPoint\& }{pt}}
+
+Sets the right (x) and bottom (y) margins.
+
+\membersection{wxPageSetupData::SetMinMarginTopLeft}\label{wxpagesetupdatasetminmargintopleft}
+
+\func{void}{SetMinMarginTopLeft}{\param{const wxPoint\& }{pt}}
+
+Sets the left (x) and top (y) minimum margins the user can enter (Windows only).
+
+\membersection{wxPageSetupData::SetMinMarginBottomRight}\label{wxpagesetupdatasetminmarginbottomright}
+
+\func{void}{SetMinMarginBottomRight}{\param{const wxPoint\& }{pt}}
+
+Sets the right (x) and bottom (y) minimum margins the user can enter (Windows only).
+
+\membersection{wxPageSetupData::SetOrientation}\label{wxpagesetupdatasetorientation}
+
+\func{void}{SetOrientation}{\param{int }{orientation}}
+
+Sets the orientation, which can be wxPORTRAIT or wxLANDSCAPE.
+
+\membersection{wxPageSetupData::SetDefaultMinMargins}\label{wxpagesetupdatasetdefaultminmargins}
+
+\func{void}{SetDefaultMinMargins}{\param{bool}{ flag}}
+
+Pass TRUE if the page setup dialog will take its minimum margin values from the currently
+selected printer properties. Windows only.
+
+\membersection{wxPageSetupData::SetDefaultInfo}\label{wxpagesetupdatasetdefaultinfo}
+
+\func{void}{SetDefaultInfo}{\param{bool}{ flag}}
+
+Pass TRUE if the dialog will simply return default printer information (such as orientation)
+instead of showing a dialog. Windows only.
+
+\section{\class{wxPageSetupDialog}}\label{wxpagesetupdialog}
+
+This class represents the page setup common dialog. The page setup dialog is standard from
+Windows 95 on, replacing the print setup dialog (which is retained in Windows and wxWindows
+for backward compatibility). On Windows 95 and NT 4.0 and above, the page setup dialog is
+native to the windowing system, otherwise it is emulated.
+
+The page setup dialog contains controls for paper size (A4, A5 etc.), orientation (landscape
+or portrait), and controls for setting left, top, right and bottom margin sizes in millimetres.
+The page setup dialog does not set any global information (the exception being orientation
+for PostScript printing) so you need to query the \helpref{wxPageSetupData}{wxpagesetupdata} object
+associated with the dialog.
+
+Note that the OK and Cancel buttons do not destroy the dialog; this must be done by the
+application.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPrintDialog}{wxprintdialog}, \helpref{wxPageSetupData}{wxpagesetupdata}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPageSetupDialog::wxPageSetupDialog}
+
+\func{}{wxPageSetupDialog}{\param{wxWindow* }{parent}, \param{wxPageSetupData* }{data = NULL}}
+
+Constructor. Pass a parent window, and optionally a pointer to a block of page setup
+data, which will be copied to the print dialog's internal data.
+
+\membersection{wxPageSetupDialog::\destruct{wxPageSetupDialog}}
+
+\func{}{\destruct{wxPageSetupDialog}}{\void}
+
+Destructor.
+
+\membersection{wxPageSetupDialog::GetPageSetupData}\label{wxpagesetupdialoggetpagesetupdata}
+
+\func{wxPageSetupData\&}{GetPageSetupData}{\void}
+
+Returns the \helpref{page setup data}{wxpagesetupdata} associated with the dialog.
+
+\membersection{wxPageSetupDialog::ShowModal}\label{wxpagesetupdialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxID\_CANCEL
+otherwise.
+
+
--- /dev/null
+\section{\class{wxPaintDC}}\label{wxpaintdc}
+
+A wxPaintDC must be constructed if an application wishes to paint on the
+client area of a window from within an {\bf OnPaint} event.
+This should normally be constructed as a temporary stack object; don't store
+a wxPaintDC object.
+
+To draw on a window from outside {\bf OnPaint}, construct a \helpref{wxClientDC}{wxclientdc} object.
+
+To draw on the whole window including decorations, construct a \helpref{wxWindowDC}{wxwindowdc} object
+(Windows only).
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{wxWindowDC}{wxwindowdc}, \helpref{wxScreenDC}{wxscreendc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPaintDC::wxPaintDC}
+
+\func{}{wxPaintDC}{\param{wxWindow*}{ window}}
+
+Constructor. Pass a pointer to the window on which you wish to paint.
+
+
+
--- /dev/null
+\section{\class{wxPaintEvent}}\label{wxpaintevent}
+
+A paint event is sent when a window's contents needs to be repainted.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a paint event, use this event handler macro to direct input to a member
+function that takes a wxPaintEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_PAINT(func)}}{Process a wxEVT\_PAINT event.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnPaint}{wxwindowonpaint}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPaintEvent::wxPaintEvent}
+
+\func{}{wxPaintEvent}{\param{int }{id = 0}}
+
+Constructor.
+
--- /dev/null
+\section{\class{wxPalette}}\label{wxpalette}
+
+A palette is a table that maps pixel values to RGB colours. It allows the colours
+of a low-depth bitmap, for example, to be mapped to the available colours in a display.
+
+TODO: topic overview for wxPalette.
+
+\wxheading{Derived from}
+
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDC::SetPalette}{wxdcsetpalette}, \helpref{wxBitmap}{wxbitmap}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPalette::wxPalette}\label{wxpaletteconstr}
+
+\func{}{wxPalette}{\void}
+
+Default constructor.
+
+\func{}{wxPalette}{\param{const wxPalette\&}{ palette}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\func{}{wxPalette}{\param{const wxPalette*}{ palette}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\func{}{wxPalette}{\param{const int}{ n}, \param{const unsigned char* }{red},\\
+ \param{const unsigned char* }{green}, \param{const unsigned char* }{blue}}
+
+Creates a palette from arrays of size {\it n}, one for each
+red, blue or green component.
+
+\wxheading{Parameters}
+
+\docparam{palette}{A pointer or reference to the palette to copy.}
+
+\docparam{n}{The number of indices in the palette.}
+
+\docparam{red}{An array of red values.}
+
+\docparam{green}{An array of green values.}
+
+\docparam{blue}{An array of blue values.}
+
+\wxheading{See also}
+
+\helpref{wxPalette::Create}{wxpalettecreate}
+
+\membersection{wxPalette::\destruct{wxPalette}}
+
+\func{}{\destruct{wxPalette}}{\void}
+
+Destructor.
+
+\membersection{wxPalette::Create}\label{wxpalettecreate}
+
+\func{bool}{Create}{\param{const int}{ n}, \param{const unsigned char* }{red},\rtfsp
+ \param{const unsigned char* }{green}, \param{const unsigned char* }{blue}}
+
+Creates a palette from arrays of size {\it n}, one for each
+red, blue or green component.
+
+\wxheading{Parameters}
+
+\docparam{n}{The number of indices in the palette.}
+
+\docparam{red}{An array of red values.}
+
+\docparam{green}{An array of green values.}
+
+\docparam{blue}{An array of blue values.}
+
+\wxheading{Return value}
+
+TRUE if the creation was successful, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxPalette::wxPalette}{wxpaletteconstr}
+
+\membersection{wxPalette::GetPixel}\label{wxpalettegetpixel}
+
+\constfunc{int}{GetPixel}{\param{const unsigned char }{red}, \param{const unsigned char }{green},\rtfsp
+ \param{const unsigned char }{blue}}
+
+Returns a pixel value (index into the palette) for the given RGB values.
+
+\wxheading{Parameters}
+
+\docparam{red}{Red value.}
+
+\docparam{green}{Green value.}
+
+\docparam{blue}{Blue value.}
+
+\wxheading{Return value}
+
+The nearest palette index.
+
+\wxheading{See also}
+
+\helpref{wxPalette::GetRGB}{wxpalettegetrgb}
+
+\membersection{wxPalette::GetRGB}\label{wxpalettegetrgb}
+
+\constfunc{bool}{GetPixel}{\param{const int}{ pixel}, \param{const unsigned char* }{red}, \param{const unsigned char* }{green},\rtfsp
+ \param{const unsigned char* }{blue}}
+
+Returns RGB values for a given palette index.
+
+\wxheading{Parameters}
+
+\docparam{pixel}{The palette index.}
+
+\docparam{red}{Receives the red value.}
+
+\docparam{green}{Receives the green value.}
+
+\docparam{blue}{Receives the blue value.}
+
+\wxheading{Return value}
+
+TRUE if the operation was successful.
+
+\wxheading{See also}
+
+\helpref{wxPalette::GetPixel}{wxpalettegetpixel}
+
+\membersection{wxPalette::Ok}\label{wxpaletteok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if palette data is present.
+
+\membersection{wxPalette::operator $=$}\label{wxpaletteassignment}
+
+\func{wxPalette\&}{operator $=$}{\param{const wxPalette\& }{palette}}
+
+Assignment operator, using reference counting. Returns a reference
+to `this'.
+
+\membersection{wxPalette::operator $==$}\label{wxpaletteequals}
+
+\func{bool}{operator $==$}{\param{const wxPalette\& }{palette}}
+
+Equality operator. Two palettes are equal if they contain pointers
+to the same underlying palette data. It does not compare each attribute,
+so two independently-created palettes using the same parameters will
+fail the test.
+
+\membersection{wxPalette::operator $!=$}\label{wxpalettenotequals}
+
+\func{bool}{operator $!=$}{\param{const wxPalette\& }{palette}}
+
+Inequality operator. Two palettes are not equal if they contain pointers
+to different underlying palette data. It does not compare each attribute.
+
+
--- /dev/null
+\section{\class{wxPanel}}\label{wxpanel}
+
+A panel is a window on which controls are placed. It is usually placed within a frame.
+It contains minimal extra functionality over and above its parent class wxWindow; its main
+purpose is to be similar in appearance and functionality to a dialog, but with the flexibility of
+having any window as a parent.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no specific styles for this window.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+By default, a panel has the same colouring as a dialog.
+
+A panel may be loaded from a wxWindows resource file (extension {\tt wxr}).
+
+\wxheading{See also}
+
+\helpref{wxDialog}{wxdialog}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPanel::wxPanel}\label{wxpanelconstr}
+
+\func{}{wxPanel}{\void}
+
+Default constructor.
+
+\func{}{wxPanel}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxTAB\_TRAVERSAL},\rtfsp
+\param{const wxString\& }{name = ``panel"}}
+
+Constructor.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The parent window.}
+
+\docparam{id}{An identifier for the panel. A value of -1 is taken to mean a default.}
+
+\docparam{pos}{The panel position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The panel size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxPanel}{wxpanel}.}
+
+\docparam{name}{Used to associate a name with the window,
+allowing the application user to set Motif resource values for
+individual dialog boxes.}
+
+\wxheading{See also}
+
+\helpref{wxPanel::Create}{wxpanelcreate}
+
+\membersection{wxPanel::\destruct{wxPanel}}
+
+\func{}{\destruct{wxPanel}}{\void}
+
+Destructor. Deletes any child windows before deleting the physical window.
+
+\membersection{wxPanel::Create}\label{wxpanelcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxTAB\_TRAVERSAL},\rtfsp
+\param{const wxString\& }{name = ``panel"}}
+
+Used for two-step panel construction. See \helpref{wxPanel::wxPanel}{wxpanelconstr}\rtfsp
+for details.
+
+\membersection{wxPanel::InitDialog}\label{wxpanelinitdialog}
+
+\func{void}{InitDialog}{\void}
+
+Sends an \helpref{wxWindow::OnInitDialog}{wxwindowoninitdialog} event, which
+in turn transfers data to the dialog via validators.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnInitDialog}{wxwindowoninitdialog}
+
+\membersection{wxPanel::OnSysColourChanged}\label{wxpanelonsyscolourchanged}
+
+\func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
+
+The default handler for wxEVT\_SYS\_COLOUR\_CHANGED.
+
+\wxheading{Parameters}
+
+\docparam{event}{The colour change event.}
+
+\wxheading{Remarks}
+
+Changes the panel's colour to conform to the current settings (Windows only).
+Add an event table entry for your panel class if you wish the behaviour
+to be different (such as keeping a user-defined
+background colour). If you do override this function, call \helpref{wxWindow::OnSysColourChanged}{wxwindowonsyscolourchanged} to
+propagate the notification to child windows and controls.
+
+\wxheading{See also}
+
+\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}
+
+
--- /dev/null
+\section{\class{wxPanelTabView}}\label{wxpaneltabview}
+
+The wxPanelTabView is responsible for input and output on a wxPanel.
+
+\wxheading{Derived from}
+
+\helpref{wxTabView}{wxtabview}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxTabView overview}{wxtabviewoverview}, \helpref{wxTabView}{wxtabview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPanelTabView::wxPanelTabView}\label{wxpaneltabviewconstr}
+
+\func{void}{wxPanelTabView}{\param{wxPanel *}{panel}, \param{long }{style = wxTAB\_STYLE\_DRAW\_BOX \pipe wxTAB\_STYLE\_COLOUR\_INTERIOR}}
+
+Constructor. {\it panel} should be a wxTabbedPanel or wxTabbedDialog: the type will be checked by the view at run time.
+
+{\it style} may be a bit list of the following:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTAB\_STYLE\_DRAW\_BOX}{Draw a box around the view area. Most commonly used for dialogs.}
+\twocolitem{wxTAB\_STYLE\_COLOUR\_INTERIOR}{Draw tab backgrounds in the specified colour. Omitting this style
+will ensure that the tab background matches the dialog background.}
+\end{twocollist}
+
+\membersection{wxPanelTabView::\destruct{wxPanelTabView}}
+
+\func{void}{\destruct{wxPanelTabView}}{\void}
+
+Destructor. This destructor deletes all the panels associated with the view.
+If you do not wish this to happen, call ClearWindows with argument FALSE before the
+view is likely to be destroyed. This will clear the list of windows, without deleting them.
+
+\membersection{wxPanelTabView::AddTabWindow}\label{wxpaneltabviewaddtabwindow}
+
+\func{void}{AddTabPanel}{\param{int}{ id}, \param{wxWindow *}{window}}
+
+Adds a window to the view. The window is associated with the tab identifier, and will be shown or hidden as the tab
+is selected or deselected.
+
+\membersection{wxPanelTabView::ClearWindows}
+
+\func{void}{ClearWindows}{\param{bool}{ deleteWindows = TRUE}}
+
+Removes the child windows from the view. If {\it deleteWindows} is TRUE, the windows will be deleted.
+
+\membersection{wxPanelTabView::GetCurrentWindow}
+
+\func{wxPanel *}{GetCurrentWindow}{\void}
+
+Returns the child window currently being displayed on the tabbed panel or dialog box.
+
+\membersection{wxPanelTabView::GetTabWindow}
+
+\func{wxWindow *}{GetTabWindow}{\param{int}{ id}}
+
+Returns the window associated with the tab identifier.
+
+\membersection{wxPanelTabView::ShowWindowForTab}
+
+\func{void}{ShowWindowForTab}{\param{int}{ id}}
+
+Shows the child window corresponding to the tab identifier, and hides the previously shown window.
+
+
--- /dev/null
+\section{\class{wxPathList}}\label{wxpathlist}
+
+The path list is a convenient way of storing a number of directories, and
+when presented with a filename without a directory, searching for an existing file
+in those directories. Storing the filename only in an application's files and
+using a locally-defined list of directories makes the application and its files more
+portable.
+
+Use the {\it wxFileNameFromPath} global function to extract the filename
+from the path.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxList}{wxlist}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPathList::wxPathList}
+
+\func{}{wxPathList}{\void}
+
+Constructor.
+
+\membersection{wxPathList::AddEnvList}
+
+\func{void}{AddEnvList}{\param{const wxString\& }{env\_variable}}
+
+Finds the value of the given environment variable, and adds all paths
+to the path list. Useful for finding files in the PATH variable, for
+example.
+
+\membersection{wxPathList::Add}
+
+\func{void}{Add}{\param{const wxString\& }{path}}
+
+Adds the given directory to the path list, but does not
+check if the path was already on the list (use wxPathList::Member)
+for this).
+
+\membersection{wxPathList::EnsureFileAccessible}
+
+\func{void}{EnsureFileAccessible}{\param{const wxString\& }{filename}}
+
+Given a full filename (with path), ensures that files in the same path
+can be accessed using the pathlist. It does this by stripping the
+filename and adding the path to the list if not already there.
+
+\membersection{wxPathList::FindAbsoluteValidPath}
+
+\func{wxString}{FindAbsoluteValidPath}{\param{const wxString\& }{file}}
+
+Searches for a full path for an existing file by appending {\it file} to
+successive members of the path list. If the file exists, a temporary
+pointer to the absolute path is returned.
+
+\membersection{wxPathList::FindValidPath}
+
+\func{wxString}{FindValidPath}{\param{const wxString\& }{file}}
+
+Searches for a full path for an existing file by appending {\it file} to
+successive members of the path list. If the file exists, a temporary
+pointer to the full path is returned. This path may be relative to the current
+working directory.
+
+\membersection{wxPathList::Member}
+
+\func{bool}{Member}{\param{const wxString\& }{file}}
+
+TRUE if the path is in the path list (ignoring case).
+
--- /dev/null
+\section{\class{wxPen}}\label{wxpen}
+
+A pen is a drawing tool for drawing outlines. It is used for drawing
+lines and painting the outline of rectangles, ellipses, etc. It has a
+colour, a width and a style.
+
+\wxheading{Remarks}
+
+On a monochrome display, wxWindows shows all non-white pens as black.
+
+Do not initialize objects on the stack before the program commences,
+since other required structures may not have been set up yet. Instead,
+define global pointers to objects and create them in {\it OnInit} or
+when required.
+
+An application may wish to dynamically create pens with different
+characteristics, and there is the consequent danger that a large number
+of duplicate pens will be created. Therefore an application may wish to
+get a pointer to a pen by using the global list of pens {\bf
+wxThePenList}, and calling the member function {\bf FindOrCreatePen}.
+See the entry for \helpref{wxPenList}{wxpenlist}.
+
+TODO: an overview for wxPen.
+
+\wxheading{See also}
+
+\helpref{wxPenList}{wxpenlist}, \helpref{wxDC}{wxdc}, \helpref{wxDC::SetPen}{wxdcsetpen}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPen::wxPen}\label{wxpenconstr}
+
+\func{}{wxPen}{\void}
+
+Default constructor. The pen will be uninitialised, and \helpref{wxPen::Ok}{wxpenok} will
+return FALSE.
+
+\func{}{wxPen}{\param{const wxColour\&}{ colour}, \param{const int}{ width}, \param{const int}{ style}}
+
+Constructs a pen from a colour object, pen width and style.
+
+\func{}{wxPen}{\param{const wxString\& }{colourName}, \param{const int}{ width}, \param{const int}{ style}}
+
+Constructs a pen from a colour name, pen width and style.
+
+\func{}{wxPen}{\param{const wxBitmap\&}{ stipple}, \param{const int}{ width}}
+
+Constructs a stippled pen from a stipple bitmap and a width.
+
+\func{}{wxPen}{\param{const wxPen\&}{ pen}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\func{}{wxPen}{\param{const wxPen*}{ pen}}
+
+Copy constructor. This uses reference counting so is a cheap operation.
+
+\wxheading{Parameters}
+
+\docparam{colour}{A colour object.}
+
+\docparam{colourName}{A colour name.}
+
+\docparam{width}{Pen width. Under Windows, the pen width cannot be greater than 1 if
+the style is wxDOT, wxLONG\_DASH, wxSHORT\_DASH, wxDOT\_DASH, or wxUSER\_DASH.}
+
+\docparam{stipple}{A stipple bitmap.}
+
+\docparam{pen}{A pointer or reference to a pen to copy.}
+
+\docparam{width}{Pen width. Under Windows, the pen width cannot be greater than 1 if
+the style is wxDOT, wxLONG\_DASH, wxSHORT\_DASH, wxDOT\_DASH, or wxUSER\_DASH.}
+
+\docparam{style}{The style may be one of the following:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxSOLID}}{Solid style.}
+\twocolitem{{\bf wxTRANSPARENT}}{No pen is used.}
+\twocolitem{{\bf wxDOT}}{Dotted style.}
+\twocolitem{{\bf wxLONG\_DASH}}{Long dashed style.}
+\twocolitem{{\bf wxSHORT\_DASH}}{Short dashed style.}
+\twocolitem{{\bf wxDOT\_DASH}}{Dot and dash style.}
+\twocolitem{{\bf wxSTIPPLE}}{Use the stipple bitmap.}
+\twocolitem{{\bf wxUSER\_DASH}}{Use the user dashes: see \helpref{wxPen::SetDashes}{wxpensetdashes}.}
+\twocolitem{{\bf wxBDIAGONAL\_HATCH}}{Backward diagonal hatch.}
+\twocolitem{{\bf wxCROSSDIAG\_HATCH}}{Cross-diagonal hatch.}
+\twocolitem{{\bf wxFDIAGONAL\_HATCH}}{Forward diagonal hatch.}
+\twocolitem{{\bf wxCROSS\_HATCH}}{Cross hatch.}
+\twocolitem{{\bf wxHORIZONTAL\_HATCH}}{Horizontal hatch.}
+\twocolitem{{\bf wxVERTICAL\_HATCH}}{Vertical hatch.}
+\end{twocollist}}
+
+\wxheading{Remarks}
+
+If the named colour form is used, an appropriate {\bf wxColour} structure
+is found in the colour database.
+
+{\it style} may be one of wxSOLID, wxDOT, wxLONG\_DASH, wxSHORT\_DASH and
+wxDOT\_DASH.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetStyle}{wxpensetstyle}, \helpref{wxPen::SetColour}{wxpensetcolour},\rtfsp
+\helpref{wxPen::SetWidth}{wxpensetwidth}, \helpref{wxPen::SetStipple}{wxpensetstipple}
+
+\membersection{wxPen::\destruct{wxPen}}
+
+\func{}{\destruct{wxPen}}{\void}
+
+Destructor.
+
+\wxheading{Remarks}
+
+The destructor may not delete the underlying pen object of the native windowing
+system, since wxBrush uses a reference counting system for efficiency.
+
+Although all remaining pens are deleted when the application exits,
+the application should try to clean up all pens itself. This is because
+wxWindows cannot know if a pointer to the pen object is stored in an
+application data structure, and there is a risk of double deletion.
+
+\membersection{wxPen::GetCap}\label{wxpengetcap}
+
+\constfunc{int}{GetCap}{\void}
+
+Returns the pen cap style, which may be one of {\bf wxCAP\_ROUND}, {\bf wxCAP\_PROJECTING} and
+\rtfsp{\bf wxCAP\_BUTT}. The default is {\bf wxCAP\_ROUND}.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetCap}{wxpensetcap}
+
+\membersection{wxPen::GetColour}\label{wxpengetcolour}
+
+\constfunc{wxColour\&}{GetColour}{\void}
+
+Returns a reference to the pen colour.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetColour}{wxpensetcolour}
+
+\membersection{wxPen::GetDashes}\label{wxpengetdashes}
+
+\constfunc{int}{GetDashes}{\param{wxDash**}{ dashes}}
+
+Gets an array of dashes (defined as char in X, DWORD under Windows).
+{\it dashes} is a pointer to the internal array. Do not deallocate or store this pointer.
+The function returns the number of dashes associated with this pen.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetDashes}{wxpensetdashes}
+
+\membersection{wxPen::GetJoin}\label{wxpengetjoin}
+
+\constfunc{int}{GetJoin}{\void}
+
+Returns the pen join style, which may be one of {\bf wxJOIN\_BEVEL}, {\bf wxJOIN\_ROUND} and
+\rtfsp{\bf wxJOIN\_MITER}. The default is {\bf wxJOIN\_ROUND}.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetJoin}{wxpensetjoin}
+
+\membersection{wxPen::GetStipple}\label{wxpengetstipple}
+
+\constfunc{wxBitmap* }{GetStipple}{\void}
+
+Gets a pointer to the stipple bitmap.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetStipple}{wxpensetstipple}
+
+\membersection{wxPen::GetStyle}\label{wxpengetstyle}
+
+\constfunc{int}{GetStyle}{\void}
+
+Returns the pen style.
+
+\wxheading{See also}
+
+\helpref{wxPen::wxPen}{wxpenconstr}, \helpref{wxPen::SetStyle}{wxpensetstyle}
+
+\membersection{wxPen::GetWidth}\label{wxpengetwidth}
+
+\constfunc{int}{GetWidth}{\void}
+
+Returns the pen width.
+
+\wxheading{See also}
+
+\helpref{wxPen::SetWidth}{wxpensetwidth}
+
+\membersection{wxPen::Ok}\label{wxpenok}
+
+\constfunc{bool}{Ok}{\void}
+
+Returns TRUE if the pen is initialised.
+
+\membersection{wxPen::SetCap}\label{wxpensetcap}
+
+\func{void}{SetCap}{\param{int}{ capStyle}}
+
+Sets the pen cap style, which may be one of {\bf wxCAP\_ROUND}, {\bf wxCAP\_PROJECTING} and
+\rtfsp{\bf wxCAP\_BUTT}. The default is {\bf wxCAP\_ROUND}.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetCap}{wxpengetcap}
+
+\membersection{wxPen::SetColour}\label{wxpensetcolour}
+
+\func{void}{SetColour}{\param{wxColour\&}{ colour}}
+
+\func{void}{SetColour}{\param{const wxString\& }{colourName}}
+
+\func{void}{SetColour}{\param{const int}{ red}, \param{const int}{ green}, \param{const int}{ blue}}
+
+The pen's colour is changed to the given colour.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetColour}{wxpengetcolour}
+
+\membersection{wxPen::SetDashes}\label{wxpensetdashes}
+
+\func{void}{SetDashes}{\param{int }{n}, \param{wxDash*}{ dashes}}
+
+Associates an array of pointers to dashes (defined as char in X, DWORD under Windows)
+with the pen. The array is not deallocated by wxPen, but neither must it be
+deallocated by the calling application until the pen is deleted or this
+function is called with a NULL array.
+
+TODO: describe in detail.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetDashes}{wxpengetdashes}
+
+\membersection{wxPen::SetJoin}\label{wxpensetjoin}
+
+\func{void}{SetJoin}{\param{int}{join\_style}}
+
+Sets the pen join style, which may be one of {\bf wxJOIN\_BEVEL}, {\bf wxJOIN\_ROUND} and
+\rtfsp{\bf wxJOIN\_MITER}. The default is {\bf wxJOIN\_ROUND}.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetJoin}{wxpengetjoin}
+
+\membersection{wxPen::SetStipple}\label{wxpensetstipple}
+
+\func{void}{SetStipple}{\param{wxBitmap* }{stipple}}
+
+Sets the bitmap for stippling.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetStipple}{wxpengetstipple}
+
+\membersection{wxPen::SetStyle}\label{wxpensetstyle}
+
+\func{void}{SetStyle}{\param{int}{ style}}
+
+Set the pen style.
+
+\wxheading{See also}
+
+\helpref{wxPen::wxPen}{wxpenconstr}
+
+\membersection{wxPen::SetWidth}\label{wxpensetwidth}
+
+\func{void}{SetWidth}{\param{const int}{ width}}
+
+Sets the pen width.
+
+\wxheading{See also}
+
+\helpref{wxPen::GetWidth}{wxpengetwidth}
+
+\membersection{wxPen::operator $=$}\label{wxpenassignment}
+
+\func{wxPen\&}{operator $=$}{\param{const wxPen\& }{pen}}
+
+Assignment operator, using reference counting. Returns a reference
+to `this'.
+
+\membersection{wxPen::operator $==$}\label{wxpenequals}
+
+\func{bool}{operator $==$}{\param{const wxPen\& }{pen}}
+
+Equality operator. Two pens are equal if they contain pointers
+to the same underlying pen data. It does not compare each attribute,
+so two independently-created pens using the same parameters will
+fail the test.
+
+\membersection{wxPen::operator $!=$}\label{wxpennotequals}
+
+\func{bool}{operator $!=$}{\param{const wxPen\& }{pen}}
+
+Inequality operator. Two pens are not equal if they contain pointers
+to different underlying pen data. It does not compare each attribute.
+
+\section{\class{wxPenList}}\label{wxpenlist}
+
+There is only one instance of this class: {\bf wxThePenList}. Use
+this object to search for a previously created pen of the desired
+type and create it if not already found. In some windowing systems,
+the pen may be a scarce resource, so it can pay to reuse old
+resources if possible. When an application finishes, all pens will
+be deleted and their resources freed, eliminating the possibility of
+`memory leaks'. However, it is best not to rely on this automatic
+cleanup because it can lead to double deletion in some circumstances.
+
+There are two mechanisms in recent versions of wxWindows which make the
+pen list less useful than it once was. Under Windows, scarce resources
+are cleaned up internally if they are not being used. Also, a referencing
+counting mechanism applied to all GDI objects means that some sharing
+of underlying resources is possible. You don't have to keep track of pointers,
+working out when it is safe delete a pen, because the referencing counting does
+it for you. For example, you can set a pen in a device context, and then
+immediately delete the pen you passed, because the pen is `copied'.
+
+So you may find it easier to ignore the pen list, and instead create
+and copy pens as you see fit. If your Windows resource meter suggests
+your application is using too many resources, you can resort to using
+GDI lists to share objects explicitly.
+
+The only compelling use for the pen list is for wxWindows to keep
+track of pens in order to clean them up on exit. It is also kept for
+backward compatibility with earlier versions of wxWindows.
+
+\wxheading{See also}
+
+\helpref{wxPen}{wxpen}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPenList::wxPenList}
+
+\func{void}{wxPenList}{\void}
+
+Constructor. The application should not construct its own pen list:
+use the object pointer {\bf wxThePenList}.
+
+\membersection{wxPenList::AddPen}\label{wxpenlistaddpen}
+
+\func{void}{AddPen}{\param{wxPen*}{ pen}}
+
+Used internally by wxWindows to add a pen to the list.
+
+\membersection{wxPenList::FindOrCreatePen}\label{wxpenlistfindorcreatepen}
+
+\func{wxPen*}{FindOrCreatePen}{\param{const wxColour\& }{colour}, \param{const int}{ width}, \param{const int}{ style}}
+
+Finds a pen with the specified attributes and returns it, else creates a new pen, adds it
+to the pen list, and returns it.
+
+\func{wxPen*}{FindOrCreatePen}{\param{const wxString\& }{colourName}, \param{const int}{ width}, \param{const int}{ style}}
+
+Finds a pen with the specified attributes and returns it, else creates a new pen, adds it
+to the pen list, and returns it.
+
+\wxheading{Parameters}
+
+\docparam{colour}{Colour object.}
+
+\docparam{colourName}{Colour name, which should be in the colour database.}
+
+\docparam{style}{Pen style. See \helpref{wxPen::wxPen}{wxpenconstr} for a list of styles.}
+
+\membersection{wxPenList::RemovePen}\label{wxpenlistremovepen}
+
+\func{void}{RemovePen}{\param{wxPen*}{ pen}}
+
+Used by wxWindows to remove a pen from the list.
+
+
--- /dev/null
+\section{\class{wxPoint}}\label{wxpoint}
+
+A {\bf wxPoint} is a useful data structure for graphics operations.
+It simply contains integer {\it x} and {\it y} members.
+
+See also \helpref{wxRealPoint}{wxrealpoint} for a floating point version.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxRealPoint}{wxrealpoint}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPoint::wxPoint}
+
+\func{}{wxPoint}{\void}
+
+\func{}{wxPoint}{\param{int}{ x}, \param{int}{ y}}
+
+Create a point.
+
+\membersection{wxPoint::x}
+
+\member{int}{x}
+
+x member.
+
+\membersection{wxPoint::y}
+
+\member{int}{ y}
+
+y member.
+
--- /dev/null
+\section{\class{wxPostScriptDC}}\label{wxpostscriptdc}
+
+This defines the wxWindows Encapsulated PostScript device context,
+which can write PostScript files on any platform. See \helpref{wxDC}{wxdc} for
+descriptions of the member functions.
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}\\
+\helpref{wxObject}{wxobject}
+
+\membersection{wxPostScriptDC::wxPostScriptDC}
+
+\func{}{wxPostScriptDC}{\param{const wxString\& }{output}, \param{bool }{interactive = TRUE},\\
+ \param{wxWindow *}{parent}}
+
+Constructor. {\it output} is an optional file for printing to, and if
+\rtfsp{\it interactive} is TRUE a dialog box will be displayed for adjusting
+various parameters. {\it parent} is the parent of the printer dialog box.
+
+Use the {\it Ok} member to test whether the constructor was successful
+in creating a useable device context.
+
+See \helpref{Printer settings}{printersettings} for functions to set and
+get PostScript printing settings.
+
+\membersection{wxPostScriptDC::GetStream}
+
+\func{ostream *}{GetStream}{\void}
+
+Returns the stream currently being used to write PostScript output. Use this
+to insert any PostScript code that is outside the scope of wxPostScriptDC.
+
+
--- /dev/null
+
+\section{\class{wxPreviewCanvas}}\label{wxpreviewcanvas}
+
+A preview canvas is the default canvas used by the print preview
+system to display the preview.
+
+\wxheading{Derived from}
+
+\helpref{wxScrolledWindow}{wxscrolledwindow}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxevthandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPreviewFrame}{wxpreviewframe}, \helpref{wxPreviewControlBar}{wxpreviewcontrolbar},\rtfsp
+\helpref{wxPrintPreview}{wxprintpreview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPreviewCanvas::wxPreviewCanvas}
+
+\func{}{wxPreviewCanvas}{\param{wxPrintPreview* }{preview}, \param{wxWindow* }{parent},
+ \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},
+ \param{long}{ style = 0}, \param{const wxString\& }{name = ``canvas"}}
+
+Constructor.
+
+\membersection{wxPreviewCanvas::\destruct{wxPreviewCanvas}}
+
+\func{}{\destruct{wxPreviewCanvas}}{\void}
+
+Destructor.
+
+\membersection{wxPreviewCanvas::OnPaint}\label{wxpreviewcanvasonpaint}
+
+\func{void}{OnPaint}{\param{wxPaintEvent\& }{event}}
+
+Calls \helpref{wxPrintPreview::PaintPage}{wxprintpreviewpaintpage} to refresh the canvas.
+
+\section{\class{wxPreviewControlBar}}\label{wxpreviewcontrolbar}
+
+This is the default implementation of the preview control bar, a panel
+with buttons and a zoom control. You can derive a new class from this and
+override some or all member functions to change the behaviour and appearance;
+or you can leave it as it is.
+
+\wxheading{Derived from}
+
+\helpref{wxPanel}{wxpanel}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPreviewFrame}{wxpreviewframe}, \helpref{wxPreviewCanvas}{wxpreviewcanvas},\rtfsp
+\helpref{wxPrintPreview}{wxprintpreview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPreviewControlBar::wxPreviewControlbar}
+
+\func{}{wxPreviewControlBar}{\param{wxPrintPreview* }{preview}, \param{long}{ buttons}, \param{wxWindow* }{parent},
+ \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},
+ \param{long}{ style = 0}, \param{const wxString\& }{name = ``panel"}}
+
+Constructor.
+
+The buttons parameter may be a combination of the following, using the bitwise `or' operator.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxPREVIEW\_PRINT}{Create a print button.}
+\twocolitem{wxPREVIEW\_NEXT}{Create a next page button.}
+\twocolitem{wxPREVIEW\_PREVIOUS}{Create a previous page button.}
+\twocolitem{wxPREVIEW\_ZOOM}{Create a zoom control.}
+\twocolitem{wxPREVIEW\_DEFAULT}{Equivalent to a combination of wxPREVIEW\_PREVIOUS, wxPREVIEW\_NEXT and
+wxPREVIEW\_ZOOM.}
+\end{twocollist}
+
+\membersection{wxPreviewControlBar::\destruct{wxPreviewControlBar}}
+
+\func{}{\destruct{wxPreviewControlBar}}{\void}
+
+Destructor.
+
+\membersection{wxPreviewControlBar::CreateButtons}
+
+\func{void}{CreateButtons}{\void}
+
+Creates buttons, according to value of the button style flags.
+
+\membersection{wxPreviewControlBar::GetPrintPreview}
+
+\func{wxPrintPreview *}{GetPrintPreview}{\void}
+
+Gets the print preview object associated with the control bar.
+
+\membersection{wxPreviewControlBar::GetZoomControl}
+
+\func{int}{GetZoomControl}{\void}
+
+Gets the current zoom setting in percent.
+
+\membersection{wxPreviewControlBar::SetZoomControl}
+
+\func{void}{SetZoomControl}{\param{int }{percent}}
+
+Sets the zoom control.
+
+\section{\class{wxPreviewFrame}}\label{wxpreviewframe}
+
+This class provides the default method of managing the print preview interface.
+Member functions may be overridden to replace functionality, or the
+class may be used without derivation.
+
+\wxheading{Derived from}
+
+\helpref{wxFrame}{wxframe}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPreviewCanvas}{wxpreviewcanvas}, \helpref{wxPreviewControlBar}{wxpreviewcontrolbar},\rtfsp
+\helpref{wxPrintPreview}{wxprintpreview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPreviewFrame::wxPreviewFrame}
+
+\func{}{wxPreviewFrame}{\param{wxPrintPreview* }{preview}, \param{wxFrame* }{parent}, \param{const wxString\& }{title},
+ \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& size }{size = wxDefaultSize},
+ \param{long}{ style = wxDEFAULT\_FRAME\_STYLE}, \param{const wxString\& }{name = ``frame"}}
+
+Constructor. Pass a print preview object plus other normal frame arguments.
+
+\membersection{wxPreviewFrame::\destruct{wxPreviewFrame}}
+
+\func{}{\destruct{wxPreviewFrame}}{\void}
+
+Destructor.
+
+\membersection{wxPreviewFrame::CreateControlBar}
+
+\func{void}{CreateControlBar}{\void}
+
+Creates a wxPreviewControlBar. Override this function to allow
+a user-defined preview control bar object to be created.
+
+\membersection{wxPreviewFrame::CreateCanvas}
+
+\func{void}{CreateCanvas}{\void}
+
+Creates a wxPreviewCanvas. Override this function to allow
+a user-defined preview canvas object to be created.
+
+\membersection{wxPreviewFrame::Initialize}
+
+\func{void}{Initialize}{\void}
+
+Creates the preview canvas and control bar, and calls
+wxWindow::MakeModal(TRUE) to disable other top-level windows
+in the application.
+
+This function should be called by the application prior to
+showing the frame.
+
+\membersection{wxPreviewFrame::OnClose}
+
+\func{bool}{OnClose}{\void}
+
+Enables the other frames in the application, and deletes the print preview
+object, implicitly deleting any printout objects associated with the print
+preview object.
+
--- /dev/null
+\section{\class{wxPrintData}}\label{wxprintdata}
+
+This class holds a variety of information related to print dialogs.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPrintDialog}{wxprintdialog}, \helpref{wxPrintDialog Overview}{wxprintdialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrintData::wxPrintData}
+
+\func{}{wxPrintData}{\void}
+
+Constructor.
+
+\membersection{wxPrintData::\destruct{wxPrintData}}
+
+\func{}{\destruct{wxPrintData}}{\void}
+
+Destructor.
+
+\membersection{wxPrintData::EnableHelp}\label{wxprintdataenablehelp}
+
+\func{void}{EnableHelp}{\param{bool }{flag}}
+
+Enables or disables the `Help' button.
+
+\membersection{wxPrintData::EnablePageNumbers}\label{wxprintdataenablepagenumbers}
+
+\func{void}{EnablePageNumbers}{\param{bool }{flag}}
+
+Enables or disables the `Page numbers' controls.
+
+\membersection{wxPrintData::EnablePrintToFile}\label{wxprintdataenableprinttofile}
+
+\func{void}{EnablePrintToFile}{\param{bool }{flag}}
+
+Enables or disables the `Print to file' checkbox.
+
+\membersection{wxPrintData::EnableSelection}\label{wxprintdataenableselection}
+
+\func{void}{EnableSelection}{\param{bool }{flag}}
+
+Enables or disables the `Selection' radio button.
+
+\membersection{wxPrintData::GetAllPages}\label{wxprintdatagetallpages}
+
+\func{bool}{GetAllPages}{\void}
+
+Returns TRUE if the user requested that all pages be printed.
+
+\membersection{wxPrintData::GetCollate}\label{wxprintdatagetcollate}
+
+\func{bool}{GetCollate}{\void}
+
+Returns TRUE if the user requested that the document(s) be collated.
+
+\membersection{wxPrintData::GetFromPage}\label{wxprintdatagetfrompage}
+
+\func{int}{GetFromPage}{\void}
+
+Returns the {\it from} page number, as entered by the user.
+
+\membersection{wxPrintData::GetMaxPage}\label{wxprintdatagetmaxpage}
+
+\func{int}{GetMaxPage}{\void}
+
+Returns the {\it maximum} page number.
+
+\membersection{wxPrintData::GetMinPage}\label{wxprintdatagetminpage}
+
+\func{int}{GetMinPage}{\void}
+
+Returns the {\it minimum} page number.
+
+\membersection{wxPrintData::GetNoCopies}\label{wxprintdatagetnocopies}
+
+\func{int}{GetNoCopies}{\void}
+
+Returns the number of copies requested by the user.
+
+\membersection{wxPrintData::GetOrientation}\label{wxprintdatagetorientation}
+
+\func{int}{GetOrientation}{\void}
+
+Gets the orientation. This can be wxLANDSCAPE or wxPORTRAIT.
+
+\membersection{wxPrintData::GetToPage}\label{wxprintdatagettopage}
+
+\func{int}{GetToPage}{\void}
+
+Returns the {\it to} page number, as entered by the user.
+
+\membersection{wxPrintData::SetCollate}\label{wxprintdatasetcollate}
+
+\func{void}{SetCollate}{\param{bool }{flag}}
+
+Sets the 'Collate' checkbox to TRUE or FALSE.
+
+\membersection{wxPrintData::SetFromPage}\label{wxprintdatasetfrompage}
+
+\func{void}{SetFromPage}{\param{int }{page}}
+
+Sets the {\it from} page number.
+
+\membersection{wxPrintData::SetMaxPage}\label{wxprintdatasetmaxpage}
+
+\func{void}{SetMaxPage}{\param{int }{page}}
+
+Sets the {\it maximum} page number.
+
+\membersection{wxPrintData::SetMinPage}\label{wxprintdatasetminpage}
+
+\func{void}{SetMinPage}{\param{int }{page}}
+
+Sets the {\it minimum} page number.
+
+\membersection{wxPrintData::SetOrientation}\label{wxprintdatasetorientation}
+
+\func{void}{SetOrientation}{\param{int }{orientation}}
+
+Sets the orientation. This can be wxLANDSCAPE or wxPORTRAIT.
+
+\membersection{wxPrintData::SetNoCopies}\label{wxprintdatasetnocopies}
+
+\func{void}{SetNoCopies}{\param{int }{n}}
+
+Sets the default number of copies to be printed out.
+
+\membersection{wxPrintData::SetPrintToFile}\label{wxprintdatasetprinttofile}
+
+\func{void}{SetPrintToFile}{\param{bool }{flag}}
+
+Sets the 'Print to file' checkbox to TRUE or FALSE.
+
+\membersection{wxPrintData::SetSetupDialog}\label{wxprintdatasetsetupdialog}
+
+\func{void}{SetSetupDialog}{\param{bool }{flag}}
+
+Determines whether the dialog to be shown will be the Print dialog
+(pass FALSE) or Print Setup dialog (pass TRUE).
+
+Note that the setup dialog is obsolete from
+Windows 95, though retained for backward compatibility.
+
+\membersection{wxPrintData::SetToPage}\label{wxprintdatasettopage}
+
+\func{void}{SetToPage}{\param{int }{page}}
+
+Sets the {\it to} page number.
+
+\section{\class{wxPrintDialog}}\label{wxprintdialog}
+
+This class represents the print and print setup common dialogs.
+You may obtain a \helpref{wxPrinterDC}{wxprinterdc} device context from
+a successfully dismissed print dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPrintDialog Overview}{wxprintdialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrintDialog::wxPrintDialog}
+
+\func{}{wxPrintDialog}{\param{wxWindow* }{parent}, \param{wxPrintData* }{data = NULL}}
+
+Constructor. Pass a parent window, and optionally a pointer to a block of print
+data, which will be copied to the print dialog's print data.
+
+\wxheading{See also}
+
+\helpref{wxPrintData}{wxprintdata}
+
+\membersection{wxPrintDialog::\destruct{wxPrintDialog}}
+
+\func{}{\destruct{wxPrintDialog}}{\void}
+
+Destructor. If wxPrintDialog::GetPrintDC has {\it not} been called,
+the device context obtained by the dialog (if any) will be deleted.
+
+\membersection{wxPrintDialog::GetPrintData}\label{wxprintdialoggetprintdata}
+
+\func{wxPrintData\&}{GetPrintData}{\void}
+
+Returns the \helpref{print data}{wxprintdata} associated with the print dialog.
+
+\membersection{wxPrintDialog::GetPrintDC}\label{wxprintdialoggetprintdc}
+
+\func{wxDC* }{GetPrintDC}{\void}
+
+Returns the device context created by the print dialog, if any.
+When this function has been called, the ownership of the device context
+is transferred to the application, so it must then be deleted
+explicitly.
+
+\membersection{wxPrintDialog::ShowModal}\label{wxprintdialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxID\_CANCEL
+otherwise. After this function is called, a device context may
+be retrievable using \helpref{wxPrintDialog::GetPrintDC}{wxprintdialoggetprintdc}.
+
+\section{\class{wxPrinter}}\label{wxprinter}
+
+This class represents the Windows or PostScript printer, and is the vehicle through
+which printing may be launched by an application. Printing can also
+be achieved through using of lower functions and classes, but
+this and associated classes provide a more convenient and general
+method of printing.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Printing framework overview}{printingoverview}, \helpref{wxPrinterDC}{wxprinterdc}, \helpref{wxPrintDialog}{wxprintdialog},\rtfsp
+\helpref{wxPrintout}{wxprintout}, \helpref{wxPrintPreview}{wxprintpreview}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrinter::wxPrinter}
+
+\func{}{wxPrinter}{\param{wxPrintData* }{data = NULL}}
+
+Constructor. Pass an optional pointer to a block of print
+data, which will be copied to the printer object's print data.
+
+\wxheading{See also}
+
+\helpref{wxPrintData}{wxprintdata}
+
+\membersection{wxPrinter::\destruct{wxPrinter}}
+
+\func{}{\destruct{wxPrinter}}{\void}
+
+Destructor.
+
+\membersection{wxPrinter::Abort}\label{wxprinterabort}
+
+\func{bool}{Abort}{\void}
+
+Returns TRUE if the user has aborted the print job.
+
+\membersection{wxPrinter::CreateAbortWindow}\label{wxprintercreateabortwindow}
+
+\func{void}{CreateAbortWindow}{\param{wxWindow* }{parent}, \param{wxPrintout* }{printout}}
+
+Creates the default printing abort window, with a cancel button.
+
+\membersection{wxPrinter::GetPrintData}\label{wxprintergetprintdata}
+
+\func{wxPrintData\&}{GetPrintData}{\void}
+
+Returns the \helpref{print data}{wxprintdata} associated with the printer object.
+
+\membersection{wxPrinter::Print}\label{wxprinterprint}
+
+\func{bool}{Print}{\param{wxWindow *}{parent}, \param{wxPrintout *}{printout}, \param{bool }{prompt=TRUE}}
+
+Starts the printing process. Provide a parent window, a user-defined wxPrintout object which controls
+the printing of a document, and whether the print dialog should be invoked first.
+
+Print could return FALSE if there was a problem initializing the printer device context
+(current printer not set, for example).
+
+\membersection{wxPrinter::PrintDialog}\label{wxprinterprintdialog}
+
+\func{bool}{PrintDialog}{\param{wxWindow *}{parent}}
+
+Invokes the print dialog.
+
+\membersection{wxPrinter::ReportError}\label{wxprinterreporterror}
+
+\func{void}{ReportError}{\param{wxWindow *}{parent}, \param{wxPrintout *}{printout}, \param{const wxString\& }{message}}
+
+Default error-reporting function.
+
+\membersection{wxPrinter::Setup}\label{wxprintersetup}
+
+\func{void}{Setup}{\param{wxWindow *}{parent}}
+
+Invokes the print setup dialog. Note that the setup dialog is obsolete from
+Windows 95, though retained for backward compatibility.
+
+\section{\class{wxPrinterDC}}\label{wxprinterdc}
+
+A printer device context is specific to Windows, and allows access to
+any printer with a Windows driver. See \helpref{wxDC}{wxdc} for further information
+on device contexts, and \helpref{wxDC::GetSize}{wxdcgetsize} for advice on
+achieving the correct scaling for the page.
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}\\
+\helpref{wxObject}{wxdc}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc}, \helpref{Printing framework overview}{printingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrinterDC::wxPrinterDC}
+
+\func{}{wxPrinterDC}{\param{const wxString\& }{driver}, \param{const wxString\& }{device}, \param{const wxString\& }{output},
+ \param{const bool }{interactive = TRUE}, \param{const int }{orientation = wxPORTRAIT}}
+
+Constructor. With empty strings for the first three arguments, the default printer dialog is
+displayed. {\it device} indicates the type of printer and {\it output}
+is an optional file for printing to. The {\it driver} parameter is
+currently unused. Use the {\it Ok} member to test whether the
+constructor was successful in creating a useable device context.
+
+\section{\class{wxPrintout}}\label{wxprintout}
+
+This class encapsulates the functionality of printing out an
+application document. A new class must be derived and members
+overridden to respond to calls such as OnPrintPage and HasPage.
+Instances of this class are passed to wxPrinter::Print or a
+wxPrintPreview object to initiate printing or previewing.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Printing framework overview}{printingoverview}, \helpref{wxPrinterDC}{wxprinterdc}, \helpref{wxPrintDialog}{wxprintdialog},\rtfsp
+\helpref{wxPrinter}{wxprinter}, \helpref{wxPrintPreview}{wxprintpreview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrintout::wxPrintout}
+
+\func{}{wxPrintout}{\param{const wxString\& }{title = "Printout"}}
+
+Constructor. Pass an optional title argument (currently unused).
+
+\membersection{wxPrintout::\destruct{wxPrintout}}
+
+\func{}{\destruct{wxPrintout}}{\void}
+
+Destructor.
+
+\membersection{wxPrintout::GetDC}\label{wxprintoutgetdc}
+
+\func{wxDC *}{GetDC}{\void}
+
+Returns the device context associated with the printout (given to the printout at start of
+printing or previewing). This will be a wxPrinterDC if printing under Windows,
+a wxPostScriptDC if printing on other platforms, and a wxMemoryDC if previewing.
+
+\membersection{wxPrintout::GetPageInfo}\label{wxprintoutgetpageinfo}
+
+\func{void}{GetPageInfo}{\param{int *}{minPage}, \param{int *}{maxPage}, \param{int *}{pageFrom}, \param{int *}{pageTo}}
+
+Called by the framework to obtain information from the application about minimum and maximum page values that
+the user can select, and the required page range to be printed. By default this
+returns 1, 32000 for the page minimum and maximum values, and 1, 1 for the required page range.
+
+If {\it minPage} is zero, the page number controls in the print dialog will be disabled.
+
+\membersection{wxPrintout::GetPageSizeMM}\label{wxprintoutgetpagesizemm}
+
+\func{void}{GetPageSizeMM}{\param{int *}{w}, \param{int *}{h}}
+
+Returns the size of the printer page in millimetres.
+
+\membersection{wxPrintout::GetPageSizePixels}\label{wxprintoutgetpagesizepixels}
+
+\func{void}{GetPageSizePixels}{\param{int *}{w}, \param{int *}{h}}
+
+Returns the size of the printer page in pixels. These may not be the
+same as the values returned from \helpref{wxDC::GetSize}{wxdcgetsize} if
+the printout is being used for previewing, since in this case, a
+memory device context is used, using a bitmap size reflecting the current
+preview zoom. The application must take this discrepancy into account if
+previewing is to be supported.
+
+\membersection{wxPrintout::GetPPIPrinter}\label{wxprintoutgetppiprinter}
+
+\func{void}{GetPPIPrinter}{\param{int *}{w}, \param{int *}{h}}
+
+Returns the number of pixels per logical inch of the printer device context.
+Dividing the printer PPI by the screen PPI can give a suitable scaling
+factor for drawing text onto the printer. Remember to multiply
+this by a scaling factor to take the preview DC size into account.
+
+\membersection{wxPrintout::GetPPIScreen}\label{wxprintoutgetppiscreen}
+
+\func{void}{GetPPIScreen}{\param{int *}{w}, \param{int *}{h}}
+
+Returns the number of pixels per logical inch of the screen device context.
+Dividing the printer PPI by the screen PPI can give a suitable scaling
+factor for drawing text onto the printer. Remember to multiply
+this by a scaling factor to take the preview DC size into account.
+
+\membersection{wxPrintout::HasPage}\label{wxprintouthaspage}
+
+\func{bool}{HasPage}{\param{int}{ pageNum}}
+
+Should be overriden to return TRUE if the document has this page, or FALSE
+if not. Returning FALSE signifies the end of the document. By default,
+HasPage behaves as if the document has only one page.
+
+\membersection{wxPrintout::IsPreview}\label{wxprintoutispreview}
+
+\func{bool}{IsPreview}{\void}
+
+Returns TRUE if the printout is currently being used for previewing.
+
+\membersection{wxPrintout::OnBeginDocument}\label{wxprintoutonbegindocument}
+
+\func{bool}{OnBeginDocument}{\param{int}{ startPage}, \param{int}{ endPage}}
+
+Called by the framework at the start of document printing. Return FALSE from
+this function cancels the print job. OnBeginDocument is called once for every
+copy printed.
+
+The base wxPrintout::OnBeginDocument {\it must} be called (and the return value
+checked) from within the overriden function, since it calls wxDC::StartDoc.
+
+\membersection{wxPrintout::OnEndDocument}\label{wxprintoutonenddocument}
+
+\func{void}{OnEndDocument}{\void}
+
+Called by the framework at the end of document printing. OnEndDocument
+is called once for every copy printed.
+
+The base wxPrintout::OnEndDocument {\it must} be called
+from within the overriden function, since it calls wxDC::EndDoc.
+
+\membersection{wxPrintout::OnBeginPrinting}\label{wxprintoutonbeginprinting}
+
+\func{void}{OnBeginPrinting}{\void}
+
+Called by the framework at the start of printing. OnBeginPrinting is called once for every
+print job (regardless of how many copies are being printed).
+
+\membersection{wxPrintout::OnEndPrinting}\label{wxprintoutonendprinting}
+
+\func{void}{OnEndPrinting}{\void}
+
+Called by the framework at the end of printing. OnEndPrinting
+is called once for every print job (regardless of how many copies are being printed).
+
+\membersection{wxPrintout::OnPreparePrinting}\label{wxprintoutonprepareprinting}
+
+\func{void}{OnPreparePrinting}{\void}
+
+Called once by the framework before any other demands are made of the
+wxPrintout object. This gives the object an opportunity to calculate the
+number of pages in the document, for example.
+
+\membersection{wxPrintout::OnPrintPage}\label{wxprintoutonprintpage}
+
+\func{bool}{OnPrintPage}{\param{int}{ pageNum}}
+
+Called by the framework when a page should be printed. Returning FALSE cancels
+the print job. The application can use wxPrintout::GetDC to obtain a device
+context to draw on.
+
+\section{\class{wxPrintPreview}}\label{wxprintpreview}
+
+\overview{Printing framework overview}{printingoverview}
+
+Objects of this class manage the print preview process. The object is passed
+a wxPrintout object, and the wxPrintPreview object itself is passed to
+a wxPreviewFrame object. Previewing is started by initializing and showing
+the preview frame. Unlike wxPrinter::Print, flow of control returns to the application
+immediately after the frame is shown.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{Printing framework overview}{printingoverview}, \helpref{wxPrinterDC}{wxprinterdc}, \helpref{wxPrintDialog}{wxprintdialog},\rtfsp
+\helpref{wxPrintout}{wxprintout}, \helpref{wxPrinter}{wxprinter},\rtfsp
+\helpref{wxPreviewCanvas}{wxpreviewcanvas}, \helpref{wxPreviewControlBar}{wxpreviewcontrolbar},\rtfsp
+\helpref{wxPreviewFrame}{wxpreviewframe}.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxPrintPreview::wxPrintPreview}
+
+\func{}{wxPrintPreview}{\param{wxPrintout* }{printout}, \param{wxPrintout* }{printoutForPrinting},
+\param{wxPrintData* }{data=NULL}}
+
+Constructor. Pass a printout object, an optional printout object to be
+used for actual printing, and the address of an optional
+block of printer data, which will be copied to the print preview object's
+print data.
+
+If {\it printoutForPrinting} is non-NULL, a {\bf Print...} button will be placed on the
+preview frame so that the user can print directly from the preview interface.
+
+Do not explicitly delete the printout objects once this destructor has been
+called, since they will be deleted in the wxPrintPreview constructor.
+The same does not apply to the {\it data} argument.
+
+Test the Ok member to check whether the wxPrintPreview object was created correctly.
+Ok could return FALSE if there was a problem initializing the printer device context
+(current printer not set, for example).
+
+\membersection{wxPrintPreview::\destruct{wxPrintPreview}}
+
+\func{}{\destruct{wxPrinter}}{\void}
+
+Destructor. Deletes both print preview objects, so do not destroy these objects
+in your application.
+
+\membersection{wxPrintPreview::DrawBlankPage}\label{wxprintpreviewdrawblankpage}
+
+\func{bool}{DrawBlankPage}{\param{wxWindow* }{window}}
+
+Draws a representation of the blank page into the preview window. Used
+internally.
+
+\membersection{wxPrintPreview::GetCanvas}\label{wxprintpreviewgetcanvas}
+
+\func{wxWindow* }{GetCanvas}{\void}
+
+Gets the preview window used for displaying the print preview image.
+
+\membersection{wxPrintPreview::GetCurrentPage}\label{wxprintpreviewgetcurrentpage}
+
+\func{int}{GetCurrentPage}{\void}
+
+Gets the page currently being previewed.
+
+\membersection{wxPrintPreview::GetFrame}\label{wxprintpreviewgetframe}
+
+\func{wxFrame *}{GetFrame}{\void}
+
+Gets the frame used for displaying the print preview canvas
+and control bar.
+
+\membersection{wxPrintPreview::GetMaxPage}\label{wxprintpreviewgetmaxpage}
+
+\func{int}{GetMaxPage}{\void}
+
+Returns the maximum page number.
+
+\membersection{wxPrintPreview::GetMinPage}\label{wxprintpreviewgetminpage}
+
+\func{int}{GetMinPage}{\void}
+
+Returns the minimum page number.
+
+\membersection{wxPrintPreview::GetPrintData}\label{wxprintpreviewgetprintdata}
+
+\func{wxPrintData\&}{GetPrintData}{\void}
+
+Returns a reference to the internal print data.
+
+\membersection{wxPrintPreview::GetPrintout}\label{wxprintpreviewgetprintout}
+
+\func{wxPrintout *}{GetPrintout}{\void}
+
+Gets the preview printout object associated with the wxPrintPreview object.
+
+\membersection{wxPrintPreview::GetPrintoutForPrinting}\label{wxprintpreviewgetprintoutforprinting}
+
+\func{wxPrintout *}{GetPrintoutForPrinting}{\void}
+
+Gets the printout object to be used for printing from within the preview interface,
+or NULL if none exists.
+
+\membersection{wxPrintPreview::Ok}\label{wxprintpreviewok}
+
+\func{bool}{Ok}{\void}
+
+Returns TRUE if the wxPrintPreview is valid, FALSE otherwise. It could return FALSE if there was a
+problem initializing the printer device context (current printer not set, for example).
+
+\membersection{wxPrintPreview::PaintPage}\label{wxprintpreviewpaintpage}
+
+\func{bool}{PaintPage}{\param{wxWindow* }{window}}
+
+This refreshes the preview window with the preview image.
+It must be called from the preview window's OnPaint member.
+
+The implementation simply blits the preview bitmap onto
+the canvas, creating a new preview bitmap if none exists.
+
+\membersection{wxPrintPreview::Print}\label{wxprintpreviewprint}
+
+\func{bool}{Print}{\param{bool }{prompt}}
+
+Invokes the print process using the second wxPrintout object
+supplied in the wxPrintPreview constructor.
+Will normally be called by the {\bf Print...} panel item on the
+preview frame's control bar.
+
+\membersection{wxPrintPreview::RenderPage}\label{wxprintpreviewrenderpage}
+
+\func{bool}{RenderPage}{\param{int }{pageNum}}
+
+Renders a page into a wxMemoryDC. Used internally by wxPrintPreview.
+
+\membersection{wxPrintPreview::SetCanvas}\label{wxprintpreviewsetcanvas}
+
+\func{void}{SetCanvas}{\param{wxWindow* }{window}}
+
+Sets the window to be used for displaying the print preview image.
+
+\membersection{wxPrintPreview::SetCurrentPage}\label{wxprintpreviewsetcurrentpage}
+
+\func{void}{SetCurrentPage}{\param{int}{ pageNum}}
+
+Sets the current page to be previewed.
+
+\membersection{wxPrintPreview::SetFrame}\label{wxprintpreviewsetframe}
+
+\func{void}{SetFrame}{\param{wxFrame *}{frame}}
+
+Sets the frame to be used for displaying the print preview canvas
+and control bar.
+
+\membersection{wxPrintPreview::SetPrintout}\label{wxprintpreviewsetprintout}
+
+\func{void}{SetPrintout}{\param{wxPrintout *}{printout}}
+
+Associates a printout object with the wxPrintPreview object.
+
+\membersection{wxPrintPreview::SetZoom}\label{wxprintpreviewsetzoom}
+
+\func{void}{SetZoom}{\param{int}{ percent}}
+
+Sets the percentage preview zoom, and refreshes the preview canvas
+accordingly.
+
+
--- /dev/null
+%
+% %%%%%%% %%%%% %%%%%% %%%%% % %
+% % % % % % % % % %
+% % % % % % % % % %
+% %%%%%%% %%%%% %%%%%% % % %
+% % % % % % % % %
+% % % % % % % % %
+% % %%%%%% %%%%%% %%%%% % %
+%
+% By Jean Orloff
+% Comments & suggestions by e-mail: ORLOFF@surya11.cern.ch
+% No modification of this file allowed if not e-sent to me.
+%
+% A simple way to measure the size of encapsulated postscript figures
+% from inside TeX, and to use it for automatically formatting texts
+% with inserted figures. Works both under Plain TeX-based macros
+% (Phyzzx, Harvmac, Psizzl, ...) and LaTeX environment.
+% Provides exactly the same result on any PostScript printer provided
+% the single instruction \psfor... is changed to fit the needs of the
+% particular dvi->ps translator used.
+% History:
+% 1.31: adds \psforDVIALW(?)
+% 1.30: adds \splitfile & \joinfiles for multi-file management
+% 1.24: fix error handling & add \psonlyboxes
+% 1.23: adds \putsp@ce for OzTeX fix
+% 1.22: makes \drawingBox \global for use in Phyzzx
+% 1.21: accepts %%BoundingBox: (atend)
+% 1.20: tries to add \psfordvitps for the TeXPS package.
+% 1.10: adds \psforoztex, error handling...
+%2345678 1 2345678 2 2345678 3 2345678 4 2345678 5 2345678 6 2345678 7 23456789
+%
+\def\temp{1.31}
+\let\tempp=\relax
+\expandafter\ifx\csname psboxversion\endcsname\relax
+ \message{version: \temp}
+\else
+ \ifdim\temp cm>\psboxversion cm
+ \message{version: \temp}
+ \else
+ \message{psbox(\psboxversion) is already loaded: I won't load
+ psbox(\temp)!}
+ \let\temp=\psboxversion
+ \let\tempp=\endinput
+ \fi
+\fi
+\tempp
+\let\psboxversion=\temp
+\catcode`\@=11
+% Every macro likes a little privacy...
+%
+% Some common defs
+%
+\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution
+\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex
+\def\executeinspecs#1{%
+\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}}
+%
+%Trying to tame the variety of \special commands for Postscript: the
+% universal internal command \PSspeci@l##1##2 takes ##1 to be the
+% filename and ##2 to be the integer scale factor*1000 (as for usual
+% TeX \scale commands)
+%
+\def\psfortextures{% For TeXtures on the Macintosh
+%-----------------
+\def\PSspeci@l##1##2{%
+\special{illustration ##1\space scaled ##2}%
+}}
+%
+\def\psfordvitops{% For the DVItoPS converter on IBM mainframes
+%----------------
+\def\PSspeci@l##1##2{%
+\special{dvitops: import ##1\space \the\drawingwd \the\drawinght}%
+}}
+%
+\def\psfordvips{% For DVIPS converter on VAX, UNIX and PC's
+%--------------
+\def\PSspeci@l##1##2{%
+% \special{/@scaleunit 1000 def}% never read dox without trying!
+\d@my=0.1bp \d@mx=\drawingwd \divide\d@mx by\d@my%
+\special{PSfile=##1\space llx=\psllx\space lly=\pslly\space%
+urx=\psurx\space ury=\psury\space rwi=\number\d@mx}%
+}}
+%
+\def\psforoztex{% For the OzTeX shareware on the Macintosh
+%--------------
+\def\PSspeci@l##1##2{%
+\special{##1 \space
+ ##2 1000 div dup scale
+ \putsp@ce{\number-\psllx} \putsp@ce{\number-\pslly} translate
+}%
+}}
+\def\putsp@ce#1{#1 }
+%
+\def\psfordvitps{% From the UNIX TeXPS package, vers.>3.12
+%---------------
+% Convert a dimension into the number \psn@sp (in scaled points)
+\def\psdimt@n@sp##1{\d@mx=##1\relax\edef\psn@sp{\number\d@mx}}
+\def\PSspeci@l##1##2{%
+% psfig.psr contains the def of "startTexFig": if you can locate it
+% and include the correct pathname, it should work
+\special{dvitps: Include0 "psfig.psr"}% contains def of "startTexFig"
+\psdimt@n@sp{\drawingwd}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\drawinght}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psllx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\pslly bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psurx bp}
+\special{dvitps: Literal "\psn@sp\space"}
+\psdimt@n@sp{\psury bp}
+\special{dvitps: Literal "\psn@sp\space startTexFig\space"}
+\special{dvitps: Include1 "##1"}
+\special{dvitps: Literal "endTexFig\space"}
+}}
+\def\psforDVIALW{% Try for dvialw, a UNIX public domain
+%---------------
+\def\PSspeci@l##1##2{
+\special{language "PS"
+literal "##2 1000 div dup scale"
+include "##1"}}}
+\def\psonlyboxes{% Draft-like behaviour if none of the others works
+%---------------
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss
+ \hbox to\drawingwd{\at(0cm;0cm){\hbox{(##1)}}\hss}
+ }}}
+}%
+}
+%
+\def\psloc@lerr#1{%
+\let\savedPSspeci@l=\PSspeci@l%
+\def\PSspeci@l##1##2{%
+\at(0cm;0cm){\boxit{\vbox to\drawinght
+ {\vss
+ \hbox to\drawingwd{\at(0cm;0cm){\hbox{(##1) #1}}\hss}
+ }}}
+\let\PSspeci@l=\savedPSspeci@l% restore normal output for other figs!
+}%
+}
+%
+%\def\psfor... add your own!
+%
+% \ReadPSize{PSfilename} reads the dimensions of a PostScript drawing
+% and stores it in \drawinght(wd)
+\newread\pst@mpin
+\newdimen\drawinght\newdimen\drawingwd
+\newdimen\psxoffset\newdimen\psyoffset
+\newbox\drawingBox
+\newif\ifNotB@undingBox
+\newhelp\PShelp{Proceed: you'll have a 5cm square blank box instead of
+your graphics (Jean Orloff).}
+\def\@mpty{}
+\def\s@tsize#1 #2 #3 #4\@ndsize{
+ \def\psllx{#1}\def\pslly{#2}%
+ \def\psurx{#3}\def\psury{#4}% needed by a crazyness of dvips!
+ \ifx\psurx\@mpty\NotB@undingBoxtrue% this is not a valid one!
+ \else
+ \drawinght=#4bp\advance\drawinght by-#2bp
+ \drawingwd=#3bp\advance\drawingwd by-#1bp
+% !Units related by crazy factors as bp/pt=72.27/72 should be BANNED!
+ \fi
+ }
+\def\sc@nline#1:#2\@ndline{\edef\p@rameter{#1}\edef\v@lue{#2}}
+\def\g@bblefirstblank#1#2:{\ifx#1 \else#1\fi#2}
+\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex
+\def\execute#1{#1}% Seems stupid, but cs are identified BEFORE execution
+{\catcode`\%=12
+\xdef\B@undingBox{%%BoundingBox}
+} %% is not a true comment in PostScript, even if % is!
+\def\ReadPSize#1{
+ \edef\PSfilename{#1}
+ \openin\pst@mpin=#1\relax
+ \ifeof\pst@mpin \errhelp=\PShelp
+ \errmessage{I haven't found your postscript file (\PSfilename)}
+ \psloc@lerr{was not found}
+ \s@tsize 0 0 142 142\@ndsize
+ \closein\pst@mpin
+ \else
+ \immediate\write\psbj@inaux{#1,}
+ \loop
+ \executeinspecs{\catcode`\ =10\global\read\pst@mpin to\n@xtline}
+ \ifeof\pst@mpin
+ \errhelp=\PShelp
+ \errmessage{(\PSfilename) is not an Encapsulated PostScript File:
+ I could not find any \B@undingBox: line.}
+ \edef\v@lue{0 0 142 142:}
+ \psloc@lerr{is not an EPSFile}
+ \NotB@undingBoxfalse
+ \else
+ \expandafter\sc@nline\n@xtline:\@ndline
+ \ifx\p@rameter\B@undingBox\NotB@undingBoxfalse
+ \edef\t@mp{%
+ \expandafter\g@bblefirstblank\v@lue\space\space\space}
+ \expandafter\s@tsize\t@mp\@ndsize
+ \else\NotB@undingBoxtrue
+ \fi
+ \fi
+ \ifNotB@undingBox\repeat
+ \closein\pst@mpin
+ \fi
+\message{#1}
+}
+%
+% \psboxto(xdim;ydim){psfilename}: you specify the dimensions and
+% TeX uniformly scales to fit the largest one. If xdim=0pt, the
+% scale is fully determined by ydim and vice versa.
+% Notice: psboxes are a real vboxes; couldn't take hbox otherwise all
+% indentation and all cr's would be interpreted as spaces (hugh!).
+%
+\newcount\xscale \newcount\yscale \newdimen\pscm\pscm=1cm
+\newdimen\d@mx \newdimen\d@my
+\let\ps@nnotation=\relax
+\def\psboxto(#1;#2)#3{\vbox{
+ \ReadPSize{#3}
+ \divide\drawingwd by 1000
+ \divide\drawinght by 1000
+ \d@mx=#1
+ \ifdim\d@mx=0pt\xscale=1000
+ \else \xscale=\d@mx \divide \xscale by \drawingwd\fi
+ \d@my=#2
+ \ifdim\d@my=0pt\yscale=1000
+ \else \yscale=\d@my \divide \yscale by \drawinght\fi
+ \ifnum\yscale=1000
+ \else\ifnum\xscale=1000\xscale=\yscale
+ \else\ifnum\yscale<\xscale\xscale=\yscale\fi
+ \fi
+ \fi
+ \divide \psxoffset by 1000\multiply\psxoffset by \xscale
+ \divide \psyoffset by 1000\multiply\psyoffset by \xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \multiply\drawingwd by\xscale \multiply\drawinght by\xscale
+ \ifdim\d@mx=0pt\d@mx=\drawingwd\fi
+ \ifdim\d@my=0pt\d@my=\drawinght\fi
+ \message{scaled \the\xscale}
+ \hbox to\d@mx{\hss\vbox to\d@my{\vss
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}
+ \vss}\hss\ps@nnotation}
+ \global\ht\drawingBox=\the\drawinght
+ \global\wd\drawingBox=\the\drawingwd
+ \baselineskip=0pt
+ \copy\drawingBox
+ \vss}\hss}
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt% These are local to one figure
+ \global\pscm=1cm
+ \global\drawingwd=\drawingwd
+ \global\drawinght=\drawinght
+}}
+%
+% \psboxscaled{scalefactor*1000}{PSfilename} allows to bypass the
+% rounding errors of TeX integer divisions for situations where the
+% TeX box should fit the original BoundingBox with a precision better
+% than 1/1000.
+%
+\def\psboxscaled#1#2{\vbox{
+ \ReadPSize{#2}
+ \xscale=#1
+ \message{scaled \the\xscale}
+ \divide\drawingwd by 1000\multiply\drawingwd by\xscale
+ \divide\drawinght by 1000\multiply\drawinght by\xscale
+ \divide \psxoffset by 1000\multiply\psxoffset by \xscale
+ \divide \psyoffset by 1000\multiply\psyoffset by \xscale
+ \global\divide\pscm by 1000
+ \global\multiply\pscm by\xscale
+ \global\setbox\drawingBox=\hbox to 0pt{\kern\psxoffset\vbox to 0pt{
+ \kern-\psyoffset
+ \PSspeci@l{\PSfilename}{\the\xscale}
+ \vss}\hss\ps@nnotation}
+ \global\ht\drawingBox=\the\drawinght
+ \global\wd\drawingBox=\the\drawingwd
+ \baselineskip=0pt
+ \copy\drawingBox
+ \global\psxoffset=0pt
+ \global\psyoffset=0pt% These are local to one figure
+ \global\pscm=1cm
+ \global\drawingwd=\drawingwd
+ \global\drawinght=\drawinght
+}}
+%
+% \psbox{PSfilename} makes a TeX box having the minimal size to
+% enclose the picture
+\def\psbox#1{\psboxscaled{1000}{#1}}
+%
+%
+% \joinfiles file1, file2, ...n \into joinedfilename .
+% makes one file out of many
+% \splitfile joinedfilename
+% the opposite
+%
+%\def\execute#1{#1}% NOT stupid: cs in #1 are then identified BEFORE execution
+%\def\psm@keother#1{\catcode`#112\relax}% borrowed from latex
+%\def\executeinspecs#1{%
+%\execute{\begingroup\let\do\psm@keother\dospecials\catcode`\^^M=9#1\endgroup}}
+%\newread\pst@mpin
+\newif\ifn@teof\n@teoftrue
+\newif\ifc@ntrolline
+\newif\ifmatch
+\newread\j@insplitin
+\newwrite\j@insplitout
+\newwrite\psbj@inaux
+\immediate\openout\psbj@inaux=psbjoin.aux
+\immediate\write\psbj@inaux{\string\joinfiles}
+\immediate\write\psbj@inaux{\jobname,}
+%
+% We redefine input to keep track of the various files inputted
+%
+\immediate\let\oldinput=\input
+\def\input#1 {
+ \immediate\write\psbj@inaux{#1,}
+ \oldinput #1 }
+\def\empty{}
+\def\setmatchif#1\contains#2{
+ \def\match##1#2##2\endmatch{
+ \def\tmp{##2}
+ \ifx\empty\tmp
+ \matchfalse
+ \else
+ \matchtrue
+ \fi}
+ \match#1#2\endmatch}
+\def\warnopenout#1#2{
+ \setmatchif{TrashMe,psbjoin.aux,psbjoin.all}\contains{#2}
+ \ifmatch
+ \else
+ \immediate\openin\pst@mpin=#2
+ \ifeof\pst@mpin
+ \else
+ \errhelp{If the content of this file is so precious to you, abort (ie
+press x or e) and rename it before retrying.}
+ \errmessage{I'm just about to replace your file named #2}
+ \fi
+ \immediate\closein\pst@mpin
+ \fi
+ \message{#2}
+ \immediate\openout#1=#2}
+% No comments allowed below: % will have an unusual catcode
+{
+\catcode`\%=12
+\gdef\splitfile#1 {
+ \immediate\openin\j@insplitin=#1
+ \message{Splitting file #1 into:}
+ \warnopenout\j@insplitout{TrashMe}
+ \loop
+ \ifeof
+ \j@insplitin\immediate\closein\j@insplitin\n@teoffalse
+ \else
+ \n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\spl@tinline\expandafter
+ \ch@ckbeginnewfile\spl@tinline%Beginning-Of-File-Named:%\endcheck}
+ \ifc@ntrolline
+ \else
+ \toks0=\expandafter{\spl@tinline}
+ \immediate\write\j@insplitout{\the\toks0}
+ \fi
+ \fi
+ \ifn@teof\repeat
+ \immediate\closeout\j@insplitout}
+\gdef\ch@ckbeginnewfile#1%Beginning-Of-File-Named:#2%#3\endcheck{
+ \def\t@mp{#1}
+ \ifx\empty\t@mp
+ \def\t@mp{#3}
+ \ifx\empty\t@mp
+ \global\c@ntrollinefalse
+ \else
+ \immediate\closeout\j@insplitout
+ \warnopenout\j@insplitout{#2}
+ \global\c@ntrollinetrue
+ \fi
+ \else
+ \global\c@ntrollinefalse
+ \fi}
+\gdef\joinfiles#1\into#2 {
+ \message{Joining following files into}
+ \warnopenout\j@insplitout{#2}
+ \message{:}
+ {
+ \edef\w@##1{\immediate\write\j@insplitout{##1}}
+ \w@{% This text was produced with psbox's \string\joinfiles.}
+ \w@{% To decompose and tex it:}
+ \w@{%-save this with a filename CONTAINING ONLY LETTERS, and no extensions}
+ \w@{% (say, JOINTFIL), in some uncrowded directory;}
+ \w@{%-make sure you can \string\input\space psbox.tex (version>=1.3);}
+ \w@{%-tex JOINTFIL using Plain, or LaTeX, or whatever is needed by}
+ \w@{% the first part in the joining (after splitting JOINTFIL into}
+ \w@{% it's constituents, TeX will try to process it as it stands).}
+ \w@{\string\input\space psbox.tex}
+ \w@{\string\splitfile{\string\jobname}}
+ }
+ \tre@tfilelist#1, \endtre@t
+ \immediate\closeout\j@insplitout}
+\gdef\tre@tfilelist#1, #2\endtre@t{
+ \def\t@mp{#1}
+ \ifx\empty\t@mp
+ \else
+ \llj@in{#1}
+ \tre@tfilelist#2, \endtre@t
+ \fi}
+\gdef\llj@in#1{
+ \immediate\openin\j@insplitin=#1
+ \ifeof\j@insplitin
+ \errmessage{I couldn't find file #1.}
+ \else
+ \message{#1}
+ \toks0={%Beginning-Of-File-Named:#1}
+ \immediate\write\j@insplitout{\the\toks0}
+ \executeinspecs{\global\read\j@insplitin to\oldj@ininline}
+ \loop
+ \ifeof\j@insplitin\immediate\closein\j@insplitin\n@teoffalse
+ \else\n@teoftrue
+ \executeinspecs{\global\read\j@insplitin to\j@ininline}
+ \toks0=\expandafter{\oldj@ininline}
+ \let\oldj@ininline=\j@ininline
+ \immediate\write\j@insplitout{\the\toks0}
+ \fi
+ \ifn@teof
+ \repeat
+ \immediate\closein\j@insplitin
+ \fi}
+}
+% To be put at the end of a file, for making an tar-like file containing
+% everything it used.
+\def\autojoin{
+ \immediate\write\psbj@inaux{\string\into\space psbjoin.all}
+ \immediate\closeout\psbj@inaux
+ \input psbjoin.aux
+}
+%
+% Annotations & Captions etc...
+%
+%
+% \centinsert{anybox} is just a centered \midinsert, but is included as
+% people barely use the original inserts from TeX.
+%
+\def\centinsert#1{\midinsert\line{\hss#1\hss}\endinsert}
+\def\psannotate#1#2{\def\ps@nnotation{#2\global\let\ps@nnotation=\relax}#1}
+\def\pscaption#1#2{\vbox{
+ \setbox\drawingBox=#1
+ \copy\drawingBox
+ \vskip\baselineskip
+ \vbox{\hsize=\wd\drawingBox\setbox0=\hbox{#2}
+ \ifdim\wd0>\hsize
+ \noindent\unhbox0\tolerance=5000
+ \else\centerline{\box0}
+ \fi
+}}}
+% for compatibility with older versions
+\def\psfig#1#2#3{\pscaption{\psannotate{#1}{#2}}{#3}}
+\def\psfigurebox#1#2#3{\pscaption{\psannotate{\psbox{#1}}{#2}}{#3}}
+%
+% \at(#1;#2)#3 puts #3 at #1-higher and #2-right of the current
+% position without moving it (to be used in annotations).
+\def\at(#1;#2)#3{\setbox0=\hbox{#3}\ht0=0pt\dp0=0pt
+ \rlap{\kern#1\vbox to0pt{\kern-#2\box0\vss}}}
+%
+% \gridfill(ht;wd) makes a 1cm*1cm grid of ht by wd whose lower-left
+% corner is the current point
+\newdimen\gridht \newdimen\gridwd
+\def\gridfill(#1;#2){
+ \setbox0=\hbox to 1\pscm
+ {\vrule height1\pscm width.4pt\leaders\hrule\hfill}
+ \gridht=#1
+ \divide\gridht by \ht0
+ \multiply\gridht by \ht0
+ \gridwd=#2
+ \divide\gridwd by \wd0
+ \multiply\gridwd by \wd0
+ \advance \gridwd by \wd0
+ \vbox to \gridht{\leaders\hbox to\gridwd{\leaders\box0\hfill}\vfill}}
+%
+% Useful to measure where to put annotations
+\def\fillinggrid{\at(0cm;0cm){\vbox{
+ \gridfill(\drawinght;\drawingwd)}}}
+%
+% \textleftof\anybox: Sample text\endtext
+% inserts "Sample text" on the left of \anybox ie \vbox, \psbox.
+% \textrightof is the symmetric (not documented, too uggly)
+% Welcome any suggestion about clean wraparound macros from
+% TeXhackers reading this
+%
+\def\textleftof#1:{
+ \setbox1=#1
+ \setbox0=\vbox\bgroup
+ \advance\hsize by -\wd1 \advance\hsize by -2em}
+\def\textrightof#1:{
+ \setbox0=#1
+ \setbox1=\vbox\bgroup
+ \advance\hsize by -\wd0 \advance\hsize by -2em}
+\def\endtext{
+ \egroup
+ \hbox to \hsize{\valign{\vfil##\vfil\cr%
+\box0\cr%
+\noalign{\hss}\box1\cr}}}
+%
+% \frameit{\thick}{\skip}{\anybox}
+% draws with thickness \thick a box around \anybox, leaving \skip of
+% blank around it. eg \frameit{0.5pt}{1pt}{\hbox{hello}}
+% \boxit{\anybox} is a shortcut.
+\def\frameit#1#2#3{\hbox{\vrule width#1\vbox{
+ \hrule height#1\vskip#2\hbox{\hskip#2\vbox{#3}\hskip#2}%
+ \vskip#2\hrule height#1}\vrule width#1}}
+\def\boxit#1{\frameit{0.4pt}{0pt}{#1}}
+%
+%
+\catcode`\@=12 % cs containing @ are unreachable
+%
+% CUSTOMIZE YOUR DEFAULT DRIVER:
+% Uncomment the line corresponding to your TeX system:
+%\psfortextures% For TeXtures on the Macintosh
+%\psforoztex % For OzTeX shareware on the Macintosh
+%\psfordvitops % For the DVItoPS converter for TeX on IBM mainframes
+ \psfordvips % For DVIPS converter on VAX and UNIX
+%\psfordvitps % For dvitps from TeXPS package under UNIX
+%\psforDVIALW % For DVIALW, UNIX public domain
+%\psonlyboxes % Blank Boxes (when all else fails).
--- /dev/null
+\section{\class{wxQueryCol}}\label{wxquerycol}
+
+Every ODBC data column is represented by an instance of this class.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{wxQueryCol overview}{wxquerycoloverview}, \overview{wxDatabase overview}{wxdatabaseoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxQueryCol::wxQueryCol}
+
+\func{void}{wxQueryCol}{\void}
+
+Constructor. Sets the attributes of the column to default values.
+
+\membersection{wxQueryCol::\destruct{wxQueryCol}}
+
+\func{void}{\destruct{wxQueryCol}}{\void}
+
+Destructor. Deletes the wxQueryField list.
+
+\membersection{wxQueryCol::BindVar}
+
+\func{void *}{BindVar}{\param{void *}{v}, \param{long}{ sz}}
+
+Binds a user-defined variable to a column. Whenever a column is bound to a
+variable, it will automatically copy the data of the current field into this
+buffer (to a maximum of {\it sz} bytes).
+
+\membersection{wxQueryCol::FillVar}
+
+\func{void}{FillVar}{\param{int}{ recnum}}
+
+Fills the bound variable with the data of the field recnum. When no variable
+is bound to the column nothing will happen.
+
+\membersection{wxQueryCol::GetData}
+
+\func{void *}{GetData}{\param{int}{ field}}
+
+Returns a pointer to the data of the field.
+
+\membersection{wxQueryCol::GetName}
+
+\func{wxString}{GetName}{\void}
+
+Returns the name of a column.
+
+\membersection{wxQueryCol::GetType}
+
+\func{short}{GetType}{\void}
+
+Returns the data type of a column.
+
+\membersection{wxQueryCol::GetSize}
+
+\func{long}{GetSize}{\param{int}{ field}}
+
+Return the size of the data of the field field.
+
+\membersection{wxQueryCol::IsRowDirty}
+
+\func{bool}{IsRowDirty}{\param{int}{ field}}
+
+Returns TRUE if the given field has been changed, but not saved.
+
+\membersection{wxQueryCol::IsNullable}
+
+\func{bool}{IsNullable}{\void}
+
+Returns TRUE if a column may contain no data.
+
+\membersection{wxQueryCol::AppendField}
+
+\func{void}{AppendField}{\param{void *}{buf}, \param{long}{ len}}
+
+Appends a wxQueryField instance to the field list of the column. {\it len} bytes from\rtfsp
+{\it buf} will be copied into the field's buffer.
+
+\membersection{wxQueryCol::SetData}
+
+\func{bool}{SetData}{\param{int}{ field}, \param{void *}{buf}, \param{long}{ len}}
+
+Sets the data of a field. This function finds the wxQueryField corresponding to\rtfsp
+{\it field} and calls wxQueryField::SetData with {\it buf} and {\it len} arguments.
+
+\membersection{wxQueryCol::SetName}
+
+\func{void}{SetName}{\param{const wxString\& }{name}}
+
+Sets the name of a column. Only useful when creating new tables or
+appending columns.
+
+\membersection{wxQueryCol::SetNullable}
+
+\func{void}{SetNullable}{\param{bool}{ nullable}}
+
+Determines whether a column may contain no data. Only useful when creating new tables or
+appending columns.
+
+\membersection{wxQueryCol::SetFieldDirty}
+
+\func{void}{SetFieldDirty}{\param{int}{ field}, \param{bool }{dirty = TRUE}}
+
+Sets the dirty tag of a given field.
+
+\membersection{wxQueryCol::SetType}
+
+\func{void}{SetType}{\param{short}{ type}}
+
+Sets the data type of a column. Only useful when creating new tables or
+appending columns.
+
+\section{\class{wxQueryField}}\label{wxqueryfield}
+
+Represents the data item for one or several columns.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{wxQueryField overview}{wxqueryfieldoverview}, \overview{wxDatabase overview}{wxdatabaseoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxQueryField::wxQueryField}
+
+\func{}{wxQueryField}{\void}
+
+Constructor. Sets type and size of the field to default values.
+
+\membersection{wxQueryField::\destruct{wxQueryField}}
+
+\func{}{\destruct{wxQueryField}}{\void}
+
+Destructor. Frees the associated memory depending on the field type.
+
+\membersection{wxQueryField::AllocData}
+
+\func{bool}{AllocData}{\void}
+
+Allocates memory depending on the size and type of the field.
+
+\membersection{wxQueryField::ClearData}
+
+\func{void}{ClearData}{\void}
+
+Deletes the contents of the field buffer without deallocating the memory.
+
+\membersection{wxQueryField::GetData}
+
+\func{void *}{GetData}{\void}
+
+Returns a pointer to the field buffer.
+
+\membersection{wxQueryField::GetSize}
+
+\func{long}{GetSize}{\void}
+
+Returns the size of the field buffer.
+
+\membersection{wxQueryField::GetType}
+
+\func{short}{GetType}{\void}
+
+Returns the type of the field (currently SQL\_CHAR, SQL\_VARCHAR or SQL\_INTEGER).
+
+\membersection{wxQueryField::IsDirty}
+
+\func{bool}{IsDirty}{\void}
+
+Returns TRUE if the data of a field has been changed, but not saved.
+
+\membersection{wxQueryField::SetData}
+
+\func{bool}{SetData}{\param{void *}{data}, \param{long}{ sz}}
+
+Allocates memory of the size {\it sz} and copies the contents of {\it d} into the
+field buffer.
+
+\membersection{wxQueryField::SetDirty}
+
+\func{void}{SetDirty}{\param{bool}{ dirty = TRUE}}
+
+Sets the dirty tag of a field.
+
+\membersection{wxQueryField::SetSize}
+
+\func{void}{SetSize}{\param{long}{ size}}
+
+Resizes the field buffer. Stored data will be lost.
+
+\membersection{wxQueryField::SetType}
+
+\func{void}{SetType}{\param{short }{type}}
+
+Sets the type of the field. Currently the types SQL\_CHAR, SQL\_VARCHAR and
+SQL\_INTEGER are supported.
+
--- /dev/null
+\section{\class{wxRadioBox}}\label{wxradiobox}
+
+A radio box item is used to select one of number of mutually exclusive
+choices. It is displayed as a vertical column or horizontal row of
+labelled buttons.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxRA\_HORIZONTAL}}{Lays the radiobox out in rows.}
+\twocolitem{\windowstyle{wxRA\_VERTICAL}}{Lays the radiobox out in columns.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}, \helpref{wxRadioButton}{wxradiobutton},\rtfsp
+\helpref{wxCheckBox}{wxcheckbox}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRadioBox::wxRadioBox}\label{wxradioboxconstr}
+
+\func{}{wxRadioBox}{\void}
+
+Default constructor.
+
+\func{}{wxRadioBox}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const int}{ n = 0}, \param{const wxString}{ choices[] = NULL},\rtfsp
+\param{const int}{ majorDimension = 0}, \param{const long}{ style = wxRA\_HORIZONTAL},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``radioBox"}}
+
+Constructor, creating and showing a radiobox.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{label}{Label for the static box surrounding the radio buttons.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{n}{Number of choices with which to initialize the radiobox.}
+
+\docparam{choices}{An array of choices with which to initialize the radiobox.}
+
+\docparam{majorDimension}{Specifies the number of rows (if style is wxRA\_VERTICAL) or columns (if style is wxRA\_HORIZONTAL) for a two-dimensional
+radiobox.}
+
+\docparam{style}{Window style. See \helpref{wxRadioBox}{wxradiobox}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxRadioBox::Create}{wxradioboxcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxRadioBox::\destruct{wxRadioBox}}
+
+\func{}{\destruct{wxRadioBox}}{\void}
+
+Destructor, destroying the radiobox item.
+
+\membersection{wxRadioBox::Create}\label{wxradioboxcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const int}{ n = 0}, \param{const wxString}{ choices[] = NULL},\rtfsp
+\param{const int}{ majorDimension = 0}, \param{const long}{ style = wxRA\_HORIZONTAL},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``radioBox"}}
+
+Creates the radiobox for two-step construction. See \helpref{wxRadioBox::wxRadioBox}{wxradioboxconstr}\rtfsp
+for further details.
+
+\membersection{wxRadioBox::Enable}\label{wxradioboxenable}
+
+\func{void}{Enable}{\param{const bool}{ enable}}
+
+Enables or disables the entire radiobox.
+
+\func{void}{Enable}{\param{const int}{ n}, \param{const bool}{ enable}}
+
+Enables or disables an individual button in the radiobox.
+
+\wxheading{Parameters}
+
+\docparam{enable}{TRUE to enable, FALSE to disable.}
+
+\docparam{n}{The zero-based button to enable or disable.}
+
+\membersection{wxRadioBox::FindString}\label{wxradioboxfindstring}
+
+\constfunc{int}{FindString}{\param{const wxString\& }{string}}
+
+Finds a button matching the given string, returning the position if found, or
+-1 if not found.
+
+\wxheading{Parameters}
+
+\docparam{string}{The string to find.}
+
+\membersection{wxRadioBox::GetLabel}\label{wxradioboxgetlabel}
+
+\constfunc{wxString}{GetLabel}{\void}
+
+Returns the radiobox label.
+
+\constfunc{wxString}{GetLabel}{\param{const int }{n}}
+
+Returns the label for the given button.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based button index.}
+
+\wxheading{See also}
+
+\helpref{wxRadioBox::SetLabel}{wxradioboxsetlabel}
+
+\membersection{wxRadioBox::GetSelection}\label{wxradioboxgetselection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Returns the zero-based position of the selected button.
+
+\membersection{wxRadioBox::GetStringSelection}\label{wxradioboxgetstringselection}
+
+\constfunc{wxString}{GetStringSelection}{\void}
+
+Returns the selected string.
+
+\membersection{wxRadioBox::Number}\label{wxradioboxnumber}
+
+\constfunc{int}{Number}{\void}
+
+Returns the number of buttons in the radiobox.
+
+\membersection{wxRadioBox::SetLabel}\label{wxradioboxsetlabel}
+
+\func{void}{SetLabel}{\param{const wxString\&}{ label}}
+
+Sets the radiobox label.
+
+\func{void}{SetLabel}{\param{const int }{n}, \param{const wxString\&}{ label}}
+
+Sets a label for a radio button.
+
+\wxheading{Parameters}
+
+\docparam{label}{The label to set.}
+
+\docparam{n}{The zero-based button index.}
+
+\membersection{wxRadioBox::SetSelection}\label{wxradioboxsetselection}
+
+\func{void}{SetSelection}{\param{const int}{ n}}
+
+Sets a button by passing the desired string position.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based button position.}
+
+\membersection{wxRadioBox::SetStringSelection}\label{wxradioboxsetstringselection}
+
+\func{void}{SetStringSelection}{\param{const wxString\& }{string}}
+
+Sets a button by passing the desired string.
+
+\wxheading{Parameters}
+
+\docparam{string}{The label of the button to select.}
+
+\membersection{wxRadioBox::Show}\label{wxradioboxshow}
+
+\func{void}{Show}{\param{const bool}{ show}}
+
+Shows or hides the entire radiobox.
+
+\func{void}{Show}{\param{const int }{item}, \param{const bool}{ show}}
+
+Shows or hides individual buttons.
+
+\wxheading{Parameters}
+
+\docparam{show}{TRUE to show, FALSE to hide.}
+
+\docparam{item}{The zero-based position of the button to show or hide.}
+
+\membersection{wxRadioBox::GetString}\label{wxradioboxgetstring}
+
+\constfunc{wxString}{GetString}{\param{const int}{ n}}
+
+Returns the label for the button at the given position.
+
+\wxheading{Parameters}
+
+\docparam{n}{The zero-based button position.}
+
+
--- /dev/null
+\section{\class{wxRadioButton}}\label{wxradiobutton}
+
+A radio button item is a button which usually denotes one of several mutually
+exclusive options. It has a text label next to a (usually) round button.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no specific styles for this class.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}, \helpref{wxRadioBox}{wxradiobox},\rtfsp
+\helpref{wxCheckBox}{wxcheckbox}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRadioButton::wxRadioButton}\label{wxradiobuttonconstr}
+
+\func{}{wxRadioButton}{\void}
+
+Default constructor.
+
+\func{}{wxRadioButton}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``radioButton"}}
+
+Constructor, creating and showing a radio button.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{label}{Label for the radio button.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxRadioButton}{wxradiobutton}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxRadioButton::Create}{wxradiobuttoncreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxRadioButton::\destruct{wxRadioButton}}
+
+\func{void}{\destruct{wxRadioButton}}{\void}
+
+Destructor, destroying the radio button item.
+
+\membersection{wxRadioButton::Create}\label{wxradiobuttoncreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``radioButton"}}
+
+Creates the choice for two-step construction. See \helpref{wxRadioButton::wxRadioButton}{wxradiobuttonconstr} for
+further details.
+
+\membersection{wxRadioButton::GetValue}\label{wxradiobuttongetvalue}
+
+\constfunc{bool}{GetValue}{\void}
+
+Returns TRUE if the radio button is depressed, FALSE otherwise.
+
+\membersection{wxRadioButton::SetValue}\label{wxradiobuttonsetvalue}
+
+\func{void}{SetValue}{\param{const bool}{ value}}
+
+Sets the radio button to selected or deselected status.
+
+\wxheading{Parameters}
+
+\docparam{value}{TRUE to select, FALSE to deselect.}
+
+
--- /dev/null
+\section{\class{wxRealPoint}}\label{wxrealpoint}
+
+A {\bf wxRealPoint} is a useful data structure for graphics operations.
+It contains floating point point {\it x} and {\it y} members.
+See also \helpref{wxPoint}{wxpoint} for an integer version.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPoint}{wxpoint}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRealPoint::wxRealPoint}
+
+\func{}{wxRealPoint}{\void}
+
+\func{}{wxRealPoint}{\param{double}{ x}, \param{double}{ y}}
+
+Create a point.
+
+\member{double}{ x}
+
+\member{double}{ y}
+
+Members of the {\bf wxRealPoint} object.
+
+
--- /dev/null
+\section{\class{wxRecordSet}}\label{wxrecordset}
+
+Each wxRecordSet represents an ODBC database query. You can make multiple queries
+at a time by using multiple wxRecordSets with a wxDatabase or you can make
+your queries in sequential order using the same wxRecordSet.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxRecordSet overview}{wxrecordsetoverview}, \helpref{wxDatabase overview}{wxdatabaseoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRecordSet::wxRecordSet}
+
+\func{}{wxRecordSet}{\param{wxDatabase *}{db}, \param{int}{ type = wxOPEN\_TYPE\_DYNASET},
+ \param{int}{ opt = wxOPTION\_DEFAULT}}
+
+Constructor. {\it db} is a pointer to the wxDatabase instance you wish to use the
+wxRecordSet with. Currently there are two possible values of {\it type}:
+
+\begin{itemize}\itemsep=0pt
+\item wxOPEN\_TYPE\_DYNASET: Loads only one record at a time into memory. The other
+data of the result set will be loaded dynamically when
+moving the cursor. This is the default type.
+\item wxOPEN\_TYPE\_SNAPSHOT: Loads all records of a result set at once. This will
+need much more memory, but will result in
+faster access to the ODBC data.
+\end{itemize}
+
+The {\it option} parameter is not used yet.
+
+The constructor appends the wxRecordSet object to the parent database's list of
+wxRecordSet objects, for later destruction when the wxDatabase is destroyed.
+
+\membersection{wxRecordSet::\destruct{wxRecordSet}}
+
+\func{}{\destruct{wxRecordSet}}{\void}
+
+Destructor. All data except that stored in user-defined variables will be lost.
+It also unlinks the wxRecordSet object from the parent database's list of
+wxRecordSet objects.
+
+\membersection{wxRecordSet::AddNew}
+
+\func{void}{AddNew}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::BeginQuery}
+
+\func{bool}{BeginQuery}{\param{int}{ openType}, \param{const wxString\& }{sql = NULL}, \param{int}{ options = wxOPTION\_DEFAULT}}
+
+Not implemented.
+
+\membersection{wxRecordSet::BindVar}
+
+\func{void *}{BindVar}{\param{int}{ col}, \param{void *}{buf}, \param{long}{ size}}
+
+Binds a user-defined variable to the column col. Whenever the current field's
+data changes, it will be copied into buf (maximum {\it size} bytes).
+
+\func{void *}{BindVar}{\param{const wxString\& }{col}, \param{void *}{buf}, \param{long}{ size}}
+
+The same as above, but uses the column name as the identifier.
+
+\membersection{wxRecordSet::CanAppend}
+
+\func{bool}{CanAppend}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::Cancel}
+
+\func{void}{Cancel}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::CanRestart}
+
+\func{bool}{CanRestart}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::CanScroll}
+
+\func{bool}{CanScroll}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::CanTransact}
+
+\func{bool}{CanTransact}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::CanUpdate}
+
+\func{bool}{CanUpdate}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::ConstructDefaultSQL}
+
+\func{bool}{ConstructDefaultSQL}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::Delete}
+
+\func{bool}{Delete}{\void}
+
+Deletes the current record. Not implemented.
+
+\membersection{wxRecordSet::Edit}
+
+\func{void}{Edit}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::EndQuery}
+
+\func{bool}{EndQuery}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::ExecuteSQL}\label{wxrecordsetexecutesql}
+
+\func{bool}{ExecuteSQL}{\param{const wxString\& }{sql}}
+
+Directly executes a SQL statement. The data will be presented as a normal
+result set. Note that the recordset must have been created as a snapshot, not
+dynaset. Dynasets will be implemented in the near future.
+
+Examples of common SQL statements are given in \helpref{A selection of SQL commands}{sqlcommands}.
+
+\membersection{wxRecordSet::FillVars}
+
+\func{void}{FillVars}{\param{int}{ recnum}}
+
+Fills in the user-defined variables of the columns. You can set these
+variables with wxQueryCol::BindVar. This function will be automatically
+called after every successful database operation.
+
+\membersection{wxRecordSet::GetColName}
+
+\func{wxString}{GetColName}{\param{int}{ col}}
+
+Returns the name of the column at position {\it col}. Returns NULL if {\it col} does not
+exist.
+
+\membersection{wxRecordSet::GetColType}
+
+\func{short}{GetColType}{\param{int}{ col}}
+
+Returns the data type of the column at position {\it col}. Returns SQL\_TYPE\_NULL
+if {\it col} does not exist.
+
+\func{short}{GetColType}{\param{const wxString\& }{ name}}
+
+The same as above, but uses the column name as the identifier.
+
+See \helpref{ODBC SQL data types}{sqltypes} for a list
+of possible data types.
+
+\membersection{wxRecordSet::GetColumns}
+
+\func{bool}{GetColumns}{\param{const wxString\& }{table = NULL}}
+
+Returns the columns of the table with the specified name. If no name is
+given the class member {\it tablename} will be used. If both names are NULL
+nothing will happen. The data will be presented as a normal result set, organized
+as follows:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{0 (VARCHAR)}{TABLE\_QUALIFIER}
+\twocolitem{1 (VARCHAR)}{TABLE\_OWNER}
+\twocolitem{2 (VARCHAR)}{TABLE\_NAME}
+\twocolitem{3 (VARCHAR)}{COLUMN\_NAME}
+\twocolitem{4 (SMALLINT)}{DATA\_TYPE}
+\twocolitem{5 (VARCHAR)}{TYPE\_NAME}
+\twocolitem{6 (INTEGER)}{PRECISION}
+\twocolitem{7 (INTEGER)}{LENGTH}
+\twocolitem{8 (SMALLINT)}{SCALE}
+\twocolitem{9 (SMALLINT)}{RADIX}
+\twocolitem{10 (SMALLINT)}{NULLABLE}
+\twocolitem{11 (VARCHAR)}{REMARKS}
+\end{twocollist}
+
+\membersection{wxRecordSet::GetCurrentRecord}
+
+\func{long}{GetCurrentRecord}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetDatabase}
+
+\func{wxDatabase *}{GetDatabase}{\void}
+
+Returns the wxDatabase object bound to a wxRecordSet.
+
+\membersection{wxRecordSet::GetDataSources}\label{wxrecordsetgetdatasources}
+
+\func{bool}{GetDataSources}{\void}
+
+Gets the currently-defined data sources via the ODBC manager. The data will be presented
+as a normal result set. See the documentation for the ODBC function SQLDataSources for how the data
+is organized.
+
+Example:
+
+\begin{verbatim}
+ wxDatabase Database;
+
+ wxRecordSet *Record = new wxRecordSet(&Database);
+
+ if (!Record->GetDataSources()) {
+ char buf[300];
+ sprintf(buf, "%s %s\n", Database.GetErrorClass(), Database.GetErrorMessage());
+ frame->output->SetValue(buf);
+ }
+ else {
+ do {
+ frame->DataSource->Append((char*)Record->GetFieldDataPtr(0, SQL_CHAR));
+ } while (Record->MoveNext());
+ }
+\end{verbatim}
+
+\membersection{wxRecordSet::GetDefaultConnect}
+
+\func{wxString}{GetDefaultConnect}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetDefaultSQL}
+
+\func{wxString}{GetDefaultSQL}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetErrorCode}
+
+\func{wxRETCODE}{GetErrorCode}{\void}
+
+Returns the error code of the last ODBC action. This will be one of:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{SQL\_ERROR}{General error.}
+\twocolitem{SQL\_INVALID\_HANDLE}{An invalid handle was passed to an ODBC function.}
+\twocolitem{SQL\_NEED\_DATA}{ODBC expected some data.}
+\twocolitem{SQL\_NO\_DATA\_FOUND}{No data was found by this ODBC call.}
+\twocolitem{SQL\_SUCCESS}{The call was successful.}
+\twocolitem{SQL\_SUCCESS\_WITH\_INFO}{The call was successful, but further information can be
+obtained from the ODBC manager.}
+\end{twocollist}
+
+\membersection{wxRecordSet::GetFieldData}\label{wxrecordsetgetfielddata}
+
+\func{bool}{GetFieldData}{\param{int}{ col}, \param{int}{ dataType}, \param{void *}{dataPtr}}
+
+Copies the current data of the column at position {\it col} into the buffer
+\rtfsp{\it dataPtr}. To be sure to get the right type of data, the user has to pass the
+correct data type. The function returns FALSE if {\it col} does not
+exist or the wrong data type was given.
+
+\func{bool}{GetFieldData}{\param{const wxString\& }{name}, \param{int}{ dataType}, \param{void *}{dataPtr}}
+
+The same as above, but uses the column name as the identifier.
+
+See \helpref{ODBC SQL data types}{sqltypes} for a list
+of possible data types.
+
+\membersection{wxRecordSet::GetFieldDataPtr}\label{wxrecordsetgetfielddataptr}
+
+\func{void *}{GetFieldDataPtr}{\param{int}{ col}, \param{int}{ dataType}}
+
+Returns the current data pointer of the column at position {\it col}.
+To be sure to get the right type of data, the user has to pass the
+data type. Returns NULL if {\it col} does not exist or if {\it dataType} is
+incorrect.
+
+\func{void *}{GetFieldDataPtr}{\param{const wxString\& }{name}, \param{int}{ dataType}}
+
+The same as above, but uses the column name as the identifier.
+
+See \helpref{ODBC SQL data types}{sqltypes} for a list
+of possible data types.
+
+\membersection{wxRecordSet::GetFilter}
+
+\func{wxString}{GetFilter}{\void}
+
+Returns the current filter.
+
+\membersection{wxRecordSet::GetForeignKeys}
+
+\func{bool}{GetPrimaryKeys}{\param{const wxString\& }{ptable = NULL}, \param{const wxString\& }{ftable
+= NULL}}
+
+Returns a list of foreign keys in the specified table (columns in the
+specified table that refer to primary keys in other tables), or
+a list of foreign keys in other tables that refer to the primary key in
+the specified table.
+
+If {\it ptable} contains a table name, this function returns a result
+set containing the primary key of the specified table.
+
+If {\it ftable} contains a table name, this functions returns a result set
+of containing all of the foreign keys in the specified table and the
+primary keys (in other tables) to which they refer.
+
+If both {\it ptable} and {\it ftable} contain table names, this
+function returns the foreign keys in the table specified in {\it
+ftable} that refer to the primary key of the table specified in {\it
+ptable}. This should be one key at most.
+
+GetForeignKeys returns results as a standard result set. If the foreign
+keys associated with a primary key are requested, the result set is
+ordered by FKTABLE\_QUALIFIER, FKTABLE\_OWNER, FKTABLE\_NAME, and KEY\_SEQ.
+If the primary keys associated with a foreign key are requested, the
+result set is ordered by PKTABLE\_QUALIFIER, PKTABLE\_OWNER, PKTABLE\_NAME,
+and KEY\_SEQ. The following table lists the columns in the result set.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{0 (VARCHAR)}{PKTABLE\_QUALIFIER}
+\twocolitem{1 (VARCHAR)}{PKTABLE\_OWNER}
+\twocolitem{2 (VARCHAR)}{PKTABLE\_NAME}
+\twocolitem{3 (VARCHAR)}{PKCOLUMN\_NAME}
+\twocolitem{4 (VARCHAR)}{FKTABLE\_QUALIFIER}
+\twocolitem{5 (VARCHAR)}{FKTABLE\_OWNER}
+\twocolitem{6 (VARCHAR)}{FKTABLE\_NAME}
+\twocolitem{7 (VARCHAR)}{FKCOLUMN\_NAME}
+\twocolitem{8 (SMALLINT)}{KEY\_SEQ}
+\twocolitem{9 (SMALLINT)}{UPDATE\_RULE}
+\twocolitem{10 (SMALLINT)}{DELETE\_RULE}
+\twocolitem{11 (VARCHAR)}{FK\_NAME}
+\twocolitem{12 (VARCHAR)}{PK\_NAME}
+\end{twocollist}
+
+\membersection{wxRecordSet::GetNumberCols}
+
+\func{long}{GetNumberCols}{\void}
+
+Returns the number of columns in the result set.
+
+\membersection{wxRecordSet::GetNumberFields}
+
+\func{int}{GetNumberFields}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetNumberParams}
+
+\func{int}{GetNumberParams}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetNumberRecords}
+
+\func{long}{GetNumberRecords}{\void}
+
+Returns the number of records in the result set.
+
+\membersection{wxRecordSet::GetPrimaryKeys}
+
+\func{bool}{GetPrimaryKeys}{\param{const wxString\& }{table = NULL}}
+
+Returns the column names that comprise the primary key of the table with the specified name. If no name is
+given the class member {\it tablename} will be used. If both names are NULL
+nothing will happen. The data will be presented as a normal result set, organized
+as follows:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{0 (VARCHAR)}{TABLE\_QUALIFIER}
+\twocolitem{1 (VARCHAR)}{TABLE\_OWNER}
+\twocolitem{2 (VARCHAR)}{TABLE\_NAME}
+\twocolitem{3 (VARCHAR)}{COLUMN\_NAME}
+\twocolitem{4 (SMALLINT)}{KEY\_SEQ}
+\twocolitem{5 (VARCHAR)}{PK\_NAME}
+\end{twocollist}
+
+\membersection{wxRecordSet::GetOptions}
+
+\func{int}{GetOptions}{\void}
+
+Returns the options of the wxRecordSet. Options are not supported yet.
+
+\membersection{wxRecordSet::GetResultSet}
+
+\func{bool}{GetResultSet}{\void}
+
+Copies the data presented by ODBC into wxRecordSet. Depending on the
+wxRecordSet type all or only one record(s) will be copied.
+Usually this function will be called automatically after each successful
+database operation.
+
+\membersection{wxRecordSet::GetSortString}
+
+\func{wxString}{GetSortString}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetSQL}
+
+\func{wxString}{GetSQL}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::GetTableName}
+
+\func{wxString}{GetTableName}{\void}
+
+Returns the name of the current table.
+
+\membersection{wxRecordSet::GetTables}
+
+\func{bool}{GetTables}{\void}
+
+Gets the tables of a database. The data will be presented as a normal result
+set, organized as follows:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{0 (VARCHAR)}{TABLE\_QUALIFIER}
+\twocolitem{1 (VARCHAR)}{TABLE\_OWNER}
+\twocolitem{2 (VARCHAR)}{TABLE\_NAME}
+\twocolitem{3 (VARCHAR)}{TABLE\_TYPE (TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARY,
+ALIAS, SYNONYM, or database-specific type)}
+\twocolitem{4 (VARCHAR)}{REMARKS}
+\end{twocollist}
+
+\membersection{wxRecordSet::GetType}
+
+\func{int}{GetType}{\void}
+
+Returns the type of the wxRecordSet: wxOPEN\_TYPE\_DYNASET or
+wxOPEN\_TYPE\_SNAPSHOT. See the wxRecordSet description for details.
+
+\membersection{wxRecordSet::GoTo}
+
+\func{bool}{GoTo}{\param{long}{ n}}
+
+Moves the cursor to the record with the number n, where the first record
+has the number 0.
+
+\membersection{wxRecordSet::IsBOF}
+
+\func{bool}{IsBOF}{\void}
+
+Returns TRUE if the user tried to move the cursor before the first record
+in the set.
+
+\membersection{wxRecordSet::IsFieldDirty}
+
+\func{bool}{IsFieldDirty}{\param{int}{ field}}
+
+Returns TRUE if the given field has been changed but not saved yet.
+
+\func{bool}{IsFieldDirty}{\param{const wxString\& }{name}}
+
+Same as above, but uses the column name as the identifier.
+
+\membersection{wxRecordSet::IsFieldNull}
+
+\func{bool}{IsFieldNull}{\param{int}{ field}}
+
+Returns TRUE if the given field has no data.
+
+\func{bool}{IsFieldNull}{\param{const wxString\& }{ name}}
+
+Same as above, but uses the column name as the identifier.
+
+\membersection{wxRecordSet::IsColNullable}
+
+\func{bool}{IsColNullable}{\param{int}{ col}}
+
+Returns TRUE if the given column may contain no data.
+
+\func{bool}{IsColNullable}{\param{const wxString\& }{name}}
+
+Same as above, but uses the column name as the identifier.
+
+\membersection{wxRecordSet::IsEOF}
+
+\func{bool}{IsEOF}{\void}
+
+Returns TRUE if the user tried to move the cursor behind the last record
+in the set.
+
+\membersection{wxRecordSet::IsDeleted}
+
+\func{bool}{IsDeleted}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::IsOpen}
+
+\func{bool}{IsOpen}{\void}
+
+Returns TRUE if the parent database is open.
+
+\membersection{wxRecordSet::Move}
+
+\func{bool}{Move}{\param{long}{ rows}}
+
+Moves the cursor a given number of rows. Negative values are allowed.
+
+\membersection{wxRecordSet::MoveFirst}
+
+\func{bool}{MoveFirst}{\void}
+
+Moves the cursor to the first record.
+
+\membersection{wxRecordSet::MoveLast}
+
+\func{bool}{MoveLast}{\void}
+
+Moves the cursor to the last record.
+
+\membersection{wxRecordSet::MoveNext}\label{wxrecordsetmovenext}
+
+\func{bool}{MoveNext}{\void}
+
+Moves the cursor to the next record.
+
+\membersection{wxRecordSet::MovePrev}\label{wxrecordsetmoveprev}
+
+\func{bool}{MovePrev}{\void}
+
+Moves the cursor to the previous record.
+
+\membersection{wxRecordSet::Query}
+
+\func{bool}{Query}{\param{const wxString\& }{columns}, \param{const wxString\& }{table}, \param{const wxString\& }{filter = NULL}}
+
+Start a query. An SQL string of the following type will automatically be
+generated and executed: ``SELECT columns FROM table WHERE filter".
+
+\membersection{wxRecordSet::RecordCountFinal}
+
+\func{bool}{RecordCountFinal}{\void}
+
+Not implemented.
+
+\membersection{wxRecordSet::Requery}
+
+\func{bool}{Requery}{\void}
+
+Re-executes the last query. Not implemented.
+
+\membersection{wxRecordSet::SetFieldDirty}
+
+\func{void}{SetFieldDirty}{\param{int}{ field}, \param{bool}{ dirty = TRUE}}
+
+Sets the dirty tag of the field field. Not implemented.
+
+\func{void}{SetFieldDirty}{\param{const wxString\& }{name}, \param{bool}{ dirty = TRUE}}
+
+Same as above, but uses the column name as the identifier.
+
+\membersection{wxRecordSet::SetDefaultSQL}
+
+\func{void}{SetDefaultSQL}{\param{const wxString\& }{s}}
+
+Not implemented.
+
+\membersection{wxRecordSet::SetFieldNull}
+
+\func{void}{SetFieldNull}{\param{void *}{p}, \param{bool }{isNull = TRUE}}
+
+Not implemented.
+
+\membersection{wxRecordSet::SetOptions}
+
+\func{void}{SetOptions}{\param{int}{ opt}}
+
+Sets the options of the wxRecordSet. Not implemented.
+
+\membersection{wxRecordSet::SetTableName}
+
+\func{void}{SetTableName}{\param{const wxString\& }{tablename}}
+
+Specify the name of the table you want to use.
+
+\membersection{wxRecordSet::SetType}
+
+\func{void}{SetType}{\param{int}{ type}}
+
+Sets the type of the wxRecordSet. See the wxRecordSet class description for details.
+
+\membersection{wxRecordSet::Update}
+
+\func{bool}{Update}{\void}
+
+Writes back the current record. Not implemented.
+
+
--- /dev/null
+\section{\class{wxRect}}\label{wxrect}
+
+A class for manipulating rectangles.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPoint}{wxpoint}, \helpref{wxSize}{wxsize}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRect::wxRect}
+
+\func{}{wxRect}{\void}
+
+Default constructor.
+
+\func{}{wxRect}{\param{const int}{ x}, \param{const int}{ y}, \param{const int}{ width}, \param{const int}{ height}}
+
+Creates a wxRect object from x, y, width and height values.
+
+\func{}{wxRect}{\param{const wxPoint\&}{ topLeft}, \param{const wxPoint\&}{ bottomRight}}
+
+Creates a wxRect object from top-left and bottom-right points.
+
+\func{}{wxRect}{\param{const wxPoint\&}{ pos}, \param{const wxSize\&}{ size}}
+
+Creates a wxRect object from position and size values.
+
+\membersection{wxRect::x}
+
+\member{int}{x}
+
+x member.
+
+\membersection{wxRect::y}
+
+\member{int}{y}
+
+y member.
+
+\membersection{wxRect::width}
+
+\member{int}{width}
+
+Width member.
+
+\membersection{wxRect::height}
+
+\member{int}{height}
+
+Height member.
+
+\membersection{wxRect::GetBottom}\label{wxrectgetbottom}
+
+\constfunc{int}{GetBottom}{\void}
+
+Gets the bottom point of the rectangle.
+
+\membersection{wxRect::GetHeight}\label{wxrectgetheight}
+
+\constfunc{int}{GetHeight}{\void}
+
+Gets the height member.
+
+\membersection{wxRect::GetLeft}\label{wxrectgetleft}
+
+\constfunc{int}{GetLeft}{\void}
+
+Gets the left point of the rectangle (the same as \helpref{wxRect::GetX}{wxrectgetx}).
+
+\membersection{wxRect::GetPosition}\label{wxrectgetposition}
+
+\constfunc{wxPoint}{GetPosition}{\void}
+
+Gets the position.
+
+\membersection{wxRect::GetRight}\label{wxrectgetright}
+
+\constfunc{int}{GetRight}{\void}
+
+Gets the right point of the rectangle.
+
+\membersection{wxRect::GetSize}\label{wxrectgetsize}
+
+\constfunc{wxSize}{GetSize}{\void}
+
+Gets the size.
+
+\membersection{wxRect::GetTop}\label{wxrectgettop}
+
+\constfunc{int}{GetTop}{\void}
+
+Gets the top point of the rectangle (the same as \helpref{wxRect::GetY}{wxrectgety}).
+
+\membersection{wxRect::GetWidth}\label{wxrectgetwidth}
+
+\constfunc{int}{GetWidth}{\void}
+
+Gets the width member.
+
+\membersection{wxRect::GetX}\label{wxrectgetx}
+
+\constfunc{int}{GetX}{\void}
+
+Gets the x member.
+
+\membersection{wxRect::GetY}\label{wxrectgety}
+
+\constfunc{int}{GetY}{\void}
+
+Gets the y member.
+
+\membersection{wxRect::SetHeight}\label{wxrectsetheight}
+
+\func{void}{SetHeight}{\param{const int}{ height}}
+
+Sets the height.
+
+\membersection{wxRect::SetWidth}\label{wxrectsetwidth}
+
+\func{void}{SetWidth}{\param{const int}{ width}}
+
+Sets the width.
+
+\membersection{wxRect::SetX}\label{wxrectsetx}
+
+\func{void}{SetX}{\param{const int}{ x}}
+
+Sets the x position.
+
+\membersection{wxRect::SetY}\label{wxrectsety}
+
+\func{void}{SetY}{\param{const int}{ y}}
+
+Sets the y position.
+
+\membersection{wxRect::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxRect\& }{rect}}
+
+Assignment operator.
+
+\membersection{wxRect::operator $==$}
+
+\func{bool}{operator $==$}{\param{const wxRect\& }{rect}}
+
+Equality operator.
+
+\membersection{wxRect::operator $!=$}
+
+\func{bool}{operator $!=$}{\param{const wxRect\& }{rect}}
+
+Inequality operator.
+
+
--- /dev/null
+\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
+\newcommand{\indexit}[1]{#1\index{#1}}
+\newcommand{\pipe}[0]{$\|$\ }%
+\input psbox.tex
+
+% Remove this for processing with dvi2ps instead of dvips
+%\special{!/@scaleunit 1 def}
+
+\parskip=10pt
+\parindent=0pt
+\title{Reference Manual for wxWindows 2.0: a portable C++ GUI toolkit}
+\author{Julian Smart and Markus Holzem}
+\date{October 21st 1997}
+
+\makeindex
+\begin{document}
+\maketitle
+
+\pagestyle{fancyplain}
+\bibliographystyle{plain}
+\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
+\setfooter{\thepage}{}{}{}{}{\thepage}
+\pagenumbering{roman}
+\tableofcontents
+
+
+\chapter*{Copyright notice}
+\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}
+
+\begin{center}
+Copyright (c) 1997 Julian Smart and Markus Holzem\\
+Portions (c) 1996 Artificial Intelligence Applications Institute\\
+\end{center}
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose is hereby granted without fee, provided that the
+above copyright notice, author statement and this permission notice appear in
+all copies of this software and related documentation.
+
+THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
+IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL THE ARTIFICIAL INTELLIGENCE APPLICATIONS INSTITUTE OR THE
+UNIVERSITY OF EDINBURGH OR JULIAN SMART OR MARKUS HOLZEM BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF
+DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+\chapter{This manual}
+\pagenumbering{arabic}%
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}
+
+wxWindows is a class library for C++ providing GUI (Graphical User
+Interface) and other facilities on more than one platform. This document
+gives detailed information about the classes and functions that make up
+the wxWindows API (Application Programming Interface). Please refer to the
+wxWindows user manual for a more general description of wxWindows.
+
+\input{classes.tex}
+\input{category.tex}
+\input{topics.tex}
+
+\addcontentsline{toc}{chapter}{Index}
+\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}
+\printindex
+
+\end{document}
+
--- /dev/null
+@techreport{robins87,
+author = {Robins, Gabriel},
+title = {The {ISI} grapher: a portable tool for displaying graphs pictorially (ISI/RS-87-196)},
+institution = {University of South California},
+year = {1987},
+month = {September}
+}
+@book{helpbook,
+author = {Boggan, Scott and Fakas, David and Welinske, Joe}
+, title = {Developing on-line help for {W}indows}
+, publisher = {Sams Publishing}
+, address = {11711 North College, Carmel, Indiana 46032, USA}
+, year = {1993}
+}
+@book{wong93,
+author = {Wong, William}
+, title = {Plug and play programming}
+, publisher = {M and T Books}
+, address = {115 West 18th Street, New York, New York 10011}
+, year = {1993}
+}
+@book{pree94,
+author = {Pree, Wolfgang}
+, title = {Design patterns for object-oriented software development}
+, publisher = {Addison-Wesley}
+, address = {Reading, MA}
+, year = {1994}
+}
+@book{gamma95,
+author = {Gamma, Erich and Helm, Richard and Johnson, Ralph and Vlissides, John}
+, title = {Design patterns: elements of reusable object-oriented software}
+, publisher = {Addison-Wesley}
+, address = {Reading, MA}
+, year = {1994}
+}
+@book{kopka,
+author = {Kopka, Helmut and Daly, Patrick W.}
+, title = {A Guide to LaTeX}
+, publisher = {Addison-Wesley}
+, year = {1993}
+}
+@manual{smart95a,
+author = {Smart, Julian}
+, title = {wxCLIPS User Manual}
+, publisher = {Artificial Intelligence Applications Institute}
+, organization = {University of Edinburgh}
+, address = {80 South Bridge, Edinburgh, EH1 1HN}
+, year = {1995}
+}
+
+@manual{smart95b,
+author = {Smart, Julian}
+, title = {Tex2RTF User Manual}
+, publisher = {Artificial Intelligence Applications Institute}
+, organization = {University of Edinburgh}
+, address = {80 South Bridge, Edinburgh, EH1 1HN}
+, year = {1995}
+}
+
--- /dev/null
+\section{\class{wxRegion}}\label{wxregion}
+
+A wxRegion represents a simple or complex region on a device context or window. It uses
+reference counting, so copying and assignment operations are fast.
+
+\wxheading{Derived from}
+
+\helpref{wxGDIObject}{wxgdiobject}\\
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxRegion::wxRegion}\label{wxregionconstr}
+
+\func{}{wxRegion}{\void}
+
+Default constructor.
+
+\func{}{wxRegion}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Constructs a rectangular region with the given position and size.
+
+\func{}{wxRegion}{\param{const wxPoint\&}{ topLeft}, \param{const wxPoint\&}{ bottomRight}}
+
+Constructs a rectangular region from the top left point and the bottom right point.
+
+\func{}{wxRegion}{\param{const wxRect\&}{ rect}}
+
+Constructs a rectangular region a wxRect object.
+
+\func{}{wxRegion}{\param{const wxRegion\&}{ region}}
+
+Constructs a region by copying another region.
+
+\membersection{wxRegion::\destruct{wxRegion}}
+
+\func{}{\destruct{wxRegion}}{\void}
+
+Destructor.
+
+\membersection{wxRegion::Clear}\label{wxregionclear}
+
+\func{void}{Clear}{\void}
+
+Clears the current region.
+
+\membersection{wxRegion::Contains}\label{wxregioncontains}
+
+\constfunc{wxRegionContain}{Contains}{\param{long\& }{x}, \param{long\& }{y}}
+
+Returns a value indicating whether the given point is contained within the region.
+
+\constfunc{wxRegionContain}{Contains}{\param{const wxPoint\&}{ pt}}
+
+Returns a value indicating whether the given point is contained within the region.
+
+\constfunc{wxRegionContain}{Contains}{\param{long\& }{x}, \param{long\& }{y}, \param{long\& }{width}, \param{long\& }{height}}
+
+Returns a value indicating whether the given rectangle is contained within the region.
+
+\constfunc{wxRegionContain}{Contains}{\param{const wxRect\& }{rect}}
+
+Returns a value indicating whether the given rectangle is contained within the region.
+
+\wxheading{Return value}
+
+The return value is one of wxOutRegion, wxPartRegion and wxInRegion.
+
+On Windows, only wxOutRegion and wxInRegion are returned; a value wxInRegion then indicates that
+all or some part of the region is contained in this region.
+
+\membersection{wxRegion::GetBox}\label{wxregiongetbox}
+
+\constfunc{void}{GetBox}{\param{long\& }{x}, \param{long\& }{y}, \param{long\& }{width}, \param{long\& }{height}}
+
+Returns the outer bounds of the region.
+
+\constfunc{wxRect}{GetBox}{\void}
+
+Returns the outer bounds of the region.
+
+\membersection{wxRegion::Intersect}\label{wxregionintersect}
+
+\func{bool}{Intersect}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Finds the intersection of this region and another, rectangular region, specified using position and size.
+
+\func{bool}{Intersect}{\param{const wxRect\&}{ rect}}
+
+Finds the intersection of this region and another, rectangular region.
+
+\func{bool}{Intersect}{\param{const wxRegion\&}{ region}}
+
+Finds the intersection of this region and another region.
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+Creates the intersection of the two regions, that is, the parts which are in both regions. The result
+is stored in this region.
+
+\membersection{wxRegion::IsEmpty}\label{wxregionisempty}
+
+\constfunc{bool}{IsEmpty}{\void}
+
+\func{bool}{IsEmpty}{\void}
+
+Returns TRUE if the region is empty, FALSE otherwise.
+
+\func{bool}{Subtract}{\param{const wxRect\&}{ rect}}
+
+Subtracts a rectangular region from this region.
+
+\func{bool}{Subtract}{\param{const wxRegion\&}{ region}}
+
+Subtracts a region from this region.
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+This operation combines the parts of 'this' region that are not part of the second region.
+The result is stored in this region.
+
+\membersection{wxRegion::Union}\label{wxregionunion}
+
+\func{bool}{Union}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Finds the union of this region and another, rectangular region, specified using position and size.
+
+\func{bool}{Union}{\param{const wxRect\&}{ rect}}
+
+Finds the union of this region and another, rectangular region.
+
+\func{bool}{Union}{\param{const wxRegion\&}{ region}}
+
+Finds the union of this region and another region.
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+This operation creates a region that combines all of this region and the second region.
+The result is stored in this region.
+
+\membersection{wxRegion::Xor}\label{wxregionxor}
+
+\func{bool}{Xor}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
+
+Finds the Xor of this region and another, rectangular region, specified using position and size.
+
+\func{bool}{Xor}{\param{const wxRect\&}{ rect}}
+
+Finds the Xor of this region and another, rectangular region.
+
+\func{bool}{Xor}{\param{const wxRegion\&}{ region}}
+
+Finds the Xor of this region and another region.
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise.
+
+\wxheading{Remarks}
+
+This operation creates a region that combines all of this region and the second region, except
+for any overlapping areas. The result is stored in this region.
+
+\membersection{wxRegion::operator $=$}\label{wxregionassign}
+
+\func{void}{operator $=$}{\param{const wxRegion\&}{ region}}
+
+Copies {\it region} by reference counting.
+
+
--- /dev/null
+\section{\class{wxScreenDC}}\label{wxscreendc}
+
+A wxScreenDC can be used to paint on the screen.
+This should normally be constructed as a temporary stack object; don't store
+a wxScreenDC object.
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{wxClientDC}{wxclientdc}, \helpref{wxWindowDC}{wxwindowdc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxScreenDC::wxScreenDC}
+
+\func{}{wxScreenDC}{\void}
+
+Constructor.
+
+\membersection{wxScreenDC::StartDrawingOnTop}\label{wxscreendcstartdrawingontop}
+
+\func{bool}{StartDrawingOnTop}{\param{wxWindow*}{ window}}
+
+\func{bool}{StartDrawingOnTop}{\param{wxRect*}{ rect = NULL}}
+
+Use this in conjunction with \helpref{EndDrawingOnTop}{wxscreendcenddrawingontop} to
+ensure that drawing to the screen occurs on top of existing windows. Without this,
+some window systems (such as X) only allow drawing to take place underneath
+other windows.
+
+By using the first form of this function, an application is specifying that
+the area that will be drawn on coincides with the given window.
+
+By using the second form, an application can specify an area of the screen
+which is to be drawn on. If NULL is passed, the whole screen is available.
+
+It is recommended that an area of the screen is specified because with large regions,
+flickering effects are noticeable when destroying the temporary transparent window used
+to implement this feature.
+
+You might use this pair of functions when implementing a drag feature, for example
+as in the \helpref{wxSplitterWindow}{wxsplitterwindow} implementation.
+
+\membersection{wxScreenDC::EndDrawingOnTop}\label{wxscreendcenddrawingontop}
+
+\func{bool}{EndDrawingOnTop}{\void}
+
+Use this in conjunction with \helpref{StartDrawingOnTop}{wxscreendcstartdrawingontop}.
+
+This function destroys the temporary window created to implement on-top drawing (X only).
+
--- /dev/null
+\section{\class{wxScrollBar}}\label{wxscrollbar}
+
+A wxScrollBar is a control that represents a horizontal or
+vertical scrollbar. It is distinct from the two scrollbars that some windows
+provide automatically, but the two types of scrollbar share the way
+events are received.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxSB\_HORIZONTAL}}{Specifies a horizontal scrollbar.}
+\twocolitem{\windowstyle{wxSB\_VERTICAL}}{Specifies a vertical scrollbar.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+A scrollbar has the following main attributes: {\it range}, {\it thumb size}, {\it page size}, and {\it position}.
+
+The range is the total number of units associated with the view represented by the scrollbar.
+For a table with 15 columns, the range would be 15.
+
+The thumb size is the number of units that are currently visible. For the table example, the window
+might be sized so that only 5 columns are currently visible, in which case the application would
+set the thumb size to 5. When the thumb size becomes the same as or greater than the range,
+the scrollbar will be automatically hidden on most platforms.
+
+The page size is the number of units that the scrollbar should scroll by, when `paging' through
+the data. This value is normally the same as the thumb size length, because
+it is natural to assume that the visible window size defines a page.
+
+The scrollbar position is the current thumb position.
+
+Most applications will find it convenient to provide a function called {\bf AdjustScrollbars} which can
+be called initially, from an {\bf OnSize} event handler, and whenever the application data
+changes in size. It will adjust the view, object and page size according
+to the size of the window and the size of the data.
+
+\wxheading{Event handling}
+
+To process input from a scrollbar, use one of these event handler macros to direct input to member
+functions that take a \helpref{wxScrollEvent}{wxscrollevent} argument:
+
+\twocolwidtha{7cm}
+\begin{twocollist}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL(id, func)}}{Catch all scroll commands.}
+\twocolitem{{\bf EVT\_COMMAND\_TOP(id, func)}}{Catch a command to put the scroll thumb at the maximum position.}
+\twocolitem{{\bf EVT\_COMMAND\_BOTTOM(id, func)}}{Catch a command to put the scroll thumb at the maximum position.}
+\twocolitem{{\bf EVT\_COMMAND\_LINEUP(id, func)}}{Catch a line up command.}
+\twocolitem{{\bf EVT\_COMMAND\_LINEDOWN(id, func)}}{Catch a line down command.}
+\twocolitem{{\bf EVT\_COMMAND\_PAGEUP(id, func)}}{Catch a page up command.}
+\twocolitem{{\bf EVT\_COMMAND\_PAGEDOWN(id, func)}}{Catch a page down command.}
+\twocolitem{{\bf EVT\_COMMAND\_THUMBTRACK(id, func)}}{Catch a thumbtrack command (continuous movement of the scroll thumb).}
+\end{twocollist}%
+%
+\wxheading{See also}
+
+\helpref{Scrolling overview}{scrollingoverview},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview},\rtfsp
+\helpref{wxScrolledWindow}{wxscrolledwindow}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxScrollBar::wxScrollBar}\label{wxscrollbarconstr}
+
+\func{}{wxScrollBar}{\void}
+
+Default constructor.
+
+\func{}{wxScrollBar}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSB\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``scrollBar"}}
+
+Constructor, creating and showing a scrollbar.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxScrollBar}{wxscrollbar}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::Create}{wxscrollbarcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxScrollBar::\destruct{wxScrollBar}}
+
+\func{void}{\destruct{wxScrollBar}}{\void}
+
+Destructor, destroying the scrollbar.
+
+\membersection{wxScrollBar::Create}\label{wxscrollbarcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSB\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``scrollBar"}}
+
+Scrollbar creation function called by the scrollbar constructor.
+See \helpref{wxScrollBar::wxScrollBar}{wxscrollbarconstr} for details.
+
+\membersection{wxScrollBar::GetRange}\label{wxscrollbargetrange}
+
+\constfunc{int}{GetRange}{\void}
+
+Returns the length of the scrollbar.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::SetScrollbar}{wxscrollbarsetscrollbar}
+
+\membersection{wxScrollBar::GetPageSize}\label{wxscrollbargetpagesize}
+
+\constfunc{int}{GetPageSize}{\void}
+
+Returns the page size of the scrollbar. This is the number of scroll units
+that will be scrolled when the user pages up or down. Often it is the
+same as the thumb size.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::SetScrollbar}{wxscrollbarsetscrollbar}
+
+\membersection{wxScrollBar::GetPosition}\label{wxscrollbargetposition}
+
+\constfunc{int}{GetPosition}{\void}
+
+Returns the current position of the scrollbar.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::SetPosition}{wxscrollbarsetposition}
+
+\membersection{wxScrollBar::GetThumbLength}\label{wxscrollbargetthumblength}
+
+\constfunc{int}{GetThumbLength}{\void}
+
+Returns the thumb or `view' size.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::SetScrollbar}{wxscrollbarsetscrollbar}
+
+\begin{comment}
+\membersection{wxScrollBar::SetObjectLength}\label{wxscrollbarsetobjectlength}
+
+\func{void}{SetObjectLength}{\param{const int}{ objectLength}}
+
+Sets the object length for the scrollbar. This is the total object size (virtual size). You must
+call \helpref{SetViewLength}{wxscrollbarsetviewlength} {\it before} calling SetObjectLength.
+
+\wxheading{Parameters}
+
+\docparam{objectLength}{The object length of the scrollbar.}
+
+\wxheading{Remarks}
+
+Example: you are implementing scrollbars on a text window, where text lines have a maximum width
+of 100 characters. Your text window has a current width of 60 characters. So the view length is 60,
+and the object length is 100. The scrollbar will then enable you to scroll to see the other 40 characters.
+
+You will need to call {\bf SetViewLength} and {\bf SetObjectLength} whenever there
+is a change in the size of the window (the view size) or the size of the
+contents (the object length).
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::GetObjectLength}{wxscrollbargetobjectlength}
+
+\membersection{wxScrollBar::SetPageSize}\label{wxscrollbarsetpagesize}
+
+\func{void}{SetPageSize}{\param{const int}{ pageSize}}
+
+Sets the page size for the scrollbar. This is the number of scroll units which are scrolled when the
+user pages down (clicks on the scrollbar outside the thumbtrack area).
+
+\wxheading{Parameters}
+
+\docparam{pageSize}{The page size in scroll units.}
+
+\wxheading{Remarks}
+
+At present, this needs to be called {\it before} other set functions.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::GetPageSize}{wxscrollbargetpagesize}
+\end{comment}
+
+\membersection{wxScrollBar::SetPosition}\label{wxscrollbarsetposition}
+
+\func{void}{SetPosition}{\param{const int}{ viewStart}}
+
+Sets the position of the scrollbar.
+
+\wxheading{Parameters}
+
+\docparam{viewStart}{The position of the scrollbar thumb.}
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::GetPosition}{wxscrollbargetposition}
+
+\membersection{wxScrollBar::SetScrollbar}\label{wxscrollbarsetscrollbar}
+
+\func{virtual void}{SetScrollbar}{\param{const int }{position},\rtfsp
+\param{const int }{thumbSize}, \param{const int }{range},\rtfsp
+\param{const int }{pageSize},\rtfsp
+\param{const bool }{refresh = TRUE}}
+
+Sets the scrollbar properties.
+
+\wxheading{Parameters}
+
+\docparam{position}{The position of the scrollbar in scroll units.}
+
+\docparam{thumbSize}{The size of the thumb, or visible portion of the scrollbar, in scroll units.}
+
+\docparam{range}{The maximum position of the scrollbar.}
+
+\docparam{pageSize}{The size of the page size in scroll units. This is the number of units
+the scrollbar will scroll when it is paged up or down. Often it is the same as
+the thumb size.}
+
+\docparam{refresh}{TRUE to redraw the scrollbar, FALSE otherwise.}
+
+\wxheading{Remarks}
+
+Let's say you wish to display 50 lines of text, using the same font.
+The window is sized so that you can only see 16 lines at a time.
+
+You would use:
+
+{\small%
+\begin{verbatim}
+ scrollbar->SetScrollbar(0, 16, 50, 15);
+\end{verbatim}
+}
+
+The page size is 1 less than the thumb size so that the last line of the previous
+page will be visible on the next page, to help orient the user.
+
+Note that with the window at this size, the thumb position can never go
+above 50 minus 16, or 34.
+
+You can determine how many lines are currently visible by dividing the current view
+size by the character height in pixels.
+
+When defining your own scrollbar behaviour, you will always need to recalculate
+the scrollbar settings when the window size changes. You could therefore put your
+scrollbar calculations and SetScrollbar
+call into a function named AdjustScrollbars, which can be called initially and also
+from a \helpref{wxWindow::OnSize}{wxwindowonsize} event handler function.
+
+\wxheading{See also}
+
+\helpref{Scrolling overview}{scrollingoverview},\rtfsp
+\helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar}, \helpref{wxScrolledWindow}{wxscrolledwindow}
+
+\begin{comment}
+\membersection{wxScrollBar::SetViewLength}\label{wxscrollbarsetviewlength}
+
+\func{void}{SetViewLength}{\param{const int}{ viewLength}}
+
+Sets the view length for the scrollbar.
+
+\wxheading{Parameters}
+
+\docparam{viewLength}{View length.}
+
+\wxheading{See also}
+
+\helpref{wxScrollBar::GetViewLength}{wxscrollbargetviewlength}
+\end{comment}
+
--- /dev/null
+\section{\class{wxScrollEvent}}\label{wxscrollevent}
+
+A scroll event holds information about events sent from scrollbars and scrolling windows.
+
+\wxheading{Derived from}
+
+\helpref{wxCommandEvent}{wxcommandevent}\\
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a scroll event, use these event handler macros to direct input to member
+functions that take a wxScrollEvent argument. You can use EVT\_COMMAND\_SCROLL... macros
+with window IDs for when intercepting scroll events from controls, or EVT\_SCROLL... macros
+without window IDs for intercepting scroll events from the receiving window.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_SCROLL(func)}}{Process all scroll events.}
+\twocolitem{{\bf EVT\_SCROLL\_TOP(func)}}{Process wxEVT\_SCROLL\_TOP scroll-to-top events.}
+\twocolitem{{\bf EVT\_SCROLL\_BOTTOM(func)}}{Process wxEVT\_SCROLL\_TOP scroll-to-bottom events.}
+\twocolitem{{\bf EVT\_SCROLL\_LINEUP(func)}}{Process wxEVT\_SCROLL\_LINEUP line up events.}
+\twocolitem{{\bf EVT\_SCROLL\_LINEDOWN(func)}}{Process wxEVT\_SCROLL\_LINEDOWN line down events.}
+\twocolitem{{\bf EVT\_SCROLL\_PAGEUP(func)}}{Process wxEVT\_SCROLL\_PAGEUP page up events.}
+\twocolitem{{\bf EVT\_SCROLL\_PAGEDOWN(func)}}{Process wxEVT\_SCROLL\_PAGEDOWN page down events.}
+\twocolitem{{\bf EVT\_SCROLL\_THUMBTRACK(func)}}{Process wxEVT\_SCROLL\_THUMBTRACK thumbtrack events (frequent events
+sent as the user drags the thumtrack).}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL(id, func)}}{Process all scroll events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_TOP(id, func)}}{Process wxEVT\_SCROLL\_TOP scroll-to-top events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_BOTTOM(id, func)}}{Process wxEVT\_SCROLL\_TOP scroll-to-bottom events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_LINEUP(id, func)}}{Process wxEVT\_SCROLL\_LINEUP line up events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_LINEDOWN(id, func)}}{Process wxEVT\_SCROLL\_LINEDOWN line down events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_PAGEUP(id, func)}}{Process wxEVT\_SCROLL\_PAGEUP page up events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_PAGEDOWN(id, func)}}{Process wxEVT\_SCROLL\_PAGEDOWN page down events.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL\_THUMBTRACK(id, func)}}{Process wxEVT\_SCROLL\_THUMBTRACK thumbtrack events (frequent events
+sent as the user drags the thumtrack).}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+Note that unless specifying a scroll control identifier, you will need to test for scrollbar
+orientation with \helpref{wxScrollEvent::GetOrientation}{wxscrolleventgetorientation}, since
+horizontal and vertical scroll events are processed using the same event handler.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnScroll}{wxwindowonscroll}, \helpref{wxScrollBar}{wxscrollbar}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxScrollEvent::wxScrollEvent}
+
+\func{}{wxScrollEvent}{\param{WXTYPE }{commandType = 0}, \param{int }{id = 0}, \param{int}{ pos = 0},
+\rtfsp\param{int}{ orientation = 0}}
+
+Constructor.
+
+\membersection{wxScrollEvent::GetOrientation}\label{wxscrolleventgetorientation}
+
+\constfunc{int}{GetOrientation}{\void}
+
+Returns wxHORIZONTAL or wxVERTICAL, depending on the orientation of the scrollbar.
+
+\membersection{wxScrollEvent::GetPosition}\label{wxscrolleventgetposition}
+
+\constfunc{int}{GetPosition}{\void}
+
+Returns the position of the scrollbar.
+
+
--- /dev/null
+\section{\class{wxScrolledWindow}}\label{wxscrolledwindow}
+
+The wxScrolledWindow class manages scrolling for its client area, transforming
+the coordinates according to the scrollbar positions, and setting the
+scroll positions, thumb sizes and ranges according to the area in view.
+
+As with all windows, an application can draw onto a wxScrolledWindow using a \helpref{device context}{dcoverview}.
+
+You have the option of handling the \helpref{OnPaint}{wxscrolledwindowonpaint} handler
+or overriding the \helpref{OnDraw}{wxscrolledwindowondraw} function, which is passed
+a pre-scrolled device context (prepared by \helpref{PrepareDC}{wxscrolledwindowpreparedc}).
+
+If you don't wish to calculate your own scrolling, you must call PrepareDC when not drawing from
+within OnDraw, to set the device origin for the device context according to the current
+scroll position.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxRETAINED}}{Uses a backing pixmap to speed refreshes. Motif only.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+Use wxScrolledWindow for applications where the user scrolls by a fixed amount, and
+where a `page' can be interpreted to be the current visible portion of the window. For
+more sophisticated applications, use the wxScrolledWindow implementation as a guide
+to build your own scroll behaviour.
+
+\wxheading{See also}
+
+\helpref{wxScrollBar}{wxscrollbar}, \helpref{wxClientDC}{wxclientdc}, \helpref{wxPaintDC}{wxpaintdc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxScrolledWindow::wxScrolledWindow}\label{wxscrolledwindowconstr}
+
+\func{}{wxScrolledWindow}{\void}
+
+Default constructor.
+
+\func{}{wxScrolledWindow}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id = -1},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxHSCROLL \pipe wxVSCROLL}, \param{const wxString\& }{name = ``scrolledWindow"}}
+
+Constructor.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If a position of (-1, -1) is specified then a default position
+is chosen.}
+
+\docparam{size}{Window size. If a size of (-1, -1) is specified then the window is sized
+appropriately.}
+
+\docparam{style}{Window style. See \helpref{wxScrolledWindow}{wxscrolledwindow}.}
+
+\docparam{name}{Window name.}
+
+\wxheading{Remarks}
+
+The window is initially created without visible scrollbars.
+Call \helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars} to
+specify how big the virtual window size should be.
+
+\membersection{wxScrolledWindow::\destruct{wxScrolledWindow}}
+
+\func{}{\destruct{wxScrolledWindow}}{\void}
+
+Destructor.
+
+\membersection{wxScrolledWindow::Create}\label{wxscrolledwindowcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id = -1},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxHSCROLL \pipe wxVSCROLL}, \param{const wxString\& }{name = ``scrolledWindow"}}
+
+Creates the window for two-step construction. Derived classes
+should call or replace this function. See \helpref{wxScrolledWindow::wxScrolledWindow}{wxscrolledwindowconstr}\rtfsp
+for details.
+
+\membersection{wxScrolledWindow::EnableScrolling}\label{wxscrolledwindowenablescrolling}
+
+\func{void}{EnableScrolling}{\param{const bool}{ xScrolling}, \param{const bool}{ yScrolling}}
+
+Enable or disable physical scrolling in the given direction. Physical
+scrolling is the physical transfer of bits up or down the
+screen when a scroll event occurs. If the application scrolls by a
+variable amount (e.g. if there are different font sizes) then physical
+scrolling will not work, and you should switch it off.
+
+\wxheading{Parameters}
+
+\docparam{xScrolling}{If TRUE, enables physical scrolling in the x direction.}
+
+\docparam{yScrolling}{If TRUE, enables physical scrolling in the y direction.}
+
+\wxheading{Remarks}
+
+Physical scrolling may not be available on all platforms. Where it is available, it is enabled
+by default.
+
+\membersection{wxScrolledWindow::GetScrollPixelsPerUnit}\label{wxscrolledwindowgetscrollpixelsperunit}
+
+\constfunc{void}{GetScrollPixelsPerUnit}{\param{int* }{xUnit}, \param{int* }{yUnit}}
+
+Get the number of pixels per scroll unit (line), in each direction, as set
+by \helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars}. A value of zero indicates no
+scrolling in that direction.
+
+\wxheading{Parameters}
+
+\docparam{xUnit}{Receives the number of pixels per horizontal unit.}
+
+\docparam{yUnit}{Receives the number of pixels per vertical unit.}
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars},\rtfsp
+\helpref{wxScrolledWindow::GetVirtualSize}{wxscrolledwindowgetvirtualsize},\rtfsp
+\helpref{wxWindow::GetScrollPage}{wxwindowgetscrollpage}
+
+\membersection{wxScrolledWindow::GetVirtualSize}\label{wxscrolledwindowgetvirtualsize}
+
+\constfunc{void}{GetVirtualSize}{\param{int* }{x}, \param{int* }{y}}
+
+Gets the size in device units of the scrollable window area (as
+opposed to the client size, which is the area of the window currently
+visible).
+
+\wxheading{Parameters}
+
+\docparam{x}{Receives the length of the scrollable window, in pixels.}
+
+\docparam{y}{Receives the height of the scrollable window, in pixels.}
+
+\wxheading{Remarks}
+
+Use \helpref{wxDC::DeviceToLogicalX}{wxdcdevicetologicalx} and \helpref{wxDC::DeviceToLogicalY}{wxdcdevicetologicaly}\rtfsp
+to translate these units to logical units.
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars},\rtfsp
+\helpref{wxScrolledWindow::GetScrollPixelsPerUnit}{wxscrolledwindowgetscrollpixelsperunit},\rtfsp
+\helpref{wxWindow::GetScrollPage}{wxwindowgetscrollpage}
+
+\membersection{wxScrolledWindow::IsRetained}\label{wxscrolledwindowisretained}
+
+\constfunc{bool}{IsRetained}{\void}
+
+TRUE if the window has a backing bitmap.
+
+\membersection{wxScrolledWindow::PrepareDC}\label{wxscrolledwindowpreparedc}
+
+\func{void}{PrepareDC}{\param{wxDC\& }{dc}}
+
+Call this function to prepare the device context for drawing a scrolled image. It
+sets the device origin according to the current scroll position.
+
+PrepareDC is called automatically within the default \helpref{wxScrolledWindow::OnPaint}{wxscrolledwindowonpaint} event
+handler, so your \helpref{wxScrolledWindow::OnDraw}{wxscrolledwindowondraw} override
+will be passed a 'pre-scrolled' device context. However, if you wish to draw from
+outside of OnDraw (via OnPaint), or you wish to implement OnPaint yourself, you must
+call this function yourself. For example:
+
+\begin{verbatim}
+void MyCanvas::OnEvent(wxMouseEvent& event)
+{
+ wxClientDC dc(this);
+ PrepareDC(dc);
+
+ dc.SetPen(*wxBLACK_PEN);
+ float x, y;
+ event.Position(&x, &y);
+ if (xpos > -1 && ypos > -1 && event.Dragging())
+ {
+ dc.DrawLine(xpos, ypos, x, y);
+ }
+ xpos = x;
+ ypos = y;
+}
+\end{verbatim}
+
+\membersection{wxScrolledWindow::OnDraw}\label{wxscrolledwindowondraw}
+
+\func{virtual void}{OnDraw}{\param{wxDC\& }{dc}}
+
+Called by the default \helpref{wxScrolledWindow::OnPaint}{wxscrolledwindowonpaint} implementation
+to allow the application to define painting behaviour without having to worry about
+calling \helpref{wxScrolledWindow::PrepareDC}{wxscrolledwindowpreparedc}.
+
+\membersection{wxScrolledWindow::OnPaint}\label{wxscrolledwindowonpaint}
+
+\func{void}{OnPaint}{\param{wxPaintEvent\& }{event}}
+
+Sent to the window when the window must be refreshed.
+
+For more details, see \helpref{wxWindow::OnPaint}{wxwindowonpaint}.
+
+The default implementation for wxScrolledWindow's OnPaint handler is simply:
+
+\begin{verbatim}
+void wxScrolledWindow::OnPaint(wxPaintEvent& event)
+{
+ wxPaintDC dc(this);
+ PrepareDC(dc);
+
+ OnDraw(dc);
+}
+\end{verbatim}
+
+\membersection{wxScrolledWindow::OnScroll}\label{wxscrolledwindowonscroll}
+
+\func{void}{OnScroll}{\param{wxScrollEvent\& }{event}}
+
+Override this function to intercept scroll events. This
+member function implements the default scroll behaviour. If
+you do not call the default function, you will have to manage
+all scrolling behaviour including drawing the window contents
+at an appropriate position relative to the scrollbars.
+
+For more details, see \helpref{wxWindow::OnScroll}{wxwindowonscroll}.
+
+\wxheading{See also}
+
+\helpref{wxScrollEvent}{wxscrollevent}
+
+\membersection{wxScrolledWindow::Scroll}\label{wxscrolledwindowscroll}
+
+\func{void}{Scroll}{\param{int}{ x}, \param{int}{ y}}
+
+Scrolls a window so the view start is at the given point.
+
+\wxheading{Parameters}
+
+\docparam{x}{The x position to scroll to, in scroll units.}
+
+\docparam{y}{The y position to scroll to, in scroll units.}
+
+\wxheading{Remarks}
+
+The positions are in scroll units, not pixels, so to convert to pixels you
+will have to multiply by the number of pixels per scroll increment.
+If either parameter is -1, that position will be ignored (no change in
+that direction).
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars},\rtfsp
+\helpref{wxScrolledWindow::GetScrollPixelsPerUnit}{wxscrolledwindowgetscrollpixelsperunit}
+
+\membersection{wxScrolledWindow::SetScrollbars}\label{wxscrolledwindowsetscrollbars}
+
+\func{void}{SetScrollbars}{\param{int}{ pixelsPerUnitX}, \param{int}{ pixelsPerUnitY},\rtfsp
+\param{int}{ noUnitsX}, \param{int}{ noUnitsY},\rtfsp
+\param{int }{xPos = 0}, \param{int}{ yPos = 0}}
+
+Sets up vertical and/or horizontal scrollbars.
+
+\wxheading{Parameters}
+
+\docparam{pixelsPerUnitX}{Pixels per scroll unit in the horizontal direction.}
+
+\docparam{pixelsPerUnitY}{Pixels per scroll unit in the vertical direction.}
+
+\docparam{noUnitsX}{Number of units in the horizontal direction.}
+
+\docparam{noUnitsY}{Number of units in the vertical direction.}
+
+\docparam{xPos}{Position to initialize the scrollbars in the horizontal direction, in scroll units.}
+
+\docparam{yPos}{Position to initialize the scrollbars in the vertical direction, in scroll units.}
+
+\wxheading{Remarks}
+
+The first pair of parameters give the number of pixels per `scroll step', i.e. amount
+moved when the up or down scroll arrows are pressed.
+The second pair gives the length of scrollbar in scroll steps, which sets the size of the virtual
+window.
+
+{\it xPos} and {\it yPos} optionally specify a position to scroll to immediately.
+
+For example, the following gives a window horizontal and vertical
+scrollbars with 20 pixels per scroll step, and a size of 50 steps (1000
+pixels) in each direction.
+
+\begin{verbatim}
+ window->SetScrollbars(20, 20, 50, 50);
+\end{verbatim}
+
+wxScrolledWindow manages the page size itself,
+using the current client window size as the page size.
+
+Note that for more sophisticated scrolling applications, for example where
+scroll steps may be variable according to the position in the document, it will be
+necessary to derive a new class from wxWindow, overriding {\bf OnSize} and
+adjusting the scrollbars appropriately.
+
+\membersection{wxScrolledWindow::ViewStart}\label{wxscrolledwindowviewstart}
+
+\constfunc{void}{ViewStart}{\param{int* }{x}, \param{int* }{ y}}
+
+Get the position at which the visible portion of the window starts.
+
+\wxheading{Parameters}
+
+\docparam{x}{Receives the first visible x position in scroll units.}
+
+\docparam{y}{Receives the first visible y position in scroll units.}
+
+\wxheading{Remarks}
+
+If either of the scrollbars is not at the home position, {\it x} and/or
+\rtfsp{\it y} will be greater than zero. Combined with \helpref{wxWindow::GetClientSize}{wxwindowgetclientsize},
+the application can use this function to efficiently redraw only the
+visible portion of the window. The positions are in logical scroll
+units, not pixels, so to convert to pixels you will have to multiply
+by the number of pixels per scroll increment.
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars}
+
--- /dev/null
+\section{\class{wxSystemSettings}}\label{wxsystemsettings}
+
+wxSystemSettings allows the application to ask for details about
+the system. This can include settings such as standard colours, fonts,
+and user interface element sizes.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxFont}{wxfont}, \helpref{wxColour}{wxcolour}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSystemSettings::wxSystemSettings}
+
+\func{}{wxSystemSettings}{\void}
+
+Default constructor. You don't need to create an instance of wxSystemSettings
+since all of its functions are static.
+
+\membersection{wxSystemSettings::GetSystemColour}\label{wxsystemsettingsgetsystemcolour}
+
+\func{static wxColour}{GetSystemColour}{\param{int}{ index}}
+
+Returns a system colour.
+
+{\it index} can be one of:
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxSYS\_COLOUR\_SCROLLBAR}}{The scrollbar grey area.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BACKGROUND}}{The desktop colour.}
+\twocolitem{{\bf wxSYS\_COLOUR\_ACTIVECAPTION}}{Active window caption.}
+\twocolitem{{\bf wxSYS\_COLOUR\_INACTIVECAPTION}}{Inactive window caption.}
+\twocolitem{{\bf wxSYS\_COLOUR\_MENU}}{Menu background.}
+\twocolitem{{\bf wxSYS\_COLOUR\_WINDOW}}{Window background.}
+\twocolitem{{\bf wxSYS\_COLOUR\_WINDOWFRAME}}{Window frame.}
+\twocolitem{{\bf wxSYS\_COLOUR\_MENUTEXT}}{Menu text.}
+\twocolitem{{\bf wxSYS\_COLOUR\_WINDOWTEXT}}{Text in windows.}
+\twocolitem{{\bf wxSYS\_COLOUR\_CAPTIONTEXT}}{Text in caption, size box and scrollbar arrow box.}
+\twocolitem{{\bf wxSYS\_COLOUR\_ACTIVEBORDER}}{Active window border.}
+\twocolitem{{\bf wxSYS\_COLOUR\_INACTIVEBORDER}}{Inactive window border.}
+\twocolitem{{\bf wxSYS\_COLOUR\_APPWORKSPACE}}{Background colour MDI applications.}
+\twocolitem{{\bf wxSYS\_COLOUR\_HIGHLIGHT}}{Item(s) selected in a control.}
+\twocolitem{{\bf wxSYS\_COLOUR\_HIGHLIGHTTEXT}}{Text of item(s) selected in a control.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BTNFACE}}{Face shading on push buttons.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BTNSHADOW}}{Edge shading on push buttons.}
+\twocolitem{{\bf wxSYS\_COLOUR\_GRAYTEXT}}{Greyed (disabled) text.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BTNTEXT}}{Text on push buttons.}
+\twocolitem{{\bf wxSYS\_COLOUR\_INACTIVECAPTIONTEXT}}{Colour of text in active captions.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BTNHIGHLIGHT}}{Highlight colour for buttons (same as wxSYS\_COLOUR\_3DHILIGHT).}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DDKSHADOW}}{Dark shadow for three-dimensional dispaly elements.}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DLIGHT}}{Light colour for three-dimensional display elements.}
+\twocolitem{{\bf wxSYS\_COLOUR\_INFOTEXT}}{Text colour for tooltip controls.}
+\twocolitem{{\bf wxSYS\_COLOUR\_INFOBK}}{Background colour for tooltip controls.}
+\twocolitem{{\bf wxSYS\_COLOUR\_DESKTOP}}{Same as wxSYS\_COLOUR\_BACKGROUND.}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DFACE}}{Same as wxSYS\_COLOUR\_BTNFACE.}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DSHADOW}}{Same as wxSYS\_COLOUR\_BTNSHADOW.}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DHIGHLIGHT}}{Same as wxSYS\_COLOUR\_BTNHIGHLIGHT.}
+\twocolitem{{\bf wxSYS\_COLOUR\_3DHILIGHT}}{Same as wxSYS\_COLOUR\_BTNHIGHLIGHT.}
+\twocolitem{{\bf wxSYS\_COLOUR\_BTNHILIGHT}}{Same as wxSYS\_COLOUR\_BTNHIGHLIGHT.}
+\end{twocollist}
+
+\membersection{wxSystemSettings::GetSystemFont}\label{wxsystemsettingsgetsystemfont}
+
+\func{static wxFont}{GetSystemFont}{\param{int}{ index}}
+
+Returns a system font.
+
+{\it index} can be one of:
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxSYS\_OEM\_FIXED\_FONT}}{Original equipment manufacturer dependent fixed-pitch font.}
+\twocolitem{{\bf wxSYS\_ANSI\_FIXED\_FONT}}{Windows fixed-pitch font.}
+\twocolitem{{\bf wxSYS\_ANSI\_VAR\_FONT}}{Windows variable-pitch (proportional) font.}
+\twocolitem{{\bf wxSYS\_SYSTEM\_FONT}}{System font.}
+\twocolitem{{\bf wxSYS\_DEVICE\_DEFAULT\_FONT}}{Device-dependent font (Windows NT only).}
+\twocolitem{{\bf wxSYS\_DEFAULT\_GUI\_FONT}}{Default font for user interface objects such as menus and dialog boxes.
+Not available in versions of Windows earlier than Windows 95 or Windows NT 4.0.}
+\end{twocollist}
+
+\membersection{wxSystemSettings::GetSystemMetric}\label{wxsystemsettingsgetsystemmetric}
+
+\func{static int}{GetSystemMetric}{\param{int}{ index}}
+
+Returns a system metric.
+
+{\it index} can be one of:
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxSYS\_MOUSE\_BUTTONS}}{Number of buttons on mouse, or zero if no mouse was installed.}
+\twocolitem{{\bf wxSYS\_BORDER\_X}}{Width of single border.}
+\twocolitem{{\bf wxSYS\_BORDER\_Y}}{Height of single border.}
+\twocolitem{{\bf wxSYS\_CURSOR\_X}}{Width of cursor.}
+\twocolitem{{\bf wxSYS\_CURSOR\_Y}}{Height of cursor.}
+\twocolitem{{\bf wxSYS\_DCLICK\_X}}{Width in pixels of rectangle within which two successive mouse
+clicks must fall to generate a double-click.}
+\twocolitem{{\bf wxSYS\_DCLICK\_Y}}{Height in pixels of rectangle within which two successive mouse
+clicks must fall to generate a double-click.}
+\twocolitem{{\bf wxSYS\_DRAG\_X}}{Width in pixels of a rectangle centered on a drag point
+to allow for limited movement of the mouse pointer before a drag operation begins.}
+\twocolitem{{\bf wxSYS\_DRAG\_Y}}{Height in pixels of a rectangle centered on a drag point
+to allow for limited movement of the mouse pointer before a drag operation begins.}
+\twocolitem{{\bf wxSYS\_EDGE\_X}}{Width of a 3D border, in pixels. }
+\twocolitem{{\bf wxSYS\_EDGE\_Y}}{Height of a 3D border, in pixels. }
+\twocolitem{{\bf wxSYS\_HSCROLL\_ARROW\_X}}{Width of arrow bitmap on horizontal scrollbar.}
+\twocolitem{{\bf wxSYS\_HSCROLL\_ARROW\_Y}}{Height of arrow bitmap on horizontal scrollbar.}
+\twocolitem{{\bf wxSYS\_HTHUMB\_X}}{Width of horizontal scrollbar thumb.}
+\twocolitem{{\bf wxSYS\_ICON\_X}}{The default width of an icon.}
+\twocolitem{{\bf wxSYS\_ICON\_Y}}{The default height of an icon.}
+\twocolitem{{\bf wxSYS\_ICONSPACING\_X}}{Width of a grid cell for items in large icon view,
+in pixels. Each item fits into a rectangle of this size when arranged.}
+\twocolitem{{\bf wxSYS\_ICONSPACING\_Y}}{Height of a grid cell for items in large icon view,
+in pixels. Each item fits into a rectangle of this size when arranged.}
+\twocolitem{{\bf wxSYS\_WINDOWMIN\_X}}{Minimum width of a window.}
+\twocolitem{{\bf wxSYS\_WINDOWMIN\_Y}}{Minimum height of a window.}
+\twocolitem{{\bf wxSYS\_SCREEN\_X}}{Width of the screen in pixels.}
+\twocolitem{{\bf wxSYS\_SCREEN\_Y}}{Height of the screen in pixels.}
+\twocolitem{{\bf wxSYS\_FRAMESIZE\_X}}{Width of the window frame for a wxTHICK\_FRAME window.}
+\twocolitem{{\bf wxSYS\_FRAMESIZE\_Y}}{Height of the window frame for a wxTHICK\_FRAME window.}
+\twocolitem{{\bf wxSYS\_SMALLICON\_X}}{Recommended width of a small icon (in window captions, and small icon view).}
+\twocolitem{{\bf wxSYS\_SMALLICON\_Y}}{Recommended height of a small icon (in window captions, and small icon view).}
+\twocolitem{{\bf wxSYS\_HSCROLL\_Y}}{Height of horizontal scrollbar in pixels.}
+\twocolitem{{\bf wxSYS\_VSCROLL\_X}}{Width of vertical scrollbar in pixels.}
+\twocolitem{{\bf wxSYS\_VSCROLL\_ARROW\_X}}{Width of arrow bitmap on a vertical scrollbar.}
+\twocolitem{{\bf wxSYS\_VSCROLL\_ARROW\_Y}}{Height of arrow bitmap on a vertical scrollbar.}
+\twocolitem{{\bf wxSYS\_VTHUMB\_Y}}{Height of vertical scrollbar thumb.}
+\twocolitem{{\bf wxSYS\_CAPTION\_Y}}{Height of normal caption area.}
+\twocolitem{{\bf wxSYS\_MENU\_Y}}{Height of single-line menu bar.}
+\twocolitem{{\bf wxSYS\_NETWORK\_PRESENT}}{1 if there is a network present, 0 otherwise.}
+\twocolitem{{\bf wxSYS\_PENWINDOWS\_PRESENT}}{1 if PenWindows is installed, 0 otherwise.}
+\twocolitem{{\bf wxSYS\_SHOW\_SOUNDS}}{Non-zero if the user requires an application to present information visually in situations
+where it would otherwise present the information only in audible form; zero otherwise.}
+\twocolitem{{\bf wxSYS\_SWAP\_BUTTONS}}{Non-zero if the meanings of the left and right mouse buttons are swapped; zero otherwise.}
+\end{twocollist}
+
--- /dev/null
+\section{\class{wxSize}}\label{wxsize}
+
+A {\bf wxSize} is a useful data structure for graphics operations.
+It simply contains integer {\it x} and {\it y} members.
+
+\wxheading{Derivation}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxPoint}{wxpoint}, \helpref{wxRealPoint}{wxrealpoint}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSize::wxSize}
+
+\func{}{wxSize}{\void}
+
+\func{}{wxSize}{\param{int}{ x}, \param{int}{ y}}
+
+Creates a size object.
+
+\membersection{wxSize::x}
+
+\member{int}{x}
+
+x member.
+
+\membersection{wxSize::y}
+
+\member{int}{ y}
+
+y member.
+
+\membersection{wxSize::GetX}\label{wxsizegetx}
+
+\constfunc{int}{GetX}{\void}
+
+Gets the x member.
+
+\membersection{wxSize::GetY}\label{wxsizegety}
+
+\constfunc{int}{GetY}{\void}
+
+Gets the y member.
+
+\membersection{wxSize::Set}\label{wxsizeset}
+
+\func{void}{Set}{\param{int}{ x}, \param{int}{ y}}
+
+Sets the x and y members.
+
+\membersection{wxSize::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxSize\& }{sz}}
+
+Assignment operator.
+
+
--- /dev/null
+\section{\class{wxSizeEvent}}\label{wxsizeevent}
+
+A size event holds information about size change events.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a size event, use this event handler macro to direct input to a member
+function that takes a wxSizeEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_SIZE(func)}}{Process a wxEVT\_SIZE event.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnSize}{wxwindowonsize}, \helpref{wxSize}{wxsize}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSizeEvent::wxSizeEvent}
+
+\func{}{wxSizeEvent}{\param{const wxSize\& }{sz}, \param{int }{id = 0}}
+
+Constructor.
+
+\membersection{wxSizeEvent::GetSize}\label{wxsizeeventgetsize}
+
+\constfunc{wxSize}{GetSize}{\void}
+
+Returns the entire size of the window generating the size change event.
+
--- /dev/null
+\section{\class{wxSlider}}\label{wxslider}
+
+A slider is a control with a handle which can be pulled
+back and forth to change the value.
+
+In Windows versions below Windows 95, a scrollbar is used to simulate the slider. In Windows 95,
+the track bar control is used.
+
+Slider events are handled in the same way as a scrollbar.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxSL\_HORIZONTAL}}{Displays the slider horizontally.}
+\twocolitem{\windowstyle{wxSL\_VERTICAL}}{Displays the slider vertically.}
+\twocolitem{\windowstyle{wxSL\_AUTOTICKS}}{Displays tick marks.}
+\twocolitem{\windowstyle{wxSL\_LABELS}}{Displays minimum, maximum and value labels.}
+\twocolitem{\windowstyle{wxSL\_LEFT}}{Displays ticks on the left, if a vertical slider.}
+\twocolitem{\windowstyle{wxSL\_RIGHT}}{Displays ticks on the right, if a vertical slider.}
+\twocolitem{\windowstyle{wxSL\_TOP}}{Displays ticks on the top, if a horizontal slider.}
+\twocolitem{\windowstyle{wxSL\_SELRANGE}}{Allows the user to select a range on the slider. Windows 95 only.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}, \helpref{wxScrollBar}{wxscrollbar}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSlider::wxSlider}\label{wxsliderconstr}
+
+\func{}{wxSlider}{\void}
+
+Default slider.
+
+\func{}{wxSlider}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const int }{value },\rtfsp
+\param{const int}{ minValue}, \param{const int}{ maxValue},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSL\_HORIZONTAL},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``slider"}}
+
+Constructor, creating and showing a slider.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{value}{Initial position for the slider.}
+
+\docparam{minValue}{Minimum slider position.}
+
+\docparam{maxValue}{Maximum slider position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxSlider}{wxslider}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxSlider::Create}{wxslidercreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxSlider::\destruct{wxSlider}}
+
+\func{void}{\destruct{wxSlider}}{\void}
+
+Destructor, destroying the slider.
+
+\membersection{wxSlider::ClearSel}\label{wxsliderclearsel}
+
+\func{void}{ClearSel}{\void}
+
+Clears the selection, for a slider with the {\bf wxSL\_SELRANGE} style.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\membersection{wxSlider::ClearTicks}\label{wxsliderclearticks}
+
+\func{void}{ClearTicks}{\void}
+
+Clears the ticks.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\membersection{wxSlider::Create}\label{wxslidercreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const int }{value },\rtfsp
+\param{const int}{ minValue}, \param{const int}{ maxValue},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSL\_HORIZONTAL},\rtfsp
+\param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``slider"}}
+
+Used for two-step slider construction. See \helpref{wxSlider::wxSlider}{wxsliderconstr}\rtfsp
+for further details.
+
+\membersection{wxSlider::GetLineSize}\label{wxslidergetlinesize}
+
+\constfunc{int}{GetLineSize}{\void}
+
+Returns the line size.
+
+\wxheading{See also}
+
+\helpref{wxSlider::SetLineSize}{wxslidersetlinesize}
+
+\membersection{wxSlider::GetMax}\label{wxslidergetmax}
+
+\constfunc{int}{GetMax}{\void}
+
+Gets the maximum slider value.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetMin}{wxslidergetmin}, \helpref{wxSlider::SetRange}{wxslidersetrange}
+
+\membersection{wxSlider::GetMin}\label{wxslidergetmin}
+
+\constfunc{int}{GetMin}{\void}
+
+Gets the minimum slider value.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetMin}{wxslidergetmin}, \helpref{wxSlider::SetRange}{wxslidersetrange}
+
+\membersection{wxSlider::GetPageSize}\label{wxslidergetpagesize}
+
+\constfunc{int}{GetPageSize}{\void}
+
+Returns the page size.
+
+\wxheading{See also}
+
+\helpref{wxSlider::SetPageSize}{wxslidersetpagesize}
+
+\membersection{wxSlider::GetSelEnd}\label{wxslidergetselend}
+
+\constfunc{int}{GetSelEnd}{\void}
+
+Returns the selection end point.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetSelStart}{wxslidergetselstart}, \helpref{wxSlider::SetSelection}{wxslidersetselection}
+
+\membersection{wxSlider::GetSelStart}\label{wxslidergetselstart}
+
+\constfunc{int}{GetSelStart}{\void}
+
+Returns the selection start point.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetSelEnd}{wxslidergetselend}, \helpref{wxSlider::SetSelection}{wxslidersetselection}
+
+\membersection{wxSlider::GetThumbLength}\label{wxslidergetthumblength}
+
+\constfunc{int}{GetThumbLength}{\void}
+
+Returns the thumb length.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::SetThumbLength}{wxslidersetthumblength}
+
+\membersection{wxSlider::GetTickFreq}\label{wxslidergettickfreq}
+
+\constfunc{int}{GetTickFreq}{\void}
+
+Returns the tick frequency.
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::SetTickFreq}{wxslidersettickfreq}
+
+\membersection{wxSlider::GetValue}\label{wxslidergetvalue}
+
+\constfunc{int}{GetValue}{\void}
+
+Gets the current slider value.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetMin}{wxslidergetmin}, \helpref{wxSlider::GetMax}{wxslidergetmax},\rtfsp
+\helpref{wxSlider::SetValue}{wxslidersetvalue}
+
+\membersection{wxSlider::SetRange}\label{wxslidersetrange}
+
+\func{void}{SetRange}{\param{const int}{ minValue}, \param{const int}{ maxValue}}
+
+Sets the minimum and maximum slider values.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetMin}{wxslidergetmin}, \helpref{wxSlider::GetMax}{wxslidergetmax}
+
+\membersection{wxSlider::SetTickFreq}\label{wxslidersettickfreq}
+
+\func{void}{SetTickFreq}{\param{const int }{n}, \param{const int }{pos}}
+
+Sets the tick mark frequency and position.
+
+\wxheading{Parameters}
+
+\docparam{n}{Frequency. For example, if the frequency is set to two, a tick mark is displayed for
+every other increment in the slider's range.}
+
+\docparam{pos}{Position. Must be greater than zero. TODO: what is this for?}
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetTickFreq}{wxslidergettickfreq}
+
+\membersection{wxSlider::SetLineSize}\label{wxslidersetlinesize}
+
+\func{void}{SetLineSize}{\param{const int }{lineSize}}
+
+Sets the line size for the slider.
+
+\wxheading{Parameters}
+
+\docparam{lineSize}{The number of steps the slider moves when the user moves it up or down a line.}
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetLineSize}{wxslidergetlinesize}
+
+\membersection{wxSlider::SetPageSize}\label{wxslidersetpagesize}
+
+\func{void}{SetPageSize}{\param{const int }{pageSize}}
+
+Sets the page size for the slider.
+
+\wxheading{Parameters}
+
+\docparam{pageSize}{The number of steps the slider moves when the user pages up or down.}
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetPageSize}{wxslidergetpagesize}
+
+\membersection{wxSlider::SetSelection}\label{wxslidersetselection}
+
+\func{void}{SetSelection}{\param{const int }{startPos}, \param{const int }{endPos}}
+
+Sets the selection.
+
+\wxheading{Parameters}
+
+\docparam{startPos}{The selection start position.}
+
+\docparam{endPos}{The selection end position.}
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetSelStart}{wxslidergetselstart}, \helpref{wxSlider::GetSelEnd}{wxslidergetselend}
+
+\membersection{wxSlider::SetThumbLength}\label{wxslidersetthumblength}
+
+\func{void}{SetThumbLength}{\param{const int }{len}}
+
+Sets the slider thumb length.
+
+\wxheading{Parameters}
+
+\docparam{len}{The thumb length.}
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetThumbLength}{wxslidergetthumblength}
+
+\membersection{wxSlider::SetTick}\label{wxslidersettick}
+
+\func{void}{SetTick}{\param{const int}{ tickPos}}
+
+Sets a tick position.
+
+\wxheading{Parameters}
+
+\docparam{tickPos}{The tick position.}
+
+\wxheading{Remarks}
+
+Windows 95 only.
+
+\wxheading{See also}
+
+\helpref{wxSlider::SetTickFreq}{wxslidersettickfreq}
+
+\membersection{wxSlider::SetValue}\label{wxslidersetvalue}
+
+\func{void}{SetValue}{\param{const int}{ value}}
+
+Sets the slider position.
+
+\wxheading{Parameters}
+
+\docparam{value}{The slider position.}
+
+\wxheading{See also}
+
+\helpref{wxSlider::GetValue}{wxslidergetvalue}
+
--- /dev/null
+\section{\class{wxSingleChoiceDialog}}\label{wxsinglechoicedialog}
+
+This class represents a dialog that shows a list of strings, and allows
+the user to select one. Double-clicking on a list item is equivalent to single-clicking
+and then pressing OK.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxSingleChoiceDialog overview}{wxsinglechoicedialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSingleChoiceDialog::wxSingleChoiceDialog}\label{wxsinglechoicedialogconstr}
+
+\func{}{wxSingleChoiceDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message},\rtfsp
+\param{const wxString\& }{caption}, \param{const int }{n}, \param{const wxString* }{choices},\rtfsp
+\param{char**}{ clientData = NULL}, \param{long }{style = wxOK \pipe wxCANCEL \pipe wxCENTRE},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor, taking an array of wxString choices and optional client data.
+
+\func{}{wxSingleChoiceDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message},\rtfsp
+\param{const wxString\& }{caption}, \param{const wxStringList\& }{choices},\rtfsp
+\param{char**}{ clientData = NULL}, \param{long }{style = wxOK \pipe wxCANCEL \pipe wxCENTRE},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor, taking a string list and optional client data.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{message}{Message to show on the dialog.}
+
+\docparam{caption}{The dialog caption.}
+
+\docparam{n}{The number of choices.}
+
+\docparam{choices}{An array of strings, or a string list, containing the choices.}
+
+\docparam{style}{A dialog style (bitlist) containing flags chosen from the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxOK}}{Show an OK button.}
+\twocolitem{{\bf wxCANCEL}}{Show a Cancel button.}
+\twocolitem{{\bf wxCENTRE}}{Centre the message. Not Windows.}
+\end{twocollist}
+}
+
+\docparam{pos}{Dialog position. Not Windows.}
+
+\wxheading{Remarks}
+
+Use \helpref{wxSingleChoiceDialog::ShowModal}{wxsinglechoicedialogshowmodal} to show the dialog.
+
+
+\membersection{wxSingleChoiceDialog::\destruct{wxSingleChoiceDialog}}
+
+\func{}{\destruct{wxSingleChoiceDialog}}{\void}
+
+Destructor.
+
+\membersection{wxSingleChoiceDialog::GetSelection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Returns the index of selected item.
+
+\membersection{wxSingleChoiceDialog::GetSelectionClientData}
+
+\constfunc{char*}{GetSelectionClientData}{\void}
+
+Returns the client data associated with the selection.
+
+\membersection{wxSingleChoiceDialog::GetStringSelection}
+
+\constfunc{wxString}{GetStringSelection}{\void}
+
+Returns the selected string.
+
+\membersection{wxSingleChoiceDialog::ShowModal}\label{wxsinglechoicedialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning either wxID\_OK or wxID\_CANCEL.
+
--- /dev/null
+\section{\class{wxSpinButton}}\label{wxspinbutton}
+
+A wxSpinButton has two small up and down (or left and right) arrow buttons. It is often
+used next to a text control for increment and decrementing a value.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxSP\_HORIZONTAL}}{Specifies a horizontal spin button.}
+\twocolitem{\windowstyle{wxSP\_VERTICAL}}{Specifies a vertical spin button.}
+\twocolitem{\windowstyle{wxSP\_ARROW\_KEYS}}{The user can use arrow keys.}
+\twocolitem{\windowstyle{wxSP\_WRAP}}{The value wraps at the minimum and maximum.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+TODO
+
+\wxheading{Event handling}
+
+To process input from a spin button, use one of these event handler macros to direct input to member
+functions that take a \helpref{wxScrollEvent}{wxscrollevent} argument:
+
+\twocolwidtha{7cm}
+\begin{twocollist}
+\twocolitem{{\bf EVT\_SPIN(id, func)}}{Catch all scroll commands.}
+\twocolitem{{\bf EVT\_SPIN\_UP(id, func)}}{Catch up (or left) commands.}
+\twocolitem{{\bf EVT\_SPIN\_DOWN(id, func)}}{Catch down (or right) commands.}
+\twocolitem{{\bf EVT\_COMMAND\_TOP(id, func)}}{Catch a command to put the scroll thumb at the maximum position.}
+\twocolitem{{\bf EVT\_COMMAND\_SCROLL(id, func)}}{Catch all scroll commands.}
+\twocolitem{{\bf EVT\_COMMAND\_TOP(id, func)}}{Catch a command to put the scroll thumb at the maximum position.}
+\twocolitem{{\bf EVT\_COMMAND\_BOTTOM(id, func)}}{Catch a command to put the scroll thumb at the maximum position.}
+\twocolitem{{\bf EVT\_COMMAND\_LINEUP(id, func)}}{Catch a line up command.}
+\twocolitem{{\bf EVT\_COMMAND\_LINEDOWN(id, func)}}{Catch a line down command.}
+\twocolitem{{\bf EVT\_COMMAND\_PAGEUP(id, func)}}{Catch a page up command.}
+\twocolitem{{\bf EVT\_COMMAND\_PAGEDOWN(id, func)}}{Catch a page down command.}
+\twocolitem{{\bf EVT\_COMMAND\_THUMBTRACK(id, func)}}{Catch a thumbtrack command (continuous movement of the scroll thumb).}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSpinButton::wxSpinButton}\label{wxspinbuttonconstr}
+
+\func{}{wxSpinButton}{\void}
+
+Default constructor.
+
+\func{}{wxSpinButton}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSP\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``spinButton"}}
+
+Constructor, creating and showing a spin button.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxSpinButton}{wxspinbutton}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::Create}{wxspinbuttoncreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxSpinButton::\destruct{wxSpinButton}}
+
+\func{void}{\destruct{wxSpinButton}}{\void}
+
+Destructor, destroying the spin button.
+
+\membersection{wxSpinButton::Create}\label{wxspinbuttoncreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxSP\_HORIZONTAL}, \param{const wxValidator\& }{validator = wxDefaultValidator},\rtfsp
+\param{const wxString\& }{name = ``spinButton"}}
+
+Scrollbar creation function called by the spin button constructor.
+See \helpref{wxSpinButton::wxSpinButton}{wxspinbuttonconstr} for details.
+
+\membersection{wxSpinButton::GetMax}\label{wxspinbuttongetmax}
+
+\constfunc{int}{GetMax}{\void}
+
+Returns the maximum permissable value.
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::SetRange}{wxspinbuttonsetrange}
+
+\membersection{wxSpinButton::GetMin}\label{wxspinbuttongetmin}
+
+\constfunc{int}{GetMin}{\void}
+
+Returns the minimum permissable value.
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::SetRange}{wxspinbuttonsetrange}
+
+\membersection{wxSpinButton::GetValue}\label{wxspinbuttongetvalue}
+
+\constfunc{int}{GetValue}{\void}
+
+Returns the current spin button value.
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::SetValue}{wxspinbuttonsetvalue}
+
+\membersection{wxSpinButton::SetRange}\label{wxspinbuttonsetrange}
+
+\func{void}{SetRange}{\param{const int}{ min}, \param{const int}{ max}}
+
+Sets the range of the spin button.
+
+\wxheading{Parameters}
+
+\docparam{min}{The minimum value for the spin button.}
+
+\docparam{max}{The maximum value for the spin button.}
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::GetMin}{wxspinbuttongetmin}, \helpref{wxSpinButton::GetMax}{wxspinbuttongetmax}
+
+\membersection{wxSpinButton::SetValue}\label{wxspinbuttonsetvalue}
+
+\func{void}{SetValue}{\param{const int}{ value}}
+
+Sets the value of the spin button.
+
+\wxheading{Parameters}
+
+\docparam{value}{The value for the spin button.}
+
+\wxheading{See also}
+
+\helpref{wxSpinButton::GetValue}{wxspinbuttongetvalue}
+
--- /dev/null
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 400 282
+%%Creator: JASC, Inc.
+%%Title: D:\wx2\docs\latex\wx\splitter.eps
+%%CreationDate: 0
+%%EndComments
+/width 400 def
+/height 282 def
+/pixwidth 400 def
+/pixheight 282 def
+/picstr width string def
+/psppic {
+gsave width height 8
+[width 0 0 height 0 height neg]
+{currentfile picstr readhexstring pop}
+false 3 colorimage grestore } def
+0 height neg translate pixwidth pixheight scale
+psppic
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+C0C0C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0000000000000000000000000000000C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0000000000000000000000000000000C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000000000000000000000000000FF0000FF0000FF0000FF0000000000000000000000000000FF0000FF0000FF0000FF0000000000000000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000000000000000000000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00FFFF00FFFF00000000000000FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00000000000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000000000000000000000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00000000000000000000FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000FF0000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000000000000000000000000000000000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00000000000000000000000000000000000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000000000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000000000FF0000FF0000FF0000000000000000000000000000FF0000FF0000FF0000FF0000000000000000000000000000FF0000FF0000000000000000000000000000FF0000000000000000FF0000FF0000000000000000000000000000000000FF0000FF0000FF0000FF0000000000000000000000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00000000FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00FFFF00FFFF00000000000000000000000000FFFF00FFFF00000000000000000000000000FFFF00000000000000FFFF00FFFF00000000000000000000000000000000FFFF00FFFF00FFFF00FFFF00000000000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000000000000000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000000000000000000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFFFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0808080808080808080808080808080808080808080808080808080808080808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0000000000000000000000000000000C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0000000000000000000000000000000C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000FF0000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000FFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C080808000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0C0C0FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080FFFFFFC0C0C0C0C0C0C0C0C0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080FFFFFFC0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0000000C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000000000000000000000C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000000000000000000000000000C0C0C0000000C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080000000808080808080000000808000808000808000808000808000808000000000008000008000000000808080000000000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00008000008000008000808080FFFFFF808080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00008000008000008000808080FFFFFF808080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFF808080808080808080808080808080808080808080808080808080808080808080808080808080808080000000FFFFFF808080808080808080808080808080808080808080808080808080808080808080808080808080808080000000000080000080FFFFFF808080808080808080808080808080808080808080808080808080808080808080808080808080808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080808000808000808000808000808000808000000000008000008000808080FFFFFF808080000080000080000080FFFFFF000080000080000080FFFFFF000080000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFF808080000080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000000000000000000000000000000000000000000000000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFF808080000080000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080000080000080FFFFFFFFFFFFFFFFFF000080000080FFFFFF000080000080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080000080000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080FFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFF808080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFF000080000080000080FFFFFFFFFFFFFFFFFF000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080FFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFF808080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000808080000000000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080808080FFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080000000808080808080000000808080808080808080808080808080808080808080808080808080000000000080000000000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFF000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000000000000000000000000000000000000000000000000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0C0C0C0C0C0C0000000000000C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080800000FF0000FF0000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0000000000000000000000000000000000000000000000000000000C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080800000FF0000FF0000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080800000FF0000FF0000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000080000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080000000800000800000000000808080808080808080808080808080808080808080808080808080808080808080000000000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080000080C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0808080000000
+C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000
+%%Trailer
--- /dev/null
+\section{\class{wxSplitterWindow}}\label{wxsplitterwindow}
+
+\overview{wxSplitterWindow overview}{wxsplitterwindowoverview}
+
+This class manages up to two subwindows. The current view can be
+split into two programmatically (perhaps from a menu command), and unsplit
+either programmatically or via the wxSplitterWindow user interface.
+
+Appropriate 3D shading for the Windows 95 user interface is an option.
+
+\wxheading{Window styles}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxSP\_3D}}{Draws a 3D effect border and sash.}
+\twocolitem{\windowstyle{wxSP\_BORDER}}{Draws a thin black border around the window, and a black sash.}
+\twocolitem{\windowstyle{wxSP\_NOBORDER}}{No border, and a black sash.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Derived from}
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSplitterWindow::wxSplitterWindow}\label{wxsplitterwindowconstr}
+
+\func{}{wxSplitterWindow}{\void}
+
+Default constructor.
+
+\func{}{wxSplitterWindow}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id}, \param{int }{x},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long }{style=wxSP\_3D}, \param{const wxString\&}{ name = "splitterWindow"}}
+
+Constructor for creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The parent of the splitter window.}
+
+\docparam{id}{The window identifier.}
+
+\docparam{pos}{The window position.}
+
+\docparam{size}{The window size.}
+
+\docparam{style}{The window style. See \helpref{wxSplitterWindow}{wxsplitterwindow}.}
+
+\docparam{name}{The window name.}
+
+\wxheading{Remarks}
+
+After using this constructor, you must create either one or two subwindows
+with the splitter window as parent, and then call one of \helpref{wxSplitterWindow::Initialize}{wxsplitterwindowinitialize},\rtfsp
+\helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically} and \helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally} in
+order to set the pane(s).
+
+You can create two windows, with one hidden when not being shown; or you can
+create and delete the second pane on demand.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::Initialize}{wxsplitterwindowinitialize}, \helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically},\rtfsp
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally},\rtfsp
+\helpref{wxSplitterWindow::Create}{wxsplitterwindowcreate}
+
+\membersection{wxSplitterWindow::\destruct{wxSplitterWindow}}
+
+\func{}{\destruct{wxSplitterWindow}}{\void}
+
+Destroys the wxSplitterWindow and its children.
+
+\membersection{wxSplitterWindow::Create}\label{wxsplitterwindowcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id}, \param{int }{x},\rtfsp
+\param{const wxPoint\& }{point = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long }{style=wxSP\_3D}, \param{const wxString\&}{ name = "splitterWindow"}}
+
+Creation function, for two-step construction. See \helpref{wxSplitterWindow::wxSplitterWindow}{wxsplitterwindowconstr} for
+details.
+
+\membersection{wxSplitterWindow::GetMinimumPaneSize}\label{wxsplitterwindowgetminimumpanesize}
+
+\constfunc{int}{GetMinimumPaneSize}{\void}
+
+Returns the current minimum pane size (defaults to zero).
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SetMinimumPaneSize}{wxsplitterwindowsetminimumpanesize}
+
+\membersection{wxSplitterWindow::GetSashPosition}\label{wxsplitterwindowgetsashposition}
+
+\func{int}{GetSashPosition}{\void}
+
+Returns the current sash position.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SetSashPosition}{wxsplitterwindowsetsashposition}
+
+\membersection{wxSplitterWindow::GetSplitMode}\label{wxsplitterwindowgetsplitmode}
+
+\constfunc{int}{GetSplitMode}{\void}
+
+Gets the split mode.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SetSplitMode}{wxsplitterwindowsetsplitmode}, \helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically},\rtfsp
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally}.
+
+\membersection{wxSplitterWindow::GetWindow1}\label{wxsplitterwindowgetwindow1}
+
+\constfunc{wxWindow*}{GetWindow1}{\void}
+
+Returns the left/top or only pane.
+
+\membersection{wxSplitterWindow::GetWindow2}\label{wxsplitterwindowgetwindow2}
+
+\constfunc{wxWindow*}{GetWindow2}{\void}
+
+Returns the right/bottom pane.
+
+\membersection{wxSplitterWindow::Initialize}\label{wxsplitterwindowinitialize}
+
+\func{void}{Initialize}{\param{wxWindow* }{window}}
+
+Initializes the splitter window to have one pane.
+
+\wxheading{Parameters}
+
+\docparam{window}{The pane for the unsplit window.}
+
+\wxheading{Remarks}
+
+This should be called if you wish to initially view only a single pane in the splitter window.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically},\rtfsp
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally}.
+
+\membersection{wxSplitterWindow::IsSplit}\label{wxsplitterwindowissplit}
+
+\constfunc{bool}{IsSplit}{\void}
+
+Returns TRUE if the window is split, FALSE otherwise.
+
+\membersection{wxSplitterWindow::OnDoubleClickSash}\label{wxsplitterwindowondoubleclicksash}
+
+\func{virtual void}{OnDoubleClickSash}{\param{int }{x}, \param{int }{y}}
+
+Application-overridable function called when the sash is double-clicked with
+the left mouse button.
+
+\wxheading{Parameters}
+
+\docparam{x}{The x position of the mouse cursor.}
+
+\docparam{y}{The y position of the mouse cursor.}
+
+\wxheading{Remarks}
+
+The default implementation of this function calls \helpref{Unsplit}{wxsplitterwindowunsplit} if
+the minimum pane size is zero.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::Unsplit}{wxsplitterwindowunsplit}
+
+\membersection{wxSplitterWindow::OnUnsplit}\label{wxsplitterwindowonunsplit}
+
+\func{virtual void}{OnUnsplit}{\param{wxWindow* }{removed}}
+
+Application-overridable function called when the window is unsplit, either
+programmatically or using the wxSplitterWindow user interface.
+
+\wxheading{Parameters}
+
+\docparam{removed}{The window being removed.}
+
+\wxheading{Remarks}
+
+The default implementation of this function simply hides {\it removed}. You
+may wish to delete the window.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::Unsplit}{wxsplitterwindowunsplit}
+
+\membersection{wxSplitterWindow::SetSashPosition}\label{wxsplitterwindowsetsashposition}
+
+\func{void}{SetSashPosition}{\param{const int }{position}, \param{const bool}{ redraw = TRUE}}
+
+Sets the sash position.
+
+\wxheading{Parameters}
+
+\docparam{position}{The sash position in pixels.}
+
+\docparam{redraw}{If TRUE, resizes the panes and redraws the sash and border.}
+
+\wxheading{Remarks}
+
+Does not currently check for an out-of-range value.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::GetSashPosition}{wxsplitterwindowgetsashposition}
+
+\membersection{wxSplitterWindow::SetMinimumPaneSize}\label{wxsplitterwindowsetminimumpanesize}
+
+\func{void}{SetMinimumPaneSize}{\param{const int }{paneSize}}
+
+Sets the minimum pane size.
+
+\wxheading{Parameters}
+
+\docparam{paneSize}{Minimum pane size in pixels.}
+
+\wxheading{Remarks}
+
+The default minimum pane size is zero, which means that either pane can be reduced to zero by dragging
+the sash, thus removing one of the panes. To prevent this behaviour (and veto out-of-range sash dragging),
+set a minimum size, for example 20 pixels.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::GetMinimumPaneSize}{wxsplitterwindowgetminimumpanesize}
+
+\membersection{wxSplitterWindow::SetSplitMode}\label{wxsplitterwindowsetsplitmode}
+
+\func{void}{SetSplitMode}{\param{const int }{mode}}
+
+Sets the split mode.
+
+\wxheading{Parameters}
+
+\docparam{mode}{Can be wxSPLIT\_VERTICAL or wxSPLIT\_HORIZONTAL.}
+
+\wxheading{Remarks}
+
+Only sets the internal variable; does not update the display.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::GetSplitMode}{wxsplitterwindowgetsplitmode}, \helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically},\rtfsp
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally}.
+
+\membersection{wxSplitterWindow::SplitHorizontally}\label{wxsplitterwindowsplithorizontally}
+
+\func{bool}{SplitHorizontally}{\param{wxWindow* }{window1}, \param{wxWindow* }{window2},
+ \param{const int}{ sashPosition = -1}}
+
+Initializes the top and bottom panes of the splitter window.
+
+\wxheading{Parameters}
+
+\docparam{window1}{The top pane.}
+
+\docparam{window2}{The bottom pane.}
+
+\docparam{sashPosition}{The initial position of the sash. If the value is -1, a default position
+is chosen.}
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise (the window was already split).
+
+\wxheading{Remarks}
+
+This should be called if you wish to initially view two panes. It can also be called at any subsequent time,
+but the application should check that the window is not currently split using \helpref{IsSplit}{wxsplitterwindowissplit}.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically}, \helpref{wxSplitterWindow::IsSplit}{wxsplitterwindowissplit},\rtfsp
+\helpref{wxSplitterWindow::Unsplit}{wxsplitterwindowunsplit}.
+
+\membersection{wxSplitterWindow::SplitVertically}\label{wxsplitterwindowsplitvertically}
+
+\func{bool}{SplitVertically}{\param{wxWindow* }{window1}, \param{wxWindow* }{window2},
+ \param{const int}{ sashPosition = -1}}
+
+Initializes the left and right panes of the splitter window.
+
+\wxheading{Parameters}
+
+\docparam{window1}{The left pane.}
+
+\docparam{window2}{The right pane.}
+
+\docparam{sashPosition}{The initial position of the sash. If the value is -1, a default position
+is chosen.}
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise (the window was already split).
+
+\wxheading{Remarks}
+
+This should be called if you wish to initially view two panes. It can also be called at any subsequent time,
+but the application should check that the window is not currently split using \helpref{IsSplit}{wxsplitterwindowissplit}.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally}, \helpref{wxSplitterWindow::IsSplit}{wxsplitterwindowissplit},\rtfsp
+\helpref{wxSplitterWindow::Unsplit}{wxsplitterwindowunsplit}.
+
+\membersection{wxSplitterWindow::Unsplit}\label{wxsplitterwindowunsplit}
+
+\func{bool}{Unsplit}{\param{wxWindow* }{toRemove = NULL}}
+
+Unsplits the window.
+
+\wxheading{Parameters}
+
+\docparam{toRemove}{The pane to remove, or NULL to remove the right or bottom pane.}
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise (the window was not split).
+
+\wxheading{Remarks}
+
+This call will not actually delete the pane being removed; it calls \helpref{OnUnsplit}{wxsplitterwindowonunsplit}\rtfsp
+which can be overridden for the desired behaviour. By default, the pane being removed is hidden.
+
+\wxheading{See also}
+
+\helpref{wxSplitterWindow::SplitHorizontally}{wxsplitterwindowsplithorizontally}, \helpref{wxSplitterWindow::SplitVertically}{wxsplitterwindowsplitvertically},\rtfsp
+\helpref{wxSplitterWindow::IsSplit}{wxsplitterwindowissplit}, \helpref{wxSplitterWindow::OnUnsplit}{wxsplitterwindowonunsplit}
+
+
+
--- /dev/null
+\section{\class{wxStaticBitmap}}\label{wxstaticbitmap}
+
+A static bitmap control displays a bitmap.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for this control.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxStaticBitmap}{wxstaticbitmap}, \helpref{wxStaticBox}{wxstaticbox}
+
+\wxheading{Remarks}
+
+The bitmap to be displayed should have a small number of colours, such as 16, to avoid
+palette problems.
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxStaticBitmap::wxStaticBitmap}\label{wxstaticbitmapconstr}
+
+\func{}{wxStaticBitmap}{\void}
+
+Default constructor.
+
+\func{}{wxStaticBitmap}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxBitmap\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticBitmap"}}
+
+Constructor, creating and showing a text control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Should not be NULL.}
+
+\docparam{id}{Control identifier. A value of -1 denotes a default value.}
+
+\docparam{label}{Bitmap label.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size.}
+
+\docparam{style}{Window style. See \helpref{wxStaticBitmap}{wxstaticbitmap}.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxStaticBitmap::Create}{wxstaticbitmapcreate}
+
+\membersection{wxStaticBitmap::Create}\label{wxstaticbitmapcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxBitmap\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticBitmap"}}
+
+Creation function, for two-step construction. For details see \helpref{wxStaticBitmap::wxStaticBitmap}{wxstaticbitmapconstr}.
+
+\membersection{wxStaticBitmap::GetBitmap}\label{wxstaticbitmapgetbitmap}
+
+\constfunc{wxBitmap\&}{GetBitmap}{\void}
+
+Returns a reference to the label bitmap.
+
+\wxheading{See also}
+
+\helpref{wxStaticBitmap::SetBitmap}{wxstaticbitmapsetbitmap}
+
+\membersection{wxStaticBitmap::SetBitmap}\label{wxstaticbitmapsetbitmap}
+
+\func{virtual void}{SetBitmap}{\param{const wxBitmap\& }{ label}}
+
+Sets the bitmap label.
+
+\wxheading{Parameters}
+
+\docparam{label}{The new bitmap.}
+
+\wxheading{See also}
+
+\docparam{wxStaticBitmap::GetBitmap}{wxstaticbitmapgetbitmap}
+
--- /dev/null
+\section{\class{wxStaticBox}}\label{wxstaticbox}
+
+A static box is a rectangle drawn around other panel items to denote
+a logical grouping of items.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for this control.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxStaticText}{wxstatictext}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxStaticBox::wxStaticBox}\label{wxstaticboxconstr}
+
+\func{}{wxStaticBox}{\void}
+
+Default constructor.
+
+\func{}{wxStaticBox}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticBox"}}
+
+Constructor, creating and showing a static box.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{label}{Text to be displayed in the static box, the empty string for no label.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Checkbox size. If the size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{style}{Window style. See \helpref{wxStaticBox}{wxstaticbox}.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxStaticBox::Create}{wxstaticboxcreate}
+
+\membersection{wxStaticBox::\destruct{wxStaticBox}}
+
+\func{void}{\destruct{wxStaticBox}}{\void}
+
+Destructor, destroying the group box.
+
+\membersection{wxStaticBox::Create}\label{wxstaticboxcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id}, \param{const wxString\& }{label},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticBox"}}
+
+Creates the static box for two-step construction. See \helpref{wxStaticBox::wxStaticBox}{wxstaticboxconstr}\rtfsp
+for further details.
+
+
--- /dev/null
+\section{\class{wxStaticText}}\label{wxstatictext}
+
+A static text control displays one or more lines of read-only text.
+
+TODO: should a static text have a validator? E.g. if you wanted
+to use it to initialise the control with some text taken from
+the validator.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for this control.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxStaticBitmap}{wxstaticbitmap}, \helpref{wxStaticBox}{wxstaticbox}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxStaticText::wxStaticText}\label{wxstatictextconstr}
+
+\func{}{wxStaticText}{\void}
+
+Default constructor.
+
+\func{}{wxStaticText}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticText"}}
+
+Constructor, creating and showing a text control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Should not be NULL.}
+
+\docparam{id}{Control identifier. A value of -1 denotes a default value.}
+
+\docparam{label}{Text label.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size.}
+
+\docparam{style}{Window style. See \helpref{wxStaticText}{wxstatictext}.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxStaticText::Create}{wxstatictextcreate}
+
+\membersection{wxStaticText::Create}\label{wxstatictextcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxString\& }{name = ``staticText"}}
+
+Creation function, for two-step construction. For details see \helpref{wxStaticText::wxStaticText}{wxstatictextconstr}.
+
+\membersection{wxStaticText::GetLabel}\label{wxstatictextgetlabel}
+
+\constfunc{wxString}{GetLabel}{\void}
+
+Returns the contents of the control.
+
+\membersection{wxStaticText::SetLabel}\label{wxstatictextsetlabel}
+
+\func{virtual void}{SetLabel}{\param{const wxString\& }{ label}}
+
+Sets the static text label.
+
+\wxheading{Parameters}
+
+\docparam{label}{The new label to set. It may contain newline characters.}
+
+
--- /dev/null
+\section{\class{wxStatusBar}}\label{wxstatusbar}
+
+A status bar is a narrow window that can be placed along the bottom of a frame to give
+small amounts of status information. It can contain one or more fields, one or more of which can
+be variable length according to the size of the window.
+
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no special styles for this window.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+It is possible to create controls and other windows on the status bar. Position these windows
+from an {\bf OnSize} event handler.
+
+\wxheading{See also}
+
+\helpref{wxFrame}{wxframe}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxStatusBar::wxStatusBar}\label{wxstatusbarconstr}
+
+\func{}{wxStatusBar}{\void}
+
+Default constructor.
+
+\func{}{wxStatusBar}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = 0},\rtfsp
+\param{const wxString\& }{name = ``statusBar"}}
+
+Constructor, creating the window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The window parent, usually a frame.}
+
+\docparam{id}{The window identifier. It may take a value of -1 to indicate a default value.}
+
+\docparam{pos}{The window position. A value of (-1, -1) indicates a default position, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{size}{The window size. A value of (-1, -1) indicates a default size, chosen by
+either the windowing system or wxWindows, depending on platform.}
+
+\docparam{style}{The window style. See \helpref{wxStatusBar}{wxstatusbar}.}
+
+\docparam{name}{The name of the window. This parameter is used to associate a name with the item,
+allowing the application user to set Motif resource values for
+individual windows.}
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::Create}{wxstatusbarcreate}
+
+\membersection{wxStatusBar::\destruct{wxStatusBar}}
+
+\func{void}{\destruct{wxStatusBar}}{\void}
+
+Destructor.
+
+\membersection{wxStatusBar::Create}\label{wxstatusbarcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition},\rtfsp
+\param{const wxSize\&}{ size = wxDefaultSize}, \param{long}{ style = 0},\rtfsp
+\param{const wxString\& }{name = ``statusBar"}}
+
+Creates the window, for two-step construction.
+
+See \helpref{wxStatusBar::wxStatusBar}{wxstatusbarconstr} for details.
+
+\membersection{wxStatusBar::GetFieldRect}\label{wxstatusbargetfieldrect}
+
+\constfunc{virtual bool}{GetFieldRect}{\param{const int}{ i}, \param{wxRect\&}{ rect}}
+
+Returns the size and position of a fields internal bounding rectangle.
+
+\wxheading{Parameters}
+
+\docparam{i}{The field in question.}
+
+\docparam{rect}{The rectangle values are placed in this variable.}
+
+\wxheading{Return value}
+
+TRUE if the field index is valid, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxRect}{wxrect}
+
+\membersection{wxStatusBar::GetFieldsCount}\label{wxstatusbargetfieldscount}
+
+\constfunc{int}{GetFieldsCount}{\void}
+
+Returns the number of fields in the status bar.
+
+\membersection{wxStatusBar::GetStatusText}\label{wxstatusbargetstatustext}
+
+\constfunc{virtual wxString}{GetStatusText}{\param{const int}{ ir = 0}}
+
+Returns the string associated with a status bar field.
+
+\wxheading{Parameters}
+
+\docparam{i}{The number of the status field to retrieve, starting from zero.}
+
+\wxheading{Return value}
+
+The status field string if the field is valid, otherwise the empty string.
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::SetStatusText}{wxstatusbarsetstatustext}
+
+\membersection{wxStatusBar::DrawField}\label{wxstatusbardrawfield}
+
+\func{virtual void}{DrawField}{\param{wxDC\& }{dc}, \param{const int }{i}}
+
+Draws a field, including shaded borders and text.
+
+\wxheading{Parameters}
+
+\docparam{dc}{The device context to draw onto.}
+
+\docparam{i}{The field to be drawn.}
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::DrawFieldText}{wxstatusbardrawfieldtext}
+
+\membersection{wxStatusBar::DrawFieldText}\label{wxstatusbardrawfieldtext}
+
+\func{virtual void}{DrawFieldText}{\param{wxDC\& }{dc}, \param{const int }{i}}
+
+Draws a field's text.
+
+\wxheading{Parameters}
+
+\docparam{dc}{The device context to draw onto.}
+
+\docparam{i}{The field whose text is to be drawn.}
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::DrawField}{wxstatusbardrawfield}
+
+\membersection{wxStatusBar::InitColours}\label{wxstatusbarinitcolours}
+
+\func{virtual void}{InitColours}{\void}
+
+Sets up the background colour and shading pens using suitable system colours (Windows) or tasteful shades
+of grey (other platforms).
+
+\wxheading{Remarks}
+
+This function is called when the window is created, and also
+from \helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged} on Windows.
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged}
+
+\membersection{wxStatusBar::OnSysColourChanged}\label{wxstatusbaronsyscolourchanged}
+
+\func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
+
+Handles a system colour change by calling \helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours},
+and refreshes the window.
+
+\wxheading{Parameters}
+
+\docparam{event}{The colour change event.}
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours}
+
+\membersection{wxStatusBar::SetFieldsCount}\label{wxstatusbarsetfieldscount}
+
+\func{virtual void}{SetFieldsCount}{\param{const int}{ number = 1}, \param{const int* }{widths = NULL}}
+
+Sets the number of fields, and optionally the field widths.
+
+\wxheading{Parameters}
+
+\docparam{number}{The number of fields.}
+
+\docparam{widths}{An array of {\it n} integers, each of which is a status field width
+in pixels. A value of -1 indicates that the field is variable width; at least one
+field must be -1.}
+
+\membersection{wxStatusBar::SetStatusText}\label{wxstatusbarsetstatustext}
+
+\func{virtual void}{SetStatusText}{\param{const wxString\& }{text}, \param{const int}{ i = 0}}
+
+Sets the text for one field.
+
+\wxheading{Parameters}
+
+\docparam{text}{The text to be set. Use an empty string (``") to clear the field.}
+
+\docparam{i}{The field to set, starting from zero.}
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::GetStatusText}{wxstatusbargetstatustext}, \helpref{wxFrame::SetStatusText}{wxframesetstatustext}
+
+\membersection{wxStatusBar::SetStatusWidths}\label{wxstatusbarsetstatuswidths}
+
+\func{virtual void}{SetStatusWidths}{\param{const int}{ n}, \param{const int *}{widths}}
+
+Sets the widths of the fields in the status line.
+
+\wxheading{Parameters}
+
+\docparam{n}{The number of fields in the status bar.}
+
+\docparam{widths}{Must contain an array of {\it n} integers, each of which is a status field width
+in pixels. A value of -1 indicates that the field is variable width; at least one
+field must be -1. You should delete this array after calling {\bf SetStatusWidths}.}
+
+\wxheading{Remarks}
+
+The widths of the variable fields are calculated from the total width of all fields,
+minus the sum of widths of the non-variable fields, divided by the number of
+variable fields.
+
+\wxheading{See also}
+
+\helpref{wxStatusBar::SetFieldsCount}{wxstatusbarsetfieldscount}, \helpref{wxFrame::SetStatusWidths}{wxframesetstatuswidths}
+
+
--- /dev/null
+\section{\class{wxStringList}}\label{wxstringlist}
+
+A string list is a list which is assumed to contain strings, with a
+specific member functions. Memory is allocated when strings are added to
+the list, and deallocated by the destructor or by the {\bf Delete}\rtfsp
+member.
+
+\wxheading{Derived from}
+
+\helpref{wxList}{wxlist}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxString}{wxstring}, \helpref{wxList}{wxlist}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxStringList::wxStringList}
+
+\func{}{wxStringList}{\void}
+
+Constructor.
+
+\func{void}{wxStringList}{\param{char* }{first}, ...}
+
+Constructor, taking NULL-terminated string argument list. wxStringList
+allocates memory for the strings.
+
+\membersection{wxStringList::\destruct{wxStringList}}
+
+\func{}{\destruct{wxStringList}}{\void}
+
+Deletes string list, deallocating strings.
+
+\membersection{wxStringList::Add}
+
+\func{wxNode *}{Add}{\param{const wxString\& }{s}}
+
+Adds string to list, allocating memory.
+
+\membersection{wxStringList::Delete}
+
+\func{void}{Delete}{\param{const wxString\& }{s}}
+
+Searches for string and deletes from list, deallocating memory.
+
+\membersection{wxStringList::ListToArray}
+
+\func{char*}{ListToArray}{\param{bool}{ new\_copies = FALSE}}
+
+Converts the list to an array of strings, only allocating new memory if
+\rtfsp{\bf new\_copies} is TRUE.
+
+\membersection{wxStringList::Member}
+
+\func{bool}{Member}{\param{const wxString\& }{s}}
+
+Returns TRUE if {\bf s} is a member of the list (tested using {\bf strcmp}).
+
+\membersection{wxStringList::Sort}
+
+\func{void}{Sort}{\void}
+
+Sorts the strings in ascending alphabetical order. Note that all nodes
+(but not strings) get deallocated and new ones allocated.
+
+
--- /dev/null
+\section{\class{wxSysColourChangedEvent}}\label{wxsyscolourchangedevent}
+
+This class is used for system colour change events, which are generated
+when the user changes the colour settings using the control panel.
+This is only appropriate under Windows.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a system colour changed event, use this event handler macro to direct input to a member
+function that takes a wxSysColourChanged argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_SYS\_COLOUR\_CHANGED(func)}}{Process a wxEVT\_SYS\_COLOUR\_CHANGED event.}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+The default event handler for this event propagates the event to child windows, since
+Windows only sends the events to top-level windows. If
+intercepting this event for a top-level window, remember to call the base class handler,
+or to pass the event on to the window's children explicitly.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnSysColourChanged}{wxwindowonsyscolourchanged}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSysColourChangedEvent::wxSysColourChanged}
+
+\func{}{wxSysColourChanged}{\void}
+
+Constructor.
+
--- /dev/null
+;;; Tex2RTF initialisation file for 32-bit WinHelp
+runTwice = yes
+titleFontSize = 12
+authorFontSize = 10
+authorFontSize = 10
+chapterFontSize = 12
+sectionFontSize = 12
+subsectionFontSize = 12
+headerRule = yes
+footerRule = yes
+useHeadingStyles = yes
+listItemIndent=40
+generateHPJ = yes
+htmlBrowseButtons = bitmap
+winHelpContents = yes
+winHelpVersion = 4 ; 3 for Windows 3.x, 4 for Windows 95
+winHelpTitle = "wxWindows Manual"
+\overview [2] { \settransparency{on}\sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}\settransparency{off}}
+\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
+\sethotspotcolour{on}\sethotspotunderline{on}}
+
--- /dev/null
+\section{\class{wxTabbedDialog}}\label{wxtabbeddialog}
+
+A dialog suitable for handling tabs.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Tab classes overview}{wxtaboverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTabbedDialog::wxTabbedDialog}
+
+\func{}{wxTabbedDialog}{\param{wxWindow *}{parent}, \param{const wxWindowID }{id},
+ \param{const wxString\& }{title}, \param{const wxPoint\&}{ pos}, \param{const wxSize\&}{ size},
+ \param{const long}{ style=wxDEFAULT\_DIALOG\_STYLE}, \param{const wxString\& }{name="dialogBox"}}
+
+Constructor.
+
+\membersection{wxTabbedDialog::\destruct{wxTabbedDialog}}
+
+\func{}{\destruct{wxTabbedDialog}}{\void}
+
+Destructor. This destructor deletes the tab view associated with the dialog box.
+If you do not wish this to happen, set the tab view to NULL before destruction (for example,
+in the OnCloseWindow event handler).
+
+\membersection{wxTabbedDialog::SetTabView}
+
+\func{void}{SetTabView}{\param{wxTabView *}{view}}
+
+Sets the tab view associated with the dialog box.
+
+\membersection{wxTabbedDialog::GetTabView}
+
+\func{wxTabView *}{GetTabView}{\void}
+
+Returns the tab view associated with the dialog box.
+
+\section{\class{wxTabbedPanel}}\label{wxtabbedpanel}
+
+A panel suitable for handling tabs.
+
+\wxheading{Derived from}
+
+\helpref{wxPanel}{wxpanel}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Tab classes overview}{wxtaboverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTabbedPanel::wxTabbedPanel}
+
+\func{}{wxTabbedPanel}{\param{wxWindow *}{parent}, \param{const wxWindowID}{ id},
+ \param{const wxPoint\&}{ pos}, \param{const wxSize\&}{ size},
+ \param{const long}{ style=0}, \param{const wxString\& }{name="panel"}}
+
+Constructor.
+
+\membersection{wxTabbedPanel::SetTabView}
+
+\func{void}{SetTabView}{\param{wxTabView *}{view}}
+
+Sets the tab view associated with the panel.
+
+\membersection{wxTabbedPanel::GetTabView}
+
+\func{wxTabView *}{GetTabView}{\void}
+
+Returns the tab view associated with the panel.
+
+\section{\class{wxTabControl}}\label{wxtabcontrol}
+
+You will rarely need to use this class directly.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\overview{Tab classes overview}{wxtaboverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTabControl::wxTabControl}
+
+\func{void}{wxTabControl}{\param{wxTabView *}{view = NULL}}
+
+Constructor.
+
+\membersection{wxTabControl::GetColPosition}
+
+\func{int}{GetColPosition}{\void}
+
+Returns the position of the tab in the tab column.
+
+\membersection{wxTabControl::GetFont}
+
+\func{wxFont *}{GetFont}{\void}
+
+Returns the font to be used for this tab.
+
+\membersection{wxTabControl::GetHeight}
+
+\func{int}{GetHeight}{\void}
+
+Returns the tab height.
+
+\membersection{wxTabControl::GetId}
+
+\func{int}{GetId}{\void}
+
+Returns the tab identifier.
+
+\membersection{wxTabControl::GetLabel}
+
+\func{wxString}{GetLabel}{\void}
+
+Returns the tab label.
+
+\membersection{wxTabControl::GetRowPosition}
+
+\func{int}{GetRowPosition}{\void}
+
+Returns the position of the tab in the layer or row.
+
+\membersection{wxTabControl::GetSelected}
+
+\func{bool}{GetSelected}{\void}
+
+Returns the selected flag.
+
+\membersection{wxTabControl::GetWidth}
+
+\func{int}{GetWidth}{\void}
+
+Returns the tab width.
+
+\membersection{wxTabControl::GetX}
+
+\func{int}{GetX}{\void}
+
+Returns the x offset from the top-left of the view area.
+
+\membersection{wxTabControl::GetY}
+
+\func{int}{GetY}{\void}
+
+Returns the y offset from the top-left of the view area.
+
+\membersection{wxTabControl::HitTest}
+
+\func{bool}{HitTest}{\param{int}{ x}, \param{int}{ y}}
+
+Returns TRUE if the point x, y is within the tab area.
+
+\membersection{wxTabControl::OnDraw}
+
+\func{void}{OnDraw}{\param{wxDC\& }{dc}, \param{bool}{ lastInRow}}
+
+Draws the tab control on the given device context.
+
+\membersection{wxTabControl::SetColPosition}
+
+\func{void}{SetColPosition}{\param{int}{ pos}}
+
+Sets the position in the column.
+
+\membersection{wxTabControl::SetFont}
+
+\func{void}{SetFont}{\param{wxFont *}{font}}
+
+Sets the font to be used for this tab.
+
+\membersection{wxTabControl::SetId}
+
+\func{void}{SetId}{\param{int}{ id}}
+
+Sets the tab identifier.
+
+\membersection{wxTabControl::SetLabel}
+
+\func{void}{SetLabel}{\param{const wxString\& }{str}}
+
+Sets the label for the tab.
+
+\membersection{wxTabControl::SetPosition}
+
+\func{void}{SetPosition}{\param{int}{ x}, \param{int}{ y}}
+
+Sets the x and y offsets for this tab, measured from the top-left of the view area.
+
+\membersection{wxTabControl::SetRowPosition}
+
+\func{void}{SetRowPosition}{\param{int}{ pos}}
+
+Sets the position on the layer (row).
+
+\membersection{wxTabControl::SetSelected}
+
+\func{void}{SetSelected}{\param{bool }{selected}}
+
+Sets the selection flag for this tab (does not set the current tab for the view;
+use wxTabView::SetSelectedTab for that).
+
+\membersection{wxTabControl::SetSize}
+
+\func{void}{SetSize}{\param{int}{ width}, \param{int}{ height}}
+
+Sets the width and height for this tab.
+
+\section{\class{wxTabView}}\label{wxtabview}
+
+Responsible for drawing tabs onto a window, and dealing with input.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxTabView overview}{wxtabviewoverview}, \helpref{wxPanelTabView}{wxpaneltabview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTabView::wxTabView}
+
+\func{}{wxTabView}{\param{long }{style = wxTAB\_STYLE\_DRAW\_BOX \pipe wxTAB\_STYLE\_COLOUR\_INTERIOR}}
+
+Constructor.
+
+{\it style} may be a bit list of the following:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTAB\_STYLE\_DRAW\_BOX}{Draw a box around the view area. Most commonly used for dialogs.}
+\twocolitem{wxTAB\_STYLE\_COLOUR\_INTERIOR}{Draw tab backgrounds in the specified colour. Omitting this style
+will ensure that the tab background matches the dialog background.}
+\end{twocollist}
+
+\membersection{wxTabView::AddTab}\label{wxtabviewaddtab}
+
+\func{wxTabControl *}{AddTab}{\param{int}{ id}, \param{const wxString\& }{label}, \param{wxTabControl *}{existingTab=NULL}}
+
+Adds a tab to the view.
+
+{\it id} is the application-chosen identifier for the tab, which will be used in subsequent tab operations.
+
+{\it label} is the label to give the tab.
+
+{\it existingTab} maybe NULL to specify a new tab, or non-NULL to indicate that an existing tab should be used.
+
+A new layer (row) is started when the current layer has been filled up with tabs.
+
+\membersection{wxTabView::CalculateTabWidth}\label{wxtabviewcalculatetabwidth}
+
+\func{int}{CalculateTabWidth}{\param{int}{ noTabs}, \param{bool}{ adjustView = FALSE}}
+
+The application can specify the tab width using this function, in terms
+of the number of tabs per layer (row) which will fit the view area, which
+should have been set previously with SetViewRect.
+
+{\it noTabs} is the number of tabs which should take up the full width
+of the view area.
+
+{\it adjustView} can be set to TRUE in order to readjust the view width
+to exactly fit the given number of tabs.
+
+The new tab width is returned.
+
+\membersection{wxTabView::ClearTabs}
+
+\func{void}{ClearTabs}{\param{bool }{deleteTabs=TRUE}}
+
+Clears the tabs, deleting them if {\it deleteTabs} is TRUE.
+
+\membersection{wxTabView::Draw}
+
+\func{void}{Draw}{\param{wxDC\& }{dc}}
+
+Draws the tabs and (optionally) a box around the view area.
+
+\membersection{wxTabView::FindTabControlForId}
+
+\func{wxTabControl *}{FindTabControlForId}{\param{int}{ id}}
+
+Finds the wxTabControl corresponding to {\it id}.
+
+\membersection{wxTabView::FindTabControlForPosition}
+
+\func{wxTabControl *}{FindTabControlForPosition}{\param{int}{ layer}, \param{int}{ position}}
+
+Finds the wxTabControl at layer {\it layer}, position in layer {\it position}, both starting from
+zero. Note that tabs change layer as they are selected or deselected.
+
+\membersection{wxTabView::GetBackgroundBrush}
+
+\func{wxBrush *}{GetBackgroundBrush}{\void}
+
+Returns the brush used to draw in the background colour. It is set when
+SetBackgroundColour is called.
+
+\membersection{wxTabView::GetBackgroundColour}
+
+\func{wxColour}{GetBackgroundColour}{\void}
+
+Returns the colour used for each tab background. By default, this is
+light grey. To ensure a match with the dialog or panel background, omit
+the wxTAB\_STYLE\_COLOUR\_INTERIOR flag from the wxTabView constructor.
+
+\membersection{wxTabView::GetBackgroundPen}
+
+\func{wxPen *}{GetBackgroundPen}{\void}
+
+Returns the pen used to draw in the background colour. It is set when
+SetBackgroundColour is called.
+
+\membersection{wxTabView::GetHighlightColour}
+
+\func{wxColour}{GetHighlightColour}{\void}
+
+Returns the colour used for bright highlights on the left side of `3D' surfaces. By default, this is white.
+
+\membersection{wxTabView::GetHighlightPen}
+
+\func{wxPen *}{GetHighlightPen}{\void}
+
+Returns the pen used to draw 3D effect highlights. This is set when
+SetHighlightColour is called.
+
+\membersection{wxTabView::GetHorizontalTabOffset}
+
+\func{int}{GetHorizontalTabOffset}{\void}
+
+Returns the horizontal spacing by which each tab layer is offset from the one below.
+
+\membersection{wxTabView::GetNumberOfLayers}
+
+\func{int}{GetNumberOfLayers}{\void}
+
+Returns the number of layers (rows of tabs).
+
+\membersection{wxTabView::GetSelectedTabFont}
+
+\func{wxFont *}{GetSelectedTabFont}{\void}
+
+Returns the font to be used for the selected tab label.
+
+\membersection{wxTabView::GetShadowColour}
+
+\func{wxColour}{GetShadowColour}{\void}
+
+Returns the colour used for shadows on the right-hand side of `3D' surfaces. By default, this is dark grey.
+
+\membersection{wxTabView::GetTabHeight}
+
+\func{int}{GetTabHeight}{\void}
+
+Returns the tab default height.
+
+\membersection{wxTabView::GetTabFont}
+
+\func{wxFont *}{GetTabFont}{\void}
+
+Returns the tab label font.
+
+\membersection{wxTabView::GetTabSelectionHeight}
+
+\func{int}{GetTabSelectionHeight}{\void}
+
+Returns the height to be used for the currently selected tab; normally a few pixels
+higher than the other tabs.
+
+\membersection{wxTabView::GetTabStyle}
+
+\func{long}{GetTabStyle}{\void}
+
+Returns the tab style. See constructor documentation for details of valid styles.
+
+\membersection{wxTabView::GetTabWidth}
+
+\func{int}{GetTabWidth}{\void}
+
+Returns the tab default width.
+
+\membersection{wxTabView::GetTextColour}
+
+\func{wxColour}{GetTextColour}{\void}
+
+Returns the colour used to draw label text. By default, this is
+black.
+
+\membersection{wxTabView::GetTopMargin}
+
+\func{int}{GetTopMargin}{\void}
+
+Returns the height between the top of the view area and the bottom of the first
+row of tabs.
+
+\membersection{wxTabView::GetShadowPen}
+
+\func{wxPen *}{GetShadowPen}{\void}
+
+Returns the pen used to draw 3D effect shadows. This is set when
+SetShadowColour is called.
+
+\membersection{wxTabView::GetViewRect}
+
+\func{wxRectangle}{GetViewRect}{\void}
+
+Returns the rectangle specifying the view area (above which tabs are
+placed).
+
+\membersection{wxTabView::GetVerticalTabTextSpacing}
+
+\func{int}{GetVerticalTabTextSpacing}{\void}
+
+Returns the vertical spacing between the top of an unselected tab, and the tab label.
+
+\membersection{wxTabView::GetWindow}
+
+\func{wwxWindow *}{GetWindow}{\void}
+
+Returns the window for the view.
+
+\membersection{wxTabView::OnCreateTabControl}
+
+\func{wxTabControl *}{OnCreateTabControl}{\void}
+
+Creates a new tab control. By default, this returns a wxTabControl object, but the application may wish
+to define a derived class, in which case the tab view should be subclassed and this function overridden.
+
+\membersection{wxTabView::Layout}
+
+\func{void}{Layout}{\void}
+
+Recalculates the positions of the tabs, and adjusts the layer of the selected tab if necessary.
+
+You may want to call this function if the view width has changed (for example, from an OnSize handler).
+
+\membersection{wxTabView::OnEvent}
+
+\func{bool}{OnEvent}{\param{wxMouseEvent\& }{event}}
+
+Processes mouse events sent from the panel or dialog. Returns TRUE if the event was processed,
+FALSE otherwise.
+
+\membersection{wxTabView::OnTabActivate}
+
+\func{void}{OnTabActivate}{\param{int}{ activateId}, \param{int}{ deactivateId}}
+
+Called when a tab is activated, with the new active tab id, and the former active tab id.
+
+\membersection{wxTabView::OnTabPreActivate}
+
+\func{bool}{OnTabPreActivate}{\param{int}{ activateId}, \param{int}{ deactivateId}}
+
+Called just before a tab is activated, with the new active tab id, and the former active tab id.
+
+If the function returns FALSE, the tab is not activated.
+
+\membersection{wxTabView::SetBackgroundColour}
+
+\func{void}{SetBackgroundColour}{\param{const wxColour\&}{ col}}
+
+Sets the colour to be used for each tab background. By default, this is
+light grey. To ensure a match with the dialog or panel background, omit
+the wxTAB\_STYLE\_COLOUR\_INTERIOR flag from the wxTabView constructor.
+
+\membersection{wxTabView::SetHighlightColour}
+
+\func{void}{SetHighlightColour}{\param{const wxColour\&}{ col}}
+
+Sets the colour to be used for bright highlights on the left side of `3D' surfaces. By default, this is white.
+
+\membersection{wxTabView::SetHorizontalTabOffset}
+
+\func{void}{SetHorizontalTabOffset}{\param{int}{ offset}}
+
+Sets the horizontal spacing by which each tab layer is offset from the one below.
+
+\membersection{wxTabView::SetSelectedTabFont}
+
+\func{void}{SetSelectedTabFont}{\param{wxFont *}{font}}
+
+Sets the font to be used for the selected tab label.
+
+\membersection{wxTabView::SetShadowColour}
+
+\func{void}{SetShadowColour}{\param{const wxColour\&}{ col}}
+
+Sets the colour to be used for shadows on the right-hand side of `3D' surfaces. By default, this is dark grey.
+
+\membersection{wxTabView::SetTabFont}
+
+\func{void}{SetTabFont}{\param{wxFont *}{font}}
+
+Sets the tab label font.
+
+\membersection{wxTabView::SetTabStyle}
+
+\func{void}{SetTabStyle}{\param{long}{ tabStyle}}
+
+Sets the tab style. See constructor documentation for details of valid styles.
+
+\membersection{wxTabView::SetTabSize}
+
+\func{void}{SetTabSize}{\param{int}{ width}, \param{int}{ height}}
+
+Sets the tab default width and height.
+
+\membersection{wxTabView::SetTabSelectionHeight}
+
+\func{void}{SetTabSelectionHeight}{\param{int}{ height}}
+
+Sets the height to be used for the currently selected tab; normally a few pixels
+higher than the other tabs.
+
+\membersection{wxTabView::SetTabSelection}
+
+\func{void}{SetTabSelection}{\param{int}{ sel}, \param{bool}{ activateTool=TRUE}}
+
+Sets the selected tab, calling the application's OnTabActivate function.
+
+If {\it activateTool} is FALSE, OnTabActivate will not be called.
+
+\membersection{wxTabView::SetTextColour}
+
+\func{void}{SetTextColour}{\param{const wxColour\&}{ col}}
+
+Sets the colour to be used to draw label text. By default, this is
+black.
+
+\membersection{wxTabView::SetTopMargin}
+
+\func{void}{SetTopMargin}{\param{int}{ margin}}
+
+Sets the height between the top of the view area and the bottom of the first
+row of tabs.
+
+\membersection{wxTabView::SetVerticalTabTextSpacing}
+
+\func{void}{SetVerticalTabTextSpacing}{\param{int}{ spacing}}
+
+Sets the vertical spacing between the top of an unselected tab, and the tab label.
+
+\membersection{wxTabView::SetViewRect}\label{wxtabviewsetviewrect}
+
+\func{void}{SetViewRect}{\param{const wxRectangle\& }{rect}}
+
+Sets the rectangle specifying the view area (above which tabs are
+placed). This must be set by the application.
+
+\membersection{wxTabView::SetWindow}
+
+\func{void}{SetWindow}{\param{wxWindow *}{window}}
+
+Set the window that the tab view will use for drawing onto.
+
--- /dev/null
+\section{\class{wxTabCtrl}}\label{wxtabctrl}
+
+This class represents a tab control, which manages multiple tabs.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTabCtrl::wxTabCtrl}\label{wxtabctrlconstr}
+
+\func{}{wxTabCtrl}{\void}
+
+Default constructor.
+
+\func{}{wxTabCtrl}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id}, \param{const wxPoint\&}{ pos = wxDefaultPosition},
+ \param{const wxSize\&}{ size}, \param{const long}{ style = 0}, \param{const wxString\& }{name = "tabCtrl"}}
+
+Constructs a tab control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{The parent window. Must be non-NULL.}
+
+\docparam{id}{The window identifier.}
+
+\docparam{pos}{The window position.}
+
+\docparam{size}{The window size.}
+
+\docparam{style}{The window style. Its value is a bit list of zero or more of {\bf wxTC\_MULTILINE},
+ {\bf wxTC\_RIGHTJUSTIFY}, {\bf wxTC\_FIXEDWIDTH} and {\bf wxTC\_OWNERDRAW}.}
+
+\membersection{wxTabCtrl::\destruct{wxTabCtrl}}
+
+\func{}{\destruct{wxTabCtrl}}{\void}
+
+Destroys the wxTabCtrl object.
+
+\membersection{wxTabCtrl::Create}\label{wxtabctrlcreate}
+
+\func{bool}{Create}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id}, \param{const wxPoint\&}{ pos = wxDefaultPosition},
+ \param{const wxSize\&}{ size}, \param{const long}{ style = 0}, \param{const wxString\& }{name = "tabCtrl"}}
+
+Creates a tab control. See \helpref{wxTabCtrl::wxTabCtrl}{wxtabctrlconstr} for a description
+of the parameters.
+
+\membersection{wxTabCtrl::GetImageList}\label{wxtabctrlgetimagelist}
+
+\constfunc{wxImageList*}{GetImageList}{\void}
+
+Returns the associated image list.
+
+\wxheading{See also}
+
+\helpref{wxImageList}{wximagelist}, \helpref{wxTabCtrl::SetImageList}{wxtabctrlsetimagelist}
+
+\membersection{wxTabCtrl::GetItemCount}\label{wxtabctrlgetitemcount}
+
+\constfunc{int}{GetItemCount}{\void}
+
+Returns the number of tabs in the tab control.
+
+\membersection{wxTabCtrl::GetItemRect}\label{wxtabctrlgetitemrect}
+
+\constfunc{bool}{GetItemRect}{\param{const int item}, \param{wxRect\&}{ rect}}
+
+Returns the rectangle bounding the given tab.
+
+\wxheading{See also}
+
+\helpref{wxRect}{wxrect}
+
+\membersection{wxTabCtrl::GetRowCount}\label{wxtabctrlgetrowcount}
+
+\constfunc{bool}{GetRowCount}{\void}
+
+Returns the number of rows in the tab control.
+
+\membersection{wxTabCtrl::GetSelection}\label{wxtabctrlgetselection}
+
+\constfunc{int}{GetSelection}{\void}
+
+Returns the index for the currently selected tab.
+
+\wxheading{See also}
+
+\helpref{wxTabCtrl::SetSelection}{wxtabctrlsetselection}
+
+
+
--- /dev/null
+\section{wxApp overview}\label{wxappoverview}
+
+Classes: \helpref{wxApp}{wxapp}
+
+A wxWindows application does not have a {\it main} procedure; the equivalent is the
+\rtfsp\helpref{OnInit}{wxapponinit} member defined for a class derived from wxApp.\rtfsp
+\rtfsp{\it OnInit} will usually create a top window as a bare minimum.
+
+Unlike in earlier versions of wxWindows, OnInit does not return a frame. Instead it
+returns a boolean value which indicates whether processing should continue (TRUE) or not (FALSE).
+You call \helpref{wxApp::SetTopWindow}{wxappsettopwindow} to let wxWindows know
+about the top window.
+
+Note that the program's command line arguments, represented by {\it
+argc} and {\it argv}, are available from within wxApp member functions.
+
+An application closes by destroying all windows. Because all frames must
+be destroyed for the application to exit, it is advisable to use parent
+frames wherever possible when creating new frames, so that deleting the
+top level frame will automatically delete child frames. The alternative
+is to explicitly delete child frames in the top-level frame's \helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow}\rtfsp
+handler.
+
+In emergencies the \helpref{wxExit}{wxexit} function can be called to kill the
+application.
+
+An example of defining an application follows:
+
+\begin{verbatim}
+class DerivedApp: public wxApp
+{
+ public:
+ bool OnInit(void);
+};
+
+IMPLEMENT_APP(DerivedApp)
+
+bool DerivedApp::OnInit(void)
+{
+ wxFrame *the_frame = new wxFrame(NULL, argv[0]);
+ ...
+ SetTopWindow(the_frame);
+
+ return TRUE;
+}
+\end{verbatim}
+
+Note the use of IMPLEMENT\_APP(appClass), which allows wxWindows to dynamically create an instance of the application object
+at the appropriate point in wxWindows initialization. Previous versions of wxWindows used
+to rely on the creation of a global application object, but this is no longer recommended,
+because required global initialization may not have been performed at application object
+construction time.
+
+You can also use DECLARE\_APP(appClass) in a header file to declare the wxGetApp function which returns
+a reference to the application object.
+
--- /dev/null
+\section{\class{wxTaskBarIcon}}\label{wxtaskbaricon}
+
+This class represents a Windows 95 taskbar icon, appearing in the `system tray' and responding to
+mouse clicks. An icon has an optional tooltip. This class is only supported for Windows 95/NT.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTaskBarIcon::wxTaskBarIcon}\label{wxtaskbariconconstr}
+
+\func{}{wxTaskBarIcon}{\void}
+
+Default constructor.
+
+\membersection{wxTaskBarIcon::\destruct{wxTaskBarIcon}}
+
+\func{}{\destruct{wxTaskBarIcon}}{\void}
+
+Destroys the wxTaskBarIcon object, removing the icon if not already removed.
+
+\membersection{wxTaskBarIcon::IsIconInstalled}\label{wxtaskbariconisiconinstalled}
+
+\func{bool}{IsIconInstalled}{\void}
+
+Returns TRUE if \helpref{SetIcon}{wxtaskbariconseticon} was called with no subsequent \helpref{RemoveIcon}{wxtaskbariconremoveicon}.
+
+\membersection{wxTaskBarIcon::IsOK}\label{wxtaskbariconisok}
+
+\func{bool}{IsOK}{\void}
+
+Returns TRUE if the object initialized successfully.
+
+\membersection{wxTaskBarIcon::OnLButtonDown}\label{wxtaskbaricononlbuttondown}
+
+\func{virtual void}{OnLButtonDown}{\void}
+
+Override this function to intercept left mouse button down events.
+
+\membersection{wxTaskBarIcon::OnLButtonDClick}\label{wxtaskbaricononlbuttondclick}
+
+\func{virtual void}{OnLButtonDClick}{\void}
+
+Override this function to intercept left mouse button double-click events.
+
+\membersection{wxTaskBarIcon::OnLButtonUp}\label{wxtaskbaricononlbuttonup}
+
+\func{virtual void}{OnLButtonUp}{\void}
+
+Override this function to intercept left mouse button up events.
+
+\membersection{wxTaskBarIcon::OnRButtonDown}\label{wxtaskbaricononrbuttondown}
+
+\func{virtual void}{OnRButtonDown}{\void}
+
+Override this function to intercept right mouse button down events.
+
+\membersection{wxTaskBarIcon::OnRButtonDClick}\label{wxtaskbaricononrbuttondclick}
+
+\func{virtual void}{OnRButtonDClick}{\void}
+
+Override this function to intercept right mouse button double-click events.
+
+\membersection{wxTaskBarIcon::OnRButtonUp}\label{wxtaskbaricononrbuttonup}
+
+\func{virtual void}{OnRButtonUp}{\void}
+
+Override this function to intercept right mouse button up events.
+
+\membersection{wxTaskBarIcon::OnMouseMove}\label{wxtaskbaricononmousemove}
+
+\func{virtual void}{OnMouseMove}{\void}
+
+Override this function to intercept mouse move events.
+
+\membersection{wxTaskBarIcon::RemoveIcon}\label{wxtaskbariconremoveicon}
+
+\func{bool}{RemoveIcon}{\void}
+
+Removes the icon previously set with \helpref{SetIcon}{wxtaskbariconseticon}.
+
+\membersection{wxTaskBarIcon::SetIcon}\label{wxtaskbariconseticon}
+
+\func{bool}{SetIcon}{\param{const wxIcon\&}{ icon}, \param{const wxString\& }{tooltip}}
+
+Sets the icon, and optional tooltip text.
+
+
--- /dev/null
+\section{Bitmaps overview}\label{wxbitmapoverview}
+
+Classes: \helpref{wxBitmap}{wxbitmap}, \helpref{wxBitmapHandler}{wxbitmaphandler}, \helpref{wxIcon}{wxicon}, \helpref{wxCursor}{wxcursor}.
+
+The wxBitmap class encapsulates the concept of a platform-dependent bitmap,
+either monochrome or colour. Platform-specific methods for creating a
+wxBitmap object from an existing file are catered for, and
+this is an occasion where conditional compilation will sometimes be
+required.
+
+A bitmap created dynamically or loaded from a file can be selected
+into a memory device context (instance of \helpref{wxMemoryDC}{wxmemorydc}). This
+enables the bitmap to be copied to a canvas or memory device context
+using \helpref{wxDC::Blit}{wxdcblit}, or to be used as a drawing surface. The {\bf
+wxToolBarSimple} class is implemented using bitmaps, and the toolbar demo
+shows one of the toolbar bitmaps being used for drawing a miniature
+version of the graphic which appears on the main canvas.
+
+See \helpref{wxMemoryDC}{wxmemorydc} for an example of drawing onto a bitmap.
+
+The following shows the conditional compilation required to load a
+bitmap in X and in Windows 3. The alternative is to use the string
+version of the bitmap constructor, which loads a file under X and a
+resource under Windows 3, but has the disadvantage of requiring the
+X icon file to be available at run-time.
+
+\begin{verbatim}
+#ifdef wx_x
+#include "aiai.xbm"
+#endif
+#ifdef wx_msw
+ wxIcon *icon = new wxBitmap("aiai");
+#endif
+#ifdef wx_x
+ wxIcon *icon = new wxBitmap(aiai_bits, aiai_width, aiai_height);
+#endif
+\end{verbatim}
+
+\subsection{Loading bitmaps: further information}
+
+There is provision for a number of bitmap
+formats via the standard wxBitmap class. These facilities can
+be enabled or disabled using settings in wx\_setup.h.
+
+XPM colour pixmaps may be loaded and saved under Windows and X, with
+some restrictions imposed by the lack of colourmap facility when
+using XPM files. The user may elect to use XPM files as a cross-platform
+stabdard, or translate between XPM and BMP files using a suitable
+utility.
+
+Also, under Windows, DIBs (device independent bitmaps with extension BMP)
+may be dynamically loaded and saved. Under X, GIF and BMP files may be
+loaded but not saved.
+
+\subsection{Bitmap format handlers}
+
+To provide extensibility, the functionality for loading and saving bitmap formats
+is not implemented in the wxBitmap class, but in a number of handler classes,
+derived from wxBitmapHandler. There is a static list of handlers which wxBitmap
+examines when a file load/save operation is requested. Some handlers are provided as standard, but if you
+have special requirements, you may wish to initialise the wxBitmap class with
+some extra handlers which you write yourself or receive from a third party.
+
+To add a handler object to wxBitmap, your application needs to include the header which implements it, and
+then call the static function \helpref{wxBitmap::AddHandler}{wxbitmapaddhandler}. For example:
+
+{\small
+\begin{verbatim}
+ #include "JPEGBitmapHandler.h"
+ ...
+ // Initialisation
+ wxBitmap::AddHandler(new wxJPEGBitmapHandler);
+ ...
+\end{verbatim}
+}
+
+Assuming wxJPEGBitmapHandler has been written correctly, you should now be able to load and save JPEG files
+using the usual wxBitmap API.
+
+To see how bitmap handlers are implemented, please look at the files {\tt bitmap.h} and {\tt bitmap.cpp}.
+
+\subsection{wxIcon overview}\label{wxiconoverview}
+
+TODO.
+
--- /dev/null
+\section{Common dialogs overview}\label{commondialogsoverview}
+
+Classes: \helpref{wxColourDialog}{wxcolourdialog}, \helpref{wxFontDialog}{wxfontdialog},
+\rtfsp\helpref{wxPrintDialog}{wxprintdialog}, \helpref{wxFileDialog}{wxfiledialog},\rtfsp
+\helpref{wxDirDialog}{wxdirdialog}, \helpref{wxTextEntryDialog}{wxtextentrydialog},\rtfsp
+\helpref{wxMessageDialog}{wxmessagedialog}, \helpref{wxSingleChoiceDialog}{wxsinglechoicedialog},\rtfsp
+\helpref{wxMultipleChoiceDialog}{wxmultiplechoicedialog}
+
+Common dialog classes and functions encapsulate commonly-needed dialog box requirements.
+They are all `modal', grabbing the flow of control until the user dismisses the dialog,
+to make them easy to use within an application.
+
+Some dialogs have both platform-dependent and platform-independent implementations,
+so that if underlying windowing systems that do not provide the required functionality,
+the generic classes and functions can stand in. For example, under MS Windows, wxColourDialog
+uses the standard colour selector. There is also an equivalent called wxGenericColourDialog
+for other platforms, and a macro defines wxColourDialog to be the same as wxGenericColourDialog
+on non-MS Windows platforms. However, under MS Windows, the generic dialog can also be
+used, for testing or other purposes.
+
+\subsection{wxColourDialog overview}\label{wxcolourdialogoverview}
+
+Classes: \helpref{wxColourDialog}{wxcolourdialog}, \helpref{wxColourData}{wxcolourdata}
+
+The wxColourDialog presents a colour selector to the user, and returns
+with colour information.
+
+{\bf The MS Windows colour selector}
+
+Under Windows, the native colour selector common dialog is used. This
+presents a dialog box with three main regions: at the top left, a
+palette of 48 commonly-used colours is shown. Under this, there is a
+palette of 16 `custom colours' which can be set by the application if
+desired. Additionally, the user may open up the dialog box to show
+a right-hand panel containing controls to select a precise colour, and add
+it to the custom colour palette.
+
+{\bf The generic colour selector}
+
+Under non-MS Windows platforms, the colour selector is a simulation of
+most of the features of the MS Windows selector. Two palettes of 48
+standard and 16 custom colours are presented, with the right-hand area
+containing three sliders for the user to select a colour from red,
+green and blue components. This colour may be added to the custom colour
+palette, and will replace either the currently selected custom colour,
+or the first one in the palette if none is selected. The RGB colour sliders
+are not optional in the generic colour selector. The generic colour
+selector is also available under MS Windows; use the name
+wxGenericColourDialog.
+
+{\bf Example}
+
+In the samples/dialogs directory, there is an example of using
+the wxColourDialog class. Here is an excerpt, which
+sets various parameters of a wxColourData object, including
+a grey scale for the custom colours. If the user did not cancel
+the dialog, the application retrieves the selected colour and
+uses it to set the background of a canvas.
+
+\begin{verbatim}
+ wxColourData data;
+ data.SetChooseFull(TRUE);
+ for (int i = 0; i < 16; i++)
+ {
+ wxColour colour(i*16, i*16, i*16);
+ data.SetCustomColour(i, colour);
+ }
+
+ wxColourDialog dialog(this, &data);
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ wxColourData retData = dialog.GetColourData();
+ wxColour col = retData.GetColour();
+ wxBrush brush(col, wxSOLID);
+ myCanvas->SetBackground(brush);
+ myCanvas->Clear();
+ myCanvas->Refresh();
+ }
+\end{verbatim}
+
+
+\subsection{wxFontDialog overview}\label{wxfontdialogoverview}
+
+Classes: \helpref{wxFontDialog}{wxfontdialog}, \helpref{wxFontData}{wxfontdata}
+
+The wxFontDialog presents a font selector to the user, and returns
+with font and colour information.
+
+{\bf The MS Windows font selector}
+
+Under Windows, the native font selector common dialog is used. This
+presents a dialog box with controls for font name, point size, style, weight,
+underlining, strikeout and text foreground colour. A sample of the
+font is shown on a white area of the dialog box. Note that
+in the translation from full MS Windows fonts to wxWindows font
+conventions, strikeout is ignored and a font family (such as
+Swiss or Modern) is deduced from the actual font name (such as Arial
+or Courier). The full range of Windows fonts cannot be used in wxWindows
+at present.
+
+{\bf The generic font selector}
+
+Under non-MS Windows platforms, the font selector is simpler.
+Controls for font family, point size, style, weight,
+underlining and text foreground colour are provided, and
+a sample is shown upon a white background. The generic font selector
+is also available under MS Windows; use the name wxGenericFontDialog.
+
+In both cases, the application is responsible for deleting the
+new font returned from calling wxFontDialog::Show (if any).
+This returned font is guaranteed to be a new object and not
+one currently in use in the application.
+
+{\bf Example}
+
+In the samples/dialogs directory, there is an example of using
+the wxFontDialog class. The application uses the returned font
+and colour for drawing text on a canvas. Here is an excerpt:
+
+\begin{verbatim}
+ wxFontData data;
+ data.SetInitialFont(canvasFont);
+ data.SetColour(canvasTextColour);
+
+ wxFontDialog dialog(this, &data);
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ wxFontData retData = dialog.GetFontData();
+ canvasFont = retData.GetChosenFont();
+ canvasTextColour = retData.GetColour();
+ myCanvas->Refresh();
+ }
+\end{verbatim}
+
+\subsection{wxPrintDialog overview}\label{wxprintdialogoverview}
+
+Classes: \helpref{wxPrintDialog}{wxprintdialog}, \helpref{wxPrintData}{wxprintdata}
+
+This class represents the print and print setup common dialogs.
+You may obtain a \helpref{wxPrinterDC}{wxprinterdc} device context from
+a successfully dismissed print dialog.
+
+The samples/printing example shows how to use it: see \helpref{Printing overview}{printingoverview} for
+an excerpt from this example.
+
+\subsection{wxFileDialog overview}\label{wxfiledialogoverview}
+
+Classes: \helpref{wxFileDialog}{wxfiledialog}
+
+Pops up a file selector box. In Windows, this is the common file selector
+dialog. In X, this is a file selector box with somewhat less functionality.
+The path and filename are distinct elements of a full file pathname.
+If path is ``", the current directory will be used. If filename is ``",
+no default filename will be supplied. The wildcard determines what files
+are displayed in the file selector, and file extension supplies a type
+extension for the required filename. Flags may be a combination of wxOPEN,
+wxSAVE, wxOVERWRITE\_PROMPT, wxHIDE\_READONLY, or 0. They are only significant
+at present in Windows.
+
+Both the X and Windows versions implement a wildcard filter. Typing a
+filename containing wildcards (*, ?) in the filename text item, and
+clicking on Ok, will result in only those files matching the pattern being
+displayed. In the X version, supplying no default name will result in the
+wildcard filter being inserted in the filename text item; the filter is
+ignored if a default name is supplied.
+
+Under Windows (only), the wildcard may be a specification for multiple
+types of file with a description for each, such as:
+
+\begin{verbatim}
+ "BMP files (*.bmp) | *.bmp | GIF files (*.gif) | *.gif"
+\end{verbatim}
+
+\subsection{wxDirDialog overview}\label{wxdirdialogoverview}
+
+Classes: \helpref{wxDirDialog}{wxdirdialog}
+
+This dialog shows a directory selector dialog, allowing the user to select a single
+directory.
+
+\subsection{wxTextEntryDialog overview}\label{wxtextentrydialogoverview}
+
+Classes: \helpref{wxTextEntryDialog}{wxtextentrydialog}
+
+This is a dialog with a text entry field. The value that the user
+entered is obtained using \helpref{wxTextEntryDialog::GetValue}{wxtextentrydialoggetvalue}.
+
+\subsection{wxMessageDialog overview}\label{wxmessagedialogoverview}
+
+Classes: \helpref{wxMessageDialog}{wxmessagedialog}
+
+This dialog shows a message, plus buttons that can be chosen from OK, Cancel, Yes, and No.
+Under Windows, an optional icon can be shown, such as an exclamation mark or question mark.
+
+The return value of \helpref{wxMessageDialog::ShowModal}{wxmessagedialogshowmodal} indicates
+which button the user pressed.
+
+\subsection{wxSingleChoiceDialog overview}\label{wxsinglechoicedialogoverview}
+
+Classes: \helpref{wxSingleChoiceDialog}{wxsinglechoicedialog}
+
+This dialog shows a list of choices, plus OK and (optionally) Cancel. The user can
+select one of them. The selection can be obtained from the dialog as an index,
+a string or client data.
+
+\subsection{wxMultipleChoiceDialog overview}\label{wxmultiplechoicedialogoverview}
+
+Classes: \helpref{wxMultipleChoiceDialog}{wxmultiplechoicedialog}
+
+This dialog shows a list of choices, plus OK and (optionally) Cancel. The user can
+select one or more of them. TODO.
+
--- /dev/null
+\section{Constraints overview}\label{constraintsoverview}
+
+Classes: \helpref{wxLayoutConstraints}{wxlayoutconstraints}, \helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}.
+
+Objects of class wxLayoutConstraint can be associated with a window to define the
+way its subwindows are laid out, with respect to their siblings or parent.
+
+The class consists of the following eight constraints of class wxIndividualLayoutConstraint,
+some or all of which should be accessed directly to set the appropriate
+constraints.
+
+\begin{itemize}\itemsep=0pt
+\item {\bf left:} represents the left hand edge of the window
+\item {\bf right:} represents the right hand edge of the window
+\item {\bf top:} represents the top edge of the window
+\item {\bf bottom:} represents the bottom edge of the window
+\item {\bf width:} represents the width of the window
+\item {\bf height:} represents the height of the window
+\item {\bf centreX:} represents the horizontal centre point of the window
+\item {\bf centreY:} represents the vertical centre point of the window
+\end{itemize}
+
+Most constraints are initially set to have the relationship wxUnconstrained,
+which means that their values should be calculated by looking at known constraints.
+The exceptions are {\it width} and {\it height}, which are set to wxAsIs to
+ensure that if the user does not specify a constraint, the existing
+width and height will be used, to be compatible with panel items which often
+have take a default size. If the constraint is wxAsIs, the dimension will
+not be changed.
+
+To call the \helpref{wxWindow::Layout}{wxwindowlayout} function which evaluates
+constraints, you can either call wxWindow::SetAutoLayout to tell
+default OnSize handlers to call Layout, or override OnSize and call Layout yourself.
+
+\subsection{Constraint layout: more detail}
+
+By default, windows do not have a wxLayoutConstraints object. In this case, much layout
+must be done explicitly, by performing calculations in OnSize members, except
+for the case of frames that have one subwindow, where wxFrame::OnSize takes care
+of resizing the child.
+
+To avoid the need for these rather awkward calculations, the user can create
+a wxLayoutConstraints object and associate it with a window with wxWindow::SetConstraints.
+This object contains a constraint for each of the window edges, two for the centre point,
+and two for the window size. By setting some or all of these constraints appropriately,
+the user can achieve quite complex layout by defining relationships between windows.
+
+In wxWindows, each window can be constrained relative to either its {\it
+siblings} on the same window, or the {\it parent}. The layout algorithm
+therefore operates in a top-down manner, finding the correct layout for
+the children of a window, then the layout for the grandchildren, and so
+on. Note that this differs markedly from native Motif layout, where
+constraints can ripple upwards and can eventually change the frame
+window or dialog box size. We assume in wxWindows that the {\it user} is
+always `boss' and specifies the size of the outer window, to which
+subwindows must conform. Obviously, this might be a limitation in some
+circumstances, but it suffices for most situations, and the
+simplification avoids some of the nightmarish problems associated with
+programming Motif.
+
+When the user sets constraints, many of the constraints for windows
+edges and dimensions remain unconstrained. For a given window,
+the wxWindow::Layout algorithm first resets all constraints
+in all children to have unknown edge or dimension values, and then iterates through the constraints,
+evaulating them. For unconstrained edges and dimensions, it
+tries to find the value using known relationships that always hold. For example,
+an unconstrained {\it width} may be calculated from the {\it left} and {\it right edges}, if
+both are currently known. For edges and dimensions with user-supplied constraints, these
+constraints are evaulated if the inputs of the constraint are known.
+
+The algorithm stops when all child edges and dimension are known (success), or there
+there are unknown edges or dimensions but there has been no change in this cycle (failure).
+
+It then sets all the window positions and sizes according to the values it has found.
+
+Because the algorithm is iterative, the order in which constraints are considered is
+irrelevant.
+
+\subsection{Window layout examples}\label{layoutexamples}
+
+\subsubsection{Example 1: subwindow layout}
+
+This example specifies a panel and a canvas side by side,
+with a text subwindow below it.
+
+\begin{verbatim}
+ frame->panel = new wxPanel(frame, 0, 0, 1000, 500, 0);
+ frame->canvas = new MyCanvas(frame, 0, 0, 400, 400, wxRETAINED);
+ frame->text_window = new MyTextWindow(frame, 0, 250, 400, 250, wxNATIVE_IMPL);
+
+ // Set constraints for panel subwindow
+ wxLayoutConstraints *c1 = new wxLayoutConstraints;
+
+ c1->left.SameAs (frame, wxLeft);
+ c1->top.SameAs (frame, wxTop);
+ c1->right.PercentOf (frame, wxWidth, 50);
+ c1->height.PercentOf (frame, wxHeight, 50);
+
+ frame->panel->SetConstraints(c1);
+
+ // Set constraints for canvas subwindow
+ wxLayoutConstraints *c2 = new wxLayoutConstraints;
+
+ c2->left.SameAs (frame->panel, wxRight);
+ c2->top.SameAs (frame, wxTop);
+ c2->right.SameAs (frame, wxRight);
+ c2->height.PercentOf (frame, wxHeight, 50);
+
+ frame->canvas->SetConstraints(c2);
+
+ // Set constraints for text subwindow
+ wxLayoutConstraints *c3 = new wxLayoutConstraints;
+ c3->left.SameAs (frame, wxLeft);
+ c3->top.Below (frame->panel);
+ c3->right.SameAs (frame, wxRight);
+ c3->bottom.SameAs (frame, wxBottom);
+
+ frame->text_window->SetConstraints(c3);
+\end{verbatim}
+
+\subsubsection{Example 2: panel item layout}
+
+This example sizes a button width to 80 percent of the panel width, and centres
+it horizontally. A listbox and multitext item are placed below it. The listbox
+takes up 40 percent of the panel width, and the multitext item takes up
+the remainder of the width. Margins of 5 pixels are used.
+
+\begin{verbatim}
+ // Create some panel items
+ wxButton *btn1 = new wxButton(frame->panel, (wxFunction)NULL, "A button") ;
+
+ wxLayoutConstraints *b1 = new wxLayoutConstraints;
+ b1->centreX.SameAs (frame->panel, wxCentreX);
+ b1->top.SameAs (frame->panel, wxTop, 5);
+ b1->width.PercentOf (frame->panel, wxWidth, 80);
+ b1->height.PercentOf (frame->panel, wxHeight, 10);
+ btn1->SetConstraints(b1);
+
+ wxListBox *list = new wxListBox(frame->panel, (wxFunction)NULL, "A list",
+ wxSINGLE, -1, -1, 200, 100);
+
+ wxLayoutConstraints *b2 = new wxLayoutConstraints;
+ b2->top.Below (btn1, 5);
+ b2->left.SameAs (frame->panel, wxLeft, 5);
+ b2->width.PercentOf (frame->panel, wxWidth, 40);
+ b2->bottom.SameAs (frame->panel, wxBottom, 5);
+ list->SetConstraints(b2);
+
+ wxMultiText *mtext = new wxMultiText(frame->panel, (wxFunction)NULL, "Multiline text", "Some text",
+ -1, -1, 150, 100);
+
+ wxLayoutConstraints *b3 = new wxLayoutConstraints;
+ b3->top.Below (btn1, 5);
+ b3->left.RightOf (list, 5);
+ b3->right.SameAs (frame->panel, wxRight, 5);
+ b3->bottom.SameAs (frame->panel, wxBottom, 5);
+ mtext->SetConstraints(b3);
+\end{verbatim}
+
+
--- /dev/null
+\section{Database classes overview}\label{odbcoverview}
+
+Classes: \helpref{wxDatabase}{wxdatabase}, \helpref{wxRecordSet}{wxrecordset}, \helpref{wxQueryCol}{wxquerycol},
+\rtfsp\helpref{wxQueryField}{wxqueryfield}
+
+\normalboxd{IMPORTANT NOTE: The ODBC classes are a preliminary release and incomplete. Please
+take this into account when using them. Feedback and bug fixes are appreciated,
+as always. The classes are being developed by Olaf Klein (oklein@smallo.ruhr.de) and
+Patrick Halke (patrick@zaphod.ruhr.de).}
+
+wxWindows provides a set of classes for accessing a subset of Microsoft's ODBC (Open Database Connectivity)
+product. Currently, this wrapper is available under MS Windows only, although
+ODBC may appear on other platforms, and a generic or product-specific SQL emulator for the ODBC
+classes may be provided in wxWindows at a later date.
+
+ODBC presents a unified API (Application Programmer's Interface) to a
+wide variety of databases, by interfacing indirectly to each database or
+file via an ODBC driver. The language for most of the database
+operations is SQL, so you need to learn a small amount of SQL as well as
+the wxWindows ODBC wrapper API. Even though the databases may not be
+SQL-based, the ODBC drivers translate SQL into appropriate operations
+for the database or file: even text files have rudimentry ODBC support,
+along with dBASE, Access, Excel and other file formats.
+
+The run-time files for ODBC are bundled with many existing database
+packages, including MS Office. The required header files, sql.h and
+sqlext.h, are bundled with several compilers including MS VC++ and
+Watcom C++. The only other way to obtain these header files is from the
+ODBC SDK, which is only available with the MS Developer Network CD-ROMs
+-- at great expense. If you have odbc.dll, you can make the required
+import library odbc.lib using the tool `implib'. You need to have odbc.lib
+in your compiler library path.
+
+The minimum you need to distribute with your application is odbc.dll, which must
+go in the Windows system directory. For the application to function correctly,
+ODBC drivers must be installed on the user's machine. If you do not use the database
+classes, odbc.dll will be loaded but not called (so ODBC does not need to be
+setup fully if no ODBC calls will be made).
+
+A sample is distributed with wxWindows in {\tt samples/odbc}. You will need to install
+the sample dbf file as a data source using the ODBC setup utility, available from
+the control panel if ODBC has been fully installed.
+
+\subsection{Procedures for writing an ODBC application}
+
+You first need to create a wxDatabase object. If you want to get information
+from the ODBC manager instead of from a particular database (for example
+using \helpref{wxRecordSet::GetDataSources}{wxrecordsetgetdatasources}), then you
+do not need to call \helpref{wxDatabase::Open}{wxdatabaseopen}.
+If you do wish to connect to a datasource, then call wxDatabase::Open.
+You can reuse your wxDatabase object, calling wxDatabase::Close and wxDatabase::Open
+multiple times.
+
+Then, create a wxRecordSet object for retrieving or sending information.
+For ODBC manager information retrieval, you can create it as a dynaset (retrieve the
+information as needed) or a snapshot (get all the data at once).
+If you are going to call \helpref{wxRecordSet::ExecuteSQL}{wxrecordsetexecutesql}, you need to create it as a snapshot.
+Dynaset mode is not yet implemented for user data.
+
+Having called a function such as wxRecordSet::ExecuteSQL or
+wxRecordSet::GetDataSources, you may have a number of records
+associated with the recordset, if appropriate to the operation. You can
+now retrieve information such as the number of records retrieved and the
+actual data itself. Use \helpref{wxRecordSet::GetFieldData}{wxrecordsetgetfielddata} or
+\helpref{wxRecordSet::GetFieldDataPtr}{wxrecordsetgetfielddataptr} to get the data or a pointer to it, passing
+a column index or name. The data returned will be for the current
+record. To move around the records, use \helpref{wxRecordSet::MoveNext}{wxrecordsetmovenext},
+\rtfsp\helpref{wxRecordSet::MovePrev}{wxrecordsetmoveprev} and associated functions.
+
+You can use the same recordset for multiple operations, or delete
+the recordset and create a new one.
+
+Note that when you delete a wxDatabase, any associated recordsets
+also get deleted, so beware of holding onto invalid pointers.
+
+\subsection{wxDatabase overview}\label{wxdatabaseoverview}
+
+\overview{Database classes overview}{odbcoverview}
+
+Class: \helpref{wxDatabase}{wxdatabase}
+
+Every database object represents an ODBC connection. To do anything useful
+with a database object you need to bind a wxRecordSet object to it. All you
+can do with wxDatabase is opening/closing connections and getting some info
+about it (users, passwords, and so on).
+
+\subsection{wxQueryCol overview}\label{wxquerycoloverview}
+
+\overview{Database classes overview}{odbcoverview}
+
+Class: \helpref{wxQueryCol}{wxquerycol}
+
+Every data column is represented by an instance of this class.
+It contains the name and type of a column and a list of wxQueryFields where
+the real data is stored. The links to user-defined variables are stored
+here, as well.
+
+\subsection{wxQueryField overview}\label{wxqueryfieldoverview}
+
+\overview{Database classes overview}{odbcoverview}
+
+Class: \helpref{wxQueryField}{wxqueryfield}
+
+As every data column is represented by an instance of the class wxQueryCol,
+every data item of a specific column is represented by an instance of
+wxQueryField. Each column contains a list of wxQueryFields. If wxRecordSet is
+of the type wxOPEN\_TYPE\_DYNASET, there will be only one field for each column,
+which will be updated every time you call functions like wxRecordSet::Move
+or wxRecordSet::GoTo. If wxRecordSet is of the type wxOPEN\_TYPE\_SNAPSHOT,
+all data returned by an ODBC function will be loaded at once and the number
+of wxQueryField instances for each column will depend on the number of records.
+
+\subsection{wxRecordSet overview}\label{wxrecordsetoverview}
+
+\overview{Database classes overview}{odbcoverview}
+
+Class: \helpref{wxRecordSet}{wxrecordset}
+
+Each wxRecordSet represents a database query. You can make multiple queries
+at a time by using multiple wxRecordSets with a wxDatabase or you can make
+your queries in sequential order using the same wxRecordSet.
+
+\subsection{ODBC SQL data types}\label{sqltypes}
+
+\overview{Database classes overview}{odbcoverview}
+
+These are the data types supported in ODBC SQL. Note that there are other, extended level conformance
+types, not currently supported in wxWindows.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{CHAR(n)}{A character string of fixed length {\it n}.}
+\twocolitem{VARCHAR(n)}{A varying length character string of maximum length {\it n}.}
+\twocolitem{LONG VARCHAR(n)}{A varying length character string: equivalent to VARCHAR for the purposes
+of ODBC.}
+\twocolitem{DECIMAL(p, s)}{An exact numeric of precision {\it p} and scale {\it s}.}
+\twocolitem{NUMERIC(p, s)}{Same as DECIMAL.}
+\twocolitem{SMALLINT}{A 2 byte integer.}
+\twocolitem{INTEGER}{A 4 byte integer.}
+\twocolitem{REAL}{A 4 byte floating point number.}
+\twocolitem{FLOAT}{An 8 byte floating point number.}
+\twocolitem{DOUBLE PRECISION}{Same as FLOAT.}
+\end{twocollist}
+
+These data types correspond to the following ODBC identifiers:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{SQL\_CHAR}{A character string of fixed length.}
+\twocolitem{SQL\_VARCHAR}{A varying length character string.}
+\twocolitem{SQL\_DECIMAL}{An exact numeric.}
+\twocolitem{SQL\_NUMERIC}{Same as SQL\_DECIMAL.}
+\twocolitem{SQL\_SMALLINT}{A 2 byte integer.}
+\twocolitem{SQL\_INTEGER}{A 4 byte integer.}
+\twocolitem{SQL\_REAL}{A 4 byte floating point number.}
+\twocolitem{SQL\_FLOAT}{An 8 byte floating point number.}
+\twocolitem{SQL\_DOUBLE}{Same as SQL\_FLOAT.}
+\end{twocollist}
+
+\subsection{A selection of SQL commands}\label{sqlcommands}
+
+\overview{Database classes overview}{odbcoverview}
+
+The following is a very brief description of some common SQL commands, with
+examples.
+
+\subsubsection{Create}
+
+Creates a table.
+
+Example:
+
+\begin{verbatim}
+CREATE TABLE Book
+ (BookNumber INTEGER PRIMARY KEY
+ , CategoryCode CHAR(2) DEFAULT 'RO' NOT NULL
+ , Title VARCHAR(100) UNIQUE
+ , NumberOfPages SMALLINT
+ , RetailPriceAmount NUMERIC(5,2)
+ )
+\end{verbatim}
+
+\subsubsection{Insert}
+
+Inserts records into a table.
+
+Example:
+
+\begin{verbatim}
+INSERT INTO Book
+ (BookNumber, CategoryCode, Title)
+ VALUES(5, 'HR', 'The Lark Ascending')
+\end{verbatim}
+
+\subsubsection{Select}
+
+The Select operation retrieves rows and columns from a table. The criteria
+for selection and the columns returned may be specified.
+
+Examples:
+
+\verb$SELECT * FROM Book$
+
+Selects all rows and columns from table Book.
+
+\verb$SELECT Title, RetailPriceAmount FROM Book WHERE RetailPriceAmount > 20.0$
+
+Selects columns Title and RetailPriceAmount from table Book, returning only
+the rows that match the WHERE clause.
+
+\verb$SELECT * FROM Book WHERE CatCode = 'LL' OR CatCode = 'RR'$
+
+Selects all columns from table Book, returning only
+the rows that match the WHERE clause.
+
+\verb$SELECT * FROM Book WHERE CatCode IS NULL$
+
+Selects all columns from table Book, returning only rows where the CatCode column
+is NULL.
+
+\verb$SELECT * FROM Book ORDER BY Title$
+
+Selects all columns from table Book, ordering by Title, in ascending order. To specify
+descending order, add DESC after the ORDER BY Title clause.
+
+\verb$SELECT Title FROM Book WHERE RetailPriceAmount >= 20.0 AND RetailPriceAmount <= 35.0$
+
+Selects records where RetailPriceAmount conforms to the WHERE expression.
+
+\subsubsection{Update}
+
+Updates records in a table.
+
+Example:
+
+\verb$UPDATE Incident SET X = 123 WHERE ASSET = 'BD34'$
+
+This example sets a field in column `X' to the number 123, for the record
+where the column ASSET has the value `BD34'.
+
+
+
--- /dev/null
+\section{Device context overview}\label{dcoverview}
+
+Classes: \helpref{wxDC}{wxdc}, \helpref{wxPostScriptDC}{wxpostscriptdc},\rtfsp
+\rtfsp\helpref{wxMetaFileDC}{wxmetafiledc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPrinterDC}{wxprinterdc},\rtfsp
+\helpref{wxScreenDC}{wxscreendc}, \helpref{wxClientDC}{wxclientdc}, \helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{wxWindowDC}{wxwindowdc}.
+
+A wxDC is a {\it device context} onto which graphics and text can be drawn.
+The device context is intended to represent a number of output devices in a generic way,
+with the same API being used throughout.
+
+Some device contexts are created temporarily in order to draw on a window.
+This is true of \helpref{wxScreenDC}{wxscreendc}, \helpref{wxClientDC}{wxclientdc}, \helpref{wxPaintDC}{wxpaintdc},
+and \helpref{wxWindowDC}{wxwindowdc}. The following describes the differences between
+these device contexts and when you should use them.
+
+\begin{itemize}\itemsep=0pt
+\item {\bf wxScreenDC.} Use this to paint on the screen, as opposed to an individual window.
+\item {\bf wxClientDC.} Use this to paint on the client area of window (the part without
+borders and other decorations), but do not use it from within an \helpref{wxWindow::OnPaint}{wxwindowonpaint} event.
+\item {\bf wxPaintDC.} Use this to paint on the client area of a window, but {\it only} from
+within an \helpref{wxWindow::OnPaint}{wxwindowonpaint} event.
+\item {\bf wxWindowDC.} Use this to paint on the whole area of a window, including decorations.
+This may not be available on non-Windows platforms.
+\end{itemize}
+
+To use a client, paint or window device context, create an object on the stack with
+the window as argument, for example:
+
+\begin{verbatim}
+ void MyWindow::OnMyCmd(wxCommandEvent& event)
+ {
+ wxClientDC dc(window);
+ DrawMyPicture(dc);
+ }
+\end{verbatim}
+
+Try to write code so it is parameterised by wxDC - if you do this, the same piece of code may
+write to a number of different devices, by passing a different device context. This doesn't
+work for everything (for example not all device contexts support bitmap drawing) but
+will work most of the time.
+
--- /dev/null
+\section{Debugging overview}\label{debuggingoverview}
+
+Classes: \helpref{wxDebugContext}{wxdebugcontext}, \helpref{wxDebugStreamBuf}{wxdebugstreambuf},
+\rtfsp\helpref{wxObject}{wxobject}
+
+Various classes, functions and macros are provided in wxWindows to help you debug
+your application. Most of these are only available if you compile both wxWindows,
+your application and {\it all} libraries that use wxWindows with the DEBUG flag
+set to 1 or more.
+
+wxDebugContext is a class that never gets instantiated, but ties together
+various functions and variables. It allows you to set the debugging stream, dump
+all objects to that stream, write statistics about object allocation, and
+check memory for errors.
+
+You can use the \helpref{WXTRACE}{trace} macro to output debugging information in DEBUG mode;
+it will be defined to nothing for non-debugging code.
+
+It is good practice to define a Dump member function for each class you derive
+from a wxWindows class, so that wxDebugContext::Dump can call it and
+give valuable information about the state of the application.
+
+For wxDebugContext to do its work, the {\it new} and {\it delete}\rtfsp
+operators for wxObject have been redefined to store extra information
+about dynamically allocated objects (but not statically declared
+objects). This slows down a debugging version of an application, but can
+in theory find difficult-to-detect memory leaks (objects are not
+deallocated), overwrites (writing past the end of your object) and
+underwrites (writing to memory in front of the object).
+
+If you have difficulty tracking down a memory leak, recompile
+in debugging mode and call wxDebugContext::Dump and wxDebugContext::Statistics
+at appropriate places. They will tell you what objects have not yet been
+deleted, and what kinds of object they are.
+
+If you use the macro WXDEBUG\_NEW instead of the normal 'new', the debugging
+output (and error messages reporting memory problems) will also tell you what
+file and on what line you allocated the object.
+
+To avoid the need for replacing existing new operators with WXDEBUG\_NEW, you
+can write this at the top of each application file:
+
+\begin{verbatim}
+#define new WXDEBUG\_NEW
+\end{verbatim}
+
+In non-debugging mode, this will revert to the usual interpretation
+of new. Note that for this not to mess up new-based allocation of non-wxObject derived classes and
+built-in types, there are global definitions of new and delete which match
+the syntax required for storing filename and line numbers. These merely
+call malloc and free, and so do not do anything interesting. The definitions
+may possibly cause multiple symbol problems for some compilers and so might
+need to be omitted by setting the USE\_GLOBAL\_MEMORY\_OPERATORS to 0 in wx\_setup.h
+
+\subsection{wxDebugContext overview}\label{wxdebugcontextoverview}
+
+\overview{Debugging overview}{debuggingoverview}
+
+Class: \helpref{wxDebugContext}{wxdebugcontext}
+
+wxDebugContext is a class for performing various debugging and memory tracing
+operations. wxDebugContext, and the related macros and function WXTRACE and
+wxTrace, are only present if USE\_DEBUG\_CONTEXT is used.
+
+This class has only static data and function members, and there should be
+no instances. Probably the most useful members are SetFile (for directing output
+to a file, instead of the default standard error or debugger output);
+Dump (for dumping the dynamically allocated objects) and PrintStatistics
+(for dumping information about allocation of objects). You can also call
+Check to check memory blocks for integrity.
+
+Here's an example of use. The SetCheckpoint ensures that only the
+allocations done after the checkpoint will be dumped. Unfortunately
+the define of new to WXDEBUG\_NEW does not work for Borland C++ (and
+perhaps other compilers) because it fails to find the correct overloaded
+operator for non-object usage of new. Instead, you need to use WXDEBUG\_NEW
+explicitly if there are any examples of non-object new usage in the file.
+
+\begin{verbatim}
+#define new WXDEBUG_NEW
+
+ wxDebugContext::SetCheckpoint();
+
+ wxDebugContext::SetFile("c:\\temp\\debug.log");
+
+ wxString *thing = new wxString;
+
+ // Proves that defining 'new' to be 'WXDEBUG_NEW' doesn't mess up
+ // non-object allocation. Doesn't work for Borland C++.
+ char *ordinaryNonObject = new char[1000];
+
+ wxDebugContext::Dump();
+ wxDebugContext::PrintStatistics();
+\end{verbatim}
+
+You can use wxDebugContext if DEBUG is 1 or more, or you can use it
+at any other time (if USE\_DEBUG\_CONTEXT is 1). It is not disabled
+for DEBUG = 1 (as in earlier versions of wxWindows) because you
+may not wish to recompile wxWindows and your entire application
+just to make use of the error logging facility. This is especially
+true in a Windows NT or Windows 95 environment, where you cannot
+easily output to a debug window: wxDebugContext can be used to
+write to log files instead.
+
--- /dev/null
+\section{Window deletion overview}\label{windowdeletionoverview}
+
+Classes: \helpref{wxCloseEvent}{wxcloseevent}, \helpref{wxWindow}{wxwindow}
+
+Window deletion can be a confusing subject, so this overview is provided
+to make it clear when and how you delete windows, or respond to user requests
+to close windows.
+
+\wxheading{What is the sequence of events in a window deletion?}
+
+When the user clicks on the system close button or system close command,
+in a frame or a dialog, wxWindows calls \helpref{wxWindow::Close}{wxwindowclose}.
+
+This function then generates a \helpref{wxCloseEvent}{wxcloseevent} event which
+can be handled by the application (by using an EVT\_CLOSE event table entry). It is the duty of the application to
+define a suitable event handler, and decide whether or not to destroy the window.
+If the application is for some reason forcing the application to close,
+the window should always be destroyed, otherwise there is the option to
+ignore the request, or maybe wait until the user has answered a question
+before deciding whether it's safe to close.
+
+The wxCloseEvent handler should only call \helpref{wxWindow::Destroy}{wxwindowdestroy} to
+delete the window, and not use the {\bf delete} operator. This is because
+for some window classes, wxWindows delays actual deletion of the window until all events have been processed,
+since otherwise there is the danger that events will be sent to a non-existent window.
+
+\wxheading{How can the application close a window itself?}
+
+Your application can use the \helpref{wxWindow::Close}{wxwindowclose} event just as
+the framework does. Pass a TRUE argument to this function to tell the event handler
+that we definitely want to delete the frame.
+
+If for some reason you don't wish to use the {\bf Close} function to delete a window, at least use
+the {\bf Destroy} function so that wxWindows can decide when it's safe to delete the window.
+
+\wxheading{What is the default behaviour?}
+
+By default, the close event handlers for wxFrame and wxDialog
+both call the old \helpref{wxWindow::OnClose}{wxwindowonclose} handler
+for backward compatibility. So you can still use the old form if you wish.
+
+In addition, the default close event handler for wxDialog simulates a Cancel command,
+generating a wxID\_CANCEL event. Since the handler for this cancel event might
+itself call {\bf Close}, there is a check for infinite looping.
+
+Under Windows, wxDialog also defines a handler for \helpref{wxWindow::OnCharHook}{wxwindowoncharhook} that
+generates a Cancel event if the Escape key has been pressed.
+
+\wxheading{What should I do when the user calls up Exit from a menu?}
+
+You can simply call \helpref{wxWindow::Close}{wxwindowclose} on the frame. This
+will invoke your own close event handler which may destroy the frame.
+
+You can do checking to see if your application can be safely exited at this point,
+either from within your close event handler, or from within your exit menu command
+handler. For example, you may wish to check that all files have been saved.
+Give the user a chance to save and quit, to not save but quit anyway, or to cancel
+the exit command altogether.
+
+\wxheading{What should I do to upgrade my 1.xx OnClose to 2.0?}
+
+In wxWindows 1.xx, the {\bf OnClose} function did not actually delete 'this', but signalled
+to the calling function (either {\bf Close}, or the wxWindows framework) to delete
+or not delete the window.
+
+You can still use this function unchanged in 2.0, but it's worth upgrading to
+the new method in case future versions of wxWindows does not support the old one.
+
+To update your code, you should provide an event table entry in your frame or
+dialog, using the EVT\_CLOSE macro. The event handler function might look like this:
+
+{\small%
+\begin{verbatim}
+ void MyFrame::OnCloseWindow(wxCloseEvent& event)
+ {
+ // If the application forces the deletion,
+ // obey without question.
+ if (event.GetForce())
+ {
+ this->Destroy();
+ return;
+ }
+
+ // Otherwise...
+ if (MyDataHasBeenModified())
+ {
+ wxMessageDialog* dialog = new wxMessageDialog(this,
+ "Save changed data?", "My app", wxYES_NO|wxCANCEL);
+
+ int ans = dialog->ShowModal();
+ dialog->Close(TRUE);
+
+ switch (ans)
+ {
+ case wxID_YES: // Save, then destroy, quitting app
+ SaveMyData();
+ this->Destroy();
+ break;
+ case wxID_NO: // Don't save; just destroy, quitting app
+ this->Destroy();
+ break;
+ case wxID_CANCEL: // Do nothing - so don't quit app.
+ default:
+ break;
+ }
+ }
+ }
+\end{verbatim}
+}%
+
+\wxheading{How do I exit the application gracefully?}
+
+A wxWindows application automatically exits when the top frame (returned
+from \helpref{wxApp::OnInit}{wxapponinit}) is destroyed. This may be modified
+in later versions to exit only when the {\it last} top-level frame is destroyed.
+
+\wxheading{Do child windows get deleted automatically?}
+
+Yes, child windows are deleted from within the parent destructor. This includes any children
+that are themselves frames or dialogs, so you may wish to close these child frame or dialog windows
+explicitly from within the parent close handler.
+
+\wxheading{What about other kinds of window?}
+
+So far we've been talking about `managed' windows, i.e. frames and dialogs. Windows
+with parents, such as controls, don't have delayed destruction and don't usually have
+close event handlers, though you can implement them if you wish. For consistency,
+continue to use the \helpref{wxWindow::Destroy}{wxwindowdestroy} function instead
+of the {\bf delete} operator when deleting these kinds of windows explicitly.
+
--- /dev/null
+\section{wxDialog overview}\label{wxdialogoverview}
+
+Classes: \helpref{wxDialog}{wxdialog}
+
+A dialog box is similar to a panel, in that it is a window which can
+be used for placing controls, with the following exceptions:
+
+\begin{enumerate}
+\item A surrounding frame is implicitly created.
+\item Extra functionality is automatically given to the dialog box,
+ such as tabbing between items (currently Windows only).
+\item If the dialog box is {\it modal}, the calling program is blocked
+ until the dialog box is dismissed.
+\end{enumerate}
+
+Under Windows 3, modal dialogs have to be emulated using
+modeless dialogs and a message loop. This is because Windows 3 expects
+the contents of a modal dialog to be loaded from a resource file or
+created on receipt of a dialog initialization message. This is too
+restrictive for wxWindows, where any window may be created and displayed
+before its contents are created.
+
+For a set of dialog convenience functions, including file selection, see
+\rtfsp\helpref{Dialog functions}{dialogfunctions}.
+
+See also \helpref{wxPanel}{wxpanel} and \helpref{wxWindow}{wxwindow} for inherited
+member functions. Validation of data in controls is covered
+in \helpref{Validator overview}{validatoroverview}.
+
+
+
--- /dev/null
+\section{Document/view overview}\label{docviewoverview}
+
+Classes: \helpref{wxDocument}{wxdocument}, \helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate},\rtfsp
+\helpref{wxDocManager}{wxdocmanager}, \helpref{wxDocParentFrame}{wxdocparentframe}, \helpref{wxDocChildFrame}{wxdocchildframe},
+\rtfsp\helpref{wxCommand}{wxcommand}, \helpref{wxCommandProcessor}{wxcommandprocessor}
+
+The document/view framework is found in most application frameworks, because it
+can dramatically simplify the code required to build many kinds of application.
+
+The idea is that you can model your application primarily in terms of {\it documents} to store data
+and provide interface-independent operations upon it, and {\it views} to visualise and manipulate
+the data. Documents know how to do input and output given stream objects, and views are responsible
+for taking input from physical windows and performing the manipulation on the document data.
+If a document's data changes, all views should be updated to reflect the change.
+
+The framework can provide many user-interface elements based on this model. Once you have defined
+your own classes and the relationships between them, the framework takes care
+of popping up file selectors, opening and closing files, asking the user to save
+modifications, routing menu commands to appropriate (possibly default) code, even
+some default print/preview functionality and support for command undo/redo.
+The framework is highly modular, allowing overriding and replacement of functionality
+and objects to achieve more than the default behaviour.
+
+These are the overall steps involved in creating an application based on the document/view framework:
+
+\begin{enumerate}\itemsep=0pt
+\item Define your own document and view classes, overriding a minimal set of
+member functions e.g. for input/output, drawing and initialization.
+\item Define any subwindows
+(such as a canvas) that are needed for the view(s). You may need to route some events
+to views or documents, for example OnPaint needs to be routed to wxView::OnDraw.
+\item Decide what style of interface you will use: Microsoft's MDI (multiple
+document child frames surrounded by an overall frame), SDI (a separate, unconstrained frame
+for each document), or single-window (one document open at a time, as in Windows Write).
+\item Use the appropriate wxDocParentFrame and wxDocChildFrame classes. Construct an instance
+of wxDocParentFrame in your wxApp::OnInit, and a wxDocChildFrame (if not single-window) when
+you initialize a view. Create menus using standard menu ids (such as wxID\_OPEN, wxID\_PRINT),
+routing non-application-specific identifiers to the base frame's OnMenuCommand.
+\item Construct a single wxDocManager instance at the beginning of your wxApp::OnInit, and then
+as many wxDocTemplate instances as necessary to define relationships between documents and
+views. For a simple application, there will be just one wxDocTemplate.
+\end{enumerate}
+
+If you wish to implement Undo/Redo, you need to derive your own class(es) from wxCommand
+and use wxCommandProcessor::Submit instead of directly executing code. The framework will
+take care of calling Undo and Do functions as appropriate, so long as the wxID\_UNDO and
+wxID\_REDO menu items are defined in the view menu.
+
+Here are a few examples of the tailoring you can do to go beyond the default framework
+behaviour:
+
+\begin{itemize}\itemsep=0pt
+\item Override wxDocument::OnCreateCommandProcessor to define a different Do/Undo strategy,
+or a command history editor.
+\item Override wxView::OnCreatePrintout to create an instance of a derived \helpref{wxPrintout}{wxprintout}\rtfsp
+class, to provide multi-page document facilities.
+\item Override wxDocManager::SelectDocumentPath to provide a different file selector.
+\item Limit the maximum number of open documents and the maximum number of undo commands.
+\end{itemize}
+
+Note that to activate framework functionality, you need to use some or all of
+the wxWindows \helpref{predefined command identifiers}{predefinedids} in your menus.
+
+\subsection{wxDocument overview}\label{wxdocumentoverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Class: \helpref{wxDocument}{wxdocument}
+
+The wxDocument class can be used to model an application's file-based
+data. It is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate}\rtfsp
+and \helpref{wxDocManager}{wxdocmanager} classes.
+
+Using this framework can save a lot of routine user-interface programming,
+since a range of menu commands -- such as open, save, save as -- are supported automatically.
+The programmer just needs to define a minimal set of classes and member functions
+for the framework to call when necessary. Data, and the means to view and edit
+the data, are explicitly separated out in this model, and the concept of multiple {\it views} onto
+the same data is supported.
+
+Note that the document/view model will suit many but not all styles of application.
+For example, it would be overkill for a simple file conversion utility, where there
+may be no call for {\it views} on {\it documents} or the ability to open, edit and save
+files. But probably the majority of applications are document-based.
+
+See the example application in {\tt samples/docview}.
+
+To use the abstract wxDocument class, you need to derive a new class and override
+at least the member functions SaveObject and LoadObject. SaveObject and
+LoadObject will be called by the framework when the document needs to be saved
+or loaded.
+
+Use the macros DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS in order
+to allow the framework to create document objects on demand. When you create
+a \helpref{wxDocTemplate}{wxdoctemplate} object on application initialization, you
+should pass CLASSINFO(YourDocumentClass) to the wxDocTemplate constructor
+so that it knows how to create an instance of this class.
+
+If you do not wish to use the wxWindows method of creating document
+objects dynamically, you must override wxDocTemplate::CreateDocument
+to return an instance of the appropriate class.
+
+\subsection{wxView overview}\label{wxviewoverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Class: \helpref{wxView}{wxview}
+
+The wxView class can be used to model the viewing and editing component of
+an application's file-based data. It is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxDocument}{wxdocument}, \helpref{wxDocTemplate}{wxdoctemplate}
+and \helpref{wxDocManager}{wxdocmanager} classes.
+
+See the example application in {\tt samples/docview}.
+
+To use the abstract wxView class, you need to derive a new class and override
+at least the member functions OnCreate, OnDraw, OnUpdate and OnClose. You'll probably
+want to override OnMenuCommand to respond to menu commands from the frame containing the
+view.
+
+Use the macros DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS in order
+to allow the framework to create view objects on demand. When you create
+a \helpref{wxDocTemplate}{wxdoctemplate} object on application initialization, you
+should pass CLASSINFO(YourViewClass) to the wxDocTemplate constructor
+so that it knows how to create an instance of this class.
+
+If you do not wish to use the wxWindows method of creating view
+objects dynamically, you must override wxDocTemplate::CreateView
+to return an instance of the appropriate class.
+
+\subsection{wxDocTemplate overview}\label{wxdoctemplateoverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Class: \helpref{wxDocTemplate}{wxdoctemplate}
+
+The wxDocTemplate class is used to model the relationship between a
+document class and a view class. The application creates a document
+template object for each document/view pair. The list of document
+templates managed by the wxDocManager instance is used to create
+documents and views. Each document template knows what file filters
+and default extension are appropriate for a document/view combination,
+and how to create a document or view.
+
+For example, you might write a small doodling application that can load
+and save lists of line segments. If you had two views of the data -- graphical,
+and a list of the segments -- then you would create one document class DoodleDocument,
+and two view classes (DoodleGraphicView and DoodleListView). You would also
+need two document templates, one for the graphical view and another for the
+list view. You would pass the same document class and default file extension to both
+document templates, but each would be passed a different view class. When
+the user clicks on the Open menu item, the file selector is displayed
+with a list of possible file filters -- one for each wxDocTemplate. Selecting
+the filter selects the wxDocTemplate, and when
+a file is selected, that template will be used for creating a document
+and view. Under non-Windows platforms, the user will be prompted for
+a list of templates before the file selector is shown, since most file selectors
+do not allow a choice of file filters.
+
+For the case where an application has one document type and one view type,
+a single document template is constructed, and dialogs will be appropriately
+simplified.
+
+wxDocTemplate is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocument}{wxdocument}
+and \helpref{wxDocManager}{wxdocmanager} classes.
+
+See the example application in {\tt samples/docview}.
+
+To use the wxDocTemplate class, you do not need to derive a new class.
+Just pass relevant information to the constructor including CLASSINFO(YourDocumentClass) and
+CLASSINFO(YourViewClass) to allow dynamic instance creation.
+If you do not wish to use the wxWindows method of creating document
+objects dynamically, you must override wxDocTemplate::CreateDocument
+and wxDocTemplate::CreateView to return instances of the appropriate class.
+
+{\it NOTE}: the document template has nothing to do with the C++ template construct. C++
+templates are not used anywhere in wxWindows.
+
+\subsection{wxDocManager overview}\label{wxdocmanageroverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Class: \helpref{wxDocManager}{wxdocmanager}
+
+The wxDocManager class is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocument}{wxdocument}\rtfsp
+and \helpref{wxDocTemplate}{wxdoctemplate} classes.
+
+A wxDocManager instance coordinates documents, views and document templates. It keeps a list of document and
+and template instances, and much functionality is routed through this object, such
+as providing selection and file dialogs. The application can use this class `as is' or
+derive a class and override some members to extend or change the functionality.
+Create an instance of this class near the beginning of your application initialization,
+before any documents, views or templates are manipulated.
+
+There may be multiple wxDocManager instances in an application.
+
+See the example application in {\tt samples/docview}.
+
+\subsection{wxCommand overview}\label{wxcommandoverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Classes: \helpref{wxCommand}{wxcommand}, \helpref{wxCommandProcessor}{wxcommandprocessor}
+
+wxCommand is a base class for modelling an application command,
+which is an action usually performed by selecting a menu item, pressing
+a toolbar button or any other means provided by the application to
+change the data or view.
+
+Instead of the application functionality being scattered around
+switch statements and functions in a way that may be hard to
+read and maintain, the functionality for a command is explicitly represented
+as an object which can be manipulated by a framework or application.
+When a user interface event occurs, the application {\it submits} a command
+to a \helpref{wxCommandProcessor}{wxcommandprocessoroverview} object to execute and
+store.
+
+The wxWindows document/view framework handles Undo and Redo by use of
+wxCommand and wxCommandProcessor objects. You might find further uses
+for wxCommand, such as implementing a macro facility that stores, loads
+and replays commands.
+
+An application can derive a new class for every command, or, more likely, use
+one class parameterized with an integer or string command identifier.
+
+\subsection{wxCommandProcessor overview}\label{wxcommandprocessoroverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Classes: \helpref{wxCommandProcessor}{wxcommandprocessor}, \helpref{wxCommand}{wxcommand}
+
+wxCommandProcessor is a class that maintains a history of wxCommand
+instances, with undo/redo functionality built-in. Derive a new class from this
+if you want different behaviour.
+
+\subsection{wxFileHistory overview}\label{wxfilehistoryoverview}
+
+\overview{Document/view framework overview}{docviewoverview}
+
+Classes: \helpref{wxFileHistory}{wxfilehistory}, \helpref{wxDocManager}{wxdocmanager}
+
+wxFileHistory encapsulates functionality to record the last few files visited, and
+to allow the user to quickly load these files using the list appended to the File menu.
+
+Although wxFileHistory is used by wxDocManager, it can be used independently. You may wish
+to derive from it to allow different behaviour, such as popping up a scrolling
+list of files.
+
+By calling wxFileHistory::FileHistoryUseMenu you can associate a file menu with
+the file history, that will be used for appending the filenames. They are
+appended using menu identifiers in the range wxID\_FILE1 to wxID\_FILE9.
+
+In order to respond to a file load command from one of these identifiers,
+you need to handle them in your wxFrame::OnMenuCommand. Below is the
+code used by the default document/view parent frame.
+
+\begin{verbatim}
+void wxDocParentFrame::OnMenuCommand(int id)
+{
+ switch (id)
+ {
+ case wxID_EXIT:
+ {
+ if (GetEventHandler()->OnClose())
+ delete this;
+ break;
+ }
+ case wxID_FILE1:
+ case wxID_FILE2:
+ case wxID_FILE3:
+ case wxID_FILE4:
+ case wxID_FILE5:
+ case wxID_FILE6:
+ case wxID_FILE7:
+ case wxID_FILE8:
+ case wxID_FILE9:
+ {
+ char *f = docManager->GetHistoryFile(id-wxID_FILE1);
+ if (f)
+ (void)docManager->CreateDocument(f, wxDOC_SILENT);
+ break;
+ }
+ default:
+ {
+ docManager->OnMenuCommand(id);
+ }
+ }
+}
+\end{verbatim}
+
+\subsection{wxWindows predefined command identifiers}\label{predefinedids}
+
+To allow communication between the application's menus and the
+document/view framework, several command identifiers are predefined for you
+to use in menus. The framework recognizes them and processes them if you
+forward commands from wxFrame::OnMenuCommand (or perhaps from toolbars and
+other user interface constructs).
+
+\begin{itemize}\itemsep=0pt
+\item wxID\_OPEN (5000)
+\item wxID\_CLOSE (5001)
+\item wxID\_NEW (5002)
+\item wxID\_SAVE (5003)
+\item wxID\_SAVEAS (5004)
+\item wxID\_REVERT (5005)
+\item wxID\_EXIT (5006)
+\item wxID\_UNDO (5007)
+\item wxID\_REDO (5008)
+\item wxID\_HELP (5009)
+\item wxID\_PRINT (5010)
+\item wxID\_PRINT\_SETUP (5011)
+\item wxID\_PREVIEW (5012)
+\end{itemize}
+
+
--- /dev/null
+\section{Event handling overview}\label{eventhandlingoverview}
+
+Classes: \helpref{wxEvtHandler}{wxevthandler}, \helpref{wxWindow}{wxwindow}, \helpref{wxEvent}{wxevent}
+
+\subsection{Introduction}
+
+Before version 2.0 of wxWindows, events were handled by the application
+either by supplying callback functions, or by overriding virtual member
+functions such as {\bf OnSize}.
+
+From wxWindows 2.0, {\it event tables} are used instead, with a few exceptions.
+
+An event table is placed in an implementation file to tell wxWindows how to map
+events to member functions. These member functions are not virtual functions, but
+they all similar in form: they take a single wxEvent-derived argument, and have a void return
+type.
+
+Here's an example of an event table.
+
+\begin{verbatim}
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+ EVT_MENU (wxID_EXIT, MyFrame::OnExit)
+ EVT_MENU (DO_TEST, MyFrame::DoTest)
+ EVT_SIZE ( MyFrame::OnSize)
+ EVT_BUTTON (BUTTON1, MyFrame::OnButton1)
+END_EVENT_TABLE()
+\end{verbatim}
+
+The first two entries map menu commands to two different member functions. The EVT\_SIZE macro
+doesn't need a window identifier, since normally you are only interested in the
+current window's size events. (In fact you could intercept a particular window's size event
+by using EVT\_CUSTOM(wxEVT\_SIZE, id, func).)
+
+The EVT\_BUTTON macro demonstrates that the originating event does not have to come from
+the window class implementing the event table - if the event source is a button within a panel within a frame, this will still
+work, because event tables are searched up through the hierarchy of windows. In this
+case, the button's event table will be searched, then the parent panel's, then the frame's.
+
+As mentioned before, the member functions that handle events do not have to be virtual.
+These member functions take an event argument, and the class of event differs according
+to the type of event and the class of the originating window. For size
+events, \helpref{wxSizeEvent}{wxsizeevent} is used. For menu commands and most control
+commands (such as button presses), \helpref{wxCommandEvent}{wxcommandevent} is used.
+When controls get more complicated, then specific event classes are used, such
+as \helpref{wxTreeEvent}{wxtreeevent} for events from \helpref{wxTreeCtrl}{wxtreectrl} windows.
+
+As well as the event table in the implementation file, there must be a DECLARE\_EVENT\_TABLE
+macro in the class definition. For example:
+
+{\small%
+\begin{verbatim}
+class MyFrame: public wxFrame {
+
+ DECLARE_DYNAMIC_CLASS(MyFrame)
+
+public:
+ ...
+ void OnExit(wxCommandEvent& event);
+ void OnSize(wxSizeEvent& event);
+protected:
+ int m_count;
+ ...
+ DECLARE_EVENT_TABLE()
+};
+\end{verbatim}
+}%
+
+\subsection{How events are processed}\label{eventprocessing}
+
+When an event is received from the windowing system, wxWindows calls \helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent} on
+the first event handler object belonging to the window generating the event.
+
+The normal order of event table searching by ProcessEvent is as follows:
+
+\begin{enumerate}\itemsep=0pt
+\item If the object is disabled (via a call to \helpref{wxEvtHandler::SetEvtHandlerEnabled}{wxevthandlersetevthandlerenabled})
+the function skips to step (6).
+\item If the object is a wxWindow, {\bf ProcessEvent} is recursively called on the window's\rtfsp
+\helpref{wxValidator}{wxvalidator}. If this returns TRUE, the function exits.
+\item {\bf SearchEventTable} is called for this event handler. If this fails, the base
+class table is tried, and so on until no more tables exist or an appropriate function was found,
+in which case the function exits.
+\item The search is applied down the entire chain of event handlers (usually the chain has a length
+of one). If this succeeds, the function exits.
+\item If the object is a wxWindow and the event is a wxCommandEvent, {\bf ProcessEvent} is
+recursively applied to the parent window's event handler. If this returns TRUE, the function exits.
+\item Finally, {\bf ProcessEvent} is called on the wxApp object.
+\end{enumerate}
+
+Note that your application may wish to override ProcessEvent to redirect processing of
+events. This is done in the document/view framework, for example, to allow event handlers
+to be defined in the document or view.
+
+\subsection{Pluggable event handlers}
+
+In fact, you don't have to derive a new class from a window class
+if you don't want to. You can derive a new class from wxEvtHandler instead,
+defining the appropriate event table, and then call
+\rtfsp\helpref{wxWindow::SetEventHandler}{wxwindowseteventhandler} (or, preferably,
+\rtfsp\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler}) to make this
+event handler the object that responds to events. This way, you can avoid
+a lot of class derivation, and use the same event handler object to
+handle events from instances of different classes. If you ever have to call a window's event handler
+manually, use the GetEventHandler function to retrieve the window's event handler and use that
+to call the member function. By default, GetEventHandler returns a pointer to the window itself
+unless an application has redirected event handling using SetEventHandler or PushEventHandler.
+
+One use of PushEventHandler is to temporarily or permanently change the
+behaviour of the GUI. For example, you might want to invoke a dialog editor
+in your application that changes aspects of dialog boxes. You can
+grab all the input for an existing dialog box, and edit it `in situ',
+before restoring its behaviour to normal. So even if the application
+has derived new classes to customize behaviour, your utility can indulge
+in a spot of body-snatching. It could be a useful technique for on-line
+tutorials, too, where you take a user through a serious of steps and
+don't want them to diverge from the lesson. Here, you can examine the events
+coming from buttons and windows, and if acceptable, pass them through to
+the original event handler. Use PushEventHandler/PopEventHandler
+to form a chain of event handlers, where each handler processes a different
+range of events independently from the other handlers.
+
+\subsection{Event macros summary}\label{eventmacros}
+
+\wxheading{Specifying an event table}
+
+\twocolwidtha{8cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{EVT\_CUSTOM(eventId, id, func)}}{Allows you to add a custom event table
+entry by specifying the event identifier (such as wxEVT\_SIZE), the window identifier,
+and a member function to call.}
+\twocolitem{\windowstyle{EVT\_CUSTOM\_RANGE(eventId, id1, id2, func)}}{The same as EVT\_CUSTOM,
+but responds to a range of window identifiers.}
+\end{twocollist}
+
+\wxheading{Generic event table macros}
+
+\twocolwidtha{8cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{EVT\_CUSTOM(eventId, id, func)}}{Allows you to add a custom event table
+entry by specifying the event identifier (such as wxEVT\_SIZE), the window identifier,
+and a member function to call.}
+\twocolitem{\windowstyle{EVT\_CUSTOM\_RANGE(eventId, id1, id2, func)}}{The same as EVT\_CUSTOM,
+but responds to a range of window identifiers.}
+\twocolitem{\windowstyle{EVT\_COMMAND(eventId, id, func)}}{The same as EVT\_CUSTOM, but
+expects a member function with a wxCommandEvent argument.}
+\twocolitem{\windowstyle{EVT\_COMMAND\_RANGE(eventId, id1, id2, func)}}{The same as EVT\_CUSTOM\_RANGE, but
+expects a member function with a wxCommandEvent argument.}
+\end{twocollist}
+
+\wxheading{Macros listed by event class}
+
+The documentation for specific event macros is organised by event class. Please refer
+to these sections for details.
+
+\twocolwidtha{8cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxActivateEvent}{wxactivateevent}}{The EVT\_ACTIVATE and EVT\_ACTIVATE\_APP macros intercept
+activation and deactivation events.}
+\twocolitem{\helpref{wxCommandEvent}{wxcommandevent}}{A range of commonly-used control events.}
+\twocolitem{\helpref{wxCloseEvent}{wxcloseevent}}{The EVT\_CLOSE macro handles window closure
+called via \helpref{wxWindow::Close}{wxwindowclose}.}
+\twocolitem{\helpref{wxDropFilesEvent}{wxdropfilesevent}}{The EVT\_DROP\_FILES macros handles
+file drop events.}
+\twocolitem{\helpref{wxEraseEvent}{wxeraseevent}}{The EVT\_ERASE\_BACKGROUND macro is used to handle window erase requests.}
+\twocolitem{\helpref{wxFocusEvent}{wxfocusevent}}{The EVT\_SET\_FOCUS and EVT\_KILL\_FOCUS macros are used to handle keybaord focus events.}
+\twocolitem{\helpref{wxKeyEvent}{wxkeyevent}}{EVT\_CHAR and EVT\_CHAR\_HOOK macros handle keyboard
+input for any window.}
+\twocolitem{\helpref{wxIdleEvent}{wxidleevent}}{The EVT\_IDLE macro handle application idle events
+(to process background tasks, for example).}
+\twocolitem{\helpref{wxInitDialogEvent}{wxinitdialogevent}}{The EVT\_INIT\_DIALOG macro is used
+to handle dialog initialisation.}
+\twocolitem{\helpref{wxListEvent}{wxlistevent}}{These macros handle \helpref{wxListCtrl}{wxlistctrl} events.}
+\twocolitem{\helpref{wxMenuEvent}{wxmenuevent}}{These macros handle special menu events (not menu commands).}
+\twocolitem{\helpref{wxMouseEvent}{wxmouseevent}}{Mouse event macros can handle either individual
+mouse events or all mouse events.}
+\twocolitem{\helpref{wxMoveEvent}{wxmoveevent}}{The EVT\_MOVE macro is used to handle a window move.}
+\twocolitem{\helpref{wxUpdateUIEvent}{wxupdateuievent}}{The EVT\_UPDATE\_UI macro is used to handle user interface
+update pseudo-events, which are generated to give the application the chance to update the visual state of menus,
+toolbars and controls.}
+\twocolitem{\helpref{wxPaintEvent}{wxpaintevent}}{The EVT\_PAINT macro is used to handle window paint requests.}
+\twocolitem{\helpref{wxScrollEvent}{wxscrollevent}}{These macros are used to handle scroll events from
+windows, \helpref{wxScrollBar}{wxscrollbar}, and \helpref{wxSpinButton}{wxspinbutton}.}
+\twocolitem{\helpref{wxSizeEvent}{wxsizeevent}}{The EVT\_SIZE macro is used to handle a window resize.}
+\twocolitem{\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}}{The EVT\_SYS\_COLOUR\_CHANGED macro is used to handle
+events informing the application that the user has changed the system colours (Windows only).}
+\twocolitem{\helpref{wxTreeEvent}{wxtreeevent}}{These macros handle \helpref{wxTreeCtrl}{wxtreectrl} events.}
+\end{twocollist}
+
--- /dev/null
+;;; Tex2RTF initialisation file
+runTwice = yes
+titleFontSize = 12
+authorFontSize = 10
+authorFontSize = 10
+chapterFontSize = 12
+sectionFontSize = 12
+subsectionFontSize = 12
+contentsDepth = 2
+headerRule = yes
+footerRule = yes
+useHeadingStyles = yes
+listItemIndent=40
+generateHPJ = yes
+htmlBrowseButtons = bitmap
+winHelpContents = yes
+winHelpVersion = 3 ; 3 for Windows 3.x, 4 for Windows 95
+winHelpTitle = "wxWindows Manual"
+truncateFilenames = yes
+combineSubSections = yes
+\overview [2] {\rtfonly{See also }\settransparency{on}\sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}\settransparency{off}}
+\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
+\sethotspotcolour{on}\sethotspotunderline{on}}
+\docparam [2]{\parskip{0}{\it #1}\htmlignore{\par}\parskip{10}\indented{1cm}{#2}}
+\wxheading [1]{{\bf \htmlignore{\fcol{blue}{#1}}\htmlonly{\fcol{red}{#1}}}}
+\const [0] {{\bf const}}
+\constfunc [3] {{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}}
+\windowstyle [1] {{\bf #1}\index{#1}}
--- /dev/null
+% LaTeX style file
+% Name: texhelp.sty
+% Author: Julian Smart
+%
+% Purpose
+% -------
+% Style file to enable the simultaneous preparation of printed LaTeX and on-line
+% hypertext manuals.
+% Use in conjunction with Tex2RTF (see Tex2RTF documentation).
+%
+% Note that if a non-ASCII character starts a newline and there should be a space
+% between the last word on the previous line and the first word on this line,
+% you need to use \rtfsp to generate a space in Windows Help. \rtfsp is ignored
+% in all other formats.
+%
+% Julian Smart
+% Artificial Intelligence Applications Institute
+%
+%
+% ============== C++/CLIPS Documentation Facilities ==============
+%
+% Each class definition should be typeset with e.g.
+%
+% \section{\class{Name}: Parent}
+%
+% followed by a description of the class.
+% Each member should follow:
+%
+% \membersection{wxName::Member}
+%
+% with a description of what this member does.
+% Then, one (or more if overloaded) member (function) in detail:
+%
+% \func{return type}{name}{args}
+% or
+% \member{type}{name}
+%
+% where args is a list of \param{type}{name}, ...
+
+% Function, e.g.
+% e.g. to typeset
+%
+% void DoIt(char *string);
+%
+% write:
+%
+% \func{void}{DoIt}{\param{char *}{string}}
+%
+
+\newcommand{\func}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\it #1} {\bf #2}\index{#2}}(#3)}
+
+% For function/type definition where the name is a pointer,
+% e.g. to typeset
+%
+% typedef void (*wxFunction)(wxObject&)
+%
+% write:
+%
+% \pfunc{typedef void}{wxFunction}{param{wxObject&}}
+
+\newcommand{\pfunc}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\it #1} ({\bf *#2})\index{#2}}(#3)}
+
+% Use an ordinary \section command for class name definitions.
+
+% This is used for a member, such as wxBitmap: GetDepth
+\newcommand{\membersection}[1]{\subsection*{#1}\index{#1}}
+
+% CLIPS function
+\newcommand{\clipsfunc}[3]{\hangafter=1\noindent\hangindent=10mm
+{{\bf #1} ({\bf #2}\index{#2}}#3)}
+
+\newcommand{\clipssection}[1]{\chapter{#1}}
+
+% This is used for a CLIPS function name
+\newcommand{\functionsection}[1]{\subsection*{#1}}
+
+% Member: a type and a name
+\newcommand{\member}[2]{{\bf #1 \it #2}}
+
+% C++ Parameter: a type and a name (no intervening space)
+\newcommand{\param}[2]{{\it #1}{\bf #2}}
+
+% CLIPS Parameter: a type and a name (one intervening space)
+\newcommand{\cparam}[2]{{\bf #1} {\it #2}}
+
+% Class: puts in index
+\newcommand{\class}[1]{#1\index{#1}}
+
+%\newcommand{\docparam}[2]{\parskip=0pt {\it #1}\par\parskip=10pt\begin{indented}{1cm}{#2}\end{indented}}
+
+% Void type
+\newcommand{\void}{{\it void}}
+
+% Typeset destructor
+\newcommand{\destruct}[1]{{$\sim$}#1}
+
+% Typeset insert/extract operators
+\newcommand{\cinsert}{$<<$}
+\newcommand{\cextract}{$>>$}
+
+
+% =================== Hypertext facilities ===================
+%
+% To insert hyperlinks (or references, in Latex), \label the sections
+% or membersections \label{ref-label} immediately after the section, on the same line,
+% and use \helpref{text-to-show}{ref-label} to make a reference.
+%
+
+% Type text with section reference
+\newcommand{\helpref}[2]{{\it #1} (p.\ \pageref{#2}) }
+
+% Type text with URL in verbatim mode
+\newcommand{\urlref}[2]{#1 (\verb$#2$)}
+
+% Don't typeset section number in LaTeX
+\newcommand{\helprefn}[2]{{\it #1}}
+
+% Like helpref, but popup text in WinHelp instead of hyperlinked
+\newcommand{\popref}[2]{{\it #1}}
+
+% Like footnote, but popup text.
+\newcommand{\footnotepopup}[2]{{\it #1}\footnote{#2}}
+
+% =================== On-line help specific macros ===================
+%
+
+% Global document font size/family, help only.
+\newcommand{\helpfontsize}[1]{}
+\newcommand{\helpfontfamily}[1]{}
+
+% Ignore in all on-line help
+\newcommand{\helpignore}[1]{#1}
+% Only print in all on-line help
+\newcommand{\helponly}[1]{}
+
+% Ignore in LaTeX
+\newcommand{\latexignore}[1]{}
+% Only print in LaTeX
+\newcommand{\latexonly}[1]{#1}
+
+% Ignore in linear RTF
+\newcommand{\rtfignore}[1]{#1}
+% Only print in linear RTF
+\newcommand{\rtfonly}[1]{}
+
+% Ignore in WinHelp RTF
+\newcommand{\winhelpignore}[1]{#1}
+% Only print in WinHelp RTF
+\newcommand{\winhelponly}[1]{}
+
+% Ignore in wxHelp
+\newcommand{\xlpignore}[1]{#1}
+% Only print in wxHelp
+\newcommand{\xlponly}[1]{}
+
+% Ignore in HTML
+\newcommand{\htmlignore}[1]{#1}
+% Only print in HTML
+\newcommand{\htmlonly}[1]{}
+
+% Input a file only for help system (binder thickness is not a limitation
+% in help systems!)
+\newcommand{\helpinput}[1]{}
+
+\newcommand{\rtfsp}{ } % Force a space in RTF, ignore in Latex
+
+% =================== Miscellaneous macros ===================
+%
+% Headings consistent with generated ones
+\newcommand{\myheading}[1]{\vspace*{25pt}
+\begin{flushleft}
+{\LARGE \bf #1}
+\end{flushleft}
+\vskip 20pt
+}
+
+% Heading with entry in contents page.
+\newcommand{\chapterheading}[1]{\myheading{#1}
+\addcontentsline{toc}{chapter}{#1}}
+
+\newcommand{\sectionheading}[1]{\myheading{#1}
+\addcontentsline{toc}{section}{#1}}
+
+% Glossary environment
+\newenvironment{helpglossary}{\newpage\chapterheading{Glossary}\begin{description}}{\end{description}}
+
+% Glossary entry
+\newcommand{\gloss}[1]{\item[#1]\index{#1}}
+
+% Image: EPS in Latex, BMP or MF (whatever's available) in RTF. Requires psbox.
+\newcommand{\image}[2]{\psboxto(#1){#2}}
+
+% Image, left aligned (HTML)
+\newcommand{\imager}[2]{\psboxto(#1){#2}}
+
+% Image, right aligned (HTML)
+\newcommand{\imagel}[2]{\psboxto(#1){#2}}
+
+% Imagemap: principally for HTML only. In Latex,
+% acts like \image.
+\newcommand{\imagemap}[3]{\psboxto(#1){#2}}
+
+% Headers and footers
+% \setheader{EvenPageLeft}{EvenPageCentre}{EvenPageRight}
+% {OddPageLeft}{OddPageCentre}{OddPageRight}
+\newcommand{\setheader}[6]{
+\lhead[\fancyplain{}{#1}]{\fancyplain{}{#4}}
+\chead[\fancyplain{}{#2}]{\fancyplain{}{#5}}
+\rhead[\fancyplain{}{#3}]{\fancyplain{}{#6}}
+}
+
+% \setfooter{EvenPageLeft}{EvenPageCentre}{EvenPageRight}
+% {OddPageLeft}{OddPageCentre}{OddPageRight}
+\newcommand{\setfooter}[6]{
+\lfoot[\fancyplain{#1}{#1}]{\fancyplain{#4}{#4}}
+\cfoot[\fancyplain{#2}{#2}]{\fancyplain{#5}{#5}}
+\rfoot[\fancyplain{#3}{#3}]{\fancyplain{#6}{#6}}
+}
+
+% Needed for telling RTF where margin paragraph should go
+% in mirrored margins mode.
+\newcommand{\marginpareven}[1]{\hspace*{0pt}\marginpar{#1}}
+\newcommand{\marginparodd}[1]{\hspace*{0pt}\marginpar{#1}}
+
+% Environment for two-column table popular in WinHelp and manuals.
+\newcommand{\twocolwidtha}[1]{\def\twocolwidthaval{#1}}
+\newcommand{\twocolwidthb}[1]{\def\twocolwidthbval{#1}}
+\newcommand{\twocolspacing}[1]{\def\twocolspacingval{#1}}
+
+\twocolwidtha{3cm}
+\twocolwidthb{8.5cm}
+\twocolspacing{2}
+
+\newcommand{\twocolitem}[2]{#1 & #2\\}
+\newcommand{\twocolitemruled}[2]{#1 & #2\\\hline}
+
+\newenvironment{twocollist}{\renewcommand{\arraystretch}{\twocolspacingval}\begin{tabular}{lp{\twocolwidthbval}}}%
+{\end{tabular}\renewcommand{\arraystretch}{1}}
+
+% Specifying table rows for RTF compatibility
+\newcommand{\row}[1]{#1\\}
+
+% Use for the last ruled row for correct RTF generation.
+\newcommand{\ruledrow}[1]{#1\\\hline}
+
+% Indentation environment. Arg1 is left margin size
+\newenvironment{indented}[1]{\begin{list}{}{\leftmargin=#1}\item[]}%
+{\end{list}}
+
+% Framed box of text, normal formatting.
+\newcommand{\normalbox}[1]{\fbox{\vbox{#1}}}
+% Double-framed box of text.
+\newcommand{\normalboxd}[1]{\fbox{\fbox{\vbox{#1}}}}
+
+% WITHDRAWN -- can't do in RTF, easily.
+% Framed box of text, horizontally centred. Ragged right within box.
+% \newcommand{\centeredbox}[2]{\begin{center}\fbox{\parbox{#1}{\raggedright#2}}\end{center}}
+% Double-framed box of text, horizontally centred. Ragged right within box.
+% \newcommand{\centeredboxd}[2]{\begin{center}\fbox{\fbox{\parbox{#1}{\raggedright#2}}}\end{center}}
+
+% toocomplex environment: simply prints the argument in LaTeX,
+% comes out verbatim in all generated formats.
+\newenvironment{toocomplex}{}{}
+
+% Colour: dummy commands since LaTeX doesn't support colour.
+% \definecolour{name}{red}{blue}{green}
+% \fcol{name}{text} ; Foreground
+% \bcol{name}{text} ; Background
+\newcommand{\definecolour}[4]{}
+\newcommand{\definecolor}[4]{}
+\newcommand{\fcol}[2]{#2}
+\newcommand{\bcol}[2]{#2}
+\newcommand{\sethotspotcolour}[1]{}
+\newcommand{\sethotspotunderline}[1]{}
+\newcommand{\settransparency}[1]{}
+\newcommand{\backslashraw}[0]{}
+\newcommand{\lbraceraw}[0]{}
+\newcommand{\rbraceraw}[0]{}
+\newcommand{\registered}[0]{(r)}
+\newcommand{\background}[1]{}
+\newcommand{\textcolour}[1]{}
+\newcommand{\overview}[2]{See \helpref{#1}{#2}.}
+\newcommand{\docparam}[2]{{\it #1}\begin{list}{}{\leftmargin=1cm}\item[]
+#2%
+\end{list}}
+\newcommand{\wxheading}[1]{{\bf #1}}
+\newcommand{\const}[0]{{\bf const}}
+\newcommand{\constfunc}[3]{{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}}
+\newcommand{\windowstyle}[1]{{\bf #1}\index{#1}}
+
--- /dev/null
+\section{wxExpr overview}\label{exproverview}
+
+wxExpr is a C++ class reading and writing a subset of Prolog-like syntax,
+supporting objects attribute/value pairs.
+
+wxExpr can be used to develop programs with readable and
+robust data files. Within wxWindows itself, it is used to parse
+the {\tt .wxr} dialog resource files.
+
+{\bf History of wxExpr}
+
+During the development of the tool Hardy within the AIAI, a need arose
+for a data file format for C++ that was easy for both humans and
+programs to read, was robust in the face of fast-moving software
+development, and that provided some compatibility with AI languages
+such as Prolog and LISP.
+
+The result was the wxExpr library (formerly called PrologIO), which is able to read and write a
+Prolog-like attribute-value syntax, and is additionally capable of
+writing LISP syntax for no extra programming effort. The advantages of
+such a library are as follows:
+
+\begin{enumerate}\itemsep=0pt
+\item The data files are readable by humans;
+\item I/O routines are easier to write and debug compared with using binary files;
+\item the files are robust: unrecognised data will just be ignored by the application
+\item Inbuilt hashing gives a random access capability, useful for when linking
+up C++ objects as data is read in;
+\item Prolog and LISP programs can load the files using a single command.
+\end{enumerate}
+
+The library was extended to use the ability to read and write
+Prolog-like structures for remote procedure call (RPC) communication.
+The next two sections outline the two main ways the library can be used.
+
+\subsection{wxExpr for data file manipulation}\itemsep=0pt
+
+The fact that the output is in Prolog syntax is irrelevant for most
+programmers, who just need a reasonable I/O facility. Typical output
+looks like this:
+
+\begin{verbatim}
+diagram_definition(type = "Spirit Belief Network").
+
+node_definition(type = "Model",
+ image_type = "Diamond",
+ attribute_for_label = "name",
+ attribute_for_status_line = "label",
+ colour = "CYAN",
+ default_width = 120,
+ default_height = 80,
+ text_size = 10,
+ can_resize = 1,
+ has_hypertext_item = 1,
+ attributes = ["name", "combining_function", "level_of_belief"]).
+
+arc_definition(type = "Potentially Confirming",
+ image_type = "Spline",
+ arrow_type = "End",
+ line_style = "Solid",
+ width = 1,
+ segmentable = 0,
+ attribute_for_label = "label",
+ attribute_for_status_line = "label",
+ colour = "BLACK",
+ text_size = 10,
+ has_hypertext_item = 1,
+ can_connect_to = ["Evidence", "Cluster", "Model", "Evidence", "Evidence", "Cluster"],
+ can_connect_from = ["Data", "Evidence", "Cluster", "Evidence", "Data", "Cluster"]).
+\end{verbatim}
+
+This is substantially easier to read and debug than a series of numbers and
+strings.
+
+Note the object-oriented style: a file comprises a series of {\it clauses}.
+Each clause is an object with a {\it functor}\/ or object name, followed
+by a list of attribute-value pairs enclosed in parentheses, and finished
+with a full stop. Each attribute value may be a string, a word (no quotes),
+an integer, a real number, or a list with potentially recursive elements.
+
+The way that the facility is used by an application to read in a file is
+as follows:
+
+\begin{enumerate}\itemsep=0pt
+\item The application creates a wxExprDatabase instance.
+\item The application tells the database to read in the entire file.
+\item The application searches the database for objects it requires,
+decomposing the objects using the wxExpr API. The database may be hashed,
+allowing rapid linking-up of application data.
+\item The application deletes or clears the wxExprDatabase.
+\end{enumerate}
+
+Writing a file is just as easy:
+
+\begin{enumerate}\itemsep=0pt
+\item The application creates a wxExprDatabase instance.
+\item The application adds objects to the database using the API.
+\item The application tells the database to write out the entire database,
+in Prolog or LISP notation.
+\item The application deletes or clears the wxExprDatabase.
+\end{enumerate}
+
+To use the library, include "wxexpr.h".
+
+\subsection{wxExpr compilation}
+
+For UNIX compilation, ensure that YACC and LEX or FLEX are on your system. Check that
+the makefile uses the correct programs: a common error is to compile
+y\_tab.c with a C++ compiler. Edit the CCLEX variable in make.env
+to specify a C compiler. Also, do not attempt to compile lex\_yy.c
+since it is included by y\_tab.c.
+
+For DOS compilation, the simplest thing is to copy dosyacc.c to y\_tab.c, and doslex.c to
+lex\_yy.c. It is y\_tab.c that must be compiled (lex\_yy.c is included by
+y\_tab.c) so if adding source files to a project file, ONLY add y\_tab.c
+plus the .cc files. If you wish to alter the parser, you will need YACC
+and FLEX on DOS.
+
+The DOS tools are available at the AIAI ftp site, in the tools directory. Note that
+for FLEX installation, you need to copy flex.skl into the directory
+c:/lib.
+
+If you are using Borland C++ and wish to regenerate lex\_yy.c and y\_tab.c
+you need to generate lex\_yy.c with FLEX and then comment out the `malloc' and `free'
+prototypes in lex\_yy.c. It will compile with lots of warnings. If you
+get an undefined \_PROIO\_YYWRAP symbol when you link, you need to remove
+USE\_DEFINE from the makefile and recompile. This is because the parser.y
+file has a choice of defining this symbol as a function or as a define,
+depending on what the version of FLEX expects. See the bottom of
+parser.y, and if necessary edit it to make it compile in the opposite
+way to the current compilation.
+
+To test out wxExpr compile the test program (samples/wxexpr/wxexpr.exe),
+and try loading test.exp into the test
+program. Then save it to another file. If the second is identical to the
+first, wxExpr is in a working state.
+
+\subsection{Bugs}
+
+These are the known bugs:
+
+\begin{enumerate}\itemsep=0pt
+\item Functors are permissable only in the main clause (object).
+Therefore nesting of structures must be done using lists, not predicates
+as in Prolog.
+\item There is a limit to the size of strings read in (about 5000 bytes).
+\end{enumerate}
+
+\subsection{Using wxExpr}
+
+This section is a brief introduction to using the wxExpr package.
+
+First, some terminology. A {\it wxExprDatabase}\/ is a list of {\it clauses},
+each of which represents an object or record which needs to be saved to a file.
+A clause has a {\it functor}\/ (name), and a list of attributes, each of which
+has a value. Attributes may take the following types of value: string, word,
+integer, floating point number, and list. A list can itself contain any
+type, allowing for nested data structures.
+
+Consider the following code.
+
+\begin{verbatim}
+wxExprDatabase db;
+
+wxExpr *my_clause = new wxExpr("object");
+my_clause->AddAttributeValue("id", (long)1);
+my_clause->AddAttributeValueString("name", "Julian Smart");
+db.Append(my_clause);
+
+ofstream file("my_file");
+db.Write(file);
+\end{verbatim}
+
+This creates a database, constructs a clause, adds it to the database,
+and writes the whole database to a file. The file it produces looks like
+this:
+
+\begin{verbatim}
+object(id = 1,
+ name = "Julian Smart").
+\end{verbatim}
+
+To read the database back in, the following will work:
+
+\begin{verbatim}
+wxExprDatabase db;
+db.Read("my_file");
+
+db.BeginFind();
+
+wxExpr *my_clause = db.FindClauseByFunctor("object");
+int id = 0;
+wxString name = "None found";
+
+my_clause->GetAttributeValue("id", id);
+my_clause->GetAttributeValue("name", name);
+
+cout << "Id is " << id << ", name is " << name << "\n";
+\end{verbatim}
+
+Note the setting of defaults before attempting to retrieve attribute values,
+since they may not be found.
+
--- /dev/null
+\section{\class{wxTextCtrl}}\label{wxtextctrl}
+
+A text control allows text to be displayed and edited. It may be
+single line or multiline.
+
+\wxheading{Derived from}
+
+streambuf\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxTE\_PROCESS\_ENTER}}{The callback function will
+receive the message wxEVENT\_TYPE\_TEXT\_ENTER\_COMMAND. Note
+that this will break tab traversal for this panel item under
+Windows.}
+\twocolitem{\windowstyle{wxTE\_MULTILINE}}{The text control allows multiple lines.}
+\twocolitem{\windowstyle{wxTE\_PASSWORD}}{The text will be echoed as asterisks.}
+\twocolitem{\windowstyle{wxTE\_READONLY}}{The text will not be user-editable.}
+\twocolitem{\windowstyle{wxHSCROLL}}{A vertical scrollbar will be present.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+This class multiply-inherits from {\bf streambuf} where compilers allow, allowing code such
+as the following:
+
+{\small%
+\begin{verbatim}
+ wxTextCtrl *control = new wxTextCtrl(...);
+
+ ostream stream(control)
+
+ stream << 123.456 << " some text\n";
+ stream.flush();
+\end{verbatim}
+}%
+
+If your compiler does not support derivation from {\bf streambuf} and gives a compile error, define the symbol {\bf NO\_TEXT\_WINDOW\_STREAM} in the
+wxTextCtrl header file.
+
+%\wxheading{See also}
+%
+%\helpref{wxRichTextCtrl}{wxrichtextctrl}
+%
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTextCtrl::wxTextCtrl}\label{wxtextctrlconstr}
+
+\func{}{wxTextCtrl}{\void}
+
+Default constructor.
+
+\func{}{wxTextCtrl}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{value = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``text"}}
+
+Constructor, creating and showing a text control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Should not be NULL.}
+
+\docparam{id}{Control identifier. A value of -1 denotes a default value.}
+
+\docparam{value}{Default text value.}
+
+\docparam{pos}{Text control position.}
+
+\docparam{size}{Text control size.}
+
+\docparam{style}{Window style. See \helpref{wxTextCtrl}{wxtextctrl}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{Remarks}
+
+Under Windows, if the {\bf wxTE\_MULTILINE} style is used, the window is implemented
+as a Windows rich text control with unlimited capacity. Otherwise, normal edit control limits
+apply.
+
+\wxheading{See also}
+
+\helpref{wxTextCtrl::Create}{wxtextctrlcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxTextCtrl::\destruct{wxTextCtrl}}
+
+\func{}{\destruct{wxTextCtrl}}{\void}
+
+Destructor, destroying the text control.
+
+\membersection{wxTextCtrl::Clear}\label{wxtextctrlclear}
+
+\func{virtual void}{Clear}{\void}
+
+Clears the text in the control.
+
+\membersection{wxTextCtrl::Copy}\label{wxtextctrlcopy}
+
+\func{virtual void}{Copy}{\void}
+
+Copies the selected text to the clipboard under Motif and MS Windows.
+
+\membersection{wxTextCtrl::Create}\label{wxtextctrlcreate}
+
+\func{bool}{Create}{\param{wxWindow* }{parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxString\& }{value = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``text"}}
+
+Creates the text control for two-step construction. Derived classes
+should call or replace this function. See \helpref{wxTextCtrl::wxTextCtrl}{wxtextctrlconstr}\rtfsp
+for further details.
+
+\membersection{wxTextCtrl::Cut}\label{wxtextctrlcut}
+
+\func{virtual void}{Cut}{\void}
+
+Copies the selected text to the clipboard and removes the selection.
+
+\membersection{wxTextCtrl::DiscardEdits}
+
+\func{void}{DiscardEdits}{\void}
+
+Resets the internal `modified' flag as if the current edits had been saved.
+
+\membersection{wxTextCtrl::GetInsertionPoint}\label{wxtextctrlgetinsertionpoint}
+
+\constfunc{virtual long}{GetInsertionPoint}{\void}
+
+Returns the insertion point.
+
+\membersection{wxTextCtrl::GetLastPosition}\label{wxtextctrlgetlastposition}
+
+\constfunc{virtual long}{GetLastPosition}{\void}
+
+Returns the last position in the text control.
+
+\membersection{wxTextCtrl::GetLineLength}\label{wxtextctrlgetlinelength}
+
+\constfunc{int}{GetLineLength}{\param{long}{ lineNo}}
+
+Gets the length of the specified line.
+
+\wxheading{Parameters}
+
+\docparam{lineNo}{Line number (starting from zero).}
+
+\wxheading{Return value}
+
+The length of the line, or -1 if {\it lineNo} was invalid.
+
+\membersection{wxTextCtrl::GetLineText}\label{wxtextctrlgetlinetext}
+
+\constfunc{wxString}{GetLineText}{\param{const long}{ lineNo}}
+
+Returns the contents of a given line in the text control.
+
+\wxheading{Parameters}
+
+\docparam{lineNo}{The line number, starting from zero.}
+
+\wxheading{Return value}
+
+The contents of the line.
+
+\membersection{wxTextCtrl::GetNumberOfLines}\label{wxtextctrlgetnumberoflines}
+
+\constfunc{int}{GetNumberOfLines}{\void}
+
+Returns the number of lines in the text control buffer.
+
+\membersection{wxTextCtrl::GetValue}\label{wxtextctrlgetvalue}
+
+\constfunc{wxString}{GetValue}{\void}
+
+Gets the contents of the control.
+
+\membersection{wxTextCtrl::IsModified}\label{wxtextctrlismodified}
+
+\constfunc{bool}{IsModified}{\void}
+
+Returns TRUE if the text has been modified.
+
+\membersection{wxTextCtrl::LoadFile}\label{wxtextctrlloadfile}
+
+\func{bool}{LoadFile}{\param{const wxString\& }{ filename}}
+
+Loads and displays the named file, if it exists.
+
+\wxheading{Parameters}
+
+\docparam{filename}{The filename of the file to load.}
+
+\wxheading{Return value}
+
+TRUE if successful, FALSE otherwise.
+
+\membersection{wxTextCtrl::OnChar}\label{wxtextctrlonchar}
+
+\func{void}{OnChar}{\param{wxKeyEvent\& }{event}}
+
+Default handler for character input.
+
+\wxheading{Remarks}
+
+It is possible to intercept character
+input by overriding this member. Call this function
+to let the default behaviour take place; not calling
+it results in the character being ignored. You can
+replace the {\it keyCode} member of {\it event} to
+translate keystrokes.
+
+Note that Windows and Motif have different ways
+of implementing the default behaviour. In Windows,
+calling wxTextCtrl::OnChar immediately
+processes the character. In Motif,
+calling this function simply sets a flag
+to let default processing happen. This might affect
+the way in which you write your OnChar function
+on different platforms.
+
+\wxheading{See also}
+
+\helpref{wxKeyEvent}{wxkeyevent}
+
+\membersection{wxTextCtrl::OnDropFiles}\label{wxtextctrlondropfiles}
+
+\func{void}{OnDropFiles}{\param{wxDropFilesEvent\& }{event}}
+
+This event handler function implements default drag and drop behaviour, which
+is to load the first dropped file into the control.
+
+\wxheading{Parameters}
+
+\docparam{event}{The drop files event.}
+
+\wxheading{See also}
+
+\helpref{wxDropFilesEvent}{wxdropfilesevent}
+
+\membersection{wxTextCtrl::Paste}\label{wxtextctrlpaste}
+
+\func{virtual void}{Paste}{\void}
+
+Pastes text from the clipboard to the text item.
+
+\membersection{wxTextCtrl::PositionToXY}\label{wxtextctrlpositiontoxy}
+
+\constfunc{long}{PositionToXY}{\param{const long }{pos}, \param{long *}{x}, \param{long *}{y}}
+
+Converts given character and line position to a position.
+
+\wxheading{Parameters}
+
+\docparam{pos}{Position.}
+
+\docparam{x}{Receives character position.}
+
+\docparam{y}{Receives line position.}
+
+\wxheading{See also}
+
+\helpref{wxTextCtrl::XYToPosition}{wxtextctrlxytoposition}
+
+\membersection{wxTextCtrl::Remove}\label{wxtextctrlremove}
+
+\func{virtual void}{Remove}{\param{const long}{ from}, \param{const long}{ to}}
+
+Removes the text between the two positions.
+
+\wxheading{Parameters}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The last position.}
+
+\membersection{wxTextCtrl::Replace}\label{wxtextctrlreplace}
+
+\func{virtual void}{Replace}{\param{const long}{ from}, \param{const long}{ to}, \param{const wxString\& }{value}}
+
+Replaces the text between two positions with the given text.
+
+\wxheading{Parameters}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The last position.}
+
+\docparam{value}{The value to replace the existing text with.}
+
+\membersection{wxTextCtrl::SaveFile}\label{wxtextctrlsavefile}
+
+\func{bool}{SaveFile}{\param{const wxString\& }{ filename}}
+
+Saves the contents of the control in a text file.
+
+\wxheading{Parameters}
+
+\docparam{filename}{The name of file in which to save the text.}
+
+\wxheading{Return value}
+
+TRUE if the operation was successful, FALSE otherwise.
+
+\membersection{wxTextCtrl::SetEditable}\label{wxtextctrlseteditable}
+
+\func{virtual void}{SetEditable}{\param{const bool}{ editable}}
+
+Makes the text item editable or read-only.
+
+\wxheading{Parameters}
+
+\docparam{editable}{If TRUE, the control is editable. If FALSE, the control is read-only.}
+
+\membersection{wxTextCtrl::SetInsertionPoint}\label{wxtextctrlsetinsertionpoint}
+
+\func{virtual void}{SetInsertionPoint}{\param{const long}{ pos}}
+
+Sets the insertion point. Windows only. ??
+
+\wxheading{Parameters}
+
+\docparam{pos}{Position to set.}
+
+\membersection{wxTextCtrl::SetInsertionPointEnd}\label{wxtextctrlsetinsertionpointend}
+
+\func{virtual void}{SetInsertionPointEnd}{\void}
+
+Sets the insertion point at the end of the text control.
+
+\membersection{wxTextCtrl::SetSelection}\label{wxtextctrlsetselection}
+
+\func{virtual void}{SetSelection}{\param{const long}{ from}, \param{const long}{ to}}
+
+Selects the text between the two positions.
+
+\wxheading{Parameters}
+
+\docparam{from}{The first position.}
+
+\docparam{to}{The last position.}
+
+\membersection{wxTextCtrl::SetValue}\label{wxtextctrlsetvalue}
+
+\func{virtual void}{SetValue}{\param{const wxString\& }{ value}}
+
+Sets the text value.
+
+\wxheading{Parameters}
+
+\docparam{value}{The new value to set. It may contain newline characters if the text control is multi-line.}
+
+\membersection{wxTextCtrl::ShowPosition}\label{wxtextctrlshowposition}
+
+\func{void}{ShowPosition}{\param{const long}{ pos}}
+
+Makes the line containing the given position visible.
+
+\wxheading{Parameters}
+
+\docparam{pos}{The position that should be visible.}
+
+\membersection{wxTextCtrl::WriteText}\label{wxtextctrlwritetext}
+
+\func{void}{WriteText}{\param{const wxString\& }{ text}}
+
+Writes the text into the text control at the current position.
+
+\wxheading{Parameters}
+
+\docparam{text}{Text to write to the text control.}
+
+\wxheading{Remarks}
+
+Newlines in the text string
+are the only control characters allowed, and they will cause appropriate
+line breaks. See \helpref{wxTextCtrl::\cinsert}{wxtextctrlinsert} for more convenient ways of writing to the
+window.
+
+\membersection{wxTextCtrl::XYToPosition}\label{wxtextctrlxytoposition}
+
+\func{long}{XYToPosition}{\param{const long}{ x}, \param{const long}{ y}}
+
+Converts the given character and line position to a position.
+
+\wxheading{Parameters}
+
+\docparam{x}{The character position.}
+
+\docparam{y}{The line position.}
+
+\wxheading{Return value}
+
+The position value.
+
+\membersection{wxTextCtrl::operator \cinsert}\label{wxtextctrlinsert}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{const wxString\& }{s}}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{int}{ i}}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{long}{ i}}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{float}{ f}}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{double}{ d}}
+
+\func{wxTextCtrl\&}{operator \cinsert}{\param{char}{ c}}
+
+Operator definitions for writing to a text control, for example:
+
+\begin{verbatim}
+ wxTextCtrl *wnd = new wxTextCtrl(my_frame);
+
+ (*wnd) << "Welcome to text control number " << 1 << ".\n";
+\end{verbatim}
+
+
--- /dev/null
+\section{\class{wxTextEntryDialog}}\label{wxtextentrydialog}
+
+This class represents a dialog that requests a one-line text string from the user.
+It is implemented as a generic wxWindows dialog.
+
+\wxheading{Derived from}
+
+\helpref{wxDialog}{wxdialog}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxTextEntryDialog overview}{wxtextentrydialogoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTextEntryDialog::wxTextEntryDialog}\label{wxtextentrydialogconstr}
+
+\func{}{wxTextEntryDialog}{\param{wxWindow* }{parent}, \param{const wxString\& }{message = "Please enter text"},\rtfsp
+\param{const wxString\& }{defaultValue = ""}, \param{long }{style = wxOK \pipe wxCANCEL \pipe wxCENTRE}, \param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Constructor. Use \helpref{wxTextEntryDialog::ShowModal}{wxtextentrydialogshowmodal} to show the dialog.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{message}{Message to show on the dialog.}
+
+\docparam{defaultValue}{The default value, which may be the empty string.}
+
+\docparam{style}{A dialog style, specifying the buttons (wxOK, wxCANCEL) and an optional wxCENTRE style.}
+
+\docparam{pos}{Dialog position.}
+
+\membersection{wxTextEntryDialog::\destruct{wxTextEntryDialog}}
+
+\func{}{\destruct{wxTextEntryDialog}}{\void}
+
+Destructor.
+
+\membersection{wxTextEntryDialog::GetValue}\label{wxtextentrydialoggetvalue}
+
+\constfunc{wxString}{GetValue}{\void}
+
+Returns the text that the user has entered if the user has pressed OK, or the original value
+if the user has pressed Cancel.
+
+\membersection{wxTextEntryDialog::SetValue}\label{wxtextentrydialogsetvalue}
+
+\func{void}{SetValue}{\param{const wxString\& }{value}}
+
+Sets the default text value.
+
+\membersection{wxTextEntryDialog::ShowModal}\label{wxtextentrydialogshowmodal}
+
+\func{int}{ShowModal}{\void}
+
+Shows the dialog, returning wxID\_OK if the user pressed OK, and wxOK\_CANCEL
+otherwise.
+
+
--- /dev/null
+\section{Font overview}\label{wxfontoverview}
+
+Class: \helpref{wxFont}{wxfont}
+
+A font is an object which determines the appearance of text, primarily
+when drawing text to a canvas or device context. A font is determined by
+up to six parameters:
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{Point size}{This is the standard way of referring to text size.}
+\twocolitem{Family}{Supported families are:
+ {\bf wxDEFAULT, wxDECORATIVE, wxROMAN, wxSCRIPT, wxSWISS, wxMODERN}.
+ {\bf wxMODERN} is a fixed pitch font; the others are either fixed or variable pitch.}
+\twocolitem{Style}{The value can be {\bf wxNORMAL, wxSLANT} or {\bf wxITALIC}.}
+\twocolitem{Weight}{The value can be {\bf wxNORMAL, wxLIGHT} or {\bf wxBOLD}.}
+\twocolitem{Underlining}{The value can be TRUE or FALSE.}
+\twocolitem{Face name}{An optional string specifying the actual typeface to be used. If NULL,
+a default typeface will chosen based on the family.}
+\end{twocollist}
+
+Specifying a family, rather than a specific typeface name, ensures a degree of portability
+across platforms because a suitable font will be chosen for the given font family.
+
+Under Windows, the face name can be one of the installed fonts on the user's system. Since
+the choice of fonts differs from system to system, either choose standard Windows fonts,
+or if allowing the user to specify a face name, store the family id with any file that
+might be transported to a different Windows machine or other platform.
+
+\normalbox{{\bf Note:} There is currently a difference between the appearance of fonts on the
+two platforms, if the mapping mode is anything other than MM\_TEXT.
+Under X, font size is always specified in points. Under MS Windows, the
+unit for text is points but the text is scaled according to the
+current mapping mode. However, user scaling on a device canvas will
+also scale fonts under both environments.}
+
+
--- /dev/null
+\section{wxGrid classes overview}\label{gridoverview}
+
+wxGrid is a class for displaying and editing tabular information.
+
+To use wxGrid, include the wxgrid.h header file and link with the
+wxGrid library. Create a wxGrid object, or, if you need to override
+some default behaviour, create an object of a class derived from wxGrid.
+You need to call CreateGrid before there are any cells in the grid.
+
+All row and column positions start from zero, and dimensions are in pixels.
+
+If you make changes to row or column dimensions, call UpdateDimensions and
+then AdjustScrollbars. If you make changes to the grid appearance (such as
+a change of cell background colour or font), call Refresh for the changes
+to be shown.
+
+\subsection{Example}
+
+The following fragment is taken from the file samples/grid/test.cpp. Note the
+call to UpdateDimensions, which is required if the application
+has changed any dimensions such as column width or row height.
+You may also need to call AdjustScrollbars. In this case, AdjustScrollbars
+isn't necessary because it will be called by wxGrid::OnSize which is invoked
+when the window is first displayed.
+
+\begin{verbatim}
+ // Make a grid
+ frame->grid = new wxGrid(frame, 0, 0, 400, 400);
+
+ frame->grid->CreateGrid(10, 8);
+ frame->grid->SetColumnWidth(3, 200);
+ frame->grid->SetRowHeight(4, 45);
+ frame->grid->SetCellValue("First cell", 0, 0);
+ frame->grid->SetCellValue("Another cell", 1, 1);
+ frame->grid->SetCellValue("Yet another cell", 2, 2);
+ frame->grid->SetCellTextFont(wxTheFontList->FindOrCreateFont(12, wxROMAN, wxITALIC, wxNORMAL), 0, 0);
+ frame->grid->SetCellTextColour(*wxRED, 1, 1);
+ frame->grid->SetCellBackgroundColour(*wxCYAN, 2, 2);
+ frame->grid->UpdateDimensions();
+\end{verbatim}
--- /dev/null
+\section{Writing a wxWindows application: a rough guide}\label{roughguide}
+
+To set a wxWindows application going, you'll need to derive a \helpref{wxApp}{wxapp} class and
+override \helpref{wxApp::OnInit}{wxapponinit}.
+
+An application must have a top-level \helpref{wxFrame}{wxframe} window (returned by \helpref{wxApp::OnInit}{wxapponinit}),
+each frame containing one or more instances of \helpref{wxPanel}{wxpanel}, \helpref{wxSplitterWindow}{wxsplitterwindow}\rtfsp
+or other windows and controls.
+
+A frame can have a \helpref{wxMenuBar}{wxmenubar}, a status line, and a \helpref{wxIcon}{wxicon} for
+when the frame is iconized.
+
+A \helpref{wxPanel}{wxpanel} is used to place controls (classes derived from \helpref{wxControl}{wxcontrol})
+which are used for user interaction. Examples of controls are \helpref{wxButton}{wxbutton},
+\rtfsp\helpref{wxCheckBox}{wxcheckbox}, \helpref{wxChoice}{wxchoice}, \helpref{wxListBox}{wxlistbox},
+\rtfsp\helpref{wxRadioBox}{wxradiobox}, \helpref{wxSlider}{wxslider}.
+
+Instances of \helpref{wxDialog}{wxdialog} can also be used for panels, items and they have
+the advantage of not requiring a separate frame.
+
+Instead of creating a dialog box and populating it with items, it is possible to choose
+one of the convenient common dialog classes, such as \helpref{wxMessageDialog}{wxmessagedialog}\rtfsp
+and \helpref{wxFileDialog}{wxfiledialog}.
+
+You never draw directly onto a canvas --- you use a {\it device context} (DC). \helpref{wxDC}{wxdc} is
+the base for \helpref{wxClientDC}{wxclientdc}, \helpref{wxPaintDC}{wxpaintdc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPostScriptDC}{wxpostscriptdc},
+\rtfsp\helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxMetaFileDC}{wxmetafiledc} and \helpref{wxPrinterDC}{wxprinterdc}.
+If your drawing functions have {\bf wxDC} as a parameter, you can pass any of these DCs
+to the function, and thus use the same code to draw to several different devices.
+You can draw using the member functions of {\bf wxDC}, such as \helpref{wxDC::DrawLine}{wxdcdrawline}\rtfsp
+and \helpref{wxDC::DrawText}{wxdcdrawtext}. Control colour on a canvas (\helpref{wxColour}{wxcolour}) with
+brushes (\helpref{wxBrush}{wxbrush}) and pens (\helpref{wxPen}{wxpen}).
+
+To intercept events, you add a DECLARE\_EVENT\_TABLE macro to the window class declaration,
+and put a BEGIN\_EVENT\_TABLE ... END\_EVENT\_TABLE block in the implementation file. Between these
+macros, you add event macros which map the event (such as a mouse click) to a member function.
+These might override predefined event handlers such as \helpref{wxWindow::OnChar}{wxwindowonchar} and
+\rtfsp\helpref{wxWindow::OnMouseEvent}{wxwindowonmouseevent}.
+
+Most modern applications will have an on-line, hypertext help system; for this, you
+need wxHelp and the \helpref{wxHelpInstance}{wxhelpinstance} class to control
+wxHelp. To add sparkle, you might use the wxToolBar class (documented separately)
+which makes heavy use of the \helpref{wxBitmap}{wxbitmap}.
+
+GUI applications aren't all graphical wizardry. List and hash table needs are
+catered for by \helpref{wxList}{wxlist}, \helpref{wxStringList}{wxstringlist} and \helpref{wxHashTable}{wxhashtable}.
+You will undoubtedly need some platform-independent \helpref{file functions}{filefunctions},
+and you may find it handy to maintain and search a list of paths using \helpref{wxPathList}{wxpathlist}.
+There's a \helpref{miscellany}{miscellany} of operating system and other functions.
+
+If you have several communicating applications, you can try out the DDE-like functions, by
+using the three classes \helpref{wxDDEClient}{wxddeclient}, \helpref{wxDDEServer}{wxddeserver} and
+\rtfsp\helpref{wxDDEConnection}{wxddeconnection}. These use DDE under Windows, and a simulation using
+sockets under UNIX.
+
+
--- /dev/null
+\section{wxImageList overview}\label{wximagelistoverview}
+
+Classes: \helpref{wxImageList}{wximagelist}
+
+TODO.
+
--- /dev/null
+\section{\class{wxTime}}\label{wxtime}
+
+A class for manipulating times.
+
+TODO.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxDate}{wxDate}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
--- /dev/null
+\section{\class{wxTimer}}\label{wxtimer}
+
+The wxTimer object is an abstraction of MS Windows and X toolkit timers. To
+use it, derive a new class and override the {\bf Notify} member to
+perform the required action. Start with {\bf Start}, stop with {\bf
+Stop}, it's as simple as that.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{::wxStartTimer}{wxstarttimer}, \helpref{::wxGetElapsedTime}{wxgetelapsedtime}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTimer::wxTimer}
+
+\func{}{wxTimer}{\void}
+
+Constructor.
+
+\membersection{wxTimer::\destruct{wxTimer}}
+
+\func{}{\destruct{wxTimer}}{\void}
+
+Destructor. Stops the timer if activated.
+
+\membersection{wxTimer::Interval}
+
+\func{int}{Interval}{\void}
+
+Returns the current interval for the timer.
+
+\membersection{wxTimer::Notify}
+
+\func{void}{Notify}{\void}
+
+This member should be overridden by the user. It is called on timeout.
+
+\membersection{wxTimer::Start}
+
+\func{bool}{Start}{\param{int}{ milliseconds = -1}, \param{bool}{ oneShot=FALSE}}
+
+(Re)starts the timer. If {\it milliseconds}\/ is absent or -1, the
+previous value is used. Returns FALSE if the timer could not be started,
+TRUE otherwise (in MS Windows timers are a limited resource).
+
+If {\it oneShot} is FALSE (the default), the Notify function will be repeatedly
+called. If TRUE, Notify will be called only once.
+
+\membersection{wxTimer::Stop}
+
+\func{void}{Stop}{\void}
+
+Stops the timer.
+
+
--- /dev/null
+\section{Interprocess communication overview}\label{ipcoverview}
+
+Classes: \helpref{wxDDEServer}{wxddeserver}, \helpref{wxDDEConnection}{wxddeconnection},
+\rtfsp\helpref{wxDDEClient}{wxddeclient}.
+
+TODO: rewrite.
+
+The following describes how wxWindows implements DDE. The following
+three classes are central.
+
+\begin{enumerate}\itemsep=0pt
+\item wxDDEClient. This represents the client application, and is used
+only within a client program.
+\item wxDDEServer. This represents the server application, and is used
+only within a server program.
+\item wxDDEConnection. This represents the connection from the current
+client or server to the other application (server or client), and can be used
+in both server and client programs. Most DDE
+transactions operate on this object.
+\end{enumerate}
+
+Messages between applications are usually identified by three variables:
+connection object, topic name and item name. A data string is a fourth
+element of some messages. To create a connection (a conversation in
+Windows parlance), the client application sends the message
+MakeConnection to the client object, with a string service name to
+identify the server and a topic name to identify the topic for the
+duration of the connection. Under UNIX, the service name must contain an
+integer port identifier.
+
+The server then responds and either vetos the connection or allows it.
+If allowed, a connection object is created which persists until the
+connection is closed. The connection object is then used for subsequent
+messages between client and server.
+
+To create a working server, the programmer must:
+
+\begin{enumerate}\itemsep=0pt
+\item Derive a class from wxDDEServer.
+\item Override the handler OnAcceptConnection for accepting or rejecting a connection,
+on the basis of the topic argument. This member must create and return a connection
+object if the connection is accepted.
+\item Create an instance of your server object, and call Create to
+activate it, giving it a service name.
+\item Derive a class from wxDDEConnection.
+\item Provide handlers for various messages that are sent to the server
+side of a wxDDEConnection.
+\end{enumerate}
+
+To create a working client, the programmer must:
+
+\begin{enumerate}\itemsep=0pt
+\item Derive a class from wxDDEClient.
+\item Override the handler OnMakeConnection to create and return
+an appropriate connection object.
+\item Create an instance of your client object.
+\item Derive a class from wxDDEConnection.
+\item Provide handlers for various messages that are sent to the client
+side of a wxDDEConnection.
+\item When appropriate, create a new connection by sending a MakeConnection
+message to the client object, with arguments host name (processed in UNIX only),
+service name, and topic name for this connection. The client object will call OnMakeConnection
+to create a connection object of the desired type.
+\item Use the wxDDEConnection member functions to send messages to the server.
+\end{enumerate}
+
+\subsection{Data transfer}
+
+These are the ways that data can be transferred from one application to
+another.
+
+\begin{itemize}\itemsep=0pt
+\item {\bf Execute:} the client calls the server with a data string representing
+a command to be executed. This succeeds or fails, depending on the
+server's willingness to answer. If the client wants to find the result
+of the Execute command other than success or failure, it has to explicitly
+call Request.
+\item {\bf Request:} the client asks the server for a particular data string
+associated with a given item string. If the server is unwilling to
+reply, the return value is NULL. Otherwise, the return value is a string
+(actually a pointer to the connection buffer, so it should not be
+deallocated by the application).
+\item {\bf Poke:} The client sends a data string associated with an item
+string directly to the server. This succeeds or fails.
+\item {\bf Advise:} The client asks to be advised of any change in data
+associated with a particular item. If the server agrees, the server will
+send an OnAdvise message to the client along with the item and data.
+\end{itemize}
+
+The default data type is wxCF\_TEXT (ASCII text), and the default data
+size is the length of the null-terminated string. Windows-specific data
+types could also be used on the PC.
+
+\subsection{Examples}
+
+See the sample programs {\it server}\/ and {\it client}\/ in the IPC
+samples directory. Run the server, then the client. This demonstrates
+using the Execute, Request, and Poke commands from the client, together
+with an Advise loop: selecting an item in the server list box causes
+that item to be highlighted in the client list box.
+
+See also the source for wxHelp, which is a DDE server, and the files
+wx\_help.h and wx\_help.cc which implement the client interface to
+wxHelp.
+
+\subsection{More DDE details}
+
+A wxDDEClient object represents the client part of a client-server DDE
+(Dynamic Data Exchange) conversation (available in both
+Windows and UNIX).
+
+To create a client which can communicate with a suitable server,
+you need to derive a class from wxDDEConnection and another from wxDDEClient.
+The custom wxDDEConnection class will intercept communications in
+a `conversation' with a server, and the custom wxDDEServer is required
+so that a user-overriden \helpref{wxDDEClient::OnMakeConnection}{wxddeclientonmakeconnection} member can return
+a wxDDEConnection of the required class, when a connection is made.
+
+For example:
+
+\begin{verbatim}
+class MyConnection: public wxDDEConnection
+{
+ public:
+ MyConnection(void)::wxDDEConnection(ipc_buffer, 3999) {}
+ ~MyConnection(void) { }
+ Bool OnAdvise(char *topic, char *item, char *data, int size, int format)
+ { wxMessageBox(topic, data); }
+};
+
+class MyClient: public wxDDEClient
+{
+ public:
+ MyClient(void) {}
+ wxDDEConnection *OnMakeConnection(void) { return new MyConnection; }
+};
+
+\end{verbatim}
+
+Here, {\bf MyConnection} will respond to \helpref{OnAdvise}{wxddeconnectiononadvise} messages sent
+by the server.
+
+When the client application starts, it must first call \helpref{wxIPCInitialize}{wxipcinitialize}\rtfsp
+before creating an instance of the derived wxDDEClient. In the following, command line
+arguments are used to pass the host name (the name of the machine the server is running
+on) and the server name (identifying the server process). Calling \helpref{wxDDEClient::MakeConnection}{wxddeclientmakeconnection}\rtfsp
+implicitly creates an instance of {\bf MyConnection} if the request for a
+connection is accepted, and the client then requests an {\it Advise} loop
+from the server, where the server calls the client when data has changed.
+
+\begin{verbatim}
+ wxIPCInitialize();
+
+ char *server = "4242";
+ char hostName[256];
+ wxGetHostName(hostName, sizeof(hostName));
+
+ char *host = hostName;
+
+ if (argc > 1)
+ server = argv[1];
+ if (argc > 2)
+ host = argv[2];
+
+ // Create a new client
+ MyClient *client = new MyClient;
+ the_connection = (MyConnection *)client->MakeConnection(host, server, "IPC TEST");
+
+ if (!the_connection)
+ {
+ wxMessageBox("Failed to make connection to server", "Client Demo Error");
+ return NULL;
+ }
+ the_connection->StartAdvise("Item");
+\end{verbatim}
+
+
--- /dev/null
+\section{wxListCtrl overview}\label{wxlistctrloverview}
+
+Classes: \helpref{wxListCtrl}{wxlistctrl}, \helpref{wxImageList}{wximagelist}
+
+TODO.
+
--- /dev/null
+\section{\class{wxToolBarBase}}\label{wxtoolbarbase}
+
+{\bf wxToolBarBase} is the base class for a number of toolbar classes. The most portable
+one of these is the generic \helpref{wxToolBarSimple}{wxtoolbarsimple} class. {\bf wxToolBarBase} defines
+automatic scrolling management functionality which is identical to \helpref{wxScrolledWindow}{wxscrolledwindow},
+so please refer to this class also.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Remarks}
+
+Because there is a variety of toolbar classes, you may wish to choose which class
+is best for your application on each platform, and define {\bf wxToolBar} appropriately. For example:
+
+\begin{verbatim}
+#if WIN95
+class wxToolBar: public wxToolBar95
+#elif defined(wx_msw)
+class wxToolBar: public wxToolBarMSW
+#else
+class wxToolBar: public wxToolBarSimple
+#endif
+{
+};
+\end{verbatim}
+
+TODO: maybe change the confusing names: GetDefaultSize becomes GetToolBitmapSize, and
+GetDefaultButtonSize becomes GetToolSize. Document SetRows for wxToolBar95, and make it
+part of the base API?
+
+\wxheading{Event handling}
+
+Derive a new class from an existing toolbar class, and override appropriate virtual functions.
+
+TODO: make consistent with other event handling; have wxToolBarEvent and appropriate macros.
+
+\wxheading{See also}
+
+\overview{Toolbar overview}{wxtoolbaroverview},\rtfsp
+\helpref{wxToolBarSimple}{wxtoolbarsimple},\rtfsp
+\helpref{wxToolBarMSW}{wxtoolbarmsw},\rtfsp
+\helpref{wxToolBar95}{wxtoolbar95},\rtfsp
+\helpref{wxScrolledWindow}{wxscrolledwindow}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxToolBarBase::wxToolBarBase}\label{wxtoolbarbaseconstr}
+
+\func{}{wxToolBarBase}{\void}
+
+Default constructor.
+
+%\wxheading{See also}
+%
+%\helpref{wxToolBarBase::Create}{wxtoolbarbasecreate}
+%
+\membersection{wxToolBarBase::\destruct{wxToolBarBase}}
+
+\func{void}{\destruct{wxToolBarBase}}{\void}
+
+Toolbar destructor.
+
+\membersection{wxToolBarBase::AddSeparator}\label{wxtoolbarbaseaddseparator}
+
+\func{void}{AddSeparator}{\void}
+
+Adds a separator for spacing groups of tools.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool}, \helpref{wxToolBarBase::SetToolSeparation}{wxtoolbarbasesettoolseparation}
+
+\membersection{wxToolBarBase::AddTool}\label{wxtoolbarbaseaddtool}
+
+\func{wxToolBarBaseTool*}{AddTool}{\param{const int}{ toolIndex}, \param{const wxBitmap\&}{ bitmap1},\rtfsp
+\param{const wxBitmap\&}{ bitmap2 = (wxBitmap *)NULL}, \param{const bool}{ isToggle = FALSE},\rtfsp
+\param{const float}{ xPos = -1}, \param{const float}{ yPos = -1},\rtfsp
+\param{wxObject *}{clientData = NULL}, \param{const wxString\& }{shortHelpString = ""}, \param{const wxString\& }{longHelpString = ""}}
+
+Adds a tool to the toolbar.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{An integer by which
+the tool may be identified in subsequent operations.}
+
+\docparam{isToggle}{Specifies whether the tool is a toggle or not: a toggle tool may be in
+two states, whereas a non-toggle tool is just a button.}
+
+\docparam{bitmap1}{The primary tool bitmap for toggle and button tools.}
+
+\docparam{bitmap2}{The second bitmap specifies the on-state bitmap for a toggle
+tool. If this is NULL, either an inverted version of the primary bitmap is
+used for the on-state of a toggle tool (monochrome displays) or a black
+border is drawn around the tool (colour displays). Note that to pass a NULL value,
+you need to cast it to (wxBitmap *) so that C++ can construct an appropriate temporary
+wxBitmap object.}
+
+\docparam{xPos}{Specifies the x position of the tool if automatic layout is not suitable.}
+
+\docparam{yPos}{Specifies the y position of the tool if automatic layout is not suitable.}
+
+\docparam{clientData}{An optional pointer to client data which can be
+retrieved later using \helpref{wxToolBarBase::GetToolClientData}{wxtoolbarbasegettoolclientdata}.}
+
+\docparam{shortHelpString}{Used for displaying a tooltip for the tool in the
+Windows 95 implementation of wxButtonBar. Pass the empty string if this is not required.}
+
+\docparam{longHelpString}{Used to displayer longer help, such as status line help.
+Pass the empty string if this is not required.}
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::AddSeparator}{wxtoolbarbaseaddseparator}
+
+\membersection{wxToolBarBase::CreateTools}\label{wxtoolbarbasecreatetools}
+
+\func{bool}{CreateTools}{\void}
+
+Call this function after all tools have been added to the toolbar, to actually
+create the tools.
+
+\wxheading{Remarks}
+
+Strictly speaking, this is required only for the Windows 95 version of wxButtonBar,
+but for portability it should be called anyway.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool}
+
+\membersection{wxToolBarBase::DrawTool}\label{wxtoolbarbasedrawtool}
+
+\func{void}{DrawTool}{\param{wxMemoryDC\& }{memDC}, \param{wxToolBarBaseTool* }{tool}}
+
+Draws the specified tool onto the canvas using the given memory device context.
+
+\wxheading{Parameters}
+
+\docparam{memDC}{A memory DC to be used for drawing the tool.}
+
+\docparam{tool}{Tool to be drawn.}
+
+\wxheading{Remarks}
+
+For internal use only.
+
+\membersection{wxToolBarBase::EnableTool}\label{wxtoolbarbaseenabletool}
+
+\func{void}{EnableTool}{\param{const int }{toolIndex}, \param{const bool}{ enable}}
+
+Enables or disables the tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{Tool to enable or disable.}
+
+\docparam{enable}{If TRUE, enables the tool, otherwise disables it.}
+
+\wxheading{Remarks}
+
+For \helpref{wxToolBarSimple}{wxtoolbarsimple}, does nothing. Some other implementations
+will change the visible state of the tool to indicate that it is disabled.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolEnabled}{wxtoolbarbasegettoolenabled},\rtfsp
+%\helpref{wxToolBarBase::SetToolState}{wxtoolbarbasesettoolstate},\rtfsp
+\helpref{wxToolBarBase::ToggleTool}{wxtoolbarbasetoggletool}
+
+\membersection{wxToolBarBase::FindToolForPosition}\label{wxtoolbarbasefindtoolforposition}
+
+\constfunc{wxToolBarBaseTool*}{FindToolForPosition}{\param{const float}{ x}, \param{const float}{ y}}
+
+Finds a tool for the given mouse position.
+
+\wxheading{Parameters}
+
+\docparam{x}{X position.}
+
+\docparam{y}{Y position.}
+
+\wxheading{Return value}
+
+A pointer to a tool if a tool is found, or NULL otherwise.
+
+\wxheading{Remarks}
+
+Used internally, and should not need to be used by the programmer.
+
+\membersection{wxToolBarBase::GetDefaultButtonSize}\label{wxtoolbarbasegetdefaultbuttonsize}
+
+\func{wxSize}{GetDefaultButtonSize}{\void}
+
+Returns the size of a whole button, which is usually larger than a tool bitmap because
+of added 3D effects.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetDefaultSize}{wxtoolbarbasesetdefaultsize},\rtfsp
+\helpref{wxToolBarBase::GetDefaultSize}{wxtoolbarbasegetdefaultsize}
+
+\membersection{wxToolBarBase::GetDefaultSize}\label{wxtoolbarbasegetdefaultsize}
+
+\func{wxSize}{GetDefaultSize}{\void}
+
+Returns the size of bitmap that the toolbar expects to have. The default bitmap size is 16 by 15 pixels.
+
+\wxheading{Remarks}
+
+Note that this is the size of the bitmap you pass to \helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool},
+and not the eventual size of the tool button.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetDefaultSize}{wxtoolbarbasesetdefaultsize},\rtfsp
+\helpref{wxToolBarBase::GetDefaultButtonSize}{wxtoolbarbasegetdefaultbuttonsize}
+
+\membersection{wxToolBarBase::GetMargins}\label{wxtoolbarbasegetmargins}
+
+\constfunc{wxSize}{GetMargins}{\void}
+
+Returns the left/right and top/bottom margins, which are also used for inter-toolspacing.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetMargins}{wxtoolbarbasesetmargins}
+
+\membersection{wxToolBarBase::GetMaxSize}\label{wxtoolbarbasegetmaxsize}
+
+\constfunc{void}{GetMaxSize}{\param{float*}{ w}, \param{float*}{ h}}
+
+Gets the maximum size taken up by the tools after layout, including margins.
+This can be used to size a frame around the toolbar canvas.
+
+\wxheading{Parameters}
+
+\docparam{w}{Receives the maximum horizontal size.}
+
+\docparam{h}{Receives the maximum vertical size.}
+
+\membersection{wxToolBarBase::GetToolClientData}\label{wxtoolbarbasegettoolclientdata}
+
+\constfunc{wxObject*}{GetToolClientData}{\param{const int }{toolIndex}}
+
+Get any client data associated with the tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{Index of the tool, as passed to \helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool}.}
+
+\wxheading{Return value}
+
+Client data, or NULL if there is none.
+
+\membersection{wxToolBarBase::GetToolEnabled}\label{wxtoolbarbasegettoolenabled}
+
+\constfunc{bool}{GetToolEnabled}{\param{const int }{toolIndex}}
+
+Called to determine whether a tool is enabled (responds to user input).
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{Index of the tool in question.}
+
+\wxheading{Return value}
+
+TRUE if the tool is enabled, FALSE otherwise.
+
+%\wxheading{See also}
+%
+%\helpref{wxToolBarBase::SetToolEnabled}{wxtoolbarbasesettoolenabled}
+%
+\membersection{wxToolBarBase::GetToolLongHelp}\label{wxtoolbarbasegettoollonghelp}
+
+\constfunc{wxString}{GetToolLongHelp}{\param{const int }{toolIndex}}
+
+Returns the long help for the given tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The tool in question.}
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetToolLongHelp}{wxtoolbarbasesettoollonghelp},\rtfsp
+\helpref{wxToolBarBase::SetToolShortHelp}{wxtoolbarbasesettoolshorthelp}\rtfsp
+
+\membersection{wxToolBarBase::GetToolPacking}\label{wxtoolbarbasegettoolpacking}
+
+\constfunc{int}{GetToolPacking}{\void}
+
+Returns the value used for packing tools.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetToolPacking}{wxtoolbarbasesettoolpacking}
+
+\membersection{wxToolBarBase::GetToolSeparation}\label{wxtoolbarbasegettoolseparation}
+
+\constfunc{int}{GetToolSeparation}{\void}
+
+Returns the default separator size.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::SetToolSeparation}{wxtoolbarbasesettoolseparation}
+
+\membersection{wxToolBarBase::GetToolShortHelp}\label{wxtoolbarbasegettoolshorthelp}
+
+\constfunc{wxString}{GetToolShortHelp}{\param{const int }{toolIndex}}
+
+Returns the short help for the given tool.
+
+Returns the long help for the given tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The tool in question.}
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolLongHelp}{wxtoolbarbasegettoollonghelp},\rtfsp
+\helpref{wxToolBarBase::SetToolShortHelp}{wxtoolbarbasesettoolshorthelp}\rtfsp
+
+\membersection{wxToolBarBase::GetToolState}\label{wxtoolbarbasegettoolstate}
+
+\constfunc{bool}{GetToolState}{\param{const int }{toolIndex}}
+
+Gets the on/off state of a toggle tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The tool in question.}
+
+\wxheading{Return value}
+
+TRUE if the tool is toggled on, FALSE otherwise.
+
+%\wxheading{See also}
+%
+%\helpref{wxToolBarBase::SetToolState}{wxtoolbarbasesettoolstate}
+%
+\membersection{wxToolBarBase::Layout}\label{wxtoolbarbaselayout}
+
+\func{void}{Layout}{\void}
+
+Called by the application after the tools have been added to
+automatically lay the tools out on the canvas. If you have given
+absolute positions when adding the tools, do not call this.
+
+\membersection{wxToolBarBase::OnLeftClick}\label{wxtoolbarbaseonleftclick}
+
+\func{bool}{OnLeftClick}{\param{int}{ toolIndex}, \param{bool}{ toggleDown}}
+
+Called when the user clicks on a tool with the left mouse button. The
+programmer should override this function to detect left tool clicks.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The identifier passed to \helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool}.}
+
+\docparam{toggleDown}{TRUE if the tool is a toggle and the toggle is down, otherwise is FALSE.}
+
+\wxheading{Return value}
+
+If the tool is a toggle and this function returns FALSE, the toggle
+toggle state (internal and visual) will not be changed. This provides a way of
+specifying that toggle operations are not permitted in some circumstances.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::OnMouseEnter}{wxtoolbarbaseonmouseenter},\rtfsp
+\helpref{wxToolBarBase::OnRightClick}{wxtoolbarbaseonrightclick}
+
+\membersection{wxToolBarBase::OnMouseEnter}\label{wxtoolbarbaseonmouseenter}
+
+\func{void}{OnMouseEnter}{\param{int}{ toolIndex}}
+
+This is called when the mouse cursor moves into a tool or out of
+the toolbar.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{Greater than -1 if the mouse cursor has moved into the tool,
+or -1 if the mouse cursor has moved. The
+programmer can override this to provide extra information about the tool,
+such as a short description on the status line.}
+
+\wxheading{Remarks}
+
+With some derived toolbar classes, if the mouse moves quickly out of the toolbar, wxWindows may not be able to
+detect it. Therefore this function may not always be called when expected.
+
+\membersection{wxToolBarBase::OnRightClick}\label{wxtoolbarbaseonrightclick}
+
+\func{void}{OnRightClick}{\param{int}{ toolIndex}, \param{float}{ x}, \param{float}{ y}}
+
+Called when the user clicks on a tool with the right mouse button. The
+programmer should override this function to detect right tool clicks.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The identifier passed to \helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool}.}
+
+\docparam{x}{The x position of the mouse cursor.}
+
+\docparam{y}{The y position of the mouse cursor.}
+
+\wxheading{Remarks}
+
+A typical use of this member might be to pop up a menu.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::OnMouseEnter}{wxtoolbarbaseonmouseenter},\rtfsp
+\helpref{wxToolBarBase::OnLeftClick}{wxtoolbarbaseonleftclick}
+
+\membersection{wxToolBarBase::SetDefaultSize}\label{wxtoolbarbasesetdefaultsize}
+
+\func{void}{SetDefaultSize}{\param{const wxSize\&}{ size}}
+
+Sets the default size of each tool bitmap. The default bitmap size is 16 by 15 pixels.
+
+\wxheading{Parameters}
+
+\docparam{size}{The size of the bitmaps in the toolbar.}
+
+\wxheading{Remarks}
+
+This should be called to tell the toolbar what the tool bitmap size is. Call
+it before you add tools.
+
+Note that this is the size of the bitmap you pass to \helpref{wxToolBarBase::AddTool}{wxtoolbarbaseaddtool},
+and not the eventual size of the tool button.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetDefaultSize}{wxtoolbarbasegetdefaultsize},\rtfsp
+\helpref{wxToolBarBase::GetDefaultButtonSize}{wxtoolbarbasegetdefaultbuttonsize}
+
+\membersection{wxToolBarBase::SetMargins}\label{wxtoolbarbasesetmargins}
+
+\func{void}{SetMargins}{\param{const wxSize\&}{ size}}
+
+\func{void}{SetMargins}{\param{const int}{ x}, \param{const int}{ y}}
+
+Set the values to be used as margins for the toolbar.
+
+\wxheading{Parameters}
+
+\docparam{size}{Margin size.}
+
+\docparam{x}{Left margin, right margin and inter-tool separation value.}
+
+\docparam{y}{Top margin, bottom margin and inter-tool separation value.}
+
+\wxheading{Remarks}
+
+This must be called before the tools are added if absolute positioning is to be used, and the
+default (zero-size) margins are to be overridden.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetMargins}{wxtoolbarbasegetmargins}, \helpref{wxSize}{wxsize}
+
+\membersection{wxToolBarBase::SetToolLongHelp}\label{wxtoolbarbasesettoollonghelp}
+
+\func{void}{SetToolLongHelp}{\param{int }{toolIndex}, \param{const wxString\& }{helpString}}
+
+Sets the long help for the given tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The tool in question.}
+
+\docparam{helpString}{A string for the long help.}
+
+\wxheading{Remarks}
+
+You might use the long help for displaying the tool purpose on the status line.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolLongHelp}{wxtoolbarbasegettoollonghelp},\rtfsp
+\helpref{wxToolBarBase::SetToolShortHelp}{wxtoolbarbasesettoolshorthelp},\rtfsp
+
+\membersection{wxToolBarBase::SetToolPacking}\label{wxtoolbarbasesettoolpacking}
+
+\func{void}{SetToolPacking}{\param{const int}{ packing}}
+
+Sets the value used for spacing tools. The default value is 1.
+
+\wxheading{Parameters}
+
+\docparam{packing}{The value for packing.}
+
+\wxheading{Remarks}
+
+The packing is used for spacing in the vertical direction if the toolbar is horizontal,
+and for spacing in the horizontal direction if the toolbar is vertical.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolPacking}{wxtoolbarbasegettoolpacking}
+
+\membersection{wxToolBarBase::SetToolShortHelp}\label{wxtoolbarbasesettoolshorthelp}
+
+\func{void}{SetToolShortHelp}{\param{const int }{toolIndex}, \param{const wxString\& }{helpString}}
+
+Sets the short help for the given tool.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{The tool in question.}
+
+\docparam{helpString}{The string for the short help.}
+
+\wxheading{Remarks}
+
+An application might use short help for identifying the tool purpose in a tooltip.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolShortHelp}{wxtoolbarbasegettoolshorthelp}, \helpref{wxToolBarBase::SetToolLongHelp}{wxtoolbarbasesettoollonghelp}
+
+\membersection{wxToolBarBase::SetToolSeparation}\label{wxtoolbarbasesettoolseparation}
+
+\func{void}{SetToolSeparation}{\param{const int}{ separation}}
+
+Sets the default separator size. The default value is 5.
+
+\wxheading{Parameters}
+
+\docparam{separation}{The separator size.}
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::AddSeparator}{wxtoolbarbaseaddseparator}
+
+\membersection{wxToolBarBase::ToggleTool}\label{wxtoolbarbasetoggletool}
+
+\func{void}{ToggleTool}{\param{const int }{toolIndex}, \param{const bool}{ toggle}}
+
+Toggles a tool on or off.
+
+\wxheading{Parameters}
+
+\docparam{toolIndex}{Tool in question.}
+
+\docparam{toggle}{If TRUE, toggles the tool on, otherwise toggles it off.}
+
+\wxheading{Remarks}
+
+Only applies to a tool that has been specified as a toggle tool.
+
+\wxheading{See also}
+
+\helpref{wxToolBarBase::GetToolState}{wxtoolbarbasegettoolstate}
+
+\section{\class{wxToolBar95}}\label{wxtoolbar95}
+
+This class should be used when a 3D-effect toolbar is required under Windows 95.
+It uses the native toolbar control.
+
+\wxheading{Derived from}
+
+\helpref{wxToolBarBase}{wxtoolbarbase}\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no specific styles for this class.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+Note that this toolbar paints tools to reflect user-selected colours.
+The toolbar orientation must always be {\bf wxVERTICAL}.
+
+For member functions, see the documentation for \helpref{wxToolBarBase}{wxtoolbarbase}.
+
+\wxheading{See also}
+
+\overview{Toolbar overview}{wxtoolbaroverview},\rtfsp
+\helpref{wxToolBarBase}{wxtoolbarbase},\rtfsp
+\helpref{wxToolBarSimple}{wxtoolbarsimple},\rtfsp
+\helpref{wxToolBarMSW}{wxtoolbarmsw}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxToolBar95::wxToolBar95}\label{wxtoolbar95constr}
+
+\func{}{wxToolBar95}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long }{style = 0}, \param{const int }{orientation = wxVERTICAL},\rtfsp
+\param{const int }{nRowsOrColumns = 1}, \param{const wxString\& }{name = ``toolBar"}}
+
+Constructs a toolbar.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{orientation}{Specifies a wxVERTICAL or wxHORIZONTAL orientation for laying out
+the toolbar.}
+
+\docparam{nRowsOrColumns}{Specifies the number of rows or
+columns, whose meaning depends on {\it orientation}. If laid out
+vertically, {\it nRowsOrColumns} specifies the number of rows to draw
+before the next column is started; if horizontal, it refers to the
+number of columns to draw before the next row is started.}
+
+\docparam{style}{Window style. See \helpref{wxToolBar95}{wxtoolbar95}.}
+
+\docparam{name}{Window name.}
+
+\section{\class{wxToolBarMSW}}\label{wxtoolbarmsw}
+
+This class should be used when a 3D-effect toolbar is required for Windows versions earlier
+than Windows 95.
+
+\wxheading{Derived from}
+
+\helpref{wxToolBarBase}{wxtoolbarbase}\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+There are no specific styles for this class.
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+Note that this toolbar does not paint tools to reflect user-selected colours: grey shading is used.
+
+For member functions, see the documentation for \helpref{wxToolBarBase}{wxtoolbarbase}.
+
+\wxheading{See also}
+
+\overview{Toolbar overview}{wxtoolbaroverview},\rtfsp
+\helpref{wxToolBarBase}{wxtoolbarbase},\rtfsp
+\helpref{wxToolBarSimple}{wxtoolbarsimple},\rtfsp
+\helpref{wxToolBar95}{wxtoolbar95}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxToolBarMSW::wxToolBarMSW}\label{wxtoolbarmswconstr}
+
+\func{}{wxToolBarMSW}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long }{style = 0}, \param{const int }{orientation = wxVERTICAL},\rtfsp
+\param{const int }{nRowsOrColumns = 1}, \param{const wxString\& }{name = ``toolBar"}}
+
+Constructs a toolbar.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{orientation}{Specifies a wxVERTICAL or wxHORIZONTAL orientation for laying out
+the toolbar.}
+
+\docparam{nRowsOrColumns}{Specifies the number of rows or
+columns, whose meaning depends on {\it orientation}. If laid out
+vertically, {\it nRowsOrColumns} specifies the number of rows to draw
+before the next column is started; if horizontal, it refers to the
+number of columns to draw before the next row is started.}
+
+\docparam{style}{Window style. See \helpref{wxToolBarMSW}{wxtoolbarmsw}.}
+
+\docparam{name}{Window name.}
+
+
+\section{\class{wxToolBarSimple}}\label{wxtoolbarsimple}
+
+This is the generic toolbar class which has an identical appearance
+on all platforms.
+
+\wxheading{Derived from}
+
+\helpref{wxToolBarBase}{wxtoolbarbase}\\
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxTB\_3DBUTTONS}}{Gives the simple toolbar a mild 3D look to its buttons.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{Remarks}
+
+In this class, disabling a toolbar tool does not change its appearance.
+
+For member functions, see the documentation for \helpref{wxToolBarBase}{wxtoolbarbase}.
+
+\wxheading{See also}
+
+\overview{Toolbar overview}{wxtoolbaroverview},\rtfsp
+\helpref{wxToolBarBase}{wxtoolbarbase},\rtfsp
+\helpref{wxToolBarSimple}{wxtoolbarsimple},\rtfsp
+\helpref{wxToolBar95}{wxtoolbar95}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxToolBarSimple::wxToolBarSimple}\label{wxtoolbarsimpleconstr}
+
+\func{}{wxToolBarSimple}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},\rtfsp
+\param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
+\param{const long }{style = 0}, \param{const int }{orientation = wxVERTICAL},\rtfsp
+\param{const int }{nRowsOrColumns = 1}, \param{const wxString\& }{name = ``toolBar"}}
+
+Constructs a toolbar.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position. If the position (-1, -1) is specified then a default position is chosen.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then a default size is chosen.}
+
+\docparam{orientation}{Specifies a wxVERTICAL or wxHORIZONTAL orientation for laying out
+the toolbar.}
+
+\docparam{nRowsOrColumns}{Specifies the number of rows or
+columns, whose meaning depends on {\it orientation}. If laid out
+vertically, {\it nRowsOrColumns} specifies the number of rows to draw
+before the next column is started; if horizontal, it refers to the
+number of columns to draw before the next row is started.}
+
+\docparam{style}{Window style. See \helpref{wxToolBarSimple}{wxtoolbarsimple}.}
+
+\docparam{name}{Window name.}
+
+
+
--- /dev/null
+\chapter{Topic overviews}\label{overviews}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+This chapter contains a selection of topic overviews.
+
+\input tapp.tex
+\input tbitmap.tex
+\input tdialog.tex
+\input tfont.tex
+\input tstring.tex
+\input tsplittr.tex
+\input ttreectl.tex
+\input tlistctl.tex
+\input timaglst.tex
+\input tcommdlg.tex
+\input tconstr.tex
+\input tdb.tex
+\input tdc.tex
+\input tdebug.tex
+\input tdelwin.tex
+\input tscroll.tex
+\input tdocview.tex
+\input tevent.tex
+\input tguide.tex
+\input tipc.tex
+\input tprint.tex
+\input tresourc.tex
+\input truntime.tex
+\input tstyles.tex
+\input ttab.tex
+\input ttoolbar.tex
+\input tvalidat.tex
+\input texpr.tex
+\input tgrid.tex
+\input tusage.tex
+
--- /dev/null
+\section{Printing overview}\label{printingoverview}
+
+Classes: \helpref{wxPrintout}{wxprintout}, \helpref{wxPrinter}{wxprinter},\rtfsp
+\helpref{wxPrintPreview}{wxprintpreview}, \helpref{wxPrinterDC}{wxprinterdc},\rtfsp
+\helpref{wxPrintDialog}{wxprintdialog}.
+
+The printing framework relies on the application to provide classes
+whose member functions can respond to particular requests, such
+as `print this page' or `does this page exist in the document?'.
+This method allows wxWindows to take over the housekeeping duties of
+turning preview pages, calling the print dialog box, creating
+the printer device context, and so on: the application can concentrate
+on the rendering of the information onto a device context.
+The printing framework is mainly a Windows feature; PostScript
+support under non-Windows platforms is emerging but has not been rigorously tested.
+
+The \helpref{document/view framework}{docviewoverview} creates a default wxPrintout
+object for every view, calling wxView::OnDraw to achieve a
+prepackaged print/preview facility.
+
+A document's printing ability is represented in an application by a
+derived wxPrintout class. This class prints a page on request, and can
+be passed to the Print function of a wxPrinter object to actually print
+the document, or can be passed to a wxPrintPreview object to initiate
+previewing. The following code (from the printing sample) shows how easy
+it is to initiate printing, previewing and the print setup dialog, once the wxPrintout
+functionality has been defined. Notice the use of MyPrintout for
+both printing and previewing. All the preview user interface functionality
+is taken care of by wxWindows. For details on how MyPrintout is defined,
+please look at the printout sample code.
+
+\begin{verbatim}
+ case WXPRINT_PRINT:
+ {
+ wxPrinter printer;
+ MyPrintout printout("My printout");
+ printer.Print(this, &printout, TRUE);
+ break;
+ }
+ case WXPRINT_PREVIEW:
+ {
+ // Pass two printout objects: for preview, and possible printing.
+ wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout);
+ wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", 100, 100, 600, 650);
+ frame->Centre(wxBOTH);
+ frame->Initialize();
+ frame->Show(TRUE);
+ break;
+ }
+ case WXPRINT_PRINT_SETUP:
+ {
+ wxPrintDialog printerDialog(this);
+ printerDialog.GetPrintData().SetSetupDialog(TRUE);
+ printerDialog.Show(TRUE);
+ break;
+ }
+\end{verbatim}
+
+
--- /dev/null
+\section{\class{wxTreeCtrl}}\label{wxtreectrl}
+
+A tree control presents information as a hierarchy, with items that may be expanded
+to show further items. Items in a tree control are referenced by long integer handles.
+
+To intercept events from a tree control, use the event table macros described in \helpref{wxTreeEvent}{wxtreeevent}.
+
+\wxheading{Derived from}
+
+\helpref{wxControl}{wxcontrol}\\
+\helpref{wxWindow}{wxwindow}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxTR\_HAS\_BUTTONS}}{Use this style to show + and - buttons to the
+left of parent items.}
+\twocolitem{\windowstyle{wxTR\_EDIT\_LABELS}}{Use this style if you wish the user to be
+able to edit labels in the tree control.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{wxTreeCtrl overview}{wxtreectrloverview}, \helpref{wxListBox}{wxlistbox}, \helpref{wxListCtrl}{wxlistctrl},\rtfsp
+\helpref{wxImageList}{wximagelist}, \helpref{wxTreeEvent}{wxtreeevent}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTreeCtrl::wxTreeCtrl}\label{wxtreectrlconstr}
+
+\func{}{wxTreeCtrl}{\void}
+
+Default constructor.
+
+\func{}{wxTreeCtrl}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxTR\_HAS\_BUTTONS}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listCtrl"}}
+
+Constructor, creating and showing a tree control.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window. Must not be NULL.}
+
+\docparam{id}{Window identifier. A value of -1 indicates a default value.}
+
+\docparam{pos}{Window position.}
+
+\docparam{size}{Window size. If the default size (-1, -1) is specified then the window is sized
+appropriately.}
+
+\docparam{style}{Window style. See \helpref{wxTreeCtrl}{wxtreectrl}.}
+
+\docparam{validator}{Window validator.}
+
+\docparam{name}{Window name.}
+
+\wxheading{See also}
+
+\helpref{wxTreeCtrl::Create}{wxtreectrlcreate}, \helpref{wxValidator}{wxvalidator}
+
+\membersection{wxTreeCtrl::\destruct{wxTreeCtrl}}
+
+\func{void}{\destruct{wxTreeCtrl}}{\void}
+
+Destructor, destroying the list control.
+
+\membersection{wxTreeCtrl::Create}\label{wxtreectrlcreate}
+
+\func{bool}{wxTreeCtrl}{\param{wxWindow*}{ parent}, \param{const wxWindowID}{ id},\rtfsp
+\param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
+\param{const long}{ style = wxTR\_HAS\_BUTTONS}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``listCtrl"}}
+
+Creates the tree control. See \helpref{wxTreeCtrl::wxTreeCtrl}{wxtreectrlconstr} for further details.
+
+\membersection{wxTreeCtrl::DeleteAllItems}\label{wxtreectrldeleteallitems}
+
+\func{bool}{DeleteAllItems}{\void}
+
+Deletes all the items in the control.
+
+\membersection{wxTreeCtrl::DeleteItem}\label{wxtreectrldeleteitem}
+
+\func{bool}{DeleteItem}{\param{const long }{item}}
+
+Deletes the specified item.
+
+\membersection{wxTreeCtrl::Edit}\label{wxtreectrledit}
+
+\func{wxTextCtrl\&}{Edit}{\param{const long }{item}}
+
+Starts editing the label of the given item, returning the text control that the tree control uses for editing.
+
+\membersection{wxTreeCtrl::EnsureVisible}\label{wxtreectrlensurevisible}
+
+\func{bool}{EnsureVisible}{\param{const long }{item}}
+
+Scrolls and/or expands items to ensure that the given item is visible.
+
+\membersection{wxTreeCtrl::ExpandItem}\label{wxtreectrlexpanditem}
+
+\func{bool}{ExpandItem}{\param{const long }{item}, \param{const int }{action}}
+
+Expands the given item.
+
+{\it action} may be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxTREE\_EXPAND\_EXPAND}}{Expands the item.}
+\twocolitem{\windowstyle{wxTREE\_EXPAND\_COLLAPSE}}{Collapses the item.}
+\twocolitem{\windowstyle{wxTREE\_EXPAND\_COLLAPSE\_RESET}}{Collapses the item and removes the child items.}
+\twocolitem{\windowstyle{wxTREE\_EXPAND\_TOGGLE}}{Expands if the item is collapsed, collapses if the item is expanded.}
+\end{twocollist}
+
+\membersection{wxTreeCtrl::GetChild}\label{wxtreectrlgetchild}
+
+\constfunc{long}{GetChild}{\param{const long }{item}}
+
+Call this function to retrieve the tree view item that is the first child of the item specified by {\it item}.
+
+\membersection{wxTreeCtrl::GetCount}\label{wxtreectrlgetcount}
+
+\constfunc{int}{GetCount}{\void}
+
+Returns the number of items in the control.
+
+\membersection{wxTreeCtrl::GetEditControl}\label{wxtreectrlgeteditcontrol}
+
+\constfunc{wxTextCtrl\&}{GetEditControl}{\void}
+
+Returns the edit control used to edit a label.
+
+\membersection{wxTreeCtrl::GetFirstVisibleItem}\label{wxtreectrlgetfirstvisibleitem}
+
+\constfunc{long}{GetFirstVisibleItem}{\void}
+
+Returns the first visible item.
+
+\membersection{wxTreeCtrl::GetImageList}\label{wxtreectrlgetimagelist}
+
+\constfunc{wxImageList*}{GetImageList}{\param{const int }{which = wxIMAGE\_LIST\_NORMAL}}
+
+Returns the specified image list. {\it which} may be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_NORMAL}}{The normal (large icon) image list.}
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_SMALL}}{The small icon image list.}
+\twocolitem{\windowstyle{wxIMAGE\_LIST\_STATE}}{The user-defined state image list (unimplemented).}
+\end{twocollist}
+
+\membersection{wxTreeCtrl::GetIndent}\label{wxtreectrlgetindent}
+
+\constfunc{int}{GetIndent}{\void}
+
+Returns the current tree control indentation.
+
+\membersection{wxTreeCtrl::GetItem}\label{wxtreectrlgetitem}
+
+\constfunc{bool}{GetItem}{\param{wxTreeItem\& }{info}}
+
+Gets information about the item. See \helpref{wxTreeCtrl::SetItem}{wxtreectrlsetitem} for more
+information.
+
+\membersection{wxTreeCtrl::GetItemData}\label{wxtreectrlgetitemdata}
+
+\constfunc{long}{GetItemData}{\param{const long }{item}}
+
+Returns the client data associated with the item, if any.
+
+\membersection{wxTreeCtrl::GetItemRect}\label{wxtreectrlgetitemrect}
+
+\constfunc{bool}{GetItemRect}{\param{const long }{item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = FALSE}}
+
+Returns the position and size of the rectangle bounding the item.
+
+\membersection{wxTreeCtrl::GetItemState}\label{wxtreectrlgetitemstate}
+
+\constfunc{int}{GetItemState}{\param{const long }{item}, \param{const long }{stateMask}}
+
+Gets the item state. For a list of state flags, see \helpref{wxTreeCtrl::SetItem}{wxtreectrlsetitem}.
+
+\membersection{wxTreeCtrl::GetItemText}\label{wxtreectrlgetitemtext}
+
+\constfunc{wxString}{GetItemText}{\param{const long }{item}}
+
+Returns the item label.
+
+\membersection{wxTreeCtrl::GetNextItem}\label{wxtreectrlgetnextitem}
+
+\constfunc{long}{GetNextItem}{\param{const long }{item}, \param{int }{code}}
+
+Searches for an item using the given criterion, starting from {\it item}.
+
+Returns the item or 0 if unsuccessful.
+
+{\it code} can be one of:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTREE\_NEXT\_CARET}{Retrieves the currently selected item.}
+\twocolitem{wxTREE\_NEXT\_CHILD}{Retrieves the first child item. The hItem parameter must be NULL.}
+\twocolitem{wxTREE\_NEXT\_DROPHILITE}{Retrieves the item that is the target of a drag-and-drop operation.}
+\twocolitem{wxTREE\_NEXT\_FIRSTVISIBLE}{Retrieves the first visible item.}
+\twocolitem{wxTREE\_NEXT\_NEXT}{Retrieves the next sibling item.}
+\twocolitem{wxTREE\_NEXT\_NEXTVISIBLE}{Retrieves the next visible item that follows the specified item.}
+\twocolitem{wxTREE\_NEXT\_PARENT}{Retrieves the parent of the specified item.}
+\twocolitem{wxTREE\_NEXT\_PREVIOUS}{Retrieves the previous sibling item.}
+\twocolitem{wxTREE\_NEXT\_PREVIOUSVISIBLE}{Retrieves the first visible item that precedes the specified item.}
+\twocolitem{wxTREE\_NEXT\_ROOT}{Retrieves the first child item of the root item of which the specified item is a part.}
+\end{twocollist}
+
+\membersection{wxTreeCtrl::GetNextVisibleItem}\label{wxtreectrlgetnextvisibleitem}
+
+\constfunc{long}{GetNextVisibleItem}{\param{const long }{item}}
+
+Returns the next visible item.
+
+\membersection{wxTreeCtrl::GetParent}\label{wxtreectrlgetparent}
+
+\constfunc{long}{GetParent}{\param{const long }{item}}
+
+Returns the item's parent.
+
+\membersection{wxTreeCtrl::GetRootItem}\label{wxtreectrlgetrootitem}
+
+\constfunc{long}{GetRootItem}{\void}
+
+Returns the root item for the tree control.
+
+\membersection{wxTreeCtrl::GetSelection}\label{wxtreectrlgetselection}
+
+\constfunc{long}{GetSelection}{\void}
+
+Returns the selection, or 0 if there is no selection.
+
+\membersection{wxTreeCtrl::HitTest}\label{wxtreectrlhittest}
+
+\func{long}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}}
+
+Calculates which (if any) item is under the given point, returning extra information
+in {\it flags}. {\it flags} is a bitlist of the following:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTREE\_HITTEST\_ABOVE}{Above the client area.}
+\twocolitem{wxTREE\_HITTEST\_BELOW}{Below the client area.}
+\twocolitem{wxTREE\_HITTEST\_NOWHERE}{In the client area but below the last item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMBUTTON}{On the button associated with an item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMICON}{On the bitmap associated with an item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMINDENT}{In the indentation associated with an item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMLABEL}{On the label (string) associated with an item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMRIGHT}{In the area to the right of an item.}
+\twocolitem{wxTREE\_HITTEST\_ONITEMSTATEICON}{On the state icon for a tree view item that is in a user-defined state.}
+\twocolitem{wxTREE\_HITTEST\_TOLEFT}{To the right of the client area.}
+\twocolitem{wxTREE\_HITTEST\_TORIGHT}{To the left of the client area.}
+\end{twocollist}
+
+\membersection{wxTreeCtrl::InsertItem}\label{wxtreectrlinsertitem}
+
+\func{long}{InsertItem}{\param{const long }{parent}, \param{wxTreeItem\& }{info}, \param{const long }{insertAfter = wxTREE\_INSERT\_LAST}}
+
+Inserts an item. For more information on {\it info}, see \helpref{wxTreeCtrl::SetItem}{wxtreectrlsetitem}.
+
+\func{long}{InsertItem}{\param{const long }{parent}, \param{const wxString\& }{label}, \param{const int }{image = -1}, \param{const int }{selImage = -1}, \param{const long }{insertAfter = wxTREE\_INSERT\_LAST}}
+
+Inserts an item.
+
+If {\it image} > -1 and {\it selImage} is -1, the same image is used for
+both selected and unselected items.
+
+\membersection{wxTreeCtrl::ItemHasChildren}\label{wxtreectrlitemhaschildren}
+
+\constfunc{bool}{ItemHasChildren}{\param{const long }{item}}
+
+Returns TRUE if the item has children.
+
+\membersection{wxTreeCtrl::ScrollTo}\label{wxtreectrlscrollto}
+
+\func{bool}{ScrollTo}{\param{const long }{item}}
+
+selects the specified item and scrolls the item into view,
+
+\membersection{wxTreeCtrl::SelectItem}\label{wxtreectrlselectitem}
+
+\func{bool}{SelectItem}{\param{const long }{item}}
+
+Selects the given item.
+
+\membersection{wxTreeCtrl::SetIndent}\label{wxtreectrlsetindent}
+
+\func{void}{SetIndent}{\param{int }{indent}}
+
+Sets the indentation for the tree control.
+
+\membersection{wxTreeCtrl::SetImageList}\label{wxtreectrlsetimagelist}
+
+\func{void}{SetImageList}{\param{wxImageList*}{ imageList}, \param{const int }{which = wxIMAGE\_LIST\_NORMAL}}
+
+Sets the image list. {\it which} should be one of wxIMAGE\_LIST\_NORMAL, wxIMAGE\_LIST\_SMALL and
+wxIMAGE\_LIST\_STATE.
+
+\membersection{wxTreeCtrl::SetItem}\label{wxtreectrlsetitem}
+
+\func{bool}{SetItem}{\param{wxTreeItem\& }{info}}
+
+Sets the properties of the item.
+
+The members of wxTreeItem are as follows:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{m\_mask}{A bitlist specifying the valid members. See below for mask flags.}
+\twocolitem{m\_itemId}{The item identifier.}
+\twocolitem{m\_state}{The item state. See below for state flags.}
+\twocolitem{m\_stateMask}{A bitlist specifying the valid contents of {\it m\_state}. These flags
+are taken from the same set of symbols as {\it m\_state}.}
+\twocolitem{m\_text}{The item label.}
+\twocolitem{m\_image}{The item image index (an index into the appropriate image list).}
+\twocolitem{m\_selectedImage}{The item selected index (an index into the appropriate image list).}
+\twocolitem{m\_children}{The number of child items that this item has.}
+\twocolitem{m\_data}{The application-defined data associated with this item.}
+\end{twocollist}
+
+Valid mask flags are:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTREE\_MASK\_HANDLE}{The {\it m\_itemId} member is valid.}
+\twocolitem{wxTREE\_MASK\_STATE}{The {\it m\_state} member is valid.}
+\twocolitem{wxTREE\_MASK\_TEXT}{The {\it m\_text} member is valid.}
+\twocolitem{wxTREE\_MASK\_IMAGE}{The {\it m\_image} member is valid.}
+\twocolitem{wxTREE\_MASK\_SELECTED\_IMAGE}{The {\it m\_selectedImage} member is valid.}
+\twocolitem{wxTREE\_MASK\_CHILDREN}{The {\it m\_children} member is valid.}
+\twocolitem{wxTREE\_MASK\_DATA}{The {\it m\_data} member is valid.}
+\end{twocollist}
+
+Valid state and state mask flags are:
+
+\twocolwidtha{5cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{wxTREE\_STATE\_BOLD}{The label is emboldened.}
+\twocolitem{wxTREE\_STATE\_DROPHILITED}{The item indicates it is a drop target.}
+\twocolitem{wxTREE\_STATE\_EXPANDED}{The item is expanded.}
+\twocolitem{wxTREE\_STATE\_EXPANDEDONCE}{The item's list of child items has been expanded at least once.}
+\twocolitem{wxTREE\_STATE\_FOCUSED}{The item has the focus, so it is surrounded by a standard focus rectangle.
+Only one item can have the focus.}
+\twocolitem{wxTREE\_STATE\_SELECTED}{The item is selected.}
+\twocolitem{wxTREE\_STATE\_CUT}{The item is selected as part of a cut and paste operation.}
+\end{twocollist}
+
+\membersection{wxTreeCtrl::SetItemImage}\label{wxtreectrlsetitemimage}
+
+\func{bool}{SetItemImage}{\param{const long }{item}, \param{const int }{image}, \param{const int }{selImage}}
+
+Sets the item image and selected image. These are indices into the assciated image list.
+
+\membersection{wxTreeCtrl::SetItemState}\label{wxtreectrlsetitemstate}
+
+\func{bool}{SetItemState}{\param{const long }{item}, \param{const long }{state}, \param{const long }{stateMask}}
+
+Sets the item state. See \helpref{wxTreeCtrl::SetItem}{wxtreectrlsetitem} for valid state and state mask flags.
+
+\membersection{wxTreeCtrl::SetItemText}\label{wxtreectrlsetitemtext}
+
+\func{void}{SetItemText}{\param{const long }{item}, \param{const wxString\& }{text}}
+
+Sets the item label.
+
+\membersection{wxTreeCtrl::SetItemData}\label{wxtreectrlsetitemdata}
+
+\func{bool}{SetItemData}{\param{const long }{item}, \param{long }{data}}
+
+Sets the item client data.
+
+\membersection{wxTreeCtrl::SortChildren}\label{wxtreectrlsortchildren}
+
+\func{bool}{SortChildren}{\param{const long }{item}}
+
+Sorts the children of the given item in ascending alphabetical order.
+
--- /dev/null
+\section{\class{wxTreeEvent}}\label{wxtreeevent}
+
+A tree event holds information about events associated with wxTreeCtrl objects.
+
+\wxheading{Derived from}
+
+\helpref{wxCommandEvent}{wxcommandevent}\\
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process input from a tree control, use these event handler macros to direct input to member
+functions that take a wxTreeEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_TREE\_BEGIN\_DRAG(id, func)}}{Begin dragging with the left mouse button.}
+\twocolitem{{\bf EVT\_TREE\_BEGIN\_RDRAG(id, func)}}{Begin dragging with the right mouse button.}
+\twocolitem{{\bf EVT\_TREE\_BEGIN\_LABEL\_EDIT(id, func)}}{Begin editing a label.}
+\twocolitem{{\bf EVT\_TREE\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label.}
+\twocolitem{{\bf EVT\_TREE\_DELETE\_ITEM(id, func)}}{Delete an item.}
+\twocolitem{{\bf EVT\_TREE\_GET\_INFO(id, func)}}{Request information from the application.}
+\twocolitem{{\bf EVT\_TREE\_SET\_INFO(id, func)}}{Information is being supplied.}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_EXPANDED(id, func)}}{Parent has been expanded.}
+\twocolitem{{\bf EVT\_TREE\_ITEM\_EXPANDING(id, func)}}{Parent is being expanded.}
+\twocolitem{{\bf EVT\_TREE\_SEL\_CHANGED(id, func)}}{Selection has changed.}
+\twocolitem{{\bf EVT\_TREE\_SEL\_CHANGING(id, func)}}{Selection is changing.}
+\twocolitem{{\bf EVT\_TREE\_KEY\_DOWN(id, func)}}{A key has been pressed.}
+\end{twocollist}%
+
+\wxheading{See also}
+
+\helpref{wxTreeCtrl}{wxtreectrl}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTreeEvent::wxTreeEvent}
+
+\func{}{wxTreeEvent}{\param{WXTYPE }{commandType = 0}, \param{int }{id = 0}}
+
+Constructor.
+
+\membersection{wxTreeEvent::m\_code}
+
+\member{int}{m\_code}
+
+Key code if the event is a keypress event.
+
+\membersection{wxTreeEvent::m\_itemIndex}
+
+\member{wxTreeItem}{m\_item}
+
+The item.
+
+\membersection{wxTreeEvent::m\_oldItem}
+
+\member{long}{m\_oldItem}
+
+The old item index.
+
+\membersection{wxTreeEvent::m\_pointDrag}
+
+\member{wxPoint}{m\_pointDrag}
+
+The position of the mouse pointer if the event is a drag event.
+
--- /dev/null
+\section{The wxWindows resource system}\label{resourceformats}
+
+From version 1.61, wxWindows has an optional {\it resource file} facility,
+which allows separation of dialog, menu, bitmap and icon specifications
+from the application code.
+
+It is similar in principle to the Windows resource file (whose ASCII form is
+suffixed .RC and whose binary form is suffixed .RES). The wxWindows resource
+file is currently ASCII-only, suffixed .WXR. Note that under Windows,
+the .WXR file does not {\it replace} the native Windows resource file,
+it merely supplements it. There is no existing native resource format in X
+(except for the defaults file, which has limited expressive power).
+
+Using wxWindows resources for panels and dialogs has an effect on how
+you deal with panel item callbacks: you can't specify a callback function in
+a resource file, so how do you achieve the same effect as with programmatic
+panel construction? The solution is similar to that adopted by Windows, which
+is to use the {\it parent} panel or dialog to intercept user events.
+
+From 1.61, wxWindows routes panel item events that do not have a callback
+to the \helpref{OnCommand}{wxwindowoncommand} member of the panel (or dialog). So, to use
+panel or dialog resources, you need to derive a new class and override the
+default (empty) OnCommand member. The first argument is a reference
+to a wxWindow, and the second is a reference to a wxCommandEvent. Check the
+name of the panel item that's generating an event by using the \helpref{wxWindow::GetName}{wxwindowgetname}\rtfsp
+function and a string comparison function such as \helpref{wxStringEq}{wxstringeq}.
+You may need to cast the reference to an appropriate specific type to perform
+some operations.
+
+To obtain a pointer to a panel item when you only have the name (for example,
+when you need to set a value of a text item from outside of the {\bf OnCommand} function),
+use the function \helpref{wxFindWindowByName}{wxfindwindowbyname}.
+
+For details of functions for manipulating resource files and loading
+user interface elements, see \helpref{wxWindows resource functions}{resourcefuncs}.
+
+\subsection{The format of a .WXR file}
+
+A wxWindows resource file may look a little odd at first. It's C++
+compatible, comprising mostly of static string variable declarations with
+PrologIO syntax within the string.
+
+Here's a sample .WXR file:
+
+\begin{verbatim}
+/*
+ * wxWindows Resource File
+ * Written by wxBuilder
+ *
+ */
+
+#include "noname.ids"
+
+static char *aiai_resource = "bitmap(name = 'aiai_resource',\
+ bitmap = ['aiai', wxBITMAP_TYPE_BMP_RESOURCE, 'WINDOWS'],\
+ bitmap = ['aiai.xpm', wxBITMAP_TYPE_XPM, 'X']).";
+
+static char *menuBar11 = "menu(name = 'menuBar11',\
+ menu = \
+ [\
+ ['&File', 1, '', \
+ ['&Open File', 2, 'Open a file'],\
+ ['&Save File', 3, 'Save a file'],\
+ [],\
+ ['E&xit', 4, 'Exit program']\
+ ],\
+ ['&Help', 5, '', \
+ ['&About', 6, 'About this program']\
+ ]\
+ ]).";
+
+static char *project_resource = "icon(name = 'project_resource',\
+ icon = ['project', wxBITMAP_TYPE_ICO_RESOURCE, 'WINDOWS'],\
+ icon = ['project_data', wxBITMAP_TYPE_XBM, 'X']).";
+
+static char *panel3 = "dialog(name = 'panel3',\
+ style = '',\
+ title = 'untitled',\
+ button_font = [14, 'wxSWISS', 'wxNORMAL', 'wxBOLD', 0],\
+ label_font = [10, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0],\
+ x = 0, y = 37, width = 292, height = 164,\
+ control = [wxButton, 'OK', '', 'button5', 23, 34, -1, -1, 'aiai_resource'],\
+ control = [wxMessage, 'A Label', '', 'message7', 166, 61, -1, -1, 'aiai_resource'],\
+ control = [wxText, 'Text', 'wxVERTICAL_LABEL', 'text8', 24, 110, -1, -1]).";
+\end{verbatim}
+
+As you can see, C++-style comments are allowed, and apparently include files
+are supported too: but this is a special case, where the included file
+is a file of defines shared by the C++ application code and resource file
+to relate identifiers (such as FILE\_OPEN) to integers.
+
+Each {\it resource object} is of standard PrologIO syntax, that is,
+an object name such as {\bf dialog} or {\bf icon}, then an open
+parenthesis, a list of comma-delimited attribute/value pairs, a closing
+parenthesis, and a full stop. Backslashes are required to escape newlines,
+for the benefit of C++ syntax. If double quotation marks are used to
+delimit strings, they need to be escaped with backslash within a C++ string
+(so it's easier to use single quotation marks instead).
+
+\normalbox{{\it A note on PrologIO string syntax:} A string that begins with
+an alphabetic character, and contains only alphanumeric characters,
+hyphens and underscores, need not be quoted at all. Single quotes and double
+quotes may be used to delimit more complex strings. In fact, single-quoted
+and no-quoted strings are actually called {\it words}, but are treated
+as strings for the purpose of the resource system.}
+
+A resource file like this is typically included in the application main file,
+as if it were a normal C++ file. This eliminates the need for a separate
+resource file to be distributed alongside the executable. However, the
+resource file can be dynamically loaded if desired (for example by a non-C++
+language such as CLIPS, Prolog or Python).
+
+Once included, the resources need to be `parsed' (interpreted), because
+so far the data is just a number of static string variables. The function\rtfsp
+{\bf ::wxResourceParseData} is called early on in initialization of the application
+(usually in {\bf wxApp::OnInit}) with a variable as argument. This may need to be
+called a number of times, one for each variable. However, more than one
+resource `object' can be stored in one string variable at a time, so you can
+get all your resources into one variable if you want to.
+
+{\bf ::wxResourceParseData} parses the contents of the resource, ready for use
+by functions such as {\bf ::wxResourceCreateBitmap} and {\bf wxPanel::LoadFromResource}.
+
+If a wxWindows resource object (such as a bitmap resource) refers to a
+C++ data structure, such as static XBM or XPM data, a further call ({\bf
+::wxResourceRegisterBitmapData}) needs to be made on initialization to tell
+wxWindows about this data. The wxWindows resource object will refer to a
+string identifier, such as `project\_data' in the example file above.
+This identifier will be looked up in a table to get the C++ static data
+to use for the bitmap or icon.
+
+In the C++ fragment below, the WXR resource file is included,
+and appropriate resource initialization is carried out in {\bf OnInit}.
+Note that at this stage, no actual wxWindows dialogs, menus, bitmaps or
+icons are created; their `templates' are merely being set up for later
+use.
+
+\begin{verbatim}
+/*
+ * File: noname.cc
+ * Purpose: main application module, generated by wxBuilder.
+ */
+
+#include "wx.h"
+#include "wx_help.h"
+#include "noname.h"
+
+// Includes the dialog, menu etc. resources
+#include "noname.wxr"
+
+// Includes XBM data
+#include "project.xbm"
+
+// Declare an instance of the application: allows the program to start
+AppClass theApp;
+
+// Called to initialize the program
+wxFrame *AppClass::OnInit(void)
+{
+#ifdef wx_x
+ wxResourceRegisterBitmapData("project_data", project_bits, project_width, project_height);
+#endif
+ wxResourceParseData(menuBar11);
+ wxResourceParseData(aiai_resource);
+ wxResourceParseData(project_resource);
+ wxResourceParseData(panel3);
+ ...
+}
+\end{verbatim}
+
+
+\subsection{Dialog resource format}
+
+A dialog resource object may be used for either panels or dialog boxes, and
+consists of the following attributes. In the following, a {\it font specification}\rtfsp
+is a list consisting of point size, family, style, weight, underlined, optional facename.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitemruled{Attribute}{Value}
+\twocolitem{name}{The name of the resource.}
+\twocolitem{style}{Optional dialog box or panel window style.}
+\twocolitem{title}{The title of the dialog box (unused if a panel).}.
+\twocolitem{modal}{Whether modal: 1 if modal, 0 if modeless, absent if a panel resource.}
+\twocolitem{button\_font}{The font used for control buttons: a list comprising point size (integer),
+family (string), font style (string), font weight (string) and underlining (0 or 1).}
+\twocolitem{label\_font}{The font used for control labels: a list comprising point size (integer),
+family (string), font style (string), font weight (string) and underlining (0 or 1).}
+\twocolitem{x}{The x position of the dialog or panel.}
+\twocolitem{y}{The y position of the dialog or panel.}
+\twocolitem{width}{The width of the dialog or panel.}
+\twocolitem{height}{The height of the dialog or panel.}
+\twocolitem{background\_colour}{The background colour of the dialog or panel. Only valid if the style includes wxUSER\_COLOURS.}
+\twocolitem{label\_colour}{The default label colour for the children of the dialog or panel. Only valid if the style includes wxUSER\_COLOURS.}
+\twocolitem{button\_colour}{The default button text colour for the children of the dialog or panel. Only valid if the style includes wxUSER\_COLOURS.}
+\twocolitem{label\_font}{Font spec}
+\twocolitem{button\_font}{Font spec}
+\end{twocollist}
+
+Then comes zero or more attributes named `control' for each control
+(panel item) on the dialog or panel. The value is a list of further
+elements. In the table below, the names in the first column correspond to
+the first element of the value list, and the second column details the
+remaining elements of the list.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitemruled{Control}{Values}
+\twocolitem{wxButton}{title (string), window style (string), name (string), x, y, width, height, button bitmap resource (optional string), button font spec}
+\twocolitem{wxCheckBox}{title (string), window style (string), name (string), x, y, width, height, default value (optional integer, 1 or 0), label font spec}
+\twocolitem{wxChoice}{title (string), window style (string), name (string), x, y, width, height, values (optional list of strings), label font spec, button font spec}
+\twocolitem{wxComboBox}{title (string), window style (string), name (string), x, y, width, height, default text value, values (optional list of strings), label font spec, button font spec}
+\twocolitem{wxGauge}{title (string), window style (string), name (string), x, y, width, height, value (optional integer), range (optional integer), label font spec, button font spec}
+\twocolitem{wxGroupBox}{title (string), window style (string), name (string), x, y, width, height, label font spec}
+\twocolitem{wxListBox}{title (string), window style (string), name (string), x, y, width, height, values (optional list of strings), multiple (optional string, wxSINGLE or wxMULTIPLE),
+label font spec, button font spec}
+\twocolitem{wxMessage}{title (string), window style (string), name (string), x, y, width, height, message bitmap resource (optional string), label font spec}
+\twocolitem{wxMultiText}{title (string), window style (string), name (string), x, y, width, height, default value (optional string),
+label font spec, button font spec}
+\twocolitem{wxRadioBox}{title (string), window style (string), name (string), x, y, width, height, values (optional list of strings), number of rows or cols,
+label font spec, button font spec}
+\twocolitem{wxRadioButton}{title (string), window style (string), name (string), x, y, width, height, default value (optional integer, 1 or 0), label font spec}
+\twocolitem{wxScrollBar}{title (string), window style (string), name (string), x, y, width, height, value (optional integer),
+page length (optional integer), object length (optional integer), view length (optional integer)}
+\twocolitem{wxSlider}{title (string), window style (string), name (string), x, y, width, height, value (optional integer), minimum (optional integer), maximum (optional integer),
+label font spec, button font spec}
+\twocolitem{wxText}{title (string), window style (string), name (string), x, y, width, height, default value (optional string),
+label font spec, button font spec}
+\end{twocollist}
+
+\subsection{Menubar resource format}
+
+A menubar resource object consists of the following attributes.
+
+\begin{twocollist}\itemsep=0pt
+\twocolitemruled{Attribute}{Value}
+\twocolitem{name}{The name of the menubar resource.}
+\twocolitem{menu}{A list containing all the menus, as detailed below.}
+\end{twocollist}
+
+The value of the {\bf menu} attribute is a list of menu item specifications, where each menu
+item specification is itself a list comprising:
+
+\begin{itemize}\itemsep=0pt
+\item title (a string)
+\item menu item identifier (a string or non-zero integer, see below)
+\item help string (optional)
+\item 0 or 1 for the `checkable' parameter (optional)
+\item optionally, further menu item specifications if this item is a pulldown menu.
+\end{itemize}
+
+If the menu item specification is the empty list ([]), this is interpreted as a menu separator.
+
+If further (optional) information is associated with each menu item in a future release of wxWindows,
+it will be placed after the help string and before the optional pulldown menu specifications.
+
+Note that the menu item identifier must be an integer if the resource is being
+included as C++ code and then parsed on initialisation. Unfortunately,\rtfsp
+\verb$#$define substitution is not performed inside strings, and
+therefore the program cannot know the mapping. However, if the .WXR file
+is being loaded dynamically, wxWindows will attempt to replace string
+identifiers with \verb$#$defined integers, because it is able to parse
+the included \verb$#$defines.
+
+\subsection{Bitmap resource format}
+
+A bitmap resource object consists of a name attribute, and one or more {\bf bitmap} attributes.
+There can be more than one of these to allow specification of bitmaps that are optimum for the
+platform and display.
+
+\begin{itemize}\itemsep=0pt
+\item Bitmap name or filename.
+\item Type of bitmap; for example, wxBITMAP\_TYPE\_BMP\_RESOURCE. See class reference under {\bf wxBitmap} for
+a full list).
+\item Platform this bitmap is valid for; one of WINDOWS, X, MAC and ANY.
+\item Number of colours (optional).
+\item X resolution (optional).
+\item Y resolution (optional).
+\end{itemize}
+
+\subsection{Icon resource format}
+
+An icon resource object consists of a name attribute, and one or more {\bf icon} attributes.
+There can be more than one of these to allow specification of icons that are optimum for the
+platform and display.
+
+\begin{itemize}\itemsep=0pt
+\item Icon name or filename.
+\item Type of icon; for example, wxBITMAP\_TYPE\_ICO\_RESOURCE. See class reference under {\bf wxBitmap} for
+a full list).
+\item Platform this bitmap is valid for; one of WINDOWS, X, MAC and ANY.
+\item Number of colours (optional).
+\item X resolution (optional).
+\item Y resolution (optional).
+\end{itemize}
+
+
+\subsection{Resource format design issues}
+
+The .WXR file format is a recent addition and subject to change.
+The use of an ASCII resource file format may seem rather inefficient, but this
+choice has a number of advantages:
+
+\begin{itemize}\itemsep=0pt
+\item Since it is C++ compatible, it can be included into an application's source code,
+eliminating the problems associated with distributing a separate resource file
+with the executable. However, it can also be loaded dynamically from a file, which will be required
+for non-C++ programs that use wxWindows.
+\item No extra binary file format and separate converter need be maintained for the wxWindows project
+(although others are welcome to add the equivalent of the Windows `rc' resource
+parser and a binary format).
+\item It would be difficult to append a binary resource component onto an executable
+in a portable way.
+\item The file format is essentially the PrologIO object format, for which
+a parser already exists, so parsing is easy. For those programs that use PrologIO
+anyway, the size overhead of the parser is minimal.
+\end{itemize}
+
+The disadvantages of the approach include:
+
+\begin{itemize}\itemsep=0pt
+\item Parsing adds a small execution overhead to program initialization.
+\item Under 16-bit Windows especially, global data is at a premium.
+Using a .RC resource table for some wxWindows resource data may be a partial solution,
+although .RC strings are limited to 255 characters.
+\item Without a resource preprocessor, it is not possible to substitute integers
+for identifiers (so menu identifiers have to be written as integers in the resource
+object, in addition to providing \verb$#$defines for application code convenience).
+\end{itemize}
+
+\subsection{Compiling the resource system}
+
+To enable the resource system, set {\bf USE\_WX\_RESOURCES} to 1 in wx\_setup.h.
+If your wxWindows makefile supports it, set the same name in the makefile to 1.
+
+You will also need to compile the PrologIO utility (not always the easiest
+task): you will need YACC, and LEX (or FLEX). DOS versions of these are
+available on the AIAI ftp site under /pub/wxwin/tools.
+
--- /dev/null
+\section{Run time class information overview}\label{runtimeclassoverview}
+
+Classes: \helpref{wxObject}{wxobject}, \helpref{wxClassInfo}{wxclassinfo}.
+
+One of the failings of C++ is that no run-time information is provided
+about a class and its position in the inheritance hierarchy.
+Another is that instances of a class cannot be created just by knowing the name of a class,
+which makes facilities such as persistent storage hard to implement.
+
+Most C++ GUI frameworks overcome these limitations by means of a set of
+macros and functions and wxWindows (from version 1.62) is no exception.
+Each class that you wish to be known the type system should have
+a macro such as DECLARE\_DYNAMIC\_CLASS just inside the class declaration.
+The macro IMPLEMENT\_DYNAMIC\_CLASS should be in the implementation file.
+
+Variations on these \helpref{macros}{macros} are used for multiple inheritance, and abstract
+classes that cannot be instantiated dynamically or otherwise.
+
+DECLARE\_DYNAMIC\_CLASS inserts a static wxClassInfo declaration into the
+class, initialized by IMPLEMENT\_DYNAMIC\_CLASS. When initialized, the
+wxClassInfo object inserts itself into a linked list (accessed through
+wxClassInfo::first and wxClassInfo::next pointers). The linked list
+is fully created by the time all global initialisation is done.
+
+IMPLEMENT\_DYNAMIC\_CLASS is a macro that not only initialises the static
+wxClassInfo member, but defines a global function capable of creating a
+dynamic object of the class in question. A pointer to this function is
+stored in wxClassInfo, and is used when an object should be created
+dynamically.
+
+wxObject::IsKindOf uses the linked list of wxClassInfo. It takes
+a wxClassInfo argument, so use CLASSINFO(className) to return an
+appropriate wxClassInfo pointer to use in this function.
+
+The function \helpref{wxCreateDynamicObject}{wxcreatedynamicobject} can be used
+to construct a new object of a given type, by supplying a string name.
+If you have a pointer to the wxClassInfo object instead, then you
+can simply call wxClassInfo::CreateObject.
+
+\subsection{wxClassInfo}\label{wxclassinfooverview}
+
+\overview{Run time class information overview}{runtimeclassoverview}
+
+Class: \helpref{wxClassInfo}{wxclassinfo}
+
+This class stores meta-information about classes. An application
+may use macros such as DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS
+to record run-time information about a class, including:
+
+\begin{itemize}\itemsep=0pt
+\item its position in the inheritance hierarchy;
+\item the base class name(s) (up to two base classes are permitted);
+\item a string representation of the class name;
+\item a function that can be called to construct an instance of this class.
+\end{itemize}
+
+The DECLARE\_... macros declare a static wxClassInfo variable in a class, which is initialized
+by macros of the form IMPLEMENT\_... in the implementation C++ file. Classes whose instances may be
+constructed dynamically are given a global constructor function which returns a new object.
+
+You can get the wxClassInfo for a class by using the CLASSINFO macro, e.g. CLASSINFO(wxFrame).
+You can get the wxClassInfo for an object using wxObject::GetClassInfo.
+
+See also \helpref{wxObject}{wxobject} and \helpref{wxCreateDynamicObject}{wxcreatedynamicobject}.
+
+\subsection{Example}
+
+In a header file wx\_frame.h:
+
+\begin{verbatim}
+class wxFrame: public wxWindow
+{
+ DECLARE_DYNAMIC_CLASS(wxFrame)
+
+ private:
+ char *frameTitle;
+ public:
+ ...
+};
+\end{verbatim}
+
+In a C++ file wx\_frame.cc:
+
+\begin{verbatim}
+IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
+
+wxFrame::wxFrame(void)
+{
+...
+}
+\end{verbatim}
+
+
--- /dev/null
+\section{Scrolling overview}\label{scrollingoverview}
+
+Classes: \helpref{wxWindow}{wxwindow}, \helpref{wxScrolledWindow}{wxscrolledwindow}, \helpref{wxIcon}{wxicon}, \helpref{wxScrollBar}{wxscrollbar}.
+
+Scrollbars come in various guises in wxWindows. All windows have the potential
+to show a vertical scrollbar and/or a horizontal scrollbar: it's a basic capability of a window.
+However, in practice, not all windows do make use of scrollbars, such as a single-line wxTextCtrl.
+
+Because any class derived from \helpref{wxWindow}{wxwindow} may have scrollbars,
+there are functions to manipulate the scrollbars and event handlers to intercept
+scroll events. But just because a window generates a scroll event, doesn't mean
+that the window necessarily handles it and physically scrolls the window. The base class
+wxWindow in fact doesn't have any default functionality to handle scroll events.
+If you created a wxWindow object with scrollbars, and then clicked on the scrollbars, nothing
+at all would happen. This is deliberate, because the {\it interpretation} of scroll
+events varies from one window class to another.
+
+\helpref{wxScrolledWindow}{wxscrolledwindow} (formerly wxCanvas) is an example of a window that
+adds functionality to make scrolling really work. It assumes that scrolling happens in
+consistent units, not different-sized jumps, and that page size is represented
+by the visible portion of the window. It's suited to drawing applications, but perhaps
+not so suitable for a sophisticated editor in which the amount scrolled may vary according
+to the size of text on a given line. For this, you would derive from wxWindow and
+implement scrolling yourself. \helpref{wxGrid}{wxgrid} is an example of a class
+that implements its own scrolling, largely because columns and rows can vary in size.
+
+\wxheading{The scrollbar model}
+
+The function \helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar} gives a clue about
+the way a scrollbar is modelled. This function takes the following arguments:
+
+\twocolwidtha{5cm}%
+\begin{twocollist}
+\twocolitem{orientation}{Which scrollbar: wxVERTICAL or wxHORIZONTAL.}
+\twocolitem{position}{The position of the scrollbar in scroll units.}
+\twocolitem{visible}{The size of the visible portion of the scrollbar, in scroll units.}
+\twocolitem{range}{The maximum position of the scrollbar.}
+\twocolitem{refresh}{Whether the scrollbar should be repainted.}
+\end{twocollist}%
+
+{\it orientation} determines whether we're talking about
+the built-in horizontal or vertical scrollbar.
+
+{\it position} is simply the position of the `thumb' (the bit you drag to scroll around).
+It's given in scroll units, and so is relative to the total range of the scrollbar.
+
+{\it visible} gives the number of scroll units that represents the portion of the
+window currently visible. Normally, a scrollbar is capable of indicating this visually
+by showing a different length of thumb.
+
+{\it range} is the maximum value of the scrollbar, where zero is the start
+position. You choose the units that suit you,
+so if you wanted to display text that has 100 lines, you would set this to 100.
+Note that this doesn't have to correspond to the number of pixels scrolled - it's
+up to you how you actually show the contents of the window.
+
+{\it refresh} just indicates whether the scrollbar should be repainted immediately or not.
+
+\wxheading{An example}
+
+Let's say you wish to display 50 lines of text, using the same font.
+The window is sized so that you can only see 16 lines at a time.
+
+You would use:
+
+{\small%
+\begin{verbatim}
+ SetScrollbar(wxVERTICAL, 0, 16, 50);
+\end{verbatim}
+}
+
+Note that with the window at this size, the thumb position can never go
+above 50 minus 16, or 34.
+
+You can determine how many lines are currently visible by dividing the current view
+size by the character height in pixels.
+
+When defining your own scrollbar behaviour, you will always need to recalculate
+the scrollbar settings when the window size changes. You could therefore put your
+scrollbar calculations and SetScrollbar
+call into a function named AdjustScrollbars, which can be called initially and also
+from your \helpref{wxWindow::OnSize}{wxwindowonsize} event handler function.
+
+%\normalbox{{\bf For Windows programmers:} note that scrollbar range in wxWindows has a different meaning
+%from that in Windows. In native Windows scrollbar calls, range is the number of positions that the scrollbar
+%can physically scroll through - in our example above, it would be 34. But it's easier
+%to think in terms of the number of units that the whole scrollbar represents - the virtual
+%window size - which is why wxWindows does it differently.}
+
+
--- /dev/null
+\section{wxSplitterWindow overview}\label{wxsplitterwindowoverview}
+
+Classes: \helpref{wxSplitterWindow}{wxsplitterwindow}
+
+The following screenshot shows the appearance of a splitter window with a vertical split.
+
+$$\image{8cm;0cm}{splitter.eps}$$
+
+The style wxSP\_3D has been used to show a 3D border and 3D sash.
+
+\subsection{Example}
+
+The following fragment shows how to create a splitter window, creating two
+subwindows and hiding one of them.
+
+{\small
+\begin{verbatim}
+ splitter = new wxSplitterWindow(this, 0, 0, 400, 400, wxSP_3D);
+
+ leftCanvas = new MyCanvas(splitter);
+ leftCanvas->SetBackground(wxRED_BRUSH);
+ leftCanvas->SetScrollbars(20, 20, 50, 50, 4, 4);
+
+ rightCanvas = new MyCanvas(splitter);
+ rightCanvas->SetBackground(wxCYAN_BRUSH);
+ rightCanvas->SetScrollbars(20, 20, 50, 50, 4, 4);
+ rightCanvas->Show(FALSE);
+
+ splitter->Initialize(leftCanvas);
+
+ // Set this to prevent unsplitting
+// splitter->SetMinimumPaneSize(20);
+\end{verbatim}
+}
+
+The next fragment shows how the splitter window can be manipulated after creation.
+
+{\small
+\begin{verbatim}
+ void MyFrame::OnSplitVertical(wxCommandEvent& event)
+ {
+ if ( splitter->IsSplit() )
+ splitter->Unsplit();
+ leftCanvas->Show(TRUE);
+ rightCanvas->Show(TRUE);
+ splitter->SplitVertically( leftCanvas, rightCanvas );
+ }
+
+ void MyFrame::OnSplitHorizontal(wxCommandEvent& event)
+ {
+ if ( splitter->IsSplit() )
+ splitter->Unsplit();
+ leftCanvas->Show(TRUE);
+ rightCanvas->Show(TRUE);
+ splitter->SplitHorizontally( leftCanvas, rightCanvas );
+ }
+
+ void MyFrame::OnUnsplit(wxCommandEvent& event)
+ {
+ if ( splitter->IsSplit() )
+ splitter->Unsplit();
+ }
+\end{verbatim}
+}
+
--- /dev/null
+\section{wxString overview}\label{wxstringoverview}
+
+Class: \helpref{wxString}{wxstring}
+
+Strings are used very frequently in most programs. There is no direct support in
+the C++ language for strings. A string class can be useful in many
+situations: it not only makes the code shorter and easier to read, it also
+provides more security, because we don't have to deal with pointer acrobatics.
+
+wxString is available in two versions: a cut-down wxWindows,
+copyright-free version, and a much more powerful GNU-derived version. The default is the
+GNU-derived, fully-featured version, ported and revised by Stefan Hammes.
+
+For backward compatibility most of the member functions of the original
+wxWindows wxString class have been included, except some `dangerous'
+functions.
+
+wxString can be compiled under MSW, UNIX and VMS (see below). The
+function names have been capitalized to be consistent with the wxWindows
+naming scheme.
+
+The reasons for not using the GNU string class directly are:
+
+\begin{itemize}\itemsep=0pt
+\item It is not available on all systems (generally speaking, it is available only on some
+UNIX systems).
+\item We can make changes and extensions to the string class as needed and are not
+forced to use `only' the functionality of the GNU string class.
+\end{itemize}
+
+The GNU code comes with certain copyright restrictions. If you can't
+live with these, you will need to use the cut-down wxString class
+instead, by editing wx\_setup.h and appropriate wxWindows makefiles.
+
+\subsection{Copyright of the original GNU code portion}
+
+Copyright (C) 1988, 1991, 1992 Free Software Foundation, Inc.
+written by Doug Lea (dl@rocky.oswego.edu)
+
+This file is part of the GNU C++ Library. This library is free
+software; you can redistribute it and/or modify it under the terms of
+the GNU Library General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your
+option) any later version. This library 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 PARTICULAR
+PURPOSE. See the GNU Library General Public License for more details.
+You should have received a copy of the GNU Library General Public
+License along with this library; if not, write to the Free Software
+Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+\subsection{Features/Additions/Modifications}
+
+The wxString class offers many string handling functions and a support for
+regular expressions. This gives powerful, easy-to-use pattern-matching functionality.
+See below for a discussion of the GNU features of wxString. See also
+the header file `wxstrgnu.h' which shows all member functions.
+
+As stated above, there are extensions to the wxString class.
+This includes the including of the `old' wxString class member functions.
+Below is a list of the additional member functions:
+
+\begin{itemize}\itemsep=0pt
+\item Access to the internal representation. Should be used with care:
+\begin{verbatim}
+ char* GetData() const;
+\end{verbatim}
+\item To make a copy of 'this' (only for compatibility):
+\begin{verbatim}
+ wxString Copy() const;
+\end{verbatim}
+\item For case sensitive and case insensitive comparisons:
+\begin{verbatim}
+ enum caseCompare {exact, ignoreCase};
+ int CompareTo(const char* cs, caseCompare cmp = exact) const;
+ int CompareTo(const wxString& st, caseCompare cmp = exact) const;
+\end{verbatim}
+
+\item For case sensitive and case insensitive containment check:
+\begin{verbatim}
+ Bool Contains(const char* pat, caseCompare cmp = exact) const;
+ Bool Contains(const wxString& pat, caseCompare cmp = exact) const;
+\end{verbatim}
+
+\item For case sensitive and case insensitive index calculation:
+\begin{verbatim}
+ int Index(const char* pat, int i=0, caseCompare cmp = exact) const;
+ int Index(const wxString& s, int i=0, caseCompare cmp = exact) const;
+\end{verbatim}
+
+\item For element access in addition to the [] operator:
+\begin{verbatim}
+ char& operator()(int); // Indexing with bounds checking
+\end{verbatim}
+
+\item To put something in front of a string:
+\begin{verbatim}
+ wxString& Prepend(const char*); // Prepend a character string
+ wxString& Prepend(const wxString& s);
+ wxString& Prepend(char c, int rep=1); // Prepend c rep times
+\end{verbatim}
+
+\item For concatenation:
+\begin{verbatim}
+ wxString& Append(const char* cs);
+ wxString& Append(const wxString& s);
+ wxString& Append(char c, int rep=1); // Append c rep times
+\end{verbatim}
+
+\item To get the first and last occurrence of a char or string:
+\begin{verbatim}
+ int First(char c) const;
+ int First(const char* cs) const;
+ int First(const wxString& cs) const;
+ int Last(char c) const;
+ int Last(const char* cs) const;
+ int Last(const wxString& cs) const;
+\end{verbatim}
+
+\item To insert something into a string
+\begin{verbatim}
+ wxString& Insert(int pos, const char*);
+ wxString& Insert(int pos, const wxString&);
+\end{verbatim}
+
+\item To remove data (in addition to the 'Del' functions):
+\begin{verbatim}
+ wxString& Remove(int pos); // Remove pos to end of string
+ wxString& Remove(int pos, int n); // Remove n chars starting at pos
+ wxString& RemoveLast(void); // It removes the last char of a string
+\end{verbatim}
+
+\item To replace data:
+\begin{verbatim}
+ wxString& Replace(int pos, int n, const char*);
+ wxString& Replace(int pos, int n, const wxString&);
+\end{verbatim}
+
+\item Alternative names for compatibility:
+\begin{verbatim}
+ void LowerCase(); // Change self to lower-case
+ void UpperCase(); // Change self to upper-case
+\end{verbatim}
+
+\item Edward Zimmermann's additions:
+\begin{verbatim}
+ wxString SubString(int from, int to);
+\end{verbatim}
+
+\item Formatted assignment:
+\begin{verbatim}
+ void sprintf(const char *fmt, ...);
+\end{verbatim}
+
+We do not use the 'sprintf' constructor of the old wxString class anymore,
+because with that constructor, every initialisation with a string would
+go through sprintf and this is not desirable, because sprintf interprets
+some characters. With the above function we can write:
+
+\begin{verbatim}
+ wxString msg; msg.sprintf("Processing item %d\n",count);
+\end{verbatim}
+
+\item Strip chars at the front and/or end.
+This can be useful for trimming strings:
+\begin{verbatim}
+ enum StripType {leading = 0x1, trailing = 0x2, both = 0x3};
+ wxSubString Strip(StripType s=trailing, char c=' ');
+\end{verbatim}
+
+\item Line input:
+Besides the stream I/O functions this function can be used for non-standard
+formatted I/O with arbitrary line terminators.
+\begin{verbatim}
+ friend int Readline(FILE *f, wxString& x,
+ char terminator = '\\n',
+ int discard_terminator = 1);
+\end{verbatim}
+
+\item The GNU wxString class lacks some classification functions:
+\begin{verbatim}
+ int IsAscii() const;
+ int IsWord() const;
+ int IsNumber() const;
+ int IsNull() const;
+ int IsDefined() const;
+\end{verbatim}
+
+\item The meaning of nil has been changed. A wxString x is only nil, if it
+has been declared `wxString x'. In all other cases it is NOT nil. This
+seems to me more logical than to let a `wxString x=""' be nil as it
+was in the original GNU code.
+
+\item {\bf IMPORTANT:}
+the following is a very, very, very ugly macro, but it makes things more
+transparent in cases, where a library function requires a
+(char*) argument. This is especially the case in wxWindows,
+where most char-arguments are (char*) and not (const char*).
+this macro should only be used in such cases and NOT to
+modify the internal data. The standard type conversion function
+of wxString returns a '(const char*)'.
+The conventional way would be 'function((char*)string.Chars())'.
+With the macro this can be achieved by 'function(wxCHARARG(string))'.
+Whis makes it clearer that the usage should be confined
+to arguments. See below for examples.
+
+\begin{verbatim}
+#define wxCHARARG(s) ((char*)(s).Chars())
+\end{verbatim}
+
+\end{itemize}
+
+\subsection{Function calls}
+
+When using wxString objects as parameters to other functions you should
+note the following:
+
+\begin{verbatim}
+void f1(const char *s){}
+void f2(char *s){}
+
+main(){
+ wxString aString;
+ f1(aString); // ok
+ f2(aString); // error
+ f2(wxCHARARG(aString)); // ok
+ printf("%s",aString); // NO compilation error, but a runtime error.
+ printf("%s",aString.Chars()); // ok
+ printf("%s",wxCHARARG(aString)); // ok
+}
+\end{verbatim}
+
+\subsection{Header files}
+
+For DOS and UNIX we use a stub-headerfile {\tt include/base/wxstring.h}\rtfsp
+which includes the two headerfiles in the {\tt contrib/wxstring} directory,
+namely {\tt contrib/wxstring/wxstrgnu.h} and {\tt contrib/wxstring/wxregex.h}.
+If there is a headerfile {\tt contrib/wxstring/wxstring.h}, please
+delete it. It will cause problems in the VMS compilation.
+
+For VMS we have to do an addition due to the not very intelligent inclusion mechanism
+of the VMS C++ compiler:
+In the VMS-Makefile, the include-file search path is augmented with the
+{\tt contrib/wxstring} directory, so that the correct headerfiles
+can be included.
+
+So you have only to specify
+
+\begin{verbatim}
+#define USE_GNU_WXSTRING 1
+\end{verbatim}
+
+in {\tt include/base/wx\_setup.h} to use the wxString class.
+
+\subsection{Test program}
+
+Stefan Hammes has included a test program {\tt test.cc} in the contrib/wxstring directory for many features
+of wxString and wxRegex. It also tests Stefan's extensions.
+When running the compiled program, there should
+be NO assert-errors if everything is OK. When compiling the test
+program, you can ignore warnings about unused variables. They
+occur because Stefan has used a special method of initializing all
+variables to the same start values before each test.
+
+\subsection{Compilers}
+
+wxString and wxRegex have been compiled successfully with the following
+compilers (it should work on nearly every C++ compiler):
+
+\begin{itemize}\itemsep=0pt
+\item PC MS-Visual C++ 1.0, 1.5
+\item UNIX gcc v2.6.3
+\item UNIX Sun SunPro compiler under Solaris 2.x
+\item VMS DEC C++ compiler (on VAX and AXP)
+\end{itemize}
+
+Warnings about type conversion or assignments can be ignored.
+
+\subsection{GNU Documentation}
+
+Below is the original GNU wxString and wxRegex
+documentation. It describes most functions of the classes.
+The function names have been capitalized to be consistent with
+the wxWindows naming scheme. The examples are integrated into the test program.
+
+Copyright (C) 1988, 1991, 1992 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the section entitled "GNU Library General Public License" is
+included exactly as in the original, and provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that the section entitled "GNU Library General Public
+License" and this permission notice may be included in translations
+approved by the Free Software Foundation instead of in the original
+English.
+
+\subsubsection{The wxString class}
+
+The `wxString' class is designed to extend GNU C++ to support string
+processing capabilities similar to those in languages like Awk. The
+class provides facilities that ought to be convenient and efficient
+enough to be useful replacements for `char*' based processing via the C
+string library (i.e., `strcpy, strcmp,' etc.) in many applications.
+Many details about wxString representations are described in the
+Representation section.
+
+A separate `wxSubString' class supports substring extraction and
+modification operations. This is implemented in a way that user
+programs never directly construct or represent substrings, which are
+only used indirectly via wxString operations.
+
+Another separate class, `wxRegex' is also used indirectly via wxString
+operations in support of regular expression searching, matching, and the
+like. The wxRegex class is based entirely on the GNU Emacs regex
+functions. See \helpref{Regular Expressions}{regularexpressions}
+for a full explanation of regular expression syntax. (For
+implementation details, see the internal documentation in files
+{\tt wxregex.h} and {\tt wxregex.cc}).
+
+\subsubsection{Constructor examples}
+
+Strings are initialized and assigned as in the following examples:
+
+{\tt wxString x;}
+Set x to the nil string. This is different from the original GNU code
+which sets a strings also to nil when it is assign 0 or "".
+
+{\tt wxString x = "Hello"; wxString y("Hello");}
+Set x and y to a copy of the string "Hello".
+
+{\tt wxString x = 'A'; wxString y('A');}
+Set x and y to the string value "A".
+
+{\tt wxString u = x; wxString v(x);}
+Set u and v to the same string as wxString x
+
+{\tt wxString u = x.At(1,4); wxString v(x.At(1,4));}
+Set u and v to the length 4 substring of x starting at position 1
+(counting indexes from 0).
+
+{\tt wxString x("abc", 2);}
+Sets x to "ab", i.e., the first 2 characters of "abc".
+
+There are no directly accessible forms for declaring wxSubString
+variables.
+
+The declaration \verb$wxRegex r("[a-zA-Z_][a-zA-Z0-9_]*");$ creates
+compiled regular expression suitable for use in wxString operations
+described below. (In this case, one that matches any C++ identifier).
+The first argument may also be a wxString. Be careful in distinguishing
+the role of backslashes in quoted GNU C++ `char*' constants versus those
+in Regexes. For example, a wxRegex that matches either one or more tabs
+or all strings beginning with "ba" and ending with any number of
+occurrences of "na" could be declared as
+
+\begin{verbatim}
+ wxRegex r = "\\(\t+\\)\\|\\(ba\\(na\\)*\\)"
+\end{verbatim}
+
+Note that only one backslash is needed
+to signify the tab, but two are needed for the parenthesization and
+virgule, since the GNU C++ lexical analyzer decodes and strips
+backslashes before they are seen by wxRegex.
+
+There are three additional optional arguments to the wxRegex
+constructor that are less commonly useful:
+
+{\tt fast (default 0)}
+`fast' may be set to true (1) if the wxRegex should be
+"fast-compiled". This causes an additional compilation step that
+is generally worthwhile if the wxRegex will be used many times.
+
+{\tt bufsize (default max(40, length of the string))}
+This is an estimate of the size of the internal compiled
+expression. Set it to a larger value if you know that the
+expression will require a lot of space. If you do not know, do not
+worry: realloc is used if necessary.
+
+{\tt transtable (default none == 0)}
+The address of a byte translation table (a char[256]) that
+translates each character before matching.
+
+As a convenience, several Regexes are predefined and usable in any
+program. Here are their declarations from {\tt wxString.h}.
+\begin{verbatim}
+ extern wxRegex RXwhite; // = "[ \n\t]+"
+ extern wxRegex RXint; // = "-?[0-9]+"
+ extern wxRegex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\|
+ // \\([0-9]+\\)\\|
+ // \\(\\.[0-9]+\\)\\)
+ // \\([eE][---+]?[0-9]+\\)?"
+ extern wxRegex RXalpha; // = "[A-Za-z]+"
+ extern wxRegex RXlowercase; // = "[a-z]+"
+ extern wxRegex RXuppercase; // = "[A-Z]+"
+ extern wxRegex RXalphanum; // = "[0-9A-Za-z]+"
+ extern wxRegex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*"
+\end{verbatim}
+
+\subsubsection{Examples}
+
+Most {\tt wxString} class capabilities are best shown via example. The
+examples below use the following declarations.
+
+\begin{verbatim}
+ wxString x = "Hello";
+ wxString y = "world";
+ wxString n = "123";
+ wxString z;
+ char *s = ",";
+ wxString lft, mid, rgt;
+ wxRegex r = "e[a-z]*o";
+ wxRegex r2("/[a-z]*/");
+ char c;
+ int i, pos, len;
+ double f;
+ wxString words[10];
+ words[0] = "a";
+ words[1] = "b";
+ words[2] = "c";
+\end{verbatim}
+
+\subsubsection{Comparing, Searching and Matching examples}
+
+The usual lexicographic relational operators (`==, !=, <, <=, >, >=')
+are defined. A functional form `compare(wxString, wxString)' is also
+provided, as is `fcompare(wxString, wxString)', which compares Strings
+without regard for upper vs. lower case.
+
+All other matching and searching operations are based on some form
+of the (non-public) `match' and `search' functions. `match' and
+`search' differ in that `match' attempts to match only at the given
+starting position, while `search' starts at the position, and then
+proceeds left or right looking for a match. As seen in the following
+examples, the second optional `startpos' argument to functions using
+`match' and `search' specifies the starting position of the search: If
+non-negative, it results in a left-to-right search starting at position
+`startpos', and if negative, a right-to-left search starting at
+position `x.Length() + startpos'. In all cases, the index returned is
+that of the beginning of the match, or -1 if there is no match.
+
+Three wxString functions serve as front ends to `search' and `match'.
+`index' performs a search, returning the index, `matches' performs a
+match, returning nonzero (actually, the length of the match) on success,
+and `contains' is a boolean function performing either a search or
+match, depending on whether an index argument is provided:
+
+{\tt x.Index("lo")}
+Returns the zero-based index of the leftmost occurrence of
+substring "lo" (3, in this case). The argument may be a wxString,
+wxSubString, char, char*, or wxRegex.
+
+{\tt x.Index("l", 2)}
+Returns the index of the first of the leftmost occurrence of "l"
+found starting the search at position x[2], or 2 in this case.
+
+{\tt x.Index("l", -1)}
+Returns the index of the rightmost occurrence of "l", or 3 here.
+
+{\tt x.Index("l", -3)}
+Returns the index of the rightmost occurrence of "l" found by
+starting the search at the 3rd to the last position of x,
+returning 2 in this case.
+
+{\tt pos = r.Search("leo", 3, len, 0)}
+Returns the index of r in the {\tt char*} string of length 3, starting
+at position 0, also placing the length of the match in reference
+parameter len.
+
+{\tt x.Contains("He")}
+Returns nonzero if the wxString x contains the substring "He". The
+argument may be a wxString, wxSubString, char, char*, or wxRegex.
+
+{\tt x.Contains("el", 1)}
+Returns nonzero if x contains the substring "el" at position 1.
+As in this example, the second argument to `contains', if present,
+means to match the substring only at that position, and not to
+search elsewhere in the string.
+
+{\tt x.Contains(RXwhite);}
+Returns nonzero if x contains any whitespace (space, tab, or
+newline). Recall that `RXwhite' is a global whitespace wxRegex.
+
+{\tt x.Matches("lo", 3)}
+Returns nonzero if x starting at position 3 exactly matches "lo",
+with no trailing characters (as it does in this example).
+
+{\tt x.Matches(r)}
+Returns nonzero if wxString x as a whole matches wxRegex r.
+
+{\tt int f = x.Freq("l")}
+Returns the number of distinct, nonoverlapping matches to the
+argument (2 in this case).
+
+\subsubsection{Substring extraction examples}
+
+Substrings may be extracted via the `at', `before', `through',
+`from', and `after' functions. These behave as either lvalues or
+rvalues.
+
+{\tt z = x.At(2, 3)}
+Sets wxString z to be equal to the length 3 substring of wxString x
+starting at zero-based position 2, setting z to "llo" in this
+case. A nil wxString is returned if the arguments don't make sense.
+
+{\tt x.At(2, 2) = "r"}
+Sets what was in positions 2 to 3 of x to "r", setting x to "Hero"
+in this case. As indicated here, wxSubString assignments may be of
+different lengths.
+
+{\tt x.At("He") = "je";}
+x("He") is the substring of x that matches the first occurrence of
+it's argument. The substitution sets x to "jello". If "He" did not
+occur, the substring would be nil, and the assignment would have
+no effect.
+
+{\tt x.At("l", -1) = "i";}
+Replaces the rightmost occurrence of "l" with "i", setting x to
+"Helio".
+
+{\tt z = x.At(r)}
+Sets wxString z to the first match in x of wxRegex r, or "ello" in this
+case. A nil wxString is returned if there is no match.
+
+{\tt z = x.Before("o")}
+Sets z to the part of x to the left of the first occurrence of
+"o", or "Hell" in this case. The argument may also be a wxString,
+wxSubString, or wxRegex. (If there is no match, z is set to "".)
+
+{\tt x.Before("ll") = "Bri";}
+Sets the part of x to the left of "ll" to "Bri", setting x to
+"Brillo".
+
+{\tt z = x.Before(2)}
+Sets z to the part of x to the left of x[2], or "He" in this case.
+
+{\tt z = x.After("Hel")}
+Sets z to the part of x to the right of "Hel", or "lo" in this
+case.
+
+{\tt z = x.Through("el")}
+Sets z to the part of x up and including "el", or "Hel" in this
+case.
+
+{\tt z = x.From("el")}
+Sets z to the part of x from "el" to the end, or "ello" in this
+case.
+
+{\tt x.After("Hel") = "p";}
+Sets x to "Help";
+
+{\tt z = x.After(3)}
+Sets z to the part of x to the right of x[3] or "o" in this case.
+
+{\tt z = " ab c"; z = z.After(RXwhite)}
+Sets z to the part of its old string to the right of the first
+group of whitespace, setting z to "ab c"; Use GSub(below) to strip
+out multiple occurrences of whitespace or any pattern.
+
+{\tt x[0] = 'J';}
+Sets the first element of x to 'J'. x[i] returns a reference to
+the ith element of x, or triggers an error if i is out of range.
+
+{\tt CommonPrefix(x, "Help")}
+Returns the wxString containing the common prefix of the two Strings
+or "Hel" in this case.
+
+{\tt CommonSuffix(x, "to")}
+Returns the wxString containing the common suffix of the two Strings
+or "o" in this case.
+
+\subsubsection{Concatenation examples}
+
+{\tt z = x + s + ' ' + y.At("w") + y.After("w") + ".";}
+Sets z to "Hello, world."
+
+{\tt x += y;}
+Sets x to "Helloworld".
+
+{\tt Cat(x, y, z)}
+A faster way to say z = x + y.
+
+{\tt Cat(z, y, x, x)}
+Double concatenation; A faster way to say x = z + y + x.
+
+{\tt y.Prepend(x);}
+A faster way to say y = x + y.
+
+{\tt z = Replicate(x, 3);}
+Sets z to "HelloHelloHello".
+
+{\tt z = Join(words, 3, "/")}
+Sets z to the concatenation of the first 3 Strings in wxString array
+words, each separated by "/", setting z to "a/b/c" in this case.
+The last argument may be "" or 0, indicating no separation.
+
+\subsubsection{Other manipulation examples}
+
+{\tt z = "this string has five words"; i = Split(z, words, 10, RXwhite);}
+Sets up to 10 elements of wxString array words to the parts of z
+separated by whitespace, and returns the number of parts actually
+encountered (5 in this case). Here, words[0] = "this", words[1] =
+"string", etc. The last argument may be any of the usual. If
+there is no match, all of z ends up in words[0]. The words array
+is *not* dynamically created by split.
+
+{\tt int nmatches x.GSub("l","ll")}
+Substitutes all original occurrences of "l" with "ll", setting x
+to "Hellllo". The first argument may be any of the usual,
+including wxRegex. If the second argument is "" or 0, all
+occurrences are deleted. gsub returns the number of matches that
+were replaced.
+
+{\tt z = x + y; z.Del("loworl");}
+Deletes the leftmost occurrence of "loworl" in z, setting z to
+"Held".
+
+{\tt z = Reverse(x)}
+Sets z to the reverse of x, or "olleH".
+
+{\tt z = Upcase(x)}
+Sets z to x, with all letters set to uppercase, setting z to
+"HELLO".
+
+{\tt z = Downcase(x)}
+Sets z to x, with all letters set to lowercase, setting z to
+"hello"
+
+{\tt z = Capitalize(x)}
+Sets z to x, with the first letter of each word set to uppercase,
+and all others to lowercase, setting z to "Hello"
+
+{\tt x.Reverse(), x.Upcase(), x.Downcase(), x.Capitalize()}
+in-place, self-modifying versions of the above.
+
+\subsubsection{Reading, Writing and Conversion examples}
+
+{\tt cout << x}
+Writes out x.
+
+{\tt cout << x.At(2, 3)}
+Writes out the substring "llo".
+
+{\tt cin >> x}
+Reads a whitespace-bounded string into x.
+
+{\tt x.Length()}
+Returns the length of wxString x (5, in this case).
+
+{\tt s = (const char*)x}
+Can be used to extract the `char*' char array. This coercion is
+useful for sending a wxString as an argument to any function
+expecting a `const char*' argument (like `atoi', and
+`File::open'). This operator must be used with care, since the
+conversion returns a pointer to `wxString' internals without copying
+the characters: The resulting `(char*)' is only valid until the
+next wxString operation, and you must not modify it. (The
+conversion is defined to return a const value so that GNU C++ will
+produce warning and/or error messages if changes are attempted.)
+
+\subsection{Regular Expressions}\label{regularexpressions}
+
+The following are extracts from GNU documentation.
+
+\subsubsection{Regular Expression Overview}
+
+Regular expression matching allows you to test whether a string fits
+into a specific syntactic shape. You can also search a string for a
+substring that fits a pattern.
+
+A regular expression describes a set of strings. The simplest case
+is one that describes a particular string; for example, the string
+`foo' when regarded as a regular expression matches `foo' and nothing
+else. Nontrivial regular expressions use certain special constructs
+so that they can match more than one string. For example, the
+regular expression `foo$\backslash$|bar' matches either the string `foo' or the
+string `bar'; the regular expression `c[ad]*r' matches any of the
+strings `cr', `car', `cdr', `caar', `cadddar' and all other such
+strings with any number of `a''s and `d''s.
+
+The first step in matching a regular expression is to compile it.
+You must supply the pattern string and also a pattern buffer to hold
+the compiled result. That result contains the pattern in an internal
+format that is easier to use in matching.
+
+Having compiled a pattern, you can match it against strings. You can
+match the compiled pattern any number of times against different
+strings.
+
+\subsubsection{Syntax of Regular Expressions}
+
+Regular expressions have a syntax in which a few characters are
+special constructs and the rest are "ordinary". An ordinary
+character is a simple regular expression which matches that character
+and nothing else. The special characters are `\verb+\$+', `\verb+^+', `.', `*',
+`+', `?', `[', `]' and `$\backslash$'. Any other character appearing in a
+regular expression is ordinary, unless a `$\backslash$' precedes it.
+
+For example, `f' is not a special character, so it is ordinary, and
+therefore `f' is a regular expression that matches the string `f' and
+no other string. (It does *not* match the string `ff'.) Likewise,
+`o' is a regular expression that matches only `o'.
+
+Any two regular expressions A and B can be concatenated. The result
+is a regular expression which matches a string if A matches some
+amount of the beginning of that string and B matches the rest of the
+string.
+
+As a simple example, we can concatenate the regular expressions `f'
+and `o' to get the regular expression `fo', which matches only the
+string `fo'. Still trivial.
+
+Note: for Unix compatibility, special characters are treated as
+ordinary ones if they are in contexts where their special meanings
+make no sense. For example, `*foo' treats `*' as ordinary since
+there is no preceding expression on which the `*' can act. It is
+poor practice to depend on this behavior; better to quote the special
+character anyway, regardless of where is appears.
+
+The following are the characters and character sequences which have
+special meaning within regular expressions. Any character not
+mentioned here is not special; it stands for exactly itself for the
+purposes of searching and matching.
+
+\begin{itemize}
+\itemsep=0pt
+
+\item \rtfsp
+{\tt .} is a special character that matches anything except a newline.
+Using concatenation, we can make regular expressions like {\tt a.b}
+which matches any three-character string which begins with {\tt a}
+and ends with {\tt b}.
+
+\item \rtfsp
+{\tt *} is not a construct by itself; it is a suffix, which means the
+preceding regular expression is to be repeated as many times as
+possible. In {\tt fo*}, the {\tt *} applies to the {\tt o}, so {\tt fo*}
+matches {\tt f} followed by any number of {\tt o}'s.
+
+The case of zero {\tt o}'s is allowed: {\tt fo*} does match {\tt f}.
+
+{\tt *} always applies to the *smallest* possible preceding
+expression. Thus, {\tt fo*} has a repeating {\tt o}, not a repeating
+{\tt fo}.
+
+The matcher processes a {\tt *} construct by matching, immediately,
+as many repetitions as can be found. Then it continues with the
+rest of the pattern. If that fails, backtracking occurs,
+discarding some of the matches of the {\tt *}'d construct in case
+that makes it possible to match the rest of the pattern. For
+example, matching {\tt c$[$ad$]$*ar} against the string {\tt caddaar}, the
+{\tt $[$ad$]$*} first matches {\tt addaa}, but this does not allow the next
+{\tt a} in the pattern to match. So the last of the matches of
+{\tt $[$ad$]$} is undone and the following {\tt a} is tried again. Now it
+succeeds.
+
+\item \rtfsp
+{\tt +} is like {\tt *} except that at least one match for the preceding
+pattern is required for {\tt +}. Thus, {\tt c$[$ad$]$+r} does not match
+{\tt cr} but does match anything else that {\tt c$[$ad$]$*r} would match.
+
+\item \rtfsp
+{\tt ?} is like {\tt *} except that it allows either zero or one match
+for the preceding pattern. Thus, {\tt c$[$ad$]$?r} matches {\tt cr} or
+{\tt car} or {\tt cdr}, and nothing else.
+
+\item \rtfsp
+{\tt $[$} begins a "character set", which is terminated by a {\tt $]$}. In
+the simplest case, the characters between the two form the set.
+Thus, {\tt $[$ad$]$} matches either {\tt a} or {\tt d}, and {\tt $[$ad$]$*} matches any
+string of {\tt a}'s and {\tt d}'s (including the empty string), from
+which it follows that {\tt c$[$ad$]$*r} matches {\tt car}, etc.
+
+Character ranges can also be included in a character set, by
+writing two characters with a {\tt -} between them. Thus, {\tt $[$a-z$]$}
+matches any lower-case letter. Ranges may be intermixed freely
+with individual characters, as in {\tt $[$a-z\$\%.$]$}, which matches any
+lower case letter or {\tt \$}, {\tt \%} or period.
+
+Note that the usual special characters are not special any more
+inside a character set. A completely different set of special
+characters exists inside character sets: {\tt $]$}, {\tt -} and \verb$^$.
+
+To include a {\tt $]$} in a character set, you must make it the first
+character. For example, {\tt $[$$]$a$]$} matches {\tt $]$} or {\tt a}. To include
+a {\tt -}, you must use it in a context where it cannot possibly
+indicate a range: that is, as the first character, or
+immediately after a range.
+
+\item \rtfsp
+\verb$[^$ begins a "complement character set", which matches any
+character except the ones specified. Thus, \verb$[^a-z0-9A-Z]$
+matches all characters {\it except} letters and digits.
+
+\item \rtfsp
+\verb$^$ is not special in a character set unless it is the first
+character. The character following the \verb$^$ is treated as if it
+were first (it may be a {\tt -} or a {\tt $]$}).
+
+\verb$^$ is a special character that matches the empty string -- but only
+if at the beginning of a line in the text being matched.
+Otherwise it fails to match anything. Thus, \verb$^foo$ matches a
+{\tt foo} which occurs at the beginning of a line.
+
+\item \rtfsp
+{\tt \$}
+is similar to \verb$^$ but matches only at the end of a line. Thus,
+{\tt xx*\$} matches a string of one or more {\tt x}'s at the end of a line.
+
+\item \rtfsp
+{\tt $\backslash$}
+has two functions: it quotes the above special characters
+(including {\tt $\backslash$}), and it introduces additional special constructs.
+
+Because {\tt $\backslash$} quotes special characters, {\tt $\backslash$\$} is a regular
+expression which matches only {\tt \$}, and {\tt $\backslash$$[$} is a regular
+expression which matches only {\tt $[$}, and so on.
+
+For the most part, {\tt $\backslash$} followed by any character matches only
+that character. However, there are several exceptions:
+characters which, when preceded by {\tt $\backslash$}, are special constructs.
+Such characters are always ordinary when encountered on their own.
+
+No new special characters will ever be defined. All extensions
+to the regular expression syntax are made by defining new
+two-character constructs that begin with {\tt $\backslash$}.
+
+\item \rtfsp
+{\tt $\backslash$|}
+specifies an alternative. Two regular expressions A and B with
+{\tt $\backslash$|} in between form an expression that matches anything that
+either A or B will match.
+
+Thus, {\tt foo$\backslash$|bar} matches either {\tt foo} or {\tt bar} but no other
+string.
+
+{\tt $\backslash$|} applies to the largest possible surrounding expressions.
+Only a surrounding {\tt $\backslash$( ... $\backslash$)} grouping can limit the grouping
+power of {\tt $\backslash$|}.
+
+Full backtracking capability exists when multiple {\tt $\backslash$|}'s are used.
+
+\item \rtfsp
+{\tt $\backslash$( ... $\backslash$)}
+is a grouping construct that serves three purposes:
+\begin{enumerate}
+\item To enclose a set of {\tt $\backslash$|} alternatives for other operations.
+Thus, {\tt $\backslash$(foo$\backslash$|bar$\backslash$)x} matches either {\tt foox} or {\tt barx}.
+\item To enclose a complicated expression for the postfix {\tt *} to
+operate on. Thus, {\tt ba$\backslash$(na$\backslash$)*} matches {\tt bananana}, etc.,
+with any (zero or more) number of {\tt na}'s.
+\item To mark a matched substring for future reference.
+\end{enumerate}
+
+This last application is not a consequence of the idea of a
+parenthetical grouping; it is a separate feature which happens
+to be assigned as a second meaning to the same {\tt $\backslash$( ... $\backslash$)}
+construct because there is no conflict in practice between the
+two meanings. Here is an explanation of this feature:
+
+\item \rtfsp
+{\tt $\backslash$DIGIT}
+After the end of a {\tt $\backslash$( ... $\backslash$)} construct, the matcher remembers
+the beginning and end of the text matched by that construct.
+Then, later on in the regular expression, you can use {\tt $\backslash$}
+followed by DIGIT to mean "match the same text matched the
+DIGIT'th time by the {\tt $\backslash$( ... $\backslash$)} construct." The {\tt $\backslash$( ... $\backslash$)}
+constructs are numbered in order of commencement in the regexp.
+
+The strings matching the first nine {\tt $\backslash$( ... $\backslash$)} constructs
+appearing in a regular expression are assigned numbers 1 through
+9 in order of their beginnings. {\tt $\backslash$1} through {\tt $\backslash$9} may be used
+to refer to the text matched by the corresponding {\tt $\backslash$( ... $\backslash$)}
+construct.
+
+For example, {\tt $\backslash$(.*$\backslash$)$\backslash$1} matches any string that is composed of
+two identical halves. The {\tt $\backslash$(.*$\backslash$)} matches the first half,
+which may be anything, but the {\tt $\backslash$1} that follows must match the
+same exact text.
+
+\item \rtfsp
+{\tt $\backslash$b}
+matches the empty string, but only if it is at the beginning or
+end of a word. Thus, {\tt $\backslash$bfoo$\backslash$b} matches any occurrence of {\tt foo}
+as a separate word. {\tt $\backslash$bball$\backslash$(s$\backslash$|$\backslash$)$\backslash$b} matches {\tt ball} or {\tt balls}
+as a separate word.
+
+\item \rtfsp
+{\tt $\backslash$B}
+matches the empty string, provided it is *not* at the beginning
+or end of a word.
+
+\item \rtfsp
+{\tt $\backslash$<}
+matches the empty string, but only if it is at the beginning of
+a word.
+
+\item \rtfsp
+{\tt $\backslash$>}
+matches the empty string, but only if it is at the end of a word.
+
+\item \rtfsp
+{\tt $\backslash$w}
+matches any word-constituent character.
+
+\item \rtfsp
+{\tt $\backslash$W}
+matches any character that is not a word-constituent.
+
+\end{itemize}
+
+
+
+
+
+\section{wxString member functions}\label{wxstringcategories}
+
+\overview{Overview}{wxstringoverview}
+
+This section describes categories of \helpref{wxString}{wxstring} class
+member functions.
+
+TODO: describe each one briefly here.
+
+{\large {\bf Assigment}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::operator $=$}{wxstringoperatorassign}\\
+\end{itemize}
+
+{\large {\bf Classification}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::IsAscii}{wxstringIsAscii}
+\item \helpref{wxString::IsWord}{wxstringIsWord}
+\item \helpref{wxString::IsNumber}{wxstringIsNumber}
+\item \helpref{wxString::IsNull}{wxstringIsNull}
+\item \helpref{wxString::IsDefined}{wxstringIsDefined}
+\end{itemize}
+
+{\large {\bf Comparisons (case sensitive and insensitive)}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::CompareTo}{wxstringCompareTo}
+\item \helpref{Compare}{wxstringCompare}
+\item \helpref{FCompare}{wxstringFCompare}
+\item \helpref{Comparisons}{wxstringComparison}
+\end{itemize}
+
+{\large {\bf Composition and Concatenation}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::operator $+=$}{wxstringPlusEqual}
+\item \helpref{wxString::Append}{wxstringAppend}
+\item \helpref{wxString::Prepend}{wxstringPrepend}
+\item \helpref{wxString::Cat}{wxstringCat}
+\item \helpref{operator $+$}{wxstringoperatorplus}
+\end{itemize}
+
+{\large {\bf Constructors/Destructors}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::wxString}{wxstringconstruct}
+\item \helpref{wxString::~wxString}{wxstringdestruct}
+\end{itemize}
+
+{\large {\bf Conversions}}
+
+\begin{itemize}
+\item \helpref{wxString::operator const char *}{wxstringoperatorconstcharpt}
+\item \helpref{wxString::Chars}{wxstringChars}
+\item \helpref{wxString::GetData}{wxstringGetData}
+\end{itemize}
+
+{\large {\bf Deletion/Insertion}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Del}{wxstringDel}
+\item \helpref{wxString::Remove}{wxstringRemove}
+\item \helpref{wxString::Insert}{wxstringInsert}
+\item \helpref{Split}{wxstringSplit}
+\item \helpref{Join}{wxstringJoin}
+\end{itemize}
+
+{\large {\bf Duplication}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Copy}{wxstringCopy}
+\item \helpref{wxString::Replicate}{wxstringReplicate}
+\end{itemize}
+
+{\large {\bf Element access}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::operator[]}{wxstringoperatorbracket}
+\item \helpref{wxString::operator()}{wxstringoperatorparenth}
+\item \helpref{wxString::Elem}{wxstringElem}
+\item \helpref{wxString::Firstchar}{wxstringFirstchar}
+\item \helpref{wxString::Lastchar}{wxstringLastchar}
+\end{itemize}
+
+{\large {\bf Extraction of Substrings}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::At}{wxstringAt}
+\item \helpref{wxString::Before}{wxstringBefore}
+\item \helpref{wxString::Through}{wxstringThrough}
+\item \helpref{wxString::From}{wxstringFrom}
+\item \helpref{wxString::After}{wxstringAfter}
+\item \helpref{wxString::SubString}{wxstringSubString}
+\end{itemize}
+
+{\large {\bf Input/Output}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::sprintf}{wxstringsprintf}
+\item \helpref{wxString::operator \cinsert}{wxstringoperatorout}
+\item \helpref{wxString::operator \cextract}{wxstringoperatorin}
+\item \helpref{wxString::Readline}{wxstringReadline}
+\end{itemize}
+
+{\large {\bf Searching/Matching}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Index}{wxstringIndex}
+\item \helpref{wxString::Contains}{wxstringContains}
+\item \helpref{wxString::Matches}{wxstringMatches}
+\item \helpref{wxString::Freq}{wxstringFreq}
+\item \helpref{wxString::First}{wxstringFirst}
+\item \helpref{wxString::Last}{wxstringLast}
+\end{itemize}
+
+{\large {\bf Substitution}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::GSub}{wxstringGSub}
+\item \helpref{wxString::Replace}{wxstringReplace}
+\end{itemize}
+
+{\large {\bf Status}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Length}{wxstringLength}
+\item \helpref{wxString::Empty}{wxstringEmpty}
+\item \helpref{wxString::Allocation}{wxstringAllocation}
+\item \helpref{wxString::IsNull}{wxstringIsNull}
+\end{itemize}
+
+{\large {\bf Transformations}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Reverse}{wxstringReverse}
+\item \helpref{wxString::Upcase}{wxstringUpcase}
+\item \helpref{wxString::UpperCase}{wxstringUpperCase}
+\item \helpref{wxString::DownCase}{wxstringDownCase}
+\item \helpref{wxString::LowerCase}{wxstringLowerCase}
+\item \helpref{wxString::Capitalize}{wxstringCapitalize}
+\end{itemize}
+
+{\large {\bf Utilities}}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxString::Strip}{wxstringStrip}
+\item \helpref{wxString::Error}{wxstringError}
+\item \helpref{wxString::OK}{wxstringOK}
+\item \helpref{wxString::Alloc}{wxstringAlloc}
+\item \helpref{wxCHARARG}{wxstringwxCHARARG}
+\item \helpref{CommonPrefix}{wxstringCommonPrefix}
+\item \helpref{CommonSuffix}{wxstringCommonSuffix}
+\end{itemize}
+
--- /dev/null
+\section{Window styles}\label{windowstyles}
+
+Window styles are used to specify alternative behaviour and appearances for windows, when they are
+created. The symbols are defined in such as way that they can be combined in a `bit-list' using the
+C++ {\it bitwise-or} operator. For example:
+
+\begin{verbatim}
+ wxCAPTION | wxMINIMIZE_BOX | wxMINIMIZE_BOX | wxTHICK_FRAME
+\end{verbatim}
+
+For the window styles specific to each window class, please see the documentation
+for the window. Most windows can use the generic styles listed for \helpref{wxWindow}{wxwindow} in
+addition to their own styles.
+
--- /dev/null
+\section{Tab classes overview}\label{wxtaboverview}
+
+Classes: \helpref{wxTabView}{wxtabview}, \helpref{wxPanelTabView}{wxpaneltabview},
+ \helpref{wxTabbedPanel}{wxtabbedpanel}, \helpref{wxTabbedDialogBox}{wxtabbeddialogbox},
+ \helpref{wxTabControl}{wxtabcontrol}
+
+The tab classes provides a way to display rows of tabs (like file divider tabs), which can be
+used to switch between panels or other information. Tabs are most
+commonly used in dialog boxes where the number of options is too great
+to fit on one dialog.
+
+\wxheading{The appearance and behaviour of a wxTabbedDialogBox}
+
+The following screenshot shows the appearance of the sample tabbed dialog application.
+
+$$\image{8cm;0cm}{wxtab1.eps}$$
+
+By clicking on the tabs, the user can display a different set of controls. In the example,
+the Close and Help buttons remain constant. These two buttons are children of the main dialog box,
+whereas the other controls are children of panels which are shown and hidden according to
+which tab is active.
+
+A tabbed dialog may have several layers (rows) of tabs, each being
+offset vertically and horizontally from the previous. Tabs work in
+columns, in that when a tab is pressed, it swaps place with the tab on
+the first row of the same column, in order to give the effect of
+displaying that tab. All tabs must be of the same width.
+This is a constraint of the implementation, but it also
+means that the user will find it easier to find tabs since there are
+distinct tab columns. On some tabbed dialog implementations, tabs jump around
+seemingly randomly because tabs have different widths.
+In this implementation, a tab can always be found on the same column.
+
+Tabs are always drawn along the top of the view area; the implementation does
+not allow for vertical tabs or any other configuration.
+
+\wxheading{Using tabs}
+
+The tab classes provide facilities for switching between contexts by
+means of `tabs', which look like file divider tabs.
+
+You must create both a {\it view} to handle the tabs, and a {\it window} to display the tabs
+and related information. The wxTabbedDialog and wxTabbedPanel classes are provided for
+convenience, but you could equally well construct your own window class and derived
+tab view.
+
+If you wish to display a tabbed dialog - the most common use - you should follow these steps.
+
+\begin{enumerate}\itemsep=0pt
+\item Create a new wxTabbedDialog class, and any buttons you wish always to be displayed
+(regardless of which tab is active).
+\item Create a new wxPanelTabView, passing the dialog as the first argument.
+\item Set the view rectangle with \helpref{wxTabView::SetViewRect}{wxtabviewsetviewrect},
+to specify the area in which child panels will be
+shown. The tabs will sit on top of this view rectangle.
+\item Call \helpref{wxTabView::CalculateTabWidth}{wxtabviewcalculatetabwidth} to calculate
+the width of the tabs based on the view area. This is optional if, for example, you have one row
+of tabs which does not extend the full width of the view area.
+\item Call \helpref{wxTabView::AddTab}{wxtabviewaddtab} for each of the tabs you wish to create, passing
+a unique identifier and a tab label.
+\item Construct a number of windows, one for each tab, and call \helpref{wxPanelTabView::AddTabWindow}{wxpaneltabviewaddtabwindow} for
+each of these, passing a tab identifier and the window.
+\item Set the tab selection.
+\item Show the dialog.
+\end{enumerate}
+
+Under Motif, you may also need to size the dialog just before setting the tab selection, for unknown reasons.
+
+Some constraints you need to be aware of:
+
+\begin{itemize}\itemsep=0pt
+\item All tabs must be of the same width.
+\item Omit the wxTAB\_STYLE\_COLOUR\_INTERIOR flag to ensure that the dialog background
+and tab backgrounds match.
+\end{itemize}
+
+\subsection{Example}
+
+The following fragment is taken from the file test.cpp.
+
+{\small
+\begin{verbatim}
+void MyDialog::Init(void)
+{
+ int dialogWidth = 365;
+ int dialogHeight = 390;
+
+ wxButton *okButton = new wxButton(this, wxID_OK, "Close", wxPoint(100, 330), wxSize(80, 25));
+ wxButton *cancelButton = new wxButton(this, wxID_CANCEL, "Cancel", wxPoint(185, 330), wxSize(80, 25));
+ wxButton *HelpButton = new wxButton(this, wxID_HELP, "Help", wxPoint(270, 330), wxSize(80, 25));
+ okButton->SetDefault();
+
+ // Note, omit the wxTAB_STYLE_COLOUR_INTERIOR, so we will guarantee a match
+ // with the panel background, and save a bit of time.
+ wxPanelTabView *view = new wxPanelTabView(this, wxTAB_STYLE_DRAW_BOX);
+
+ wxRectangle rect;
+ rect.x = 5;
+ rect.y = 70;
+ // Could calculate the view width from the tab width and spacing,
+ // as below, but let's assume we have a fixed view width.
+// rect.width = view->GetTabWidth()*4 + 3*view->GetHorizontalTabSpacing();
+ rect.width = 326;
+ rect.height = 250;
+
+ view->SetViewRect(rect);
+
+ // Calculate the tab width for 4 tabs, based on a view width of 326 and
+ // the current horizontal spacing. Adjust the view width to exactly fit
+ // the tabs.
+ view->CalculateTabWidth(4, TRUE);
+
+ if (!view->AddTab(TEST_TAB_CAT, wxString("Cat")))
+ return;
+
+ if (!view->AddTab(TEST_TAB_DOG, wxString("Dog")))
+ return;
+ if (!view->AddTab(TEST_TAB_GUINEAPIG, wxString("Guinea Pig")))
+ return;
+ if (!view->AddTab(TEST_TAB_GOAT, wxString("Goat")))
+ return;
+ if (!view->AddTab(TEST_TAB_ANTEATER, wxString("Ant-eater")))
+ return;
+ if (!view->AddTab(TEST_TAB_SHEEP, wxString("Sheep")))
+ return;
+ if (!view->AddTab(TEST_TAB_COW, wxString("Cow")))
+ return;
+ if (!view->AddTab(TEST_TAB_HORSE, wxString("Horse")))
+ return;
+ if (!view->AddTab(TEST_TAB_PIG, wxString("Pig")))
+ return;
+ if (!view->AddTab(TEST_TAB_OSTRICH, wxString("Ostrich")))
+ return;
+ if (!view->AddTab(TEST_TAB_AARDVARK, wxString("Aardvark")))
+ return;
+ if (!view->AddTab(TEST_TAB_HUMMINGBIRD,wxString("Hummingbird")))
+ return;
+
+ // Add some panels
+ wxPanel *panel1 = new wxPanel(this, -1, wxPoint(rect.x + 20, rect.y + 10), wxSize(290, 220), wxTAB_TRAVERSAL);
+ (void)new wxButton(panel1, -1, "Press me", wxPoint(10, 10));
+ (void)new wxTextCtrl(panel1, -1, "1234", wxPoint(10, 40), wxSize(120, 150));
+
+ view->AddTabWindow(TEST_TAB_CAT, panel1);
+
+ wxPanel *panel2 = new wxPanel(this, -1, wxPoint(rect.x + 20, rect.y + 10), wxSize(290, 220));
+
+ wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" };
+ (void)new wxListBox(panel2, -1, wxPoint(5, 5), wxSize(170, 80), 5, animals);
+
+ (void)new wxTextCtrl(panel2, -1, "Some notes about the animals in this house", wxPoint(5, 100), wxSize(170, 100)),
+ wxTE_MULTILINE;
+
+ view->AddTabWindow(TEST_TAB_DOG, panel2);
+
+ // Don't know why this is necessary under Motif...
+#ifdef wx_motif
+ this->SetSize(dialogWidth, dialogHeight-20);
+#endif
+
+ view->SetTabSelection(TEST_TAB_CAT);
+
+ this->Centre(wxBOTH);
+}
+\end{verbatim}
+}
+
+\subsection{wxTab change log}
+
+June 3rd 1997, Version 1.2
+
+\begin{itemize}\itemsep=0pt
+\item Fixed bug which drew some tabs incorrectly.
+\item Altered sample to put buttons below tabs, as per standard
+Windows conventions.
+\item Added improvements from Hitachi Europe Limited: draws correctly
+on Motif and Windows, and tabs are now rounded - much nicer.
+\end{itemize}
+
+April 29th 1996, Version 1.1
+
+\begin{itemize}\itemsep=0pt
+\item Added SetHorizontalTabOffset, SetHorizontalTabSpacing.
+\item Corrected bug in colouring tabs (1 pixel out).
+\item Corrected bug in adding tabs: last tab on first row could overlap right-hand
+edge.
+\item Added Layout function to allow resizing of the view rectangle and subsequent redrawing
+of the tabs.
+\item Added WXTAB\_VERSION symbol.
+\item Fixed bug in SetTabSelection which did not move the selected tab to the first row.
+\item Added argument in SetTabSelection to optionally avoid calling activation code.
+\item Changed wxPanelTabView API to allow use of any window, not just a panel, in a tab.
+\end{itemize}
+
+April 24th 1996, Version 1.0
+
+\begin{itemize}\itemsep=0pt
+\item First release.
+\end{itemize}
+
+\section{wxTabView overview}\label{wxtabviewoverview}
+
+Classes: \helpref{wxTabView}{wxtabview}, \helpref{wxPanelTabView}{wxpaneltabview}
+
+A wxTabView manages and draws a number of tabs. Because it is separate
+from the tabbed window implementation, it can be reused in a number of contexts.
+This library provides tabbed dialog and panel classes to use with the
+wxPanelTabView class, but an application could derive other kinds of
+view from wxTabView.
+
+For example, a help application might draw a representation of a book on
+a canvas, with a row of tabs along the top. The new tab view class might
+be called wxCanvasTabView, for example, with the wxBookCanvas posting
+the OnEvent function to the wxCanvasTabView before processing further,
+application-specific event processing.
+
+A window class designed to work with a view class must call the view's
+OnEvent and Draw functions at appropriate times.
+
--- /dev/null
+\section{Toolbar overview}\label{wxtoolbaroverview}
+
+Classes: \helpref{wxToolBarBase}{wxtoolbarbase}, \helpref{wxToolBarSimple}{wxtoolbarsimple},\rtfsp
+\helpref{wxToolBarMSW}{wxtoolbarmsw}, \helpref{wxToolBar95}{wxtoolbar95}
+
+The toolbar family of classes allows an application to use toolbars
+in a variety of configurations and styles.
+
+The toolbar is a popular user interface component and contains a set of bitmap
+buttons or toggles. A toolbar gives faster access to an application's facilities than
+menus, which have to be popped up and selected rather laboriously.
+
+Instead of supplying one toolbar class with a number
+of different implementations depending on platform, wxWindows separates
+out the classes. This is because there are a number of different toolbar
+styles that you may wish to use simultaneously, and also, future
+toolbar implementations will emerge (for example, using the
+new-style Windows `coolbar' as seen in Microsoft applications) which
+cannot be shoe-horned into the one class.
+
+This does mean that if you wish to use a more sophisticated toolbar
+on one platform (say, wxToolBar95) and a simple toolbar on another
+platform (wxToolBarSimple), then you will need some simple ifdefing, such as:
+
+\begin{verbatim}
+ #ifdef wx_msw
+ # define wxToolBar wxToolBar95
+ #else
+ # define wxToolBar wxToolBarSimple
+ #endif
+\end{verbatim}
+
+Fortunately, the APIs of the toolbar classes are virtually identical.
+
+The following is a summary of the toolbar classes and their differences.
+
+\begin{itemize}\itemsep=0pt
+\item {\bf wxToolBarBase.} This is a base class with pure virtual functions,
+and should not be used directly.
+\item {\bf wxToolBarSimple.} A simple toolbar class written entirely with generic wxWindows
+functionality. A simply 3D effect for buttons is possible, but it is not consistent
+with the Windows look and feel. This toolbar can scroll, and you can have arbitrary
+numbers of rows and columns.
+\item {\bf wxToolBarMSW.} This class implements an old-style Windows toolbar, only on
+Windows. There are small, three-dimensional buttons, which do not (currently) reflect
+the current Windows colour settings: the buttons are grey.
+\item {\bf wxToolBar95.} Uses the native Windows 95 toolbar class. It dynamically adjusts its
+background and button colours according to user colour settings.
+CreateTools must be called after the tools have been added.
+No absolute positioning is supported but you can specify the number
+of rows, and add tool separators with {\bf AddSeparator}. {\bf Layout} does nothing.
+Tooltips are supported. {\bf OnRightClick} is not supported.
+For some reason, a wxToolBar95 control cannot be moved to any
+position other than the top-left of the frame.
+\end{itemize}
+
+A toolbar might appear as a single row of images under
+the menubar, or it might be in a separate frame layout in several rows
+and columns. The class handles the layout of the images, unless explicit
+positioning is requested.
+
+A tool is a bitmap which can either be a button (there is no `state',
+it just generates an event when clicked) or it can be a toggle. If a
+toggle, a second bitmap can be provided to depict the `on' state; if
+the second bitmap is omitted, either the inverse of the first bitmap
+will be used (for monochrome displays) or a thick border is drawn
+around the bitmap (for colour displays where inverting will not have
+the desired result).
+
+The Windows-specific toolbar classes expect 16-colour bitmaps that are 16 pixels wide and 15 pixels
+high. If you want to use a different size, call {\bf SetDefaultSize}\rtfsp
+as the demo shows, before adding tools to the button bar. Don't supply more than
+one bitmap for each tool, because the toolbar generates all three images (normal,
+depressed and checked) from the single bitmap you give it.
+
+Mouse click events for a given button are sent to a member called
+\rtfsp{\bf OnLeftClick}, and so an application must derive from wxToolBar in order
+to use it. The application can also handle {\bf OnMouseEnter} events for
+the tools, to give the user extra feedback about the tools as the mouse
+moves over them.
+
+\subsection{Using the toolbar library}
+
+Include one of the files {\tt tbarsmpl.h, tbar95.h, tbarmsw.h}.
+
+Example of toolbar use are given in the sample programs tbarsmpl,
+tbarmsw and tbar95.
+
+Each sample creates a main window, and two toolbars: a floating toolbar
+with 24 tools, and a toolbar along the top of the main drawing canvas, divided into groups.
+
+The test program defines a general-purpose derived frame called
+\rtfsp{\bf wxFrameWithToolBar} which can manage a frame with one main subwindow
+and one horizontal toolbar.
+
+Note that one of the bitmaps on the floating toolbar is a small version of the
+main graphic: this demonstrates how a memory device context can be used to
+draw into a bitmap. An application which allowed the user to build up a symbol
+library dynamically might create this kind of bitmap.
+
+Left clicks and movements over the toolbars are intercepted and information
+is displayed on the status line.
+
+The following fragment illustrates the essence of creating a toolbar.
+
+\begin{verbatim}
+ toolBarBitmaps[0] = new wxBitmap("icon1");
+ toolBarBitmaps[1] = new wxBitmap("icon2");
+ toolBarBitmaps[2] = new wxBitmap("icon3");
+ ...
+
+ toolBarFrame = new wxFrame(NULL, "Tools", -1, wxPoint(0, 0), wxSize(300, 200),
+ wxDEFAULT_FRAME_STYLE | wxSTAY_ON_TOP);
+
+ // 5 rows
+ toolBar = new TestToolBar(toolBarFrame, 10, 10, -1, -1, 0, wxVERTICAL, 5);
+ toolBar->SetMargins(2, 2);
+
+ for (int i = 10; i < 25; i++)
+ toolBar->AddTool(i, toolBarBitmaps[i], NULL, TRUE);
+
+ toolBar->Layout();
+ float maxWidth, maxHeight;
+ wxSize size(toolBar->GetMaxSize());
+ toolBarFrame->SetClientSize(maxSize.x, maxSize.y);
+ toolBarFrame->Show(TRUE);
+\end{verbatim}
+
--- /dev/null
+\section{wxTreeCtrl overview}\label{wxtreectrloverview}
+
+Classes: \helpref{wxTreeCtrl}{wxtreectrl}, \helpref{wxImageList}{wximagelist}
+
+TODO.
+
--- /dev/null
+\section{Notes on using the reference}\label{referencenotes}
+
+In the descriptions of the wxWindows classes and their member
+functions, note that descriptions of inherited member functions are not
+duplicated in derived classes unless their behaviour is different. So in
+using a class such as wxCanvas, be aware that wxWindow functions may be
+relevant.
+
+Note also that arguments with default values may be omitted from a
+function call, for brevity. Size and position arguments may usually be
+given a value of -1 (the default), in which case wxWindows will choose a
+suitable value.
+
+Most strings are returned as wxString objects. However, for remaining
+char * return values, the strings are allocated and
+deallocated by wxWindows. Therefore, return values should always be
+copied for long-term use, especially since the same buffer is often
+used by wxWindows.
+
+The member functions are given in alphabetical order except for
+constructors and destructors which appear first.
+
--- /dev/null
+\section{Validator overview}\label{validatoroverview}
+
+Classes: \helpref{wxValidator}{wxvalidator}, \helpref{wxTextValidator}{wxtextvalidator}
+
+The aim of the validator concept is to make dialogs very much easier to write.
+A validator is an object that can be plugged into a control (such as a wxTextCtrl), and
+mediates between C++ data and the control, transferring the data in either direction
+and validating it. It also is able to intercept events generated
+by the control, providing filtering behaviour without the need to derive a new control class.
+
+You can use a stock validator, such as \helpref{wxTextValidator}{wxtextvalidator}; or
+you can write your own.
+
+\wxheading{Example}
+
+Here is an example of wxTextValidator usage.
+
+\begin{verbatim}
+ wxTextCtrl *txt1 = new wxTextCtrl(this, VALIDATE_TEXT, "",
+ wxPoint(10, 10), wxSize(100, 80), 0,
+ wxTextValidator(wxFILTER_ALPHA, &g_data.m_string));
+\end{verbatim}
+
+In this example, the text validator object provides the following functionality:
+
+\begin{enumerate}\itemsep=0pt
+\item It transfers the value of g\_data.m\_string (a wxString variable) to the wxTextCtrl when
+the dialog is initialised.
+\item It transfers the wxTextCtrl data back to this variable when the dialog is dismissed.
+\item It filters input characters so that only alphabetic characters are allowed.
+\end{enumerate}
+
+The validation and filtering of input is accomplished in two ways. When a character is input,
+wxTextValidator checks the character against the allowed filter flag (wxFILTER\_ALPHA in this case). If
+the character is inappropriate, it is vetoed (does not appear) and a warning beep sounds.
+The second type of validation is performed when the dialog is about to be dismissed, so if
+the default string contained invalid characters already, a dialog box is shown giving the
+error, and the dialog is not dismissed.
+
+\wxheading{Anatomy of a validator}
+
+A programmer creating a new validator class should provide the following functionality.
+
+A validator constructor is responsible for allowing the programmer to specify the kind
+of validation required, and perhaps a pointer to a C++ variable that is used for storing the
+data for the control. If such a variable address is not supplied by the user, then
+the validator should store the data internally.
+
+The \helpref{wxValidator::Validate}{wxvalidatorvalidate} member function should return
+TRUE if the data in the control (not the C++ variable) is valid. It should also show
+an appropriate message if data was not valid.
+
+The \helpref{wxValidator::TransferToWindow}{wxvalidatortransfertowindow} member function should
+transfer the data from the validator or associated C++ variable to the control.
+
+The \helpref{wxValidator::TransferFromWindow}{wxvalidatortransferfromwindow} member function should
+transfer the data from the control to the validator or associated C++ variable.
+
+There should be a copy constructor, and a \helpref{wxValidator::Clone}{wxvalidatorclone} function
+which returns a copy of the validator object. This is important because validators
+are passed by reference to window constructors, and must therefore be cloned internally.
+
+You can optionally define event handlers for the validator, to implement filtering. These handlers
+will capture events before the control itself does.
+
+For an example implementation, see the valtext.h and valtext.cpp files in the wxWindows library.
+
+\wxheading{How validators interact with dialogs}
+
+For validators to work correctly, validator functions must be called at the right times during
+dialog initialisation and dismissal.
+
+When a \helpref{wxDialog::Show}{wxdialogshow} is called (for a modeless dialog)
+or \helpref{wxDialog::ShowModal}{wxdialogshowmodal} is called (for a modal dialog),
+the function \helpref{wxWindow::InitDialog}{wxwindowinitdialog} is automatically called.
+This in turn sends an initialisation event to the dialog. The default handler for
+the wxEVT\_INIT\_DIALOG event is defined in the wxWindow class to simply call
+the function \helpref{wxWindow::TransferDataToWindow}{wxwindowtransferdatatowindow}. This
+function finds all the validators in the window's children and calls the TransferToWindow
+function for each. Thus, data is transferred from C++ variables to the dialog
+just as the dialog is being shown.
+
+\normalbox{If you are using a window or panel instead of a dialog, you will need to
+call \helpref{wxWindow::InitDialog}{wxwindowinitdialog} explicitly before showing the
+window.}
+
+When the user clicks on a button, for example the OK button, the application should
+first call \helpref{wxWindow::Validate}{wxwindowvalidate}, which returns FALSE if
+any of the child window validators failed to validate the window data. The button handler
+should return immediately if validation failed. Secondly, the application should
+call \helpref{wxWindow::TransferDataFromWindow}{wxwindowtransferdatafromwindow} and
+return if this failed. It is then safe to end the dialog by calling EndModal (if modal)
+or Show (if modeless).
+
+In fact, wxDialog contains a default command event handler for the wxID\_OK button. It goes like
+this:
+
+\begin{verbatim}
+void wxDialog::OnOK(wxCommandEvent& event)
+{
+ if ( Validate() && TransferDataFromWindow() )
+ {
+ if ( IsModal() )
+ EndModal(wxID_OK);
+ else
+ {
+ SetReturnCode(wxID_OK);
+ this->Show(FALSE);
+ }
+ }
+}
+\end{verbatim}
+
+So if using validators and a normal OK button, you may not even need to write any
+code for handling dialog dismissal.
+
--- /dev/null
+\section{\class{wxUpdateIterator}}\label{wxupdateiterator}
+
+This class is used to iterate through all damaged regions of a canvas, panel
+or dialog box, within an OnPaint call.
+
+To use it, construct an iterator object on the stack and loop through the
+regions, testing the object and incrementing the iterator at the end of the loop.
+
+See \helpref{wxScrolledWindow::OnPaint}{wxscrolledwindowonpaint} for an example of use.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxScrolledWindow::OnPaint}{wxscrolledwindowonpaint}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxUpdateIterator::wxUpdateIterator}
+
+\func{}{wxUpdateIterator}{\param{wxWindow* }{window}}
+
+Creates an iterator object.
+
+\membersection{wxUpdateIterator::GetX}
+
+\func{int}{GetX}{\void}
+
+Returns the x value for the current region.
+
+\membersection{wxUpdateIterator::GetY}
+
+\func{int}{GetY}{\void}
+
+Returns the y value for the current region.
+
+\membersection{wxUpdateIterator::GetWidth}
+
+\func{int}{GetWidth}{\void}
+
+Returns the width value for the current region.
+
+\membersection{wxUpdateIterator::GetHeight}
+
+\func{int}{GetWidth}{\void}
+
+Returns the width value for the current region.
+
+\membersection{wxUpdateIterator::operator $++$}
+
+\func{void}{operator $++$}{\void}
+
+Increments the iterator to the next region.
+
+
--- /dev/null
+\section{\class{wxUpdateUIEvent}}\label{wxupdateuievent}
+
+This class is used for pseudo-events which are called by wxWindows
+to give an application the chance to update various user interface elements.
+
+\wxheading{Derived from}
+
+\helpref{wxEvent}{wxevent}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Event table macros}
+
+To process a menu event, use these event handler macros to direct input to member
+functions that take a wxUpdateUIEvent argument.
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf EVT\_UPDATE\_UI(id, func)}}{Process a wxEVT\_UPDATE\_UI event.}
+\end{twocollist}%
+
+\wxheading{Remarks}
+
+Without update UI events, an application has to work hard to check/uncheck, enable/disable,
+and set the text for elements such as menu items and toolbar buttons.
+The code for doing this has to be mixed up with the code that is invoked when
+an action is invoked for a menu item or button.
+
+With update UI events, you define an event handler to look at the state of
+the application and change UI elements accordingly. wxWindows will call your
+member functions in idle time, so you don't have to worry where to call this code.
+In addition to being a clearer and more declarative method, it also means you
+don't have to worry whether you're updating a toolbar or menubar identifier.
+The same handler can update a menu item and toolbar button, if the identifier is the same.
+
+Instead of directly manipulating the menu or button, you call functions in the event
+object, such as \helpref{wxUpdateUIEvent::Check}{wxupdateuieventcheck}. wxWindows
+will determine whether such a call has been made, and which UI element to update.
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxUpdateUIEvent::wxUpdateUIEvent}
+
+\func{}{wxUpdateUIEvent}{\param{wxWindowID }{commandId = 0}}
+
+Constructor.
+
+\membersection{wxUpdateUIEvent::m\_checked}
+
+\member{bool}{m\_checked}
+
+TRUE if the element should be checked, FALSE otherwise.
+
+\membersection{wxUpdateUIEvent::m\_enabled}
+
+\member{bool}{m\_checked}
+
+TRUE if the element should be enabled, FALSE otherwise.
+
+\membersection{wxUpdateUIEvent::m\_setChecked}
+
+\member{bool}{m\_setChecked}
+
+TRUE if the application has set the {\bf m\_checked} member.
+
+\membersection{wxUpdateUIEvent::m\_setEnabled}
+
+\member{bool}{m\_setEnabled}
+
+TRUE if the application has set the {\bf m\_enabled} member.
+
+\membersection{wxUpdateUIEvent::m\_setText}
+
+\member{bool}{m\_setText}
+
+TRUE if the application has set the {\bf m\_text} member.
+
+\membersection{wxUpdateUIEvent::m\_text}
+
+\member{wxString}{m\_text}
+
+Holds the text with which the the application wishes to
+update the UI element.
+
+\membersection{wxUpdateUIEvent::Check}\label{wxupdateuieventcheck}
+
+\func{void}{Check}{\param{bool}{ check}}
+
+Check or uncheck the UI element.
+
+\membersection{wxUpdateUIEvent::Enable}\label{wxupdateuieventenable}
+
+\func{void}{Enable}{\param{bool}{ enable}}
+
+Enable or disable the UI element.
+
+\membersection{wxUpdateUIEvent::GetChecked}\label{wxupdateuieventgetchecked}
+
+\constfunc{bool}{GetChecked}{\void}
+
+Returns TRUE if the UI element should be checked.
+
+\membersection{wxUpdateUIEvent::GetEnabled}\label{wxupdateuieventgetenabled}
+
+\constfunc{bool}{GetEnabled}{\void}
+
+Returns TRUE if the UI element should be enabled.
+
+\membersection{wxUpdateUIEvent::GetSetChecked}\label{wxupdateuieventgetsetchecked}
+
+\constfunc{bool}{GetSetChecked}{\void}
+
+Returns TRUE if the application has called {\bf SetChecked}. For wxWindows internal use only.
+
+\membersection{wxUpdateUIEvent::GetSetEnabled}\label{wxupdateuieventgetsetenabled}
+
+\constfunc{bool}{GetSetEnabled}{\void}
+
+Returns TRUE if the application has called {\bf SetEnabled}. For wxWindows internal use only.
+
+\membersection{wxUpdateUIEvent::GetSetText}\label{wxupdateuieventgetsettext}
+
+\constfunc{bool}{GetSetText}{\void}
+
+Returns TRUE if the application has called {\bf SetText}. For wxWindows internal use only.
+
+\membersection{wxUpdateUIEvent::GetText}\label{wxupdateuieventgettext}
+
+\constfunc{wxString}{GetText}{\void}
+
+Returns the text that should be set for the UI element.
+
+\membersection{wxUpdateUIEvent::SetText}\label{wxupdateuieventsettext}
+
+\func{void}{SetText}{\param{const wxString\&}{ text}}
+
+Sets the text for this UI element.
+
--- /dev/null
+\section{\class{wxValidator}}\label{wxvalidator}
+
+wxValidator is the base class for a family of validator classes that mediate
+between a class of control, and application data.
+
+A validator has three major roles:
+
+\begin{enumerate}\itemsep=0pt
+\item to transfer data from a C++ variable or own storage to and from a control;
+\item to validate data in a control, and show an appropriate error message;
+\item to filter events (such as keystrokes), thereby changing the behaviour of the
+associated control.
+\end{enumerate}
+
+Validators can be plugged into controls dynamically.
+
+To specify a default, `null' validator, use the symbol {\bf wxDefaultValidator}.
+
+For more information, please see \helpref{Validator overview}{validatoroverview}.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Validator overview}{validatoroverview}, \helpref{wxTextValidator}{wxtextvalidator}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxValidator::wxValidator}\label{wxvalidatorconstr}
+
+\func{}{wxValidator}{\void}
+
+Constructor.
+
+\membersection{wxValidator::\destruct{wxValidator}}
+
+\func{}{\destruct{wxValidator}}{\void}
+
+Destructor.
+
+\membersection{wxValidator::Clone}\label{wxvalidatorclone}
+
+\constfunc{virtual wxValidator*}{Clone}{\void}
+
+All validator classes must implement the {\bf Clone} function, which returns
+an identical copy of itself. This is because validators are passed to control
+constructors as references which must be copied. Unlike objects such as pens
+and brushes, it does not make sense to have a reference counting scheme
+to do this cloning, because all validators should have separate
+data.
+
+This base function returns NULL.
+
+\membersection{wxValidator::GetWindow}\label{wxvalidatorgetwindow}
+
+\constfunc{wxWindow*}{GetWindow}{\void}
+
+Returns the window associated with the validator.
+
+\membersection{wxValidator::SetWindow}\label{wxvalidatorsetwindow}
+
+\func{void}{SetWindow}{\param{wxWindow*}{ window}}
+
+Associates a window with the validator.
+
+\membersection{wxValidator::TransferFromWindow}\label{wxvalidatortransferfromwindow}
+
+\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+
+This overridable function is called when the value in the window must be
+transferred to the validator. Return FALSE if there is a problem.
+
+\membersection{wxValidator::TransferToWindow}\label{wxvalidatortransfertowindow}
+
+\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+
+This overridable function is called when the value associated with the validator must be
+transferred to the window. Return FALSE if there is a problem.
+
+\membersection{wxValidator::Validate}\label{wxvalidatorvalidate}
+
+\func{virtual bool}{Validate}{\param{wxWindow*}{ parent}}
+
+This overridable function is called when the value in the associated window must be validated.
+Return FALSE if the value in the window is not valid; you may pop up an error dialog.
+
+
--- /dev/null
+\section{\class{wxTextValidator}}\label{wxtextvalidator}
+
+wxTextValidator validates text controls, providing a variety of filtering behaviours.
+
+For more information, please see \helpref{Validator overview}{validatoroverview}.
+
+\wxheading{Derived from}
+
+\helpref{wxValidator}{wxvalidator}\\
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{Validator overview}{validatoroverview}, \helpref{wxValidator}{wxvalidator}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxTextValidator::wxTextValidator}\label{wxtextvalidatorconstr}
+
+\func{}{wxTextValidator}{\param{const wxTextValidator\&}{ validator}}
+
+Copy constructor.
+
+\func{}{wxTextValidator}{\param{const long}{ style = wxFILTER\_NONE}, \param{wxString* }{valPtr = NULL}}
+
+Constructor, taking a style and optional pointer to a wxString variable.
+
+\wxheading{Parameters}
+
+\docparam{style}{A bitlist of flags, which can be:
+
+\twocolwidtha{5cm}
+\begin{twocollist}
+\twocolitem{{\bf wxFILTER\_NONE}}{No filtering takes place.}
+\twocolitem{{\bf wxFILTER\_ASCII}}{Non-ASCII characters are filtered out.}
+\twocolitem{{\bf wxFILTER\_ALPHA}}{Non-alpha characters are filtered out.}
+\twocolitem{{\bf wxFILTER\_ALPHANUMERIC}}{Non-alphanumeric characters are filtered out.}
+\twocolitem{{\bf wxFILTER\_NUMERIC}}{Non-numeric characters are filtered out.}
+\twocolitem{{\bf wxFILTER\_INCLUDE\_LIST}}{Use an include list. The validator
+checks if the user input is on the list, complaining if not.}
+\twocolitem{{\bf wxFILTER\_EXCLUDE\_LIST}}{Use an exclude list. The validator
+checks if the user input is on the list, complaining if it is.}
+\end{twocollist}
+}
+
+\docparam{valPtr}{A pointer to a wxString variable that contains the value. This variable
+should have a lifetime equal to or longer than the validator lifetime (which is usually
+determined by the lifetime of the window). If NULL, the validator uses its own internal
+storage for the value.}
+
+\membersection{wxTextValidator::\destruct{wxTextValidator}}
+
+\func{}{\destruct{wxTextValidator}}{\void}
+
+Destructor.
+
+\membersection{wxTextValidator::Clone}\label{wxtextvalidatorclone}
+
+\constfunc{virtual wxTextValidator*}{Clone}{\void}
+
+Clones the text validator using the copy constructor.
+
+\membersection{wxTextValidator::GetExcludeList}\label{wxtextvalidatorgetexcludelist}
+
+\constfunc{wxStringList\&}{GetExcludeList}{\void}
+
+Returns a reference to the exclude list (the list of invalid values).
+
+\membersection{wxTextValidator::GetIncludeList}\label{wxtextvalidatorgetincludelist}
+
+\constfunc{wxStringList\&}{GetIncludeList}{\void}
+
+Returns a reference to the include list (the list of valid values).
+
+\membersection{wxTextValidator::GetStyle}\label{wxtextvalidatorgetstyle}
+
+\constfunc{long}{GetStyle}{\void}
+
+Returns the validator style.
+
+\membersection{wxTextValidator::OnChar}\label{wxtextvalidatoronchar}
+
+\func{void}{OnChar}{\param{wxKeyEvent\&}{ event}}
+
+Receives character input from the window and filters it according to the
+current validator style.
+
+\membersection{wxTextValidator::SetExcludeList}\label{wxtextvalidatorsetexcludelist}
+
+\func{void}{SetExcludeList}{\param{const wxStringList\&}{ stringList}}
+
+Sets the exclude list (invalid values for the user input).
+
+\membersection{wxTextValidator::SetIncludeList}\label{wxtextvalidatorsetincludelist}
+
+\func{void}{SetIncludeList}{\param{const wxStringList\&}{ stringList}}
+
+Sets the include list (valid values for the user input).
+
+\membersection{wxTextValidator::SetStyle}\label{wxtextvalidatorsetstyle}
+
+\func{void}{SetStyle}{\param{long}{ style}}
+
+Sets the validator style.
+
+\membersection{wxTextValidator::TransferFromWindow}\label{wxtextvalidatortransferfromwindow}
+
+\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+
+Transfers the string value to the window.
+
+\membersection{wxTextValidator::TransferToWindow}\label{wxtextvalidatortransfertowindow}
+
+\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+
+Transfers the window value to the string.
+
+\membersection{wxTextValidator::Validate}\label{wxtextvalidatorvalidate}
+
+\func{virtual bool}{Validate}{\param{wxWindow*}{ parent}}
+
+Validates the window contents against the include or exclude lists, depending
+on the validator style.
+
--- /dev/null
+\section{\class{wxView}}\label{wxview}
+
+The view class can be used to model the viewing and editing component of
+an application's file-based data. It is part of the document/view framework supported by wxWindows,
+and cooperates with the \helpref{wxDocument}{wxdocument}, \helpref{wxDocTemplate}{wxdoctemplate}
+and \helpref{wxDocManager}{wxdocmanager} classes.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{See also}
+
+\helpref{wxView overview}{wxviewoverview}, \helpref{wxDocument}{wxdocument}, \helpref{wxDocTemplate}{wxdoctemplate},\rtfsp
+\helpref{wxDocManager}{wxdocmanager}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxView::m\_viewDocument}
+
+\member{wxDocument*}{m\_viewDocument}
+
+The document associated with this view. There may be more than one view per
+document, but there can never be more than one document for one view.
+
+\membersection{wxView::m\_viewFrame}
+
+\member{wxFrame*}{m\_viewFrame}
+
+Frame associated with the view, if any.
+
+\membersection{wxView::m\_viewTypeName}
+
+\member{wxString}{m\_viewTypeName}
+
+The view type name given to the wxDocTemplate constructor, copied to this
+variable when the view is created. Not currently used by the framework.
+
+\membersection{wxView::wxView}
+
+\func{}{wxView}{\param{wxDocument* }{doc = NULL}}
+
+Constructor. Define your own default constructor to initialize application-specific
+data.
+
+\membersection{wxView::\destruct{wxView}}
+
+\func{}{\destruct{wxView}}{\void}
+
+Destructor. Removes itself from the document's list of views.
+
+\membersection{wxView::Activate}
+
+\func{virtual void}{Activate}{\param{bool}{ activate}}
+
+Call this from your view frame's OnActivate member to tell the framework which view is
+currently active. If your windowing system doesn't call OnActivate, you may need to
+call this function from OnMenuCommand or any place where you know the view must
+be active, and the framework will need to get the current view.
+
+The prepackaged view frame wxDocChildFrame calls wxView::Activate from its OnActivate member
+and from its OnMenuCommand member.
+
+This function calls wxView::OnActivateView.
+
+\membersection{wxView::Close}
+
+\func{virtual bool}{Close}{\param{bool}{ deleteWindow = TRUE}}
+
+Closes the view by calling OnClose. If {\it deleteWindow} is TRUE, this function should
+delete the window associated with the view.
+
+\membersection{wxView::GetDocument}
+
+\constfunc{wxDocument*}{GetDocument}{\void}
+
+Gets a pointer to the document associated with the view.
+
+\membersection{wxView::GetDocumentManager}
+
+\constfunc{wxDocumentManager*}{GetDocumentManager}{\void}
+
+Returns a pointer to the document manager instance associated with this view.
+
+\membersection{wxView::GetFrame}
+
+\func{wxFrame *}{GetFrame}{\void}
+
+Gets the frame associated with the view (if any).
+
+\membersection{wxView::GetViewName}
+
+\constfunc{wxString}{GetViewName}{\void}
+
+Gets the name associated with the view (passed to the wxDocTemplate constructor).
+Not currently used by the framework.
+
+\membersection{wxView::OnActivateView}
+
+\func{virtual void}{OnActivateView}{\param{bool }{activate}, \param{wxView *}{activeView}, \param{wxView *}{deactiveView}}
+
+Called when a view is activated by means of wxView::Activate. The default implementation does
+nothing.
+
+\membersection{wxView::OnChangeFilename}
+
+\func{virtual void}{OnChangeFilename}{\void}
+
+Called when the filename has changed. The default implementation constructs a
+suitable title and sets the title of the view frame (if any).
+
+\membersection{wxView::OnClose}
+
+\func{virtual bool}{OnClose}{\param{bool}{ deleteWindow}}
+
+Implements closing behaviour. The default implementation calls wxDocument::Close
+to close the associated document. Does not delete the view. The application
+may wish to do some cleaning up operations in this function, {\it if} a
+call to wxDocument::Close succeeded. For example, if your application's
+all share the same canvas, you need to disassociate the canvas from the view
+and perhaps clear the canvas. If {\it deleteWindow} is TRUE, delete the
+frame associated with the view.
+
+\membersection{wxView::OnCreate}
+
+\func{virtual bool}{OnCreate}{\param{wxDocument* }{doc}, \param{long}{ flags}}
+
+Called just after view construction to give the view a chance to initialize
+itself based on the passed document and flags (unused). By default, simply
+returns TRUE. If the function returns FALSE, the view will be deleted.
+
+The predefined document child frame, wxDocChildFrame, calls this function
+automatically.
+
+\membersection{wxView::OnCreatePrintout}
+
+\func{virtual wxPrintout*}{OnCreatePrintout}{\void}
+
+If the printing framework is enabled in the library, this function returns a
+\rtfsp\helpref{wxPrintout}{wxprintout} object for the purposes of printing. It should create a new object
+everytime it is called; the framework will delete objects it creates.
+
+By default, this function returns an instance of wxDocPrintout, which prints
+and previews one page by calling wxView::OnDraw.
+
+Override to return an instance of a class other than wxDocPrintout.
+
+\membersection{wxView::OnUpdate}
+
+\func{virtual void}{OnUpdate}{\param{wxView* }{sender}, \param{wxObject* }{hint}}
+
+Called when the view should be updated. {\it sender} is a pointer to the view
+that sent the update request, or NULL if no single view requested the update (for instance,
+when the document is opened). {\it hint} is as yet unused but may in future contain
+application-specific information for making updating more efficient.
+
+\membersection{wxView::SetDocument}
+
+\func{void}{SetDocument}{\param{wxDocument* }{doc}}
+
+Associates the given document with the view. Normally called by the
+framework.
+
+\membersection{wxView::SetFrame}
+
+\func{void}{SetFrame}{\param{wxFrame* }{frame}}
+
+Sets the frame associated with this view. The application should call this
+if possible, to tell the view about the frame.
+
+\membersection{wxView::SetViewName}
+
+\func{void}{SetViewName}{\param{const wxString\& }{name}}
+
+Sets the view type name. Should only be called by the framework.
+
+
--- /dev/null
+\section{\class{wxWindow}}\label{wxwindow}
+
+wxWindow is the base class for all windows. Any
+children of the window will be deleted automatically by the destructor
+before the window itself is deleted.
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Window styles}
+
+The following styles can apply to all windows, although they will not always make sense for a particular
+window class.
+
+\twocolwidtha{5cm}%
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\windowstyle{wxSIMPLE\_BORDER}}{Displays a thin border around the window. wxBORDER is the old name
+for this style.}
+\twocolitem{\windowstyle{wxDOUBLE\_BORDER}}{Displays a double border. Windows only.}
+\twocolitem{\windowstyle{wxSUNKEN\_BORDER}}{Displays a sunken border.}
+\twocolitem{\windowstyle{wxRAISED\_BORDER}}{Displays a sunken border.}
+\twocolitem{\windowstyle{wxSTATIC\_BORDER}}{Displays a border suitable for a static control.}
+\twocolitem{\windowstyle{wxTRANSPARENT\_WINDOW}}{The window is transparent, that is, it will not receive paint
+events. Windows only.}
+\twocolitem{\windowstyle{wxNO\_3D}}{Prevents the children of this window taking on 3D styles, even though
+the application-wide policy is for 3D controls. Windows only.}
+\twocolitem{\windowstyle{wxTAB\_TRAVERSAL}}{Use this to enable tab traversal for non-dialog windows.}
+\twocolitem{\windowstyle{wxVSCROLL}}{Use this style to enable a vertical scrollbar.}
+\twocolitem{\windowstyle{wxHSCROLL}}{Use this style to enable a horizontal scrollbar.}
+\end{twocollist}
+
+See also \helpref{window styles overview}{windowstyles}.
+
+\wxheading{See also}
+
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxWindow::wxWindow}
+
+\func{}{wxWindow}{\void}
+
+Default constructor.
+
+\func{}{wxWindow}{\param{wxWindow*}{ parent}, \param{const wxWindowID }{id},
+ \param{const wxPoint\& }{pos = wxDefaultPosition},
+ \param{const wxSize\& }{size = wxDefaultSize},
+ \param{const long }{style = 0},
+ \param{const wxString\& }{name = wxPanelNameStr}}
+
+Constructs a window, which can be a child of a frame, dialog or any other non-control window.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Pointer to a parent window.}
+
+\docparam{id}{Window identifier. If -1, will automatically create an identifier.}
+
+\docparam{pos}{Window position. wxDefaultPosition is (-1, -1) which indicates that wxWindows
+should generate a default position for the window. If using the wxWindow class directly, supply
+an actual position.}
+
+\docparam{size}{Window size. wxDefaultSize is (-1, -1) which indicates that wxWindows
+should generate a default size for the window.}
+
+\docparam{style}{Window style. For generic window styles, please see \helpref{wxWindow}{wxwindow}.}
+
+\docparam{name}{Window name.}
+
+\membersection{wxWindow::\destruct{wxWindow}}
+
+\func{}{\destruct{wxWindow}}{\void}
+
+Destructor. Deletes all subwindows, then deletes itself. Instead of using
+the {\bf delete} operator explicitly, you should normally
+use \helpref{wxWindow::Destroy}{wxwindowdestroy} so that wxWindows
+can delete a window only when it is safe to do so, in idle time.
+
+\wxheading{See also}
+
+\helpref{Window deletion overview}{windowdeletionoverview},\rtfsp
+\helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow},\rtfsp
+\helpref{wxWindow::Destroy}{wxwindowdestroy},\rtfsp
+\helpref{wxCloseEvent}{wxcloseevent}
+
+\membersection{wxWindow::AddChild}
+
+\func{virtual void}{AddChild}{\param{wxWindow* }{child}}
+
+Adds a child window. This is called automatically by window creation
+functions so should not be required by the application programmer.
+
+\wxheading{Parameters}
+
+\docparam{child}{Child window to add.}
+
+\membersection{wxWindow::CaptureMouse}\label{wxwindowcapturemouse}
+
+\func{virtual void}{CaptureMouse}{\void}
+
+Directs all mouse input to this window. Call \helpref{wxWindow::ReleaseMouse}{wxwindowreleasemouse} to
+release the capture.
+
+\wxheading{See also}
+
+\helpref{wxWindow::ReleaseMouse}{wxwindowreleasemouse}
+
+\membersection{wxWindow::Center}\label{wxwindowcenter}
+
+\func{void}{Center}{\param{const int}{ direction}}
+
+A synonym for \helpref{Centre}{wxwindowcentre}.
+
+\membersection{wxWindow::Centre}\label{wxwindowcentre}
+
+\func{virtual void}{Centre}{\param{const int}{ direction = wxHORIZONTAL}}
+
+Centres the window.
+
+\wxheading{Parameters}
+
+\docparam{direction}{Specifies the direction for the centering. May be {\tt wxHORIZONTAL}, {\tt wxVERTICAL}\rtfsp
+or {\tt wxBOTH}.}
+
+\wxheading{Remarks}
+
+The actual behaviour depends on the derived window. For a frame or dialog box,
+centring is relative to the whole display. For a panel item, centring is
+relative to the panel.
+
+\wxheading{See also}
+
+\helpref{wxWindow::Center}{wxwindowcenter}
+
+\membersection{wxWindow::Clear}\label{wxwindowclear}
+
+\func{void}{Clear}{\void}
+
+Clears the window by filling it with the current background colour.
+
+\membersection{wxWindow::ClientToScreen}
+
+\constfunc{virtual void}{ClientToScreen}{\param{int* }{x}, \param{int* }{y}}
+
+Converts to screen coordinates from coordinates relative to this window.
+
+\docparam{x}{A pointer to a integer value for the x coordinate. Pass the client coordinate in, and
+a screen coordinate will be passed out.}
+
+\docparam{y}{A pointer to a integer value for the y coordinate. Pass the client coordinate in, and
+a screen coordinate will be passed out.}
+
+\membersection{wxWindow::Close}\label{wxwindowclose}
+
+\func{virtual bool}{Close}{\param{const bool}{ force = FALSE}}
+
+The purpose of this call is to provide a safer way of destroying a window than using
+the {\it delete} operator.
+
+\wxheading{Parameters}
+
+\docparam{force}{FALSE if the window's close handler should be able to veto the destruction
+of this window, TRUE if it cannot.}
+
+\wxheading{Remarks}
+
+Close calls the \helpref{close handler}{wxcloseevent} for the window, providing an opportunity for the window to
+choose whether to destroy the window.
+
+The close handler should check whether the window is being deleted forcibly,
+using \helpref{wxCloseEvent::GetForce}{wxcloseeventgetforce}, in which case it should
+destroy the window using \helpref{wxWindow::Destroy}{wxwindowdestroy}.
+
+Applies to managed windows (wxFrame and wxDialog classes) only.
+
+\wxheading{See also}
+
+\helpref{Window deletion overview}{windowdeletionoverview},\rtfsp
+\helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow},\rtfsp
+\helpref{wxWindow::Destroy}{wxwindowdestroy},\rtfsp
+\helpref{wxCloseEvent}{wxcloseevent}
+
+\membersection{wxWindow::Destroy}\label{wxwindowdestroy}
+
+\func{virtual bool}{Destroy}{\void}
+
+Destroys the window safely. Use this function instead of the delete operator, since
+different window classes can be destroyed differently. Frames and dialogs
+are not destroyed immediately when this function is called - they are added
+to a list of windows to be deleted on idle time, when all the window's events
+have been processed. This prevents problems with events being sent to non-existant
+windows.
+
+\wxheading{Return value}
+
+TRUE if the window has either been successfully deleted, or it has been added
+to the list of windows pending real deletion.
+
+\membersection{wxWindow::DestroyChildren}
+
+\func{virtual void}{DestroyChildren}{\void}
+
+Destroys all children of a window. Called automatically by the destructor.
+
+\membersection{wxWindow::DragAcceptFiles}\label{wxwindowdragacceptfiles}
+
+\func{virtual void}{DragAcceptFiles}{\param{const bool}{ accept}}
+
+Enables or disables elibility for drop file events (OnDropFiles).
+
+\wxheading{Parameters}
+
+\docparam{accept}{If TRUE, the window is eligible for drop file events. If FALSE, the window
+will not accept drop file events.}
+
+\wxheading{Remarks}
+
+Windows only.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnDropFiles}{wxwindowondropfiles}
+
+\membersection{wxWindow::Enable}\label{wxwindowenable}
+
+\func{virtual void}{Enable}{\param{const bool}{ enable}}
+
+Enable or disable the window for user input.
+
+\wxheading{Parameters}
+
+\docparam{enable}{If TRUE, enables the window for input. If FALSE, disables the window.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::IsEnabled}{wxwindowisenabled}
+
+\membersection{wxWindow::FakePopupMenu}\label{wxwindowfakepopupmenu}
+
+\func{virtual bool}{FakePopupMenu}{\param{wxMenu* }{menu}, \param{const int }{x}, \param{const int }{y}}
+
+A replacement for wxWindow::PopupMenu for cases where the PopupMenu implementation
+does not work correctly, in particular on Motif platforms.
+
+\wxheading{Parameters}
+
+\docparam{menu}{Menu to pop up.}
+
+\docparam{x}{Required x position for the menu to appear.}
+
+\docparam{y}{Required y position for the menu to appear.}
+
+\wxheading{Remarks}
+
+This is a cut-down version of PopupMenu using a dialog and listbox; pull-right menus
+are not supported.
+
+\wxheading{See also}
+
+\helpref{wxMenu}{wxmenu}, \helpref{wxWindow::PopupMenu}{wxwindowpopupmenu}
+
+\membersection{wxWindow::FindFocus}\label{wxwindowfindfocus}
+
+\func{static wxWindow*}{FindFocus}{\void}
+
+Finds the window or control which currently has the keyboard focus.
+
+\wxheading{Remarks}
+
+Note that this is a static function, so it can be called without needing a wxWindow pointer.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetFocus}{wxwindowsetfocus}
+
+\membersection{wxWindow::Fit}\label{wxwindowfit}
+
+\func{virtual void}{Fit}{\void}
+
+Sizes the window so that it fits around its subwindows.
+
+\membersection{wxWindow::GetBackgroundColour}\label{wxwindowgetbackgroundcolour}
+
+\constfunc{virtual wxColour}{GetBackgroundColour}{\void}
+
+Returns the background colour of the window.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetBackgroundColour}{wxwindowsetbackgroundcolour},\rtfsp
+\helpref{wxWindow::SetForegroundColour}{wxwindowsetforegroundcolour},\rtfsp
+\helpref{wxWindow::GetForegroundColour}{wxwindowgetforegroundcolour},\rtfsp
+\helpref{wxWindow::OnEraseBackground}{wxwindowonerasebackground}
+
+\membersection{wxWindow::GetCharHeight}
+
+\constfunc{virtual int}{GetCharHeight}{\void}
+
+Returns the character height for this window.
+
+\membersection{wxWindow::GetCharWidth}
+
+\constfunc{virtual int}{GetCharWidth}{\void}
+
+Returns the average character width for this window.
+
+\membersection{wxWindow::GetChildren}
+
+\func{wxList*}{GetChildren}{\void}
+
+Returns a pointer to the list of the window's children.
+
+\membersection{wxWindow::GetClientSize}\label{wxwindowgetclientsize}
+
+\constfunc{virtual void}{GetClientSize}{\param{int* }{width}, \param{int* }{height}}
+
+This gets the size of the window `client area' in pixels. The client area is the
+area which may be drawn on by the programmer, excluding title bar, border etc.
+
+\wxheading{Parameters}
+
+\docparam{width}{Receives the client width in pixels.}
+
+\docparam{height}{Receives the client height in pixels.}
+
+\membersection{wxWindow::GetConstraints}\label{wxwindowgetconstraints}
+
+\constfunc{wxLayoutConstraints*}{GetConstraints}{\void}
+
+Returns a pointer to the window's layout constraints, or NULL if there are none.
+
+\membersection{wxWindow::GetDefaultItem}\label{wxwindowgetdefaultitem}
+
+\constfunc{wxButton*}{GetDefaultItem}{\void}
+
+Returns a pointer to the button which is the default for this window, or NULL.
+
+\membersection{wxWindow::GetEventHandler}\label{wxwindowgeteventhandler}
+
+\constfunc{wxEvtHandler*}{GetEventHandler}{\void}
+
+Returns the event handler for this window. By default, the window is its
+own event handler.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetEventHandler}{wxwindowseteventhandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent},\rtfsp
+\helpref{wxEvtHandler}{wxevthandler}\rtfsp
+
+\membersection{wxWindow::GetFont}\label{wxwindowgetfont}
+
+\constfunc{wxFont*}{GetFont}{\void}
+
+Returns a pointer to the font for this window.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetFont}{wxwindowsetfont}
+
+\membersection{wxWindow::GetForegroundColour}\label{wxwindowgetforegroundcolour}
+
+\func{virtual wxColour}{GetForegroundColour}{\void}
+
+Returns the foreground colour of the window.
+
+\wxheading{Remarks}
+
+The interpretation of foreground colour is open to interpretation according
+to the window class; it may be the text colour or other colour, or it may not
+be used at all.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetForegroundColour}{wxwindowsetforegroundcolour},\rtfsp
+\helpref{wxWindow::SetBackgroundColour}{wxwindowsetbackgroundcolour},\rtfsp
+\helpref{wxWindow::GetBackgroundColour}{wxwindowgetbackgroundcolour}
+
+\membersection{wxWindow::GetGrandParent}
+
+\constfunc{wxWindow*}{GetGrandParent}{\void}
+
+Returns the grandparent of a window, or NULL if there isn't one.
+
+\membersection{wxWindow::GetHandle}
+
+\constfunc{void*}{GetHandle}{\void}
+
+Returns the platform-specific handle of the physical window. Cast it to an appropriate
+handle, such as {\bf HWND} for Windows or {\bf Widget} for Motif.
+
+\membersection{wxWindow::GetId}\label{wxwindowgetid}
+
+\constfunc{int}{GetId}{\void}
+
+Returns the identifier of the window.
+
+\wxheading{Remarks}
+
+Each window has an integer identifier. If the application has not provided one,
+an identifier will be generated.
+
+TODO: perhaps there should be a default identifier for each class, rather
+choosing one, which could clash with other ones.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetId}{wxwindowsetid}
+
+\membersection{wxWindow::GetPosition}
+
+\constfunc{virtual void}{GetPosition}{\param{int* }{x}, \param{int* }{y}}
+
+This gets the position of the window in pixels, relative to the parent window or
+if no parent, relative to the whole display.
+
+\wxheading{Parameters}
+
+\docparam{x}{Receives the x position of the window.}
+
+\docparam{y}{Receives the y position of the window.}
+
+\membersection{wxWindow::GetLabel}
+
+\constfunc{virtual wxString\& }{GetLabel}{\void}
+
+Generic way of getting a label from any window, for
+identification purposes.
+
+\wxheading{Remarks}
+
+The interpretation of this function differs from class to class.
+For frames and dialogs, the value returned is the title. For buttons or static text controls, it is
+the button text. This function can be useful for meta-programs (such as testing
+tools or special-needs access programs) which need to identify windows
+by name.
+
+\membersection{wxWindow::GetName}\label{wxwindowgetname}
+
+\constfunc{virtual wxString\& }{GetName}{\void}
+
+Returns the window's name.
+
+\wxheading{Remarks}
+
+This name is not guaranteed to be unique; it is up to the programmer to supply an appropriate
+name in the window constructor or via \helpref{wxWindow::SetName}{wxwindowsetname}.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetName}{wxwindowsetname}
+
+\membersection{wxWindow::GetParent}
+
+\constfunc{virtual wxWindow*}{GetParent}{\void}
+
+Returns the parent of the window, or NULL if there is no parent.
+
+\membersection{wxWindow::GetReturnCode}\label{wxwindowgetreturncode}
+
+\func{int}{GetReturnCode}{\void}
+
+Gets the return code for this window.
+
+\wxheading{Remarks}
+
+A return code is normally associated with a modal dialog, where \helpref{wxDialog::ShowModal}{wxdialogshowmodal} returns
+a code to the application.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetReturnCode}{wxwindowsetreturncode}, \helpref{wxDialog::ShowModal}{wxdialogshowmodal},\rtfsp
+\helpref{wxDialog::EndModal}{wxdialogendmodal}
+
+\membersection{wxWindow::GetScrollThumb}\label{wxwindowgetscrollthumb}
+
+\func{virtual int}{GetScrollThumb}{\param{const int }{orientation}}
+
+Returns the built-in scrollbar thumb size.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar}
+
+\membersection{wxWindow::GetScrollPos}\label{wxwindowgetscrollpos}
+
+\func{virtual int}{GetScrollPos}{\param{const int }{orientation}}
+
+Returns the built-in scrollbar position.
+
+\wxheading{See also}
+
+See \helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar}
+
+\membersection{wxWindow::GetScrollRange}\label{wxwindowgetscrollrange}
+
+\func{virtual int}{GetScrollRange}{\param{const int }{orientation}}
+
+Returns the built-in scrollbar range.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar}
+
+\membersection{wxWindow::GetSize}
+
+\constfunc{virtual void}{GetSize}{\param{int* }{width}, \param{int* }{height}}
+
+This gets the size of the entire window in pixels.
+
+\wxheading{Parameters}
+
+\docparam{width}{Receives the window width.}
+
+\docparam{height}{Receives the window height.}
+
+\membersection{wxWindow::GetTextExtent}
+
+\constfunc{virtual void}{GetTextExtent}{\param{const wxString\& }{string}, \param{int* }{x}, \param{int* }{y},
+ \param{int* }{descent = NULL}, \param{int* }{externalLeading = NULL},
+ \param{const wxFont* }{font = NULL}, \param{const bool}{ use16 = FALSE}}
+
+Gets the dimensions of the string as it would be drawn on the
+window with the currently selected font.
+
+\wxheading{Parameters}
+
+\docparam{string}{String whose extent is to be measured.}
+
+\docparam{x}{Return value for width.}
+
+\docparam{y}{Return value for height.}
+
+\docparam{descent}{Return value for descent (optional).}
+
+\docparam{externalLeading}{Return value for external leading (optional).}
+
+\docparam{font}{Font to use instead of the current window font (optional).}
+
+\docparam{use16}{If TRUE, {\it string} contains 16-bit characters. The default is FALSE.}
+
+\membersection{wxWindow::GetTitle}\label{wxwindowgettitle}
+
+\func{virtual wxString}{GetTitle}{\void}
+
+Gets the window's title. Applicable only to frames and dialogs.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetTitle}{wxwindowsettitle}
+
+\membersection{wxWindow::GetWindowStyleFlag}
+
+\constfunc{long}{GetWindowStyleFlag}{\void}
+
+Gets the window style that was passed to the consructor or {\bf Create} member.
+
+\membersection{wxWindow::InitDialog}\label{wxwindowinitdialog}
+
+\func{void}{InitDialog}{\void}
+
+Sends an \helpref{wxWindow::OnInitDialog}{wxwindowoninitdialog} event, which
+in turn transfers data to the dialog via validators.
+
+\wxheading{See also}
+
+\helpref{wxWindow::OnInitDialog}{wxwindowoninitdialog}
+
+\membersection{wxWindow::IsEnabled}\label{wxwindowisenabled}
+
+\constfunc{virtual bool}{IsEnabled}{\void}
+
+Returns TRUE if the window is enabled for input, FALSE otherwise.
+
+\wxheading{See also}
+
+\helpref{wxWindow::Enable}{wxwindowenable}
+
+\membersection{wxWindow::IsRetained}\label{wxwindowisretained}
+
+\constfunc{virtual bool}{IsRetained}{\void}
+
+Returns TRUE if the window is retained, FALSE otherwise.
+
+\wxheading{Remarks}
+
+Retained windows are only available on X platforms.
+
+\membersection{wxWindow::IsShown}\label{wxwindowisshown}
+
+\constfunc{virtual bool}{IsShown}{\void}
+
+Returns TRUE if the window is shown, FALSE if it has been hidden.
+
+\membersection{wxWindow::Layout}\label{wxwindowlayout}
+
+\func{void}{Layout}{\void}
+
+Invokes the constraint-based layout algorithm for this window. It is called
+automatically by the default {\bf wxWindow::OnSize} member.
+
+\membersection{wxWindow::LoadFromResource}\label{wxwindowloadfromresource}
+
+\func{virtual bool}{LoadFromResource}{\param{wxWindow* }{parent},\rtfsp
+\param{const wxString\& }{resourceName}, \param{const wxResourceTable* }{resourceTable = NULL}}
+
+Loads a panel or dialog from a resource file.
+
+\wxheading{Parameters}
+
+\docparam{parent}{Parent window.}
+
+\docparam{resourceName}{The name of the resource to load.}
+
+\docparam{resourceTable}{The resource table to load it from. If this is NULL, the
+default resource table will be used.}
+
+\wxheading{Return value}
+
+TRUE if the operation succeeded, otherwise FALSE.
+
+\wxheading{Remarks}
+
+TODO
+
+\wxheading{See also}
+
+TODO
+
+\membersection{wxWindow::Lower}\label{wxwindowlower}
+
+\func{void}{Lower}{\void}
+
+Lowers the window to the bottom of the window hierarchy if it is a managed window (dialog
+or frame).
+
+\membersection{wxWindow::MakeModal}\label{wxwindowmakemodal}
+
+\func{virtual void}{MakeModal}{\param{const bool }{flag}}
+
+Disables all other windows in the application so that
+the user can only interact with this window.
+
+\wxheading{Parameters}
+
+\docparam{flag}{If TRUE, this call disables all other windows in the application so that
+the user can only interact with this window. If FALSE, the effect is reversed.}
+
+\membersection{wxWindow::Move}\label{wxwindowmove}
+
+\func{void}{Move}{\param{const int}{ x}, \param{const int}{ y}}
+
+Moves the window to the given position.
+
+\wxheading{Parameters}
+
+\docparam{x}{Required x position.}
+
+\docparam{y}{Required y position.}
+
+\wxheading{Remarks}
+
+Implementations of SetSize can also implicitly implement the
+wxWindow::Move function, which is defined in the base wxWindow class
+as the call:
+
+\begin{verbatim}
+ SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING);
+\end{verbatim}
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetSize}{wxwindowsetsize}
+
+\membersection{wxWindow::OnActivate}\label{wxwindowonactivate}
+
+\func{void}{OnActivate}{\param{wxActivateEvent\&}{ event}}
+
+Called when a window is activated or deactivated.
+
+\wxheading{Parameters}
+
+\docparam{event}{Object containing activation information.}
+
+\wxheading{Remarks}
+
+If the window is being activated, \helpref{wxActivateEvent::GetActive}{wxactivateeventgetactive} returns TRUE,
+otherwise it returns FALSE (it is being deactivated).
+
+\wxheading{See also}
+
+\helpref{wxActivateEvent}{wxactivateevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnChar}\label{wxwindowonchar}
+
+\func{void}{OnChar}{\param{wxKeyEvent\&}{ event}}
+
+Called when the user has pressed a key.
+
+\wxheading{Parameters}
+
+\docparam{event}{Object containing keypress information. See \helpref{wxKeyEvent}{wxkeyevent} for
+details about this class.}
+
+\wxheading{Remarks}
+
+This member function is called in response to a keypress. To intercept this event,
+use the EVT\_CHAR macro in an event table definition. Your {\bf OnChar} handler may call this
+default function to achieve default keypress functionality.
+
+Note that the ASCII values do not have explicit key codes: they are passed as ASCII
+values.
+
+Most, but not all, windows allow keypresses to be intercepted.
+
+\wxheading{See also}
+
+\helpref{wxKeyEvent}{wxkeyevent}, \helpref{wxWindow::OnCharHook}{wxwindowoncharhook},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnCharHook}\label{wxwindowoncharhook}
+
+\func{void}{OnCharHook}{\param{wxKeyEvent\&}{ event}}
+
+This member is called to allow the window to intercept keyboard events
+before they are processed by child windows.
+
+\wxheading{Parameters}
+
+\docparam{event}{Object containing keypress information. See \helpref{wxKeyEvent}{wxkeyevent} for
+details about this class.}
+
+\wxheading{Remarks}
+
+This member function is called in response to a keypress, if the window is active. To intercept this event,
+use the EVT\_CHAR\_HOOK macro in an event table definition. If you do not process a particular
+keypress, call \helpref{wxEvent::Skip}{wxeventskip} to allow default processing.
+
+An example of using this function is in the implementation of escape-character processing for wxDialog,
+where pressing ESC dismisses the dialog by {\bf OnCharHook} 'forging' a cancel button press event.
+
+Note that the ASCII values do not have explicit key codes: they are passed as ASCII
+values.
+
+This function is only relevant to top-level windows (frames and dialogs), and under
+Windows only.
+
+\wxheading{See also}
+
+\helpref{wxKeyEvent}{wxkeyevent}, \helpref{wxWindow::OnCharHook}{wxwindowoncharhook},\rtfsp
+\helpref{wxApp::OnCharHook}{wxapponcharhook},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnCommand}\label{wxwindowoncommand}
+
+\func{virtual void}{OnCommand}{\param{wxEvtHandler\& }{object}, \param{wxCommandEvent\& }{event}}
+
+This virtual member function is called if the control does not handle the command event.
+
+\wxheading{Parameters}
+
+\docparam{object}{Object receiving the command event.}
+
+\docparam{event}{Command event}
+
+\wxheading{Remarks}
+
+This virtual function is provided mainly for backward compatibility. You can also intercept commands
+from child controls by using an event table, with identifiers or identifier ranges to identify
+the control(s) in question.
+
+\wxheading{See also}
+
+\helpref{wxCommandEvent}{wxcommandevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnClose}\label{wxwindowonclose}
+
+\func{virtual bool}{OnClose}{\void}
+
+Called when the user has tried to close a a frame
+or dialog box using the window manager (X) or system menu (Windows).
+
+{\bf Note:} This is an obsolete function retained for backward compatibility.
+It is superceded by the \helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow} event
+handler.
+
+\wxheading{Return value}
+
+If TRUE is returned by OnClose, the window will be deleted by the system, otherwise the
+attempt will be ignored. Do not delete the window from within this handler, although
+you may delete other windows.
+
+\wxheading{Remarks}
+
+Derive your own class to handle this message. The default handler returns FALSE.
+
+\wxheading{See also}
+
+\helpref{Window deletion overview}{windowdeletionoverview},\rtfsp
+\helpref{wxWindow::Close}{wxwindowclose},\rtfsp
+\helpref{wxWindow::OnCloseWindow}{wxwindowonclosewindow},\rtfsp
+\helpref{wxCloseEvent}{wxcloseevent}
+
+\membersection{wxWindow::OnCloseWindow}\label{wxwindowonclosewindow}
+
+\func{void}{OnCloseWindow}{\param{wxCloseEvent\& }{event}}
+
+This is an event handler function called when the user has tried to close a a frame
+or dialog box using the window manager (X) or system menu (Windows). It is
+called via the \helpref{wxWindow::Close}{wxwindowclose} function, so
+that the application can also invoke the handler programmatically.
+
+Use the EVT\_CLOSE event table macro to handle close events.
+
+You should check whether the application is forcing the deletion of the window
+using \helpref{wxCloseEvent::GetForce}{wxcloseeventgetforce}. If this is TRUE,
+destroy the window using \helpref{wxWindow::Destroy}{wxwindowdestroy}.
+If not, it is up to you whether you respond by destroying the window.
+
+\wxheading{Remarks}
+
+The \helpref{wxWindow::OnClose}{wxwindowonclose} virtual function remains
+for backward compatibility with earlier versions of wxWindows. The
+default {\bf OnCloseWindow} handler for wxFrame and wxDialog will call {\bf OnClose},
+destroying the window if it returns TRUE or if the close is being forced.
+
+\wxheading{See also}
+
+\helpref{Window deletion overview}{windowdeletionoverview},\rtfsp
+\helpref{wxWindow::Close}{wxwindowclose},\rtfsp
+\helpref{wxWindow::OnClose}{wxwindowonclose},\rtfsp
+\helpref{wxWindow::Destroy}{wxwindowdestroy},\rtfsp
+\helpref{wxCloseEvent}{wxcloseevent}
+
+\membersection{wxWindow::OnDefaultAction}\label{wxwindowondefaultaction}
+
+\func{virtual void}{OnDefaultAction}{\param{wxControl* }{control}}
+
+Called when the user initiates the default action for a panel or
+dialog box, for example by double clicking on a listbox.
+
+\wxheading{Parameters}
+
+\docparam{control}{The control which caused the default action.}
+
+\wxheading{Remarks}
+
+TODO: eliminate this?? Or keep it for backward compatibility?
+
+\membersection{wxWindow::OnDropFiles}\label{wxwindowondropfiles}
+
+\func{void}{OnDropFiles}{\param{wxDropFilesEvent\&}{ event}}
+
+Called when files have been dragged from the file manager to the window.
+
+\wxheading{Parameters}
+
+\docparam{event}{Drop files event. For more information, see \helpref{wxDropFilesEvent}{wxdropfilesevent}.}
+
+\wxheading{Remarks}
+
+The window must have previously been enabled for dropping by calling
+\rtfsp\helpref{wxWindow::DragAcceptFiles}{wxwindowdragacceptfiles}.
+
+This event is only generated under Windows.
+
+To intercept this event, use the EVT\_DROP\_FILES macro in an event table definition.
+
+\wxheading{See also}
+
+\helpref{wxDropFilesEvent}{wxdropfilesevent}, \helpref{wxWindow::DragAcceptFiles}{wxwindowdragacceptfiles},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnEraseBackground}\label{wxwindowonerasebackground}
+
+\func{void}{OnEraseBackground}{\param{wxEraseEvent\&}{ event}}
+
+Called when the background of the window needs to be erased.
+
+\wxheading{Parameters}
+
+\docparam{event}{Erase background event. For more information, see \helpref{wxEraseEvent}{wxeraseevent}.}
+
+\wxheading{Remarks}
+
+This event is only generated under Windows.
+
+To intercept this event, use the EVT\_ERASE\_BACKGROUND macro in an event table definition.
+
+\wxheading{See also}
+
+\helpref{wxEraseEvent}{wxeraseevent}, \helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnKillFocus}\label{wxwindowonkillfocus}
+
+\func{void}{OnKillFocus}{\param{wxFocusEvent\& }{event}}
+
+Called when a window's focus is being killed.
+
+\wxheading{Parameters}
+
+\docparam{event}{The focus event. For more information, see \helpref{wxFocusEvent}{wxfocusevent}.}
+
+\wxheading{Remarks}
+
+To intercept this event, use the macro EVT\_KILL\_FOCUS in an event table definition.
+
+Most, but not all, windows respond to this event.
+
+\wxheading{See also}
+
+\helpref{wxFocusEvent}{wxfocusevent}, \helpref{wxWindow::OnSetFocus}{wxwindowonsetfocus},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnIdle}\label{wxwindowonidle}
+
+\func{void}{Onidle}{\param{wxIdleEvent\& }{event}}
+
+Provide this member function for any processing which needs to be done
+when the application is idle.
+
+\wxheading{See also}
+
+\helpref{wxApp::OnIdle}{wxapponidle}, \helpref{wxIdleEvent}{wxidleevent}
+
+\membersection{wxWindow::OnInitDialog}\label{wxwindowoninitdialog}
+
+\func{void}{OnInitDialog}{\param{wxInitDialogEvent\&}{ event}}
+
+Default handler for the wxEVT\_INIT\_DIALOG event. Calls \helpref{wxWindow::TransferDataToWindow}{wxwindowtransferdatatowindow}.
+
+\wxheading{Parameters}
+
+\docparam{event}{Dialog initialisation event.}
+
+\wxheading{Remarks}
+
+Gives the window the default behaviour of transferring data to child controls via
+the validator that each control has.
+
+\wxheading{See also}
+
+\helpref{wxValidator}{wxvalidator}, \helpref{wxWindow::TransferDataToWindow}{wxwindowtransferdatatowindow}
+
+\membersection{wxWindow::OnMenuCommand}\label{wxwindowonmenucommand}
+
+\func{void}{OnMenuCommand}{\param{wxCommandEvent\& }{event}}
+
+Called when a menu command is received from a menu bar.
+
+\wxheading{Parameters}
+
+\docparam{event}{The menu command event. For more information, see \helpref{wxCommandEvent}{wxcommandevent}.}
+
+\wxheading{Remarks}
+
+A function with this name doesn't actually exist; you can choose any member function to receive
+menu command events, using the EVT\_COMMAND macro for individual commands or EVT\_COMMAND\_RANGE for
+a range of commands.
+
+\wxheading{See also}
+
+\helpref{wxCommandEvent}{wxcommandevent},\rtfsp
+\helpref{wxWindow::OnMenuHighlight}{wxwindowonmenuhighlight},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnMenuHighlight}\label{wxwindowonmenuhighlight}
+
+\func{void}{OnMenuHighlight}{\param{wxMenuEvent\& }{event}}
+
+Called when a menu select is received from a menu bar: that is, the
+mouse cursor is over a menu item, but the left mouse button has not been
+pressed.
+
+\wxheading{Parameters}
+
+\docparam{event}{The menu highlight event. For more information, see \helpref{wxMenuEvent}{wxmenuevent}.}
+
+\wxheading{Remarks}
+
+You can choose any member function to receive
+menu select events, using the EVT\_MENU\_HIGHLIGHT macro for individual menu items or EVT\_MENU\_HIGHLIGHT\_ALL macro
+for all menu items.
+
+The default implementation for \helpref{wxFrame::OnMenuHighlight}{wxframeonmenuhighlight} displays help
+text in the first field of the status bar.
+
+This function was known as {\bf OnMenuSelect} in earlier versions of wxWindows, but this was confusing
+since a selection is normally a left-click action.
+
+\wxheading{See also}
+
+\helpref{wxMenuEvent}{wxmenuevent},\rtfsp
+\helpref{wxWindow::OnMenuCommand}{wxwindowonmenucommand},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+
+\membersection{wxWindow::OnMouseEvent}\label{wxwindowonmouseevent}
+
+\func{void}{OnMouseEvent}{\param{wxMouseEvent\&}{ event}}
+
+Called when the user has initiated an event with the
+mouse.
+
+\wxheading{Parameters}
+
+\docparam{event}{The mouse event. See \helpref{wxMouseEvent}{wxmouseevent} for
+more details.}
+
+\wxheading{Remarks}
+
+Most, but not all, windows respond to this event.
+
+To intercept this event, use the EVT\_MOUSE\_EVENTS macro in an event table definition, or individual
+mouse event macros such as EVT\_LEFT\_DOWN.
+
+\wxheading{See also}
+
+\helpref{wxMouseEvent}{wxmouseevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnMove}\label{wxwindowonmove}
+
+\func{void}{OnMove}{\param{wxMoveEvent\& }{event}}
+
+Called when a window is moved.
+
+\wxheading{Parameters}
+
+\docparam{event}{The move event. For more information, see \helpref{wxMoveEvent}{wxmoveevent}.}
+
+\wxheading{Remarks}
+
+Use the EVT\_MOVE macro to intercept move events.
+
+\wxheading{Remarks}
+
+Not currently implemented.
+
+\wxheading{See also}
+
+\helpref{wxMoveEvent}{wxmoveevent},\rtfsp
+\helpref{wxFrame::OnSize}{wxframeonsize},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnPaint}\label{wxwindowonpaint}
+
+\func{void}{OnPaint}{\param{wxPaintEvent\& }{event}}
+
+Sent to the event handler when the window must be refreshed.
+
+\wxheading{Parameters}
+
+\docparam{event}{Paint event. For more information, see \helpref{wxPaintEvent}{wxpaintevent}.}
+
+\wxheading{Remarks}
+
+Use the EVT\_PAINT macro in an event table definition to intercept paint events.
+
+In a paint event handler, the application should always create a \helpref{wxPaintDC}{wxpaintdc} object.
+
+For example:
+
+\small{%
+\begin{verbatim}
+ void MyWindow::OnPaint(wxPaintEvent& event)
+ {
+ wxPaintDC dc(this);
+
+ DrawMyDocument(dc);
+ }
+\end{verbatim}
+}%
+
+You can optimize painting by retrieving the rectangles
+that have been damaged and only repainting these. The rectangles are in
+terms of the client area, and are unscrolled, so you will need to do
+some calculations using the current view position to obtain logical,
+scrolled units.
+
+Here is an example of using the \helpref{wxUpdateIterator}{wxupdateiterator} class:
+
+{\small%
+\begin{verbatim}
+// Called when window needs to be repainted.
+void MyWindow::OnPaint(wxPaintEvent& event)
+{
+ wxPaintDC dc(this);
+
+ // Find Out where the window is scrolled to
+ int vbX,vbY; // Top left corner of client
+ ViewStart(&vbX,&vbY);
+
+ int vX,vY,vW,vH; // Dimensions of client area in pixels
+ wxUpdateIterator upd(this); // get the update rect list
+
+ while (upd)
+ {
+ vX = upd.GetX();
+ vY = upd.GetY();
+ vW = upd.GetW();
+ vH = upd.GetH();
+
+ // Alternatively we can do this:
+ // wxRect rect;
+ // upd.GetRect(&rect);
+
+ // Repaint this rectangle
+ ...some code...
+
+ upd ++ ;
+ }
+}
+\end{verbatim}
+}%
+
+\wxheading{See also}
+
+\helpref{wxPaintEvent}{wxpaintevent},\rtfsp
+\helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnScroll}\label{wxwindowonscroll}
+
+\func{void}{OnScroll}{\param{wxScrollEvent\& }{event}}
+
+Called when a scroll event is received from one of the window's built-in scrollbars.
+
+\wxheading{Parameters}
+
+\docparam{event}{Command event. Retrieve the new scroll position by
+calling \helpref{wxScrollEvent::GetPosition}{wxscrolleventgetposition}, and the
+scrollbar orientation by calling \helpref{wxScrollEvent::GetOrientation}{wxscrolleventgetorientation}.}
+
+\wxheading{Remarks}
+
+Note that it is not possible to distinguish between horizontal and vertical scrollbars
+until the function is executing (you can't have one function for vertical, another
+for horizontal events).
+
+\wxheading{See also}
+
+\helpref{wxScrollEvent}{wxscrollevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnSetFocus}\label{wxwindowonsetfocus}
+
+\func{void}{OnSetFocus}{\param{wxFocusEvent\& }{event}}
+
+Called when a window's focus is being set.
+
+\wxheading{Parameters}
+
+\docparam{event}{The focus event. For more information, see \helpref{wxFocusEvent}{wxfocusevent}.}
+
+\wxheading{Remarks}
+
+To intercept this event, use the macro EVT\_SET\_FOCUS in an event table definition.
+
+Most, but not all, windows respond to this event.
+
+\wxheading{See also}
+
+\helpref{wxFocusEvent}{wxfocusevent}, \helpref{wxWindow::OnKillFocus}{wxwindowonkillfocus},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnSize}\label{wxwindowonsize}
+
+\func{void}{OnSize}{\param{wxSizeEvent\& }{event}}
+
+Called when the window has been resized.
+
+\wxheading{Parameters}
+
+\docparam{event}{Size event. For more information, see \helpref{wxSizeEvent}{wxsizeevent}.}
+
+\wxheading{Remarks}
+
+You may wish to use this for frames to resize their child windows as appropriate.
+
+Note that the size passed is of
+the whole window: call \helpref{wxWindow::GetClientSize}{wxwindowgetclientsize} for the area which may be
+used by the application.
+
+\wxheading{See also}
+
+\helpref{wxSizeEvent}{wxsizeevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::OnSysColourChanged}\label{wxwindowonsyscolourchanged}
+
+\func{void}{OnSysColourChanged}{\param{wxOnSysColourChangedEvent\& }{event}}
+
+Called when the user has changed the system colours.
+
+\wxheading{Parameters}
+
+\docparam{event}{System colour change event. For more information, see \helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}.}
+
+\wxheading{See also}
+
+\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent},\rtfsp
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\membersection{wxWindow::PopEventHandler}\label{wxwindowpopeventhandler}
+
+\constfunc{wxEvtHandler*}{PopEventHandler}{\param{bool }{deleteHandler = FALSE}}
+
+Removes and returns the top-most event handler on the event handler stack.
+
+\wxheading{Parameters}
+
+\docparam{deleteHandler}{If this is TRUE, the handler will be deleted after it is removed. The
+default value is FALSE.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetEventHandler}{wxwindowseteventhandler},\rtfsp
+\helpref{wxWindow::GetEventHandler}{wxwindowgeteventhandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent},\rtfsp
+\helpref{wxEvtHandler}{wxevthandler}\rtfsp
+
+\membersection{wxWindow::PopupMenu}\label{wxwindowpopupmenu}
+
+\func{virtual bool}{PopupMenu}{\param{wxMenu* }{menu}, \param{const int }{x}, \param{const int }{y}}
+
+Pops up the given menu at the specified coordinates, relative to this
+window, and returns control when the user has dismissed the menu. If a
+menu item is selected, the callback defined for the menu is called with
+wxMenu and wxCommandEvent reference arguments. The callback should access
+the commandInt member of the event to check the selected menu identifier.
+
+\wxheading{Parameters}
+
+\docparam{menu}{Menu to pop up.}
+
+\docparam{x}{Required x position for the menu to appear.}
+
+\docparam{y}{Required y position for the menu to appear.}
+
+\wxheading{Remarks}
+
+Valid only for subwindows (panels, canvases and text windows).
+
+Sometimes this function does not function correctly under Motif, in which case
+please use \helpref{wxWindow::FakePopupMenu}{wxwindowfakepopupmenu} instead.
+
+\wxheading{See also}
+
+\helpref{wxMenu}{wxmenu}, \helpref{wxWindow::FakePopupMenu}{wxwindowfakepopupmenu}
+
+\membersection{wxWindow::PushEventHandler}\label{wxwindowpusheventhandler}
+
+\func{void}{PushEventHandler}{\param{wxEvtHandler* }{handler}}
+
+Pushes this event handler onto the event stack for the window.
+
+\wxheading{Parameters}
+
+\docparam{handler}{Specifies the handler to be pushed.}
+
+\wxheading{Remarks}
+
+An event handler is an object that is capable of processing the events
+sent to a window. By default, the window is its own event handler, but
+an application may wish to substitute another, for example to allow
+central implementation of event-handling for a variety of different
+window classes.
+
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler} allows
+an application to set up a chain of event handlers, where an event not handled by one event handler is
+handed to the next one in the chain. Use \helpref{wxWindow::PopEventHandler}{wxwindowpopeventhandler} to
+remove the event handler.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetEventHandler}{wxwindowseteventhandler},\rtfsp
+\helpref{wxWindow::GetEventHandler}{wxwindowgeteventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent},\rtfsp
+\helpref{wxEvtHandler}{wxevthandler}
+
+\membersection{wxWindow::Raise}\label{wxwindowraise}
+
+\func{void}{Raise}{\void}
+
+Raises the window to the top of the window hierarchy if it is a managed window (dialog
+or frame).
+
+\membersection{wxWindow::Refresh}\label{wxwindowrefresh}
+
+\func{virtual void}{Refresh}{\param{const bool}{ eraseBackground = TRUE}, \param{const wxRect* }{rect
+= NULL}}
+
+Causes a message or event to be generated to repaint the
+window.
+
+\wxheading{Parameters}
+
+\docparam{eraseBackground}{If TRUE, the background will be
+erased.}
+
+\docparam{rect}{If non-NULL, only the given rectangle will
+be treated as damaged.}
+
+\membersection{wxWindow::ReleaseMouse}\label{wxwindowreleasemouse}
+
+\func{virtual void}{ReleaseMouse}{\void}
+
+Releases mouse input captured with \helpref{wxWindow::CaptureMouse}{wxwindowcapturemouse}.
+
+\wxheading{See also}
+
+\helpref{wxWindow::CaptureMouse}{wxwindowcapturemouse}
+
+\membersection{wxWindow::RemoveChild}\label{wxwindowremovechild}
+
+\func{virtual void}{RemoveChild}{\param{wxWindow* }{child}}
+
+Removes a child window. This is called automatically by window deletion
+functions so should not be required by the application programmer.
+
+\wxheading{Parameters}
+
+\docparam{child}{Child window to remove.}
+
+\membersection{wxWindow::ScreenToClient}
+
+\constfunc{virtual void}{ScreenToClient}{\param{int* }{x}, \param{int* }{y}}
+
+Converts from screen to client window coordinates.
+
+\wxheading{Parameters}
+
+\docparam{x}{Stores the screen x coordinate and receives the client x coordinate.}
+
+\docparam{y}{Stores the screen x coordinate and receives the client x coordinate.}
+
+\membersection{wxWindow::ScrollWindow}\label{wxwindowscrollwindow}
+
+\func{virtual void}{ScrollWindow}{\param{const int }{dx}, \param{const int }{dy}, \param{const wxRect*}{ rect = NULL}}
+
+Physically scrolls the pixels in the window.
+
+\wxheading{Parameters}
+
+\docparam{dx}{Amount to scroll horizontally.}
+
+\docparam{dy}{Amount to scroll vertically.}
+
+\docparam{rect}{Rectangle to invalidate. If this is NULL, the whole window is invalidated. If you
+pass a rectangle corresponding to the area of the window exposed by the scroll, your painting handler
+can optimise painting by checking for the invalidated region.}
+
+\wxheading{Remarks}
+
+Available only under Windows.
+
+Use this function to optimise your scrolling implementations, to minimise the area that must be
+redrawn.
+
+\membersection{wxWindow::SetAutoLayout}\label{wxwindowsetautolayout}
+
+\func{void}{SetAutoLayout}{\param{const bool}{ autoLayout}}
+
+Determines whether the \helpref{wxWindow::Layout}{wxwindowlayout} function will
+be called automatically when the window is resized.
+
+\wxheading{Parameters}
+
+\docparam{autoLayout}{Set this to TRUE if you wish the Layout function to be called
+from within wxWindow::OnSize functions.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetConstraints}{wxwindowsetconstraints}
+
+\membersection{wxWindow::SetBackgroundColour}\label{wxwindowsetbackgroundcolour}
+
+\func{virtual void}{SetBackgroundColour}{\param{const wxColour\& }{colour}}
+
+Sets the background colour of the window.
+
+\wxheading{Parameters}
+
+\docparam{colour}{The colour to be used as the background colour.}
+
+\wxheading{Remarks}
+
+The background colour is usually painted by the default\rtfsp
+\helpref{wxWindow::OnEraseBackground}{wxwindowonerasebackground} event handler function.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetBackgroundColour}{wxwindowgetbackgroundcolour},\rtfsp
+\helpref{wxWindow::SetForegroundColour}{wxwindowsetforegroundcolour},\rtfsp
+\helpref{wxWindow::GetForegroundColour}{wxwindowgetforegroundcolour},\rtfsp
+\helpref{wxWindow::OnEraseBackground}{wxwindowonerasebackground}
+
+\membersection{wxWindow::SetConstraints}\label{wxwindowsetconstraints}
+
+\func{void}{SetConstraints}{\param{wxLayoutConstraints* }{constraints}}
+
+Sets the window to have the given layout constraints. The window
+will then own the object, and will take care of its deletion.
+If an existing layout constraints object is already owned by the
+window, it will be deleted.
+
+\wxheading{Parameters}
+
+\docparam{constraints}{The constraints to set. Pass NULL to disassociate and delete the window's
+constraints.}
+
+\wxheading{Remarks}
+
+You must call \helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout} to tell a window to use
+the constraints automatically in OnSize; otherwise, you must
+override OnSize and call Layout explicitly.
+
+% TODO: double click should always be allowed.
+%\membersection{wxWindow::SetDoubleClick}\label{setdoubleclick}
+%
+%\func{void}{SetDoubleClick}{\param{bool}{ allowDoubleClick}}
+%
+%For canvases, allows double click if {\it allowDoubleClick} is TRUE. The default is FALSE.
+
+\membersection{wxWindow::SetFocus}\label{wxwindowsetfocus}
+
+\func{virtual void}{SetFocus}{\void}
+
+This sets the window to receive keyboard input.
+
+\membersection{wxWindow::SetFont}\label{wxwindowsetfont}
+
+\func{void}{SetFont}{\param{const wxFont\& }{font}}
+
+Sets the font for this window.
+
+\wxheading{Parameters}
+
+\docparam{font}{Font to associate with this window.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetFont}{wxwindowgetfont}
+
+\membersection{wxWindow::SetForegroundColour}\label{wxwindowsetforegroundcolour}
+
+\func{virtual void}{SetForegroundColour}{\param{const wxColour\& }{colour}}
+
+Sets the foreground colour of the window.
+
+\wxheading{Parameters}
+
+\docparam{colour}{The colour to be used as the foreground colour.}
+
+\wxheading{Remarks}
+
+The interpretation of foreground colour is open to interpretation according
+to the window class; it may be the text colour or other colour, or it may not
+be used at all.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetForegroundColour}{wxwindowgetforegroundcolour},\rtfsp
+\helpref{wxWindow::SetBackgroundColour}{wxwindowsetbackgroundcolour},\rtfsp
+\helpref{wxWindow::GetBackgroundColour}{wxwindowgetbackgroundcolour}
+
+\membersection{wxWindow::SetId}\label{wxwindowsetid}
+
+\func{void}{SetId}{\param{int}{ id}}
+
+Sets the identifier of the window.
+
+\wxheading{Remarks}
+
+Each window has an integer identifier. If the application has not provided one,
+an identifier will be generated. Normally, the identifier should be provided
+on creation and should not be modified subsequently.
+
+TODO: perhaps there should be a default identifier for each class, rather
+choosing one, which could clash with other ones.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetId}{wxwindowgetid}
+
+
+\membersection{wxWindow::SetName}\label{wxwindowsetname}
+
+\func{virtual void}{SetName}{\param{const wxString\& }{name}}
+
+Sets the window's name.
+
+\wxheading{Parameters}
+
+\docparam{name}{A name to set for the window.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetName}{wxwindowgetname}
+
+\membersection{wxWindow::SetReturnCode}\label{wxwindowsetreturncode}
+
+\func{void}{SetReturnCode}{\param{int }{retCode}}
+
+Sets the return code for this window.
+
+\wxheading{Parameters}
+
+\docparam{retCode}{The integer return code, usually a control identifier.}
+
+\wxheading{Remarks}
+
+A return code is normally associated with a modal dialog, where \helpref{wxDialog::ShowModal}{wxdialogshowmodal} returns
+a code to the application. The function \helpref{wxDialog::EndModal}{wxdialogendmodal} calls {\bf SetReturnCode}.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetReturnCode}{wxwindowgetreturncode}, \helpref{wxDialog::ShowModal}{wxdialogshowmodal},\rtfsp
+\helpref{wxDialog::EndModal}{wxdialogendmodal}
+
+\membersection{wxWindow::SetScrollbar}\label{wxwindowsetscrollbar}
+
+\func{virtual void}{SetScrollbar}{\param{const int }{orientation}, \param{const int }{position},\rtfsp
+\param{const int }{thumbSize}, \param{const int }{range},\rtfsp
+\param{const bool }{refresh = TRUE}}
+
+Sets the scrollbar properties of a built-in scrollbar.
+
+\wxheading{Parameters}
+
+\docparam{orientation}{Determines the scrollbar whose page size is to be set. May be wxHORIZONTAL or wxVERTICAL.}
+
+\docparam{position}{The position of the scrollbar in scroll units.}
+
+\docparam{thumbSize}{The size of the thumb, or visible portion of the scrollbar, in scroll units.}
+
+\docparam{range}{The maximum position of the scrollbar.}
+
+\docparam{refresh}{TRUE to redraw the scrollbar, FALSE otherwise.}
+
+\wxheading{Remarks}
+
+Let's say you wish to display 50 lines of text, using the same font.
+The window is sized so that you can only see 16 lines at a time.
+
+You would use:
+
+{\small%
+\begin{verbatim}
+ SetScrollbar(wxVERTICAL, 0, 16, 50);
+\end{verbatim}
+}
+
+Note that with the window at this size, the thumb position can never go
+above 50 minus 16, or 34.
+
+You can determine how many lines are currently visible by dividing the current view
+size by the character height in pixels.
+
+When defining your own scrollbar behaviour, you will always need to recalculate
+the scrollbar settings when the window size changes. You could therefore put your
+scrollbar calculations and SetScrollbar
+call into a function named AdjustScrollbars, which can be called initially and also
+from your \helpref{wxWindow::OnSize}{wxwindowonsize} event handler function.
+
+\wxheading{See also}
+
+\helpref{Scrolling overview}{scrollingoverview},\rtfsp
+\helpref{wxScrollBar}{wxscrollbar}, \helpref{wxScrolledWindow}{wxscrolledwindow}
+
+\begin{comment}
+\membersection{wxWindow::SetScrollPage}\label{wxwindowsetscrollpage}
+
+\func{virtual void}{SetScrollPage}{\param{const int }{orientation}, \param{const int }{pageSize}, \param{const bool }{refresh = TRUE}}
+
+Sets the page size of one of the built-in scrollbars.
+
+\wxheading{Parameters}
+
+\docparam{orientation}{Determines the scrollbar whose page size is to be set. May be wxHORIZONTAL or wxVERTICAL.}
+
+\docparam{pageSize}{Page size in scroll units.}
+
+\docparam{refresh}{TRUE to redraw the scrollbar, FALSE otherwise.}
+
+\wxheading{Remarks}
+
+The page size of a scrollbar is the number of scroll units that the scroll thumb travels when you
+click on the area above/left of or below/right of the thumb. Normally you will want a whole visible
+page to be scrolled, i.e. the size of the current view (perhaps the window client size). This
+value has to be adjusted when the window is resized, since the page size will have changed.
+
+In addition to specifying how far the scroll thumb travels when paging, in Motif and some versions of Windows
+the thumb changes size to reflect the page size relative to the length of the document. When the
+document size is only slightly bigger than the current view (window) size, almost all of the scrollbar
+will be taken up by the thumb. When the two values become the same, the scrollbar will (on some systems)
+disappear.
+
+Currently, this function should be called before SetPageRange, because of a quirk in the Windows
+handling of pages and ranges.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetScrollPos}{wxwindowsetscrollpos},\rtfsp
+\helpref{wxWindow::SetScrollRange}{wxwindowsetscrollpage},\rtfsp
+\helpref{wxWindow::GetScrollPos}{wxwindowsetscrollpos},\rtfsp
+\helpref{wxWindow::GetScrollRange}{wxwindowsetscrollrange},\rtfsp
+\helpref{wxWindow::GetScrollPage}{wxwindowsetscrollrange},\rtfsp
+\helpref{wxScrollBar}{wxscrollbar}, \helpref{wxScrolledWindow}{wxscrolledwindow}
+\end{comment}
+
+\membersection{wxWindow::SetScrollPos}\label{wxwindowsetscrollpos}
+
+\func{virtual void}{SetScrollPos}{\param{const int }{orientation}, \param{const int }{pos}, \param{const bool }{refresh = TRUE}}
+
+Sets the position of one of the built-in scrollbars.
+
+\wxheading{Parameters}
+
+\docparam{orientation}{Determines the scrollbar whose position is to be set. May be wxHORIZONTAL or wxVERTICAL.}
+
+\docparam{pos}{Position in scroll units.}
+
+\docparam{refresh}{TRUE to redraw the scrollbar, FALSE otherwise.}
+
+\wxheading{Remarks}
+
+This function does not directly affect the contents of the window: it is up to the
+application to take note of scrollbar attributes and redraw contents accordingly.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetScrollbar}{wxwindowsetscrollbar},\rtfsp
+\helpref{wxWindow::GetScrollPos}{wxwindowsetscrollpos},\rtfsp
+\helpref{wxWindow::GetScrollRange}{wxwindowsetscrollrange},\rtfsp
+\helpref{wxWindow::GetScrollThumb}{wxwindowsetscrollthumb},\rtfsp
+\helpref{wxScrollBar}{wxscrollbar}, \helpref{wxScrolledWindow}{wxscrolledwindow}
+
+\begin{comment}
+\membersection{wxWindow::SetScrollRange}\label{wxwindowsetscrollrange}
+
+\func{virtual void}{SetScrollRange}{\param{const int }{orientation}, \param{const int }{range}, \param{const bool }{refresh = TRUE}}
+
+Sets the range of one of the built-in scrollbars.
+
+\wxheading{Parameters}
+
+\docparam{orientation}{Determines the scrollbar whose range is to be set. May be wxHORIZONTAL or wxVERTICAL.}
+
+\docparam{range}{Scroll range.}
+
+\docparam{refresh}{TRUE to redraw the scrollbar, FALSE otherwise.}
+
+\wxheading{Remarks}
+
+The range of a scrollbar is the number of steps that the thumb may travel, rather than the total
+object length of the scrollbar. If you are implementing a scrolling canvas, for example, you
+would adjust the scroll range when the canvas is resized, by subtracting the canvas view size from the
+total virtual canvas size. When the two sizes are the same (all the canvas is visible), the range goes to zero
+and usually the scrollbar will be automatically hidden.
+
+\wxheading{See also}
+
+\helpref{wxWindow::SetScrollPos}{wxwindowsetscrollpos},\rtfsp
+\helpref{wxWindow::SetScrollPage}{wxwindowsetscrollpage},\rtfsp
+\helpref{wxWindow::GetScrollPos}{wxwindowsetscrollpos},\rtfsp
+\helpref{wxWindow::GetScrollRange}{wxwindowsetscrollrange},\rtfsp
+\helpref{wxWindow::GetScrollPage}{wxwindowsetscrollrange},\rtfsp
+\helpref{wxScrollBar}{wxscrollbar}, \helpref{wxScrolledWindow}{wxscrolledwindow}
+\end{comment}
+
+\membersection{wxWindow::SetSize}\label{wxwindowsetsize}
+
+\func{virtual void}{SetSize}{\param{const int}{ x}, \param{const int}{ y}, \param{const int}{ width}, \param{int}{ height},
+ \param{const int}{ sizeFlags = wxSIZE\_AUTO}}
+
+Sets the size and position of the window in pixels.
+
+\func{virtual void}{SetSize}{\param{const int}{ width}, \param{const int}{ height}}
+
+Sets the size of the window in pixels.
+
+\wxheading{Parameters}
+
+\docparam{x}{Required x position in pixels, or -1 to indicate that the existing
+value should be used.}
+
+\docparam{y}{Required y position in pixels, or -1 to indicate that the existing
+value should be used.}
+
+\docparam{width}{Required width in pixels, or -1 to indicate that the existing
+value should be used.}
+
+\docparam{height}{Required height position in pixels, or -1 to indicate that the existing
+value should be used.}
+
+\docparam{sizeFlags}{Indicates the interpretation of other parameters. It is a bit list of the following:
+
+{\bf wxSIZE\_AUTO\_WIDTH}: a -1 width value is taken to indicate
+a wxWindows-supplied default width.\\
+{\bf wxSIZE\_AUTO\_HEIGHT}: a -1 height value is taken to indicate
+a wxWindows-supplied default width.\\
+{\bf wxSIZE\_AUTO}: -1 size values are taken to indicate
+a wxWindows-supplied default size.\\
+{\bf wxSIZE\_USE\_EXISTING}: existing dimensions should be used
+if -1 values are supplied.\\
+{\bf wxSIZE\_ALLOW\_MINUS\_ONE}: allow dimensions of -1 and less to be interpreted
+as real dimensions, not default values.
+}
+
+\wxheading{Remarks}
+
+The second form is a convenience for calling the first form with default
+x and y parameters, and must be used with non-default width and height values.
+
+The first form sets the position and optionally size, of the window.
+Parameters may be -1 to indicate either that a default should be supplied
+by wxWindows, or that the current value of the dimension should be used.
+
+\wxheading{See also}
+
+\helpref{wxWindow::Move}{wxwindowmove}
+
+\membersection{wxWindow::SetSizeHints}\label{wxwindowsetsizehints}
+
+\func{virtual void}{SetSizeHints}{\param{const int}{ minW=-1}, \param{const int}{ minH=-1}, \param{const int}{ maxW=-1}, \param{int}{ maxH=-1},
+ \param{const int}{ incW=-1}, \param{const int}{ incH=-1}}
+
+Allows specification of minimum and maximum window sizes, and window size increments.
+If a pair of values is not set (or set to -1), the default values will be used.
+
+\wxheading{Parameters}
+
+\docparam{minW}{Specifies the minimum width allowable.}
+
+\docparam{minH}{Specifies the minimum height allowable.}
+
+\docparam{maxW}{Specifies the maximum width allowable.}
+
+\docparam{maxH}{Specifies the maximum height allowable.}
+
+\docparam{incW}{Specifies the increment for sizing the width (Motif/Xt only).}
+
+\docparam{incH}{Specifies the increment for sizing the height (Motif/Xt only).}
+
+\wxheading{Remarks}
+
+If this function is called, the user will not be able to size the window outside the
+given bounds.
+
+The resizing increments are only significant under Motif or Xt.
+
+\membersection{wxWindow::SetClientSize}
+
+\func{virtual void}{SetClientSize}{\param{const int}{ width}, \param{const int}{ height}}
+
+This sets the size of the window client area in pixels. Using this function to size a window
+tends to be more device-independent than \helpref{wxWindow::SetSize}{wxwindowsetsize}, since the application need not
+worry about what dimensions the border or title bar have when trying to fit the window
+around panel items, for example.
+
+\wxheading{Parameters}
+
+\docparam{width}{The required client area width.}
+
+\docparam{height}{The required client area height.}
+
+\membersection{wxWindow::SetPalette}
+
+\func{virtual void}{SetPalette}{\param{wxPalette* }{palette}}
+
+Obsolete - use \helpref{wxDC::SetPalette}{wxdcsetpalette} instead.
+
+\membersection{wxWindow::SetCursor}\label{wxwindowsetcursor}
+
+\func{virtual void}{SetCursor}{\param{const wxCursor\&}{cursor}}
+
+Sets the window's cursor.
+
+\wxheading{Parameters}
+
+\docparam{cursor}{Specifies the cursor that the window should normally display.}
+
+\wxheading{Remarks}
+
+Under Windows, you sometimes need to call ::wxSetCursor in addition to this
+function if you want the cursor to change immediately, because under Windows,
+wxWindows only sets the global cursor when it detects mouse movement.
+
+\wxheading{See also}
+
+\helpref{::wxSetCursor}{wxsetcursor}, \helpref{wxCursor}{wxcursor}
+
+\membersection{wxWindow::SetEventHandler}\label{wxwindowseteventhandler}
+
+\func{void}{SetEventHandler}{\param{wxEvtHandler* }{handler}}
+
+Sets the event handler for this window.
+
+\wxheading{Parameters}
+
+\docparam{handler}{Specifies the handler to be set.}
+
+\wxheading{Remarks}
+
+An event handler is an object that is capable of processing the events
+sent to a window. By default, the window is its own event handler, but
+an application may wish to substitute another, for example to allow
+central implementation of event-handling for a variety of different
+window classes.
+
+It is usually better to use \helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler} since
+this sets up a chain of event handlers, where an event not handled by one event handler is
+handed to the next one in the chain.
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetEventHandler}{wxwindowgeteventhandler},\rtfsp
+\helpref{wxWindow::PushEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxWindow::PopEventHandler}{wxwindowpusheventhandler},\rtfsp
+\helpref{wxEvtHandler::ProcessEvent}{wxevthandlerprocessevent},\rtfsp
+\helpref{wxEvtHandler}{wxevthandler}
+
+\membersection{wxWindow::SetTitle}\label{wxwindowsettitle}
+
+\func{virtual void}{SetTitle}{\param{const wxString\& }{title}}
+
+Sets the window's title. Applicable only to frames and dialogs.
+
+\wxheading{Parameters}
+
+\docparam{title}{The window's title.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::GetTitle}{wxwindowgettitle}
+
+\membersection{wxWindow::Show}
+
+\func{virtual bool}{Show}{\param{const bool}{ show}}
+
+Shows or hides the window.
+
+\wxheading{Parameters}
+
+\docparam{show}{If TRUE, displays the window and brings it to the front. Otherwise,
+hides the window.}
+
+\wxheading{See also}
+
+\helpref{wxWindow::IsShown}{wxwindowisshown}
+
+\membersection{wxWindow::TransferDataFromWindow}\label{wxwindowtransferdatafromwindow}
+
+\func{virtual bool}{TransferDataFromWindow}{\void}
+
+Transfers values from child controls to data areas specified by their validators. Returns
+FALSE if a transfer failed.
+
+\wxheading{See also}
+
+\helpref{wxWindow::TransferDataToWindow}{wxwindowtransferdatatowindow},\rtfsp
+\helpref{wxValidator}{wxvalidator}, \helpref{wxWindow::Validate}{wxwindowvalidate}
+
+\membersection{wxWindow::TransferDataToWindow}\label{wxwindowtransferdatatowindow}
+
+\func{virtual bool}{TransferDataToWindow}{\void}
+
+Transfers values to child controls from data areas specified by their validators.
+
+\wxheading{Return value}
+
+Returns FALSE if a transfer failed.
+
+\wxheading{See also}
+
+\helpref{wxWindow::TransferDataFromWindow}{wxwindowtransferdatafromwindow},\rtfsp
+\helpref{wxValidator}{wxvalidator}, \helpref{wxWindow::Validate}{wxwindowvalidate}
+
+\membersection{wxWindow::Validate}\label{wxwindowvalidate}
+
+\func{virtual bool}{Validate}{\void}
+
+Validates the current values of the child controls using their validators.
+
+\wxheading{Return value}
+
+Returns FALSE if any of the validations failed.
+
+\wxheading{See also}
+
+\helpref{wxWindow::TransferDataFromWindow}{wxwindowtransferdatafromwindow},\rtfsp
+\helpref{wxWindow::TransferDataFromWindow}{wxwindowtransferdatafromwindow},\rtfsp
+\helpref{wxValidator}{wxvalidator}
+
+\membersection{wxWindow::WarpPointer}\label{wxwindowwarppointer}
+
+\func{void}{WarpPointer}{\param{int}{ x}, \param{int}{ y}}
+
+Moves the pointer to the given position on the window.
+
+\wxheading{Parameters}
+
+\docparam{x}{The new x position for the cursor.}
+
+\docparam{y}{The new y position for the cursor.}
+
--- /dev/null
+\section{\class{wxWindowDC}}\label{wxwindowdc}
+
+A wxWindowDC must be constructed if an application wishes to paint on the
+whole area of a window (client and decorations).
+This should normally be constructed as a temporary stack object; don't store
+a wxWindowDC object.
+
+To draw on a window from inside {\bf OnPaint}, construct a \helpref{wxPaintDC}{wxpaintdc} object.
+
+To draw on the client area of a window from outside {\bf OnPaint}, construct a \helpref{wxClientDC}{wxclientdc} object.
+
+To draw on the whole window including decorations, construct a \helpref{wxWindowDC}{wxwindowdc} object
+(Windows only).
+
+\wxheading{Derived from}
+
+\helpref{wxDC}{wxdc}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc}, \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxPaintDC}{wxpaintdc},\rtfsp
+\helpref{wxClientDC}{wxclientdc}, \helpref{wxScreenDC}{wxscreendc}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxWindowDC::wxWindowDC}
+
+\func{}{wxWindowDC}{\param{wxWindow*}{ window}}
+
+Constructor. Pass a pointer to the window on which you wish to paint.
+
+
+
--- /dev/null
+:Base wx.hlp
+1 Copyright notice
+2 Copyright notice=topic0
+1 Introduction
+2 Introduction=introduction
+2 What is wxWindows?=topic1
+2 Why another cross-platform development tool?=topic2
+2 Changes from version 1.xx=versionchanges
+2 wxWindows requirements=requirements
+2 Availability and location of wxWindows=topic3
+2 Acknowledgments=topic4
+1 Multi-platform development with wxWindows
+2 Multi-platform development with wxWindows=multiplat
+2 Include files=topic5
+2 Libraries=topic6
+2 Configuration
+3 Configuration=topic7
+3 General features=topic8
+3 X features=topic9
+3 Windows and NT features=topic10
+2 Makefiles
+3 Makefiles=topic11
+3 Windows makefiles=topic12
+3 UNIX makefiles=topic13
+2 Windows-specific files
+3 Windows-specific files=topic14
+3 Resource file=resources
+3 Module definition file=topic15
+2 Memory models and memory allocation
+3 Memory models and memory allocation=memorymodels
+3 Allocating and deleting wxWindows objects=topic16
+2 Dynamic Link Libraries
+3 Dynamic Link Libraries=topic17
+2 Conditional compilation
+3 Conditional compilation=topic18
+2 Building on-line help
+3 Building on-line help=topic19
+2 C++ issues
+3 C++ issues=topic20
+3 Templates=topic21
+3 Precompiled headers=topic22
+2 File handling
+3 File handling=topic23
+1 Utilities supplied with wxWindows
+2 Utilities supplied with wxWindows=utilities
+2 wxHelp=wxhelp
+2 Tex2RTF=textortf
+2 wxTreeLayout=topic24
+2 wxGraphLayout=topic25
+2 wxImage=wximage
+2 MFUTILS=mfutils
+2 Colours=coloursampler
+1 Tutorial
+2 Tutorial=tutorial
+1 Programming strategies
+2 Programming strategies=strategies
+2 Strategies for reducing programming errors
+3 Strategies for reducing programming errors=topic26
+3 Use ASSERT=topic27
+3 Use wxString in preference to character arrays=topic28
+2 Strategies for portability
+3 Strategies for portability=topic29
+3 Use relative positioning or constraints=topic30
+3 Use wxWindows resource files=topic31
+2 Strategies for debugging
+3 Strategies for debugging=topic32
+3 Positive thinking=topic33
+3 Simplify the problem=topic34
+3 Genetic mutation=topic35
+3 Use a debugger=topic36
+3 Use tracing code=topic37
+3 Use wxObject::Dump and the wxDebugContext class=topic38
+3 Check Windows debug messages=topic39
+1 Alphabetical class reference
+2 Alphabetical class reference=classref
+2 wxActivateEvent
+3 wxActivateEvent=wxactivateevent
+3 wxActivateEvent::wxActivateEvent=topic40
+3 wxActivateEvent::m_active=topic41
+3 wxActivateEvent::GetActive=wxactivateeventgetactive
+2 wxApp
+3 wxApp=wxapp
+3 wxApp::wxApp=topic42
+3 wxApp::~wxApp=topic43
+3 wxApp::argc=wxappargc
+3 wxApp::argv=wxappargv
+3 wxApp::wx_class=topic44
+3 wxApp::work_proc=topic45
+3 wxApp::Dispatch=wxappdispatch
+3 wxApp::GetAppName=wxappgetappname
+3 wxApp::GetAuto3D=wxappgetauto3d
+3 wxApp::GetClassName=wxappgetclassname
+3 wxApp::GetExitOnDelete=wxappgetexitondelete
+3 wxApp::GetPrintMode=wxappgetprintmode
+3 wxApp::GetTopWindow=wxappgettopwindow
+3 wxApp::ExitMainLoop=wxappexitmainloop
+3 wxApp::Initialized=wxappinitialized
+3 wxApp::MainLoop=wxappmainloop
+3 wxApp::OnActivate=wxapponactivate
+3 wxApp::OnExit=wxapponexit
+3 wxApp::OnCharHook=wxapponcharhook
+3 wxApp::OnIdle=wxapponidle
+3 wxApp::OnInit=wxapponinit
+3 wxApp::Pending=wxapppending
+3 wxApp::ProcessMessage=wxappprocessmessage
+3 wxApp::SetAppName=wxappsetappname
+3 wxApp::SetAuto3D=wxappsetauto3d
+3 wxApp::SetClassName=wxappsetclassname
+3 wxApp::SetExitOnDelete=wxappsetexitondelete
+3 wxApp::SetPrintMode=wxappsetprintmode
+3 wxApp::SetTopWindow=wxappsettopwindow
+2 wxButton
+3 wxButton=wxbutton
+3 wxButton::wxButton=wxbuttonconstr
+3 wxButton::~wxButton=topic46
+3 wxButton::Create=wxbuttoncreate
+3 wxButton::GetLabel=wxbuttongetlabel
+3 wxButton::SetDefault=wxbuttonsetdefault
+3 wxButton::SetLabel=wxbuttonsetlabel
+2 wxBitmap
+3 wxBitmap=wxbitmap
+3 wxBitmap::wxBitmap=wxbitmapconstr
+3 wxBitmap::~wxBitmap=topic47
+3 wxBitmap::AddHandler=wxbitmapaddhandler
+3 wxBitmap::CleanUpHandlers=topic48
+3 wxBitmap::Create=topic49
+3 wxBitmap::FindHandler=topic50
+3 wxBitmap::GetDepth=topic51
+3 wxBitmap::GetHandlers=topic52
+3 wxBitmap::GetHeight=wxbitmapgetheight
+3 wxBitmap::GetPalette=wxbitmapgetpalette
+3 wxBitmap::GetMask=wxbitmapgetmask
+3 wxBitmap::GetWidth=wxbitmapgetwidth
+3 wxBitmap::InitStandardHandlers=topic53
+3 wxBitmap::InsertHandler=topic54
+3 wxBitmap::LoadFile=wxbitmaploadfile
+3 wxBitmap::Ok=wxbitmapok
+3 wxBitmap::RemoveHandler=topic55
+3 wxBitmap::SaveFile=wxbitmapsavefile
+3 wxBitmap::SetDepth=wxbitmapsetdepth
+3 wxBitmap::SetHeight=wxbitmapsetheight
+3 wxBitmap::SetMask=wxbitmapsetmask
+3 wxBitmap::SetOk=topic56
+3 wxBitmap::SetPalette=wxbitmapsetpalette
+3 wxBitmap::SetWidth=topic57
+3 wxBitmap::operator ==topic58
+3 wxBitmap::operator ===topic59
+3 wxBitmap::operator !==topic60
+2 wxBitmapHandler
+3 wxBitmapHandler=wxbitmaphandler
+3 wxBitmapHandler::wxBitmapHandler=wxbitmaphandlerconstr
+3 wxBitmapHandler::~wxBitmapHandler=topic61
+3 wxBitmapHandler::Create=topic62
+3 wxBitmapHandler::GetName=topic63
+3 wxBitmapHandler::GetExtension=topic64
+3 wxBitmapHandler::GetType=topic65
+3 wxBitmapHandler::LoadFile=wxbitmaphandlerloadfile
+3 wxBitmapHandler::SaveFile=wxbitmaphandlersavefile
+3 wxBitmapHandler::SetName=topic66
+3 wxBitmapHandler::SetExtension=topic67
+3 wxBitmapHandler::SetType=topic68
+2 wxBitmapButton
+3 wxBitmapButton=wxbitmapbutton
+3 wxBitmapButton::wxBitmapButton=wxbitmapbuttonconstr
+3 wxBitmapButton::~wxBitmapButton=topic69
+3 wxBitmapButton::Create=wxbitmapbuttoncreate
+3 wxBitmapButton::GetBitmapDisabled=wxbitmapbuttongetbitmapdisabled
+3 wxBitmapButton::GetBitmapFocus=wxbitmapbuttongetbitmapfocus
+3 wxBitmapButton::GetBitmapLabel=wxbitmapbuttongetbitmaplabel
+3 wxBitmapButton::GetBitmapSelected=wxbitmapbuttongetbitmapselected
+3 wxBitmapButton::SetBitmapDisabled=wxbitmapbuttonsetbitmapdisabled
+3 wxBitmapButton::SetBitmapFocus=wxbitmapbuttonsetbitmapfocus
+3 wxBitmapButton::SetBitmapLabel=wxbitmapbuttonsetbitmaplabel
+3 wxBitmapButton::SetBitmapSelected=wxbitmapbuttonsetbitmapselected
+2 wxBrush
+3 wxBrush=wxbrush
+3 wxBrush::wxBrush=topic70
+3 wxBrush::~wxBrush=topic71
+3 wxBrush::GetColour=wxbrushgetcolour
+3 wxBrush::GetStipple=wxbrushgetstipple
+3 wxBrush::GetStyle=wxbrushgetstyle
+3 wxBrush::Ok=wxbrushok
+3 wxBrush::SetColour=wxbrushsetcolour
+3 wxBrush::SetStipple=wxbrushsetstipple
+3 wxBrush::SetStyle=wxbrushsetstyle
+3 wxBrush::operator ==wxbrushassignment
+3 wxBrush::operator ===wxbrushequals
+3 wxBrush::operator !==wxbrushnotequals
+2 wxBrushList
+3 wxBrushList=wxbrushlist
+3 wxBrushList::wxBrushList=wxbrushlistconstr
+3 wxBrushList::AddBrush=wxbrushlistaddbrush
+3 wxBrushList::FindOrCreateBrush=wxbrushlistfindorcreatebrush
+3 wxBrushList::RemoveBrush=wxbrushlistremovebrush
+2 wxCheckBox
+3 wxCheckBox=wxcheckbox
+3 wxCheckBox::wxCheckBox=wxcheckboxconstr
+3 wxCheckBox::~wxCheckBox=topic72
+3 wxCheckBox::Create=wxcheckboxcreate
+3 wxCheckBox::GetValue=wxcheckboxgetvalue
+3 wxCheckBox::SetValue=wxcheckboxsetvalue
+2 wxChoice
+3 wxChoice=wxchoice
+3 wxChoice::wxChoice=wxchoiceconstr
+3 wxChoice::~wxChoice=topic73
+3 wxChoice::Append=wxchoiceappend
+3 wxChoice::Clear=wxchoiceclear
+3 wxChoice::Create=wxchoicecreate
+3 wxChoice::FindString=wxchoicefindstring
+3 wxChoice::GetColumns=wxchoicegetcolumns
+3 wxChoice::GetSelection=wxchoicegetselection
+3 wxChoice::GetString=wxchoicegetstring
+3 wxChoice::GetStringSelection=wxchoicegetstringselection
+3 wxChoice::Number=wxchoicenumber
+3 wxChoice::SetColumns=wxchoicesetcolumns
+3 wxChoice::SetSelection=wxchoicesetselection
+3 wxChoice::SetStringSelection=wxchoicesetstringselection
+2 wxClassInfo
+3 wxClassInfo=wxclassinfo
+3 wxClassInfo::wxClassInfo=wxclassinfoconstr
+3 wxClassInfo::CreateObject=topic74
+3 wxClassInfo::FindClass=topic75
+3 wxClassInfo::GetBaseClassName1=topic76
+3 wxClassInfo::GetBaseClassName2=topic77
+3 wxClassInfo::GetClassName=topic78
+3 wxClassInfo::GetSize=topic79
+3 wxClassInfo::InitializeClasses=topic80
+3 wxClassInfo::IsKindOf=wxclassinfoiskindof
+2 wxClientDC
+3 wxClientDC=wxclientdc
+3 wxClientDC::wxClientDC=topic81
+2 wxClipboard
+3 wxClipboard=wxclipboard
+3 wxClipboard::GetClipboardClient=topic82
+3 wxClipboard::GetClipboardData=topic83
+3 wxClipboard::GetClipboardString=topic84
+3 wxClipboard::SetClipboardClient=topic85
+3 wxClipboard::SetClipboardString=topic86
+2 wxClipboardClient
+3 wxClipboardClient=wxclipboardclient
+3 wxClipboardClient::formats=topic87
+3 wxClipboardClient::BeingReplaced=topic88
+3 wxClipboardClient::GetData=topic89
+2 wxCloseEvent
+3 wxCloseEvent=wxcloseevent
+3 wxCloseEvent::wxCloseEvent=topic90
+3 wxCloseEvent::GetLoggingOff=wxcloseeventgetloggingoff
+3 wxCloseEvent::GetSessionEnding=wxcloseeventgetsessionending
+3 wxCloseEvent::GetForce=wxcloseeventgetforce
+3 wxCloseEvent::Veto=wxcloseeventveto
+2 wxColour
+3 wxColour=wxcolour
+3 wxColour::wxColour=wxcolourconstr
+3 wxColour::Blue=wxcolourblue
+3 wxColour::GetPixel=wxcolourgetpixel
+3 wxColour::Green=wxcolourgreen
+3 wxColour::Ok=wxcolourok
+3 wxColour::Red=wxcolourred
+3 wxColour::Set=wxcolourset
+3 wxColour::operator ==wxcolourassign
+3 wxColour::operator ===wxcolourequality
+3 wxColour::operator !==wxcolourinequality
+2 wxColourData
+3 wxColourData=wxcolourdata
+3 wxColourData::wxColourData=wxcolourdataconstr
+3 wxColourData::~wxColourData=topic91
+3 wxColourData::GetChooseFull=wxcolourdatagetchoosefull
+3 wxColourData::GetColour=wxcolourdatagetcolour
+3 wxColourData::GetCustomColour=wxcolourdatagetcustomcolour
+3 wxColourData::SetChooseFull=wxcolourdatasetchoosefull
+3 wxColourData::SetColour=wxcolourdatasetcolour
+3 wxColourData::SetCustomColour=wxcolourdatasetcustomcolour
+3 wxColourData::operator ==wxcolourdataassign
+2 wxColourDatabase
+3 wxColourDatabase=wxcolourdatabase
+3 wxColourDatabase::wxColourDatabase=wxcolourdatabaseconstr
+3 wxColourDatabase::FindColour=wxcolourdatabasefindcolour
+3 wxColourDatabase::FindName=wxcolourdatabasefindname
+3 wxColourDatabase::Initialize=wxcolourdatabaseinitialize
+2 wxColourDialog
+3 wxColourDialog=wxcolourdialog
+3 wxColourDialog::wxColourDialog=topic92
+3 wxColourDialog::~wxColourDialog=topic93
+3 wxColourDialog::GetColourData=topic94
+3 wxColourDialog::ShowModal=topic95
+2 wxComboBox
+3 wxComboBox=wxcombobox
+3 wxComboBox::wxComboBox=wxcomboboxconstr
+3 wxComboBox::~wxComboBox=topic96
+3 wxComboBox::Append=wxcomboboxappend
+3 wxComboBox::Clear=wxcomboboxclear
+3 wxComboBox::Create=wxcomboboxcreate
+3 wxComboBox::Copy=wxcomboboxcopy
+3 wxComboBox::Cut=wxcomboboxcut
+3 wxComboBox::Delete=wxcomboboxdelete
+3 wxComboBox::Deselect=wxcomboboxdeselect
+3 wxComboBox::FindString=wxcomboboxfindstring
+3 wxComboBox::GetClientData=wxcomboboxgetclientdata
+3 wxComboBox::GetInsertionPoint=wxcomboboxgetinsertionpoint
+3 wxComboBox::GetLastPosition=wxcomboboxgetlastposition
+3 wxComboBox::GetSelection=wxcomboboxgetselection
+3 wxComboBox::GetString=wxcomboboxgetstring
+3 wxComboBox::GetStringSelection=wxcomboboxgetstringselection
+3 wxComboBox::GetValue=wxcomboboxgetvalue
+3 wxComboBox::Number=wxcomboboxnumber
+3 wxComboBox::Paste=wxcomboboxpaste
+3 wxComboBox::Replace=wxcomboboxreplace
+3 wxComboBox::Remove=wxcomboboxremove
+3 wxComboBox::SetClientData=wxcomboboxsetclientdata
+3 wxComboBox::SetInsertionPoint=wxcomboboxsetinsertionpoint
+3 wxComboBox::SetInsertionPointEnd=wxcomboboxsetinsertionpointend
+3 wxComboBox::SetSelection=wxcomboboxsetselection
+3 wxComboBox::SetValue=wxcomboboxsetvalue
+2 wxCommand
+3 wxCommand=wxcommand
+3 wxCommand::wxCommand=topic97
+3 wxCommand::~wxCommand=topic98
+3 wxCommand::CanUndo=topic99
+3 wxCommand::Do=topic100
+3 wxCommand::GetName=topic101
+3 wxCommand::Undo=topic102
+2 wxCommandEvent
+3 wxCommandEvent=wxcommandevent
+3 wxCommandEvent::m_clientData=topic103
+3 wxCommandEvent::m_commandInt=topic104
+3 wxCommandEvent::m_commandString=topic105
+3 wxCommandEvent::m_extraLong=topic106
+3 wxCommandEvent::wxCommandEvent=topic107
+3 wxCommandEvent::Checked=topic108
+3 wxCommandEvent::GetClientData=topic109
+3 wxCommandEvent::GetExtraLong=topic110
+3 wxCommandEvent::GetInt=topic111
+3 wxCommandEvent::GetSelection=topic112
+3 wxCommandEvent::GetString=topic113
+3 wxCommandEvent::IsSelection=topic114
+3 wxCommandEvent::SetClientData=topic115
+3 wxCommandEvent::SetExtraLong=topic116
+3 wxCommandEvent::SetInt=topic117
+3 wxCommandEvent::SetString=topic118
+2 wxCommandProcessor
+3 wxCommandProcessor=wxcommandprocessor
+3 wxCommandProcessor::wxCommandProcessor=topic119
+3 wxCommandProcessor::~wxCommandProcessor=topic120
+3 wxCommandProcessor::CanUndo=topic121
+3 wxCommandProcessor::ClearCommands=topic122
+3 wxCommandProcessor::Do=topic123
+3 wxCommandProcessor::GetCommands=topic124
+3 wxCommandProcessor::GetMaxCommands=topic125
+3 wxCommandProcessor::GetEditMenu=topic126
+3 wxCommandProcessor::Initialize=topic127
+3 wxCommandProcessor::SetEditMenu=topic128
+3 wxCommandProcessor::Submit=topic129
+3 wxCommandProcessor::Undo=topic130
+2 wxControl
+3 wxControl=wxcontrol
+3 wxControl::Command=wxcontrolcommand
+3 wxControl::GetLabel=wxcontrolgetlabel
+3 wxControl::SetLabel=wxcontrolsetlabel
+2 wxCursor
+3 wxCursor=wxcursor
+3 wxCursor::wxCursor=wxcursorconstr
+3 wxCursor::~wxCursor=topic131
+3 wxCursor::Ok=wxcursorok
+3 wxCursor::operator ==wxcursorassignment
+3 wxCursor::operator ===wxcursorequals
+3 wxCursor::operator !==wxcursornotequals
+2 wxDatabase
+3 wxDatabase=wxdatabase
+3 wxDatabase::wxDatabase=topic132
+3 wxDatabase::~wxDatabase=topic133
+3 wxDatabase::BeginTrans=topic134
+3 wxDatabase::Cancel=topic135
+3 wxDatabase::CanTransact=topic136
+3 wxDatabase::CanUpdate=topic137
+3 wxDatabase::Close=topic138
+3 wxDatabase::CommitTrans=topic139
+3 wxDatabase::ErrorOccured=topic140
+3 wxDatabase::ErrorSnapshot=topic141
+3 wxDatabase::GetDatabaseName=topic142
+3 wxDatabase::GetDataSource=topic143
+3 wxDatabase::GetErrorClass=topic144
+3 wxDatabase::GetErrorCode=topic145
+3 wxDatabase::GetErrorMessage=topic146
+3 wxDatabase::GetErrorNumber=topic147
+3 wxDatabase::GetHDBC=topic148
+3 wxDatabase::GetHENV=topic149
+3 wxDatabase::GetInfo=topic150
+3 wxDatabase::GetPassword=topic151
+3 wxDatabase::GetUsername=topic152
+3 wxDatabase::GetODBCVersionFloat=topic153
+3 wxDatabase::GetODBCVersionString=topic154
+3 wxDatabase::InWaitForDataSource=topic155
+3 wxDatabase::IsOpen=topic156
+3 wxDatabase::Open=wxdatabaseopen
+3 wxDatabase::OnSetOptions=topic157
+3 wxDatabase::OnWaitForDataSource=topic158
+3 wxDatabase::RollbackTrans=topic159
+3 wxDatabase::SetDataSource=topic160
+3 wxDatabase::SetLoginTimeout=topic161
+3 wxDatabase::SetPassword=topic162
+3 wxDatabase::SetSynchronousMode=topic163
+3 wxDatabase::SetQueryTimeout=topic164
+3 wxDatabase::SetUsername=topic165
+2 wxDate
+3 wxDate=wxdate
+3 wxDate::wxDate=wxdateconstr
+3 wxDate::~wxDate=topic166
+3 wxDate::AddMonths=wxdateaddmonths
+3 wxDate::AddWeeks=wxdateaddweeks
+3 wxDate::AddYears=wxdateaddyears
+3 wxDate::FormatDate=wxdateformatdate
+3 wxDate::GetDay=wxdategetday
+3 wxDate::GetDayOfWeek=wxdategetdayofweek
+3 wxDate::GetDayOfWeekName=wxdategetdayofweekname
+3 wxDate::GetDayOfYear=wxdategetdayofyear
+3 wxDate::GetDaysInMonth=wxdategetdaysinmonth
+3 wxDate::GetFirstDayOfMonth=wxdategetfirstdayofmonth
+3 wxDate::GetJulianDate=wxdategetjuliandate
+3 wxDate::GetMonth=wxdategetmonth
+3 wxDate::GetMonthEnd=topic167
+3 wxDate::GetMonthName=wxdategetmonthname
+3 wxDate::GetMonthStart=wxdategetmonthstart
+3 wxDate::GetWeekOfMonth=wxdategetweekofmonth
+3 wxDate::GetWeekOfYear=wxdategetweekofyear
+3 wxDate::GetYear=wxdategetyear
+3 wxDate::GetYearEnd=wxdategetyearend
+3 wxDate::GetYearStart=wxdategetyearstart
+3 wxDate::IsLeapYear=wxdateisleapyear
+3 wxDate::Set=wxdateset
+3 wxDate::SetFormat=wxdatesetformat
+3 wxDate::SetOption=wxdatesetoption
+3 wxDate::operator wxString=wxdatewxstring
+3 wxDate::operator +=wxdateplus
+3 wxDate::operator -=wxdateminus
+3 wxDate::operator +==wxdateplusequals
+3 wxDate::operator -==wxdateminusequals
+3 wxDate::operator ++=wxdateplusplus
+3 wxDate::operator --=wxdateminusminus
+3 wxDate::operator <=wxdatelessthan
+3 wxDate::operator <==wxdatelessthaneq
+3 wxDate::operator >=wxdategreaterthan
+3 wxDate::operator >==wxdategreaterthaneq
+3 wxDate::operator ===wxdateequals
+3 wxDate::operator !==wxdatenotequals
+3 wxDate::operator <<=wxdateinsert
+2 wxDC
+3 wxDC=wxdc
+3 wxDC::wxDC=topic168
+3 wxDC::~wxDC=topic169
+3 wxDC::BeginDrawing=wxdcbegindrawing
+3 wxDC::Blit=wxdcblit
+3 wxDC::Clear=wxdcclear
+3 wxDC::CrossHair=wxdccrosshair
+3 wxDC::DestroyClippingRegion=wxdcdestroyclippingregion
+3 wxDC::DeviceToLogicalX=wxdcdevicetologicalx
+3 wxDC::DeviceToLogicalXRel=wxdcdevicetologicalxrel
+3 wxDC::DeviceToLogicalY=wxdcdevicetologicaly
+3 wxDC::DeviceToLogicalYRel=wxdcdevicetologicalyrel
+3 wxDC::DrawArc=wxdcdrawarc
+3 wxDC::DrawEllipse=wxdcdrawellipse
+3 wxDC::DrawEllipticArc=wxdcdrawellipticarc
+3 wxDC::DrawIcon=wxdcdrawicon
+3 wxDC::DrawLine=wxdcdrawline
+3 wxDC::DrawLines=wxdcdrawlines
+3 wxDC::DrawPolygon=wxdcdrawpolygon
+3 wxDC::DrawPoint=wxdcdrawpoint
+3 wxDC::DrawRectangle=wxdcdrawrectangle
+3 wxDC::DrawRoundedRectangle=wxdcdrawroundedrectangle
+3 wxDC::DrawSpline=wxdcdrawspline
+3 wxDC::DrawText=wxdcdrawtext
+3 wxDC::EndDoc=wxdcenddoc
+3 wxDC::EndDrawing=wxdcenddrawing
+3 wxDC::EndPage=wxdcendpage
+3 wxDC::FloodFill=wxdcfloodfill
+3 wxDC::GetBackground=wxdcgetbackground
+3 wxDC::GetBrush=wxdcgetbrush
+3 wxDC::GetCharHeight=wxdcgetcharheight
+3 wxDC::GetCharWidth=wxdcgetcharwidth
+3 wxCanvas::GetClippingBox=wxdcgetclippingbox
+3 wxDC::GetFont=wxdcgetfont
+3 wxDC::GetLogicalFunction=wxdcgetlogicalfunction
+3 wxDC::GetMapMode=wxdcgetmapmode
+3 wxDC::GetOptimization=wxdcgetoptimization
+3 wxDC::GetPen=wxdcgetpen
+3 wxDC::GetPixel=wxdcgetpixel
+3 wxDC::GetSize=wxdcgetsize
+3 wxDC::GetTextBackground=wxdcgettextbackground
+3 wxDC::GetTextExtent=wxdcgettextextent
+3 wxDC::GetTextForeground=wxdcgettextforeground
+3 wxDC::LogicalToDeviceX=wxdclogicaltodevicex
+3 wxDC::LogicalToDeviceXRel=wxdclogicaltodevicexrel
+3 wxDC::LogicalToDeviceY=wxdclogicaltodevicey
+3 wxDC::LogicalToDeviceYRel=wxdclogicaltodeviceyrel
+3 wxDC::MaxX=wxdcmaxx
+3 wxDC::MaxY=wxdcmaxy
+3 wxDC::MinX=wxdcminx
+3 wxDC::MinY=wxdcminy
+3 wxDC::Ok=wxdcok
+3 wxDC::SetDeviceOrigin=wxdcsetdeviceorigin
+3 wxDC::SetBackground=wxdcsetbackground
+3 wxDC::SetBackgroundMode=wxdcsetbackgroundmode
+3 wxDC::SetClippingRegion=wxdcsetclippingregion
+3 wxDC::SetPalette=wxdcsetpalette
+3 wxDC::SetBrush=wxdcsetbrush
+3 wxDC::SetFont=wxdcsetfont
+3 wxDC::SetLogicalFunction=wxdcsetlogicalfunction
+3 wxDC::SetMapMode=wxdcsetmapmode
+3 wxDC::SetOptimization=wxsetoptimization
+3 wxDC::SetPen=wxdcsetpen
+3 wxDC::SetTextBackground=wxdcsettextbackground
+3 wxDC::SetTextForeground=wxdcsettextforeground
+3 wxDC::SetUserScale=wxdcsetuserscale
+3 wxDC::StartDoc=wxdcstartdoc
+3 wxDC::StartPage=wxdcstartpage
+2 wxDDEClient
+3 wxDDEClient=wxddeclient
+3 wxDDEClient::wxDDEClient=topic170
+3 wxDDEClient::MakeConnection=wxddeclientmakeconnection
+3 wxDDEClient::OnMakeConnection=wxddeclientonmakeconnection
+3 wxDDEClient::ValidHost=topic171
+2 wxDDEConnection
+3 wxDDEConnection=wxddeconnection
+3 wxDDEConnection::wxDDEConnection=topic172
+3 wxDDEConnection::Advise=topic173
+3 wxDDEConnection::Execute=topic174
+3 wxDDEConnection::Disconnect=topic175
+3 wxDDEConnection::OnAdvise=wxddeconnectiononadvise
+3 wxDDEConnection::OnDisconnect=wxddeconnectionondisconnect
+3 wxDDEConnection::OnExecute=wxddeconnectiononexecute
+3 wxDDEConnection::OnPoke=wxddeconnectiononpoke
+3 wxDDEConnection::OnRequest=wxddeconnectiononrequest
+3 wxDDEConnection::OnStartAdvise=wxddeconnectiononstartadvise
+3 wxDDEConnection::OnStopAdvise=wxddeconnectiononstopadvise
+3 wxDDEConnection::Poke=wxddeconnectionpoke
+3 wxDDEConnection::Request=wxddeconnectionrequest
+3 wxDDEConnection::StartAdvise=wxddeconnectionstartadvise
+3 wxDDEConnection::StopAdvise=wxddeconnectionstopadvise
+2 wxDDEServer
+3 wxDDEServer=wxddeserver
+3 wxDDEServer::wxDDEServer=topic176
+3 wxDDEServer::Create=topic177
+3 wxDDEServer::OnAcceptConnection=wxddeserveronacceptconnection
+2 wxDebugContext
+3 wxDebugContext=wxdebugcontext
+3 wxDebugContext::Check=wxdebugcontextcheck
+3 wxDebugContext::Dump=wxdebugcontextdump
+3 wxDebugContext::GetCheckPrevious=wxdebugcontextgetcheckprevious
+3 wxDebugContext::GetDebugMode=wxdebugcontextgetdebugmode
+3 wxDebugContext::GetLevel=wxdebugcontextgetlevel
+3 wxDebugContext::GetStream=wxdebugcontextgetstream
+3 wxDebugContext::GetStreamBuf=wxdebugcontextgetstreambuf
+3 wxDebugContext::HasStream=wxdebugcontexthasstream
+3 wxDebugContext::PrintClasses=wxdebugcontextprintclasses
+3 wxDebugContext::PrintStatistics=wxdebugcontextprintstatistics
+3 wxDebugContext::SetCheckpoint=wxdebugcontextsetcheckpoint
+3 wxDebugContext::SetCheckPrevious=wxdebugcontextsetcheckprevious
+3 wxDebugContext::SetDebugMode=wxdebugcontextsetdebugmode
+3 wxDebugContext::SetFile=wxdebugcontextsetfile
+3 wxDebugContext::SetLevel=wxdebugcontextsetlevel
+3 wxDebugContext::SetStandardError=wxdebugcontextsetstandarderror
+3 wxDebugContext::SetStream=wxdebugcontextsetstream
+2 wxDebugStreamBuf
+3 wxDebugStreamBuf=wxdebugstreambuf
+2 wxDialog
+3 wxDialog=wxdialog
+3 wxDialog::wxDialog=wxdialogconstr
+3 wxDialog::~wxDialog=topic178
+3 wxDialog::Centre=wxdialogcentre
+3 wxDialog::Create=wxdialogcreate
+3 wxDialog::EndModal=wxdialogendmodal
+3 wxDialog::GetTitle=wxdialoggettitle
+3 wxDialog::Iconize=wxdialogiconized
+3 wxDialog::IsIconized=wxdialogisiconized
+3 wxDialog::IsModal=wxdialogismodal
+3 wxDialog::OnCharHook=wxdialogoncharhook
+3 wxDialog::OnApply=wxdialogonapply
+3 wxDialog::OnCancel=wxdialogoncancel
+3 wxDialog::OnOK=wxdialogonok
+3 wxDialog::OnSysColourChanged=wxdialogonsyscolourchanged
+3 wxDialog::SetModal=wxdialogsetmodal
+3 wxDialog::SetTitle=wxdialogsettitle
+3 wxDialog::Show=wxdialogshow
+3 wxDialog::ShowModal=wxdialogshowmodal
+2 wxDirDialog
+3 wxDirDialog=wxdirdialog
+3 wxDirDialog::wxDirDialog=wxdirdialogconstr
+3 wxDirDialog::~wxDirDialog=topic179
+3 wxDirDialog::GetPath=wxdirdialoggetpath
+3 wxDirDialog::GetMessage=wxdirdialoggetmessage
+3 wxDirDialog::GetStyle=wxdirdialoggetstyle
+3 wxDirDialog::SetMessage=wxdirdialogsetmessage
+3 wxDirDialog::SetPath=wxdirdialogsetpath
+3 wxDirDialog::SetStyle=wxdirdialogsetstyle
+3 wxDirDialog::ShowModal=wxdirdialogshowmodal
+2 wxDocument
+3 wxDocument=wxdocument
+3 wxDocument::m_commandProcessor=topic180
+3 wxDocument::m_documentFile=topic181
+3 wxDocument::m_documentModified=topic182
+3 wxDocument::m_documentTemplate=topic183
+3 wxDocument::m_documentTitle=topic184
+3 wxDocument::m_documentTypeName=documenttypename
+3 wxDocument::m_documentViews=topic185
+3 wxDocument::wxDocument=topic186
+3 wxDocument::~wxDocument=topic187
+3 wxDocument::AddView=topic188
+3 wxDocument::Close=topic189
+3 wxDocument::DeleteAllViews=topic190
+3 wxDocument::GetCommandProcessor=topic191
+3 wxDocument::GetDocumentTemplate=topic192
+3 wxDocument::GetDocumentManager=topic193
+3 wxDocument::GetDocumentName=topic194
+3 wxDocument::GetDocumentWindow=topic195
+3 wxDocument::GetFilename=topic196
+3 wxDocument::GetFirstView=topic197
+3 wxDocument::GetPrintableName=topic198
+3 wxDocument::GetTitle=topic199
+3 wxDocument::IsModified=wxdocumentismodified
+3 wxDocument::LoadObject=topic200
+3 wxDocument::Modify=wxdocumentmodify
+3 wxDocument::OnChangedViewList=topic201
+3 wxDocument::OnCloseDocument=topic202
+3 wxDocument::OnCreate=topic203
+3 wxDocument::OnCreateCommandProcessor=topic204
+3 wxDocument::OnNewDocument=topic205
+3 wxDocument::OnOpenDocument=topic206
+3 wxDocument::OnSaveDocument=topic207
+3 wxDocument::OnSaveModified=topic208
+3 wxDocument::RemoveView=topic209
+3 wxDocument::Save=topic210
+3 wxDocument::SaveAs=topic211
+3 wxDocument::SaveObject=topic212
+3 wxDocument::SetCommandProcessor=topic213
+3 wxDocument::SetDocumentName=topic214
+3 wxDocument::SetDocumentTemplate=topic215
+3 wxDocument::SetFilename=topic216
+3 wxDocument::SetTitle=topic217
+2 wxDocChildFrame
+3 wxDocChildFrame=wxdocchildframe
+3 wxDocChildFrame::m_childDocument=topic218
+3 wxDocChildFrame::m_childView=topic219
+3 wxDocChildFrame::wxDocChildFrame=topic220
+3 wxDocChildFrame::~wxDocChildFrame=topic221
+3 wxDocChildFrame::GetDocument=topic222
+3 wxDocChildFrame::GetView=topic223
+3 wxDocChildFrame::OnActivate=topic224
+3 wxDocChildFrame::OnClose=topic225
+3 wxDocChildFrame::SetDocument=topic226
+3 wxDocChildFrame::SetView=topic227
+2 wxDocManager
+3 wxDocManager=wxdocmanager
+3 wxDocManager::m_currentView=topic228
+3 wxDocManager::m_defaultDocumentNameCounter=topic229
+3 wxDocManager::m_fileHistory=topic230
+3 wxDocManager::m_maxDocsOpen=topic231
+3 wxDocManager::m_docs=topic232
+3 wxDocManager::m_flags=topic233
+3 wxDocManager::m_templates=topic234
+3 wxDocManager::wxDocManager=topic235
+3 wxDocManager::~wxDocManager=topic236
+3 wxDocManager::ActivateView=topic237
+3 wxDocManager::AddDocument=topic238
+3 wxDocManager::AddFileToHistory=topic239
+3 wxDocManager::AssociateTemplate=topic240
+3 wxDocManager::CreateDocument=topic241
+3 wxDocManager::CreateView=topic242
+3 wxDocManager::DisassociateTemplate=topic243
+3 wxDocManager::FileHistoryLoad=topic244
+3 wxDocManager::FileHistorySave=topic245
+3 wxDocManager::FileHistoryUseMenu=topic246
+3 wxDocManager::FindTemplateForPath=topic247
+3 wxDocManager::GetCurrentDocument=topic248
+3 wxDocManager::GetCurrentView=topic249
+3 wxDocManager::GetDocuments=topic250
+3 wxDocManager::GetFileHistory=topic251
+3 wxDocManager::GetMaxDocsOpen=topic252
+3 wxDocManager::GetNoHistoryFiles=topic253
+3 wxDocManager::Initialize=wxdocmanagerinitialize
+3 wxDocManager::MakeDefaultName=topic254
+3 wxDocManager::OnCreateFileHistory=topic255
+3 wxDocManager::OnFileClose=topic256
+3 wxDocManager::OnFileNew=topic257
+3 wxDocManager::OnFileOpen=topic258
+3 wxDocManager::OnFileSave=topic259
+3 wxDocManager::OnFileSaveAs=topic260
+3 wxDocManager::OnMenuCommand=topic261
+3 wxDocManager::RemoveDocument=topic262
+3 wxDocManager::SelectDocumentPath=topic263
+3 wxDocManager::SelectDocumentType=topic264
+3 wxDocManager::SelectViewType=topic265
+3 wxDocManager::SetMaxDocsOpen=topic266
+2 wxDocParentFrame
+3 wxDocParentFrame=wxdocparentframe
+3 wxDocParentFrame::wxDocParentFrame=topic267
+3 wxDocParentFrame::~wxDocParentFrame=topic268
+3 wxDocParentFrame::OnClose=topic269
+2 wxDocTemplate
+3 wxDocTemplate=wxdoctemplate
+3 wxDocTemplate::m_defaultExt=topic270
+3 wxDocTemplate::m_description=topic271
+3 wxDocTemplate::m_directory=topic272
+3 wxDocTemplate::m_docClassInfo=topic273
+3 wxDocTemplate::m_docTypeName=topic274
+3 wxDocTemplate::m_documentManager=topic275
+3 wxDocTemplate::m_fileFilter=topic276
+3 wxDocTemplate::m_flags=topic277
+3 wxDocTemplate::m_viewClassInfo=topic278
+3 wxDocTemplate::m_viewTypeName=topic279
+3 wxDocTemplate::wxDocTemplate=topic280
+3 wxDocTemplate::~wxDocTemplate=topic281
+3 wxDocTemplate::CreateDocument=topic282
+3 wxDocTemplate::CreateView=topic283
+3 wxDocTemplate::GetDefaultExtension=topic284
+3 wxDocTemplate::GetDescription=topic285
+3 wxDocTemplate::GetDirectory=topic286
+3 wxDocTemplate::GetDocumentManager=topic287
+3 wxDocTemplate::GetDocumentName=topic288
+3 wxDocTemplate::GetFileFilter=topic289
+3 wxDocTemplate::GetFlags=topic290
+3 wxDocTemplate::GetViewName=topic291
+3 wxDocTemplate::IsVisible=topic292
+3 wxDocTemplate::SetDefaultExtension=topic293
+3 wxDocTemplate::SetDescription=topic294
+3 wxDocTemplate::SetDirectory=topic295
+3 wxDocTemplate::SetDocumentManager=topic296
+3 wxDocTemplate::SetFileFilter=topic297
+3 wxDocTemplate::SetFlags=topic298
+2 wxDropFilesEvent
+3 wxDropFilesEvent=wxdropfilesevent
+3 wxDropFilesEvent::wxDropFilesEvent=topic299
+3 wxDropFilesEvent::m_files=topic300
+3 wxDropFilesEvent::m_noFiles=topic301
+3 wxDropFilesEvent::m_pos=topic302
+3 wxDropFilesEvent::GetFiles=wxdropfileseventgetfiles
+3 wxDropFilesEvent::GetNumberOfFiles=wxdropfileseventgetnumberoffiles
+3 wxDropFilesEvent::GetPosition=wxdropfileseventgetposition
+2 wxEraseEvent
+3 wxEraseEvent=wxeraseevent
+3 wxEraseEvent::wxEraseEvent=topic303
+3 wxEraseEvent::m_dc=topic304
+3 wxEraseEvent::GetDC=wxeraseeventgetdc
+2 wxEvent
+3 wxEvent=wxevent
+3 wxEvent::wxEvent=topic305
+3 wxEvent::m_eventHandle=topic306
+3 wxEvent::m_eventObject=topic307
+3 wxEvent::m_eventType=topic308
+3 wxEvent::m_id=topic309
+3 wxEvent::m_skipped=topic310
+3 wxEvent::m_timeStamp=topic311
+3 wxEvent::GetEventClass=topic312
+3 wxEvent::GetEventObject=topic313
+3 wxEvent::GetEventType=topic314
+3 wxEvent::GetId=topic315
+3 wxEvent::GetObjectType=topic316
+3 wxEvent::GetSkipped=topic317
+3 wxEvent::GetTimestamp=topic318
+3 wxEvent::SetEventObject=topic319
+3 wxEvent::SetEventType=topic320
+3 wxEvent::SetId=topic321
+3 wxEvent::SetTimestamp=topic322
+3 wxEvent::Skip=wxeventskip
+2 wxEvtHandler
+3 wxEvtHandler=wxevthandler
+3 wxEvtHandler::wxEvtHandler=topic323
+3 wxEvtHandler::~wxEvtHandler=topic324
+3 wxEvtHandler::Default=wxevthandlerdefault
+3 wxEvtHandler::GetClientData=wxevthandlergetclientdata
+3 wxEvtHandler::GetEvtHandlerEnabled=wxevthandlergetevthandlerenabled
+3 wxEvtHandler::GetNextHandler=wxevthandlergetnexthandler
+3 wxEvtHandler::GetPreviousHandler=wxevthandlergetprevioushandler
+3 wxEvtHandler::ProcessEvent=wxevthandlerprocessevent
+3 wxEvtHandler::SearchEventTable=wxevthandlersearcheventtable
+3 wxEvtHandler::SetClientData=wxevthandlersetclientdata
+3 wxEvtHandler::SetEvtHandlerEnabled=wxevthandlersetevthandlerenabled
+3 wxEvtHandler::SetNextHandler=wxevthandlersetnexthandler
+3 wxEvtHandler::SetPreviousHandler=wxevthandlersetprevioushandler
+2 wxExpr
+3 wxExpr=wxexpr
+3 wxExpr::wxExpr=wxexprconstr
+3 wxExpr::~wxExpr=topic325
+3 wxExpr::AddAttributeValue=wxexpraddattributevalue
+3 wxExpr::AddAttributeValueString=wxexpraddattributevaluestring
+3 wxExpr::AddAttributeValueStringList=wxexpraddattributevaluestringlist
+3 wxExpr::AddAttributeValueWord=wxexpraddattributevalueword
+3 wxExpr::Append=wxexprappend
+3 wxExpr::Arg=wxexprarg
+3 wxExpr::Insert=wxexprinsert
+3 wxExpr::GetAttributeValue=wxexprgetattributevalue
+3 wxExpr::GetAttributeValueStringList=wxexprgetattributestringlist
+3 wxExpr::AttributeValue=wxexprattributevalue
+3 wxExpr::Copy=wxexprcopy
+3 wxExpr::DeleteAttributeValue=wxexprdeletattributevalue
+3 wxExpr::Functor=wxexprfunctor
+3 wxExpr::GetClientData=wxexprgetclientdata
+3 wxExpr::GetFirst=wxexprgetfirst
+3 wxExpr::GetLast=wxexprgetlast
+3 wxExpr::GetNext=wxexprgetnext
+3 wxExpr::IntegerValue=wxexprintegervalue
+3 wxExpr::Nth=wxexprnth
+3 wxExpr::RealValue=wxexprrealvalue
+3 wxExpr::SetClientData=wxexprsetclientdata
+3 wxExpr::StringValue=wxexprstringvalue
+3 wxExpr::Type=wxexprtype
+3 wxExpr::WordValue=wxexprwordvalue
+3 wxExpr::WriteLispExpr=wxexprwritelistexpr
+3 wxExpr::WritePrologClause=wxexprwriteprologclause
+3 wxExpr::WriteExpr=wxexprwriteexpr
+3 Functions and macros=topic326
+2 wxExprDatabase
+3 wxExprDatabase=wxexprdatabase
+3 wxExprDatabase::wxExprDatabase=wxexprdatabaseconstr
+3 wxExprDatabase::~wxExprDatabase=topic327
+3 wxExprDatabase::Append=wxexprdatabaseappend
+3 wxExprDatabase::BeginFind=wxexprdatabasebeginfind
+3 wxExprDatabase::ClearDatabase=wxexprdatabasecleardatabase
+3 wxExprDatabase::FindClause=wxexprdatabasefindclause
+3 wxExprDatabase::FindClauseByFunctor=wxexprdatabasefindclausebyfunctor
+3 wxExprDatabase::GetErrorCount=wxexprdatabasegeterrorcount
+3 wxExprDatabase::HashFind=wxexprdatabasehashfind
+3 wxExprDatabase::Read=wxexprdatabaseread
+3 wxExprDatabase::ReadFromString=wxexprdatabasereadfromstring
+3 wxExprDatabase::WriteLisp=wxexprdatabasewritelisp
+3 wxExprDatabase::Write=wxexprdatabasewrite
+2 wxFileDialog
+3 wxFileDialog=wxfiledialog
+3 wxFileDialog::wxFileDialog=wxfiledialogconstr
+3 wxFileDialog::~wxFileDialog=topic328
+3 wxFileDialog::GetDirectory=wxfiledialoggetdirectory
+3 wxFileDialog::GetFilename=wxfiledialoggetfilename
+3 wxFileDialog::GetFilterIndex=wxfiledialoggetfilterindex
+3 wxFileDialog::GetMessage=wxfiledialoggetmessage
+3 wxFileDialog::GetPath=wxfiledialoggetpath
+3 wxFileDialog::GetStyle=wxfiledialoggetstyle
+3 wxFileDialog::GetWildcard=wxfiledialoggetwildcard
+3 wxFileDialog::SetDirectory=wxfiledialogsetdirectory
+3 wxFileDialog::SetFilename=wxfiledialogsetfilename
+3 wxFileDialog::SetFilterIndex=wxfiledialogsetfilterindex
+3 wxFileDialog::SetMessage=wxfiledialogsetmessage
+3 wxFileDialog::SetPath=wxfiledialogsetpath
+3 wxFileDialog::SetStyle=wxfiledialogsetstyle
+3 wxFileDialog::SetWildcard=wxfiledialogsetwildcard
+3 wxFileDialog::ShowModal=wxfiledialogshowmodal
+2 wxFileHistory
+3 wxFileHistory=wxfilehistory
+3 wxFileHistory::m_fileHistory=topic329
+3 wxFileHistory::m_fileHistoryN=topic330
+3 wxFileHistory::m_fileMaxFiles=topic331
+3 wxFileHistory::m_fileMenu=topic332
+3 wxFileHistory::wxFileHistory=topic333
+3 wxFileHistory::~wxFileHistory=topic334
+3 wxFileHistory::AddFileToHistory=topic335
+3 wxFileHistory::FileHistoryLoad=topic336
+3 wxFileHistory::FileHistorySave=topic337
+3 wxFileHistory::FileHistoryUseMenu=topic338
+3 wxFileHistory::GetMaxFiles=topic339
+3 wxFileHistory::GetNoHistoryFiles=topic340
+2 wxFocusEvent
+3 wxFocusEvent=wxfocusevent
+3 wxFocusEvent::wxFocusEvent=topic341
+2 wxFont
+3 wxFont=wxfont
+3 wxFont::wxFont=wxfontconstr
+3 wxFont::~wxFont=topic342
+3 wxFont::GetFaceName=wxfontgetfacename
+3 wxFont::GetFamily=wxfontgetfamily
+3 wxFont::GetFontId=wxfontgetfontid
+3 wxFont::GetPointSize=wxfontgetpointsize
+3 wxFont::GetStyle=wxfontgetstyle
+3 wxFont::GetUnderlined=wxfontgetunderlined
+3 wxFont::GetWeight=wxfontgetweight
+3 wxFont::SetFaceName=wxfontsetfacename
+3 wxFont::SetFamily=wxfontsetfamily
+3 wxFont::SetPointSize=wxfontsetpointsize
+3 wxFont::SetStyle=wxfontsetstyle
+3 wxFont::SetUnderlined=wxfontsetunderlined
+3 wxFont::SetWeight=wxfontsetweight
+3 wxFont::operator ==wxfontassignment
+3 wxFont::operator ===wxfontequals
+3 wxFont::operator !==wxfontnotequals
+2 wxFontData
+3 wxFontData=wxfontdata
+3 wxFontData::wxFontData=topic343
+3 wxFontData::~wxFontData=topic344
+3 wxFontData::EnableEffects=topic345
+3 wxFontData::GetAllowSymbols=topic346
+3 wxFontData::GetColour=topic347
+3 wxFontData::GetChosenFont=topic348
+3 wxFontData::GetEnableEffects=topic349
+3 wxFontData::GetInitialFont=topic350
+3 wxFontData::GetShowHelp=topic351
+3 wxFontData::SetAllowSymbols=topic352
+3 wxFontData::SetChosenFont=topic353
+3 wxFontData::SetColour=topic354
+3 wxFontData::SetInitialFont=topic355
+3 wxFontData::SetRange=topic356
+3 wxFontData::SetShowHelp=topic357
+3 wxFontData::operator ==topic358
+2 wxFontDialog
+3 wxFontDialog=wxfontdialog
+3 wxFontDialog::wxFontDialog=topic359
+3 wxFontDialog::~wxFontDialog=topic360
+3 wxFontDialog::GetFontData=topic361
+3 wxFontDialog::ShowModal=topic362
+2 wxFontList
+3 wxFontList=wxfontlist
+3 wxFontList::wxFontList=topic363
+3 wxFontList::AddFont=topic364
+3 wxFontList::FindOrCreateFont=findorcreatefont
+3 wxFontList::RemoveFont=topic365
+2 wxFrame
+3 wxFrame=wxframe
+3 wxFrame::wxFrame=wxframeconstr
+3 wxFrame::~wxFrame=topic366
+3 wxFrame::Centre=wxframecentre
+3 wxFrame::Command=wxframecommand
+3 wxFrame::Create=wxframecreate
+3 wxFrame::CreateStatusBar=wxframecreatestatusbar
+3 wxFrame::GetMenuBar=wxframegetmenubar
+3 wxFrame::GetStatusBar=wxframegetstatusbar
+3 wxFrame::GetTitle=wxframegettitle
+3 wxFrame::Iconize=wxframeiconize
+3 wxFrame::IsIconized=wxframeisiconized
+3 wxFrame::LoadAccelerators=wxframeloadaccelerators
+3 wxFrame::Maximize=wxframemaximize
+3 wxFrame::OnActivate=topic367
+3 wxFrame::OnCreateStatusBar=wxframeoncreatestatusbar
+3 wxFrame::OnMenuCommand=wxframeonmenucommand
+3 wxFrame::OnMenuHighlight=wxframeonmenuhighlight
+3 wxFrame::OnSize=wxframeonsize
+3 wxFrame::SetIcon=wxframeseticon
+3 wxFrame::SetMenuBar=wxframesetmenubar
+3 wxFrame::SetStatusText=wxframesetstatustext
+3 wxFrame::SetStatusWidths=wxframesetstatuswidths
+3 wxFrame::SetTitle=wxframesettitle
+2 wxGauge
+3 wxGauge=wxgauge
+3 wxGauge::wxGauge=wxgaugeconstr
+3 wxGauge::~wxGauge=topic368
+3 wxGauge::Create=wxgaugecreate
+3 wxGauge::GetBezelFace=wxgaugegetbezelface
+3 wxGauge::GetRange=wxgaugegetrange
+3 wxGauge::GetShadowWidth=wxgaugegetshadowwidth
+3 wxGauge::GetValue=wxgaugegetvalue
+3 wxGauge::SetBezelFace=wxgaugesetbezelface
+3 wxGauge::SetRange=wxgaugesetrange
+3 wxGauge::SetShadowWidth=wxgaugesetshadowwidth
+3 wxGauge::SetValue=wxgaugesetvalue
+2 wxGDIObject
+3 wxGDIObject=wxgdiobject
+3 wxGDIObject::wxGDIObject=wxgdiobjectconstr
+2 wxGrid
+3 wxGrid=wxgrid
+3 wxGrid::wxGrid=wxgridconstr
+3 wxGrid::AdjustScrollbars=wxgridadjustscrollbars
+3 wxGrid::AppendCols=wxgridappendcols
+3 wxGrid::AppendRows=wxgridappendrows
+3 wxGrid::BeginBatch=wxgridbeginbatch
+3 wxGrid::CellHitTest=wxgridcellhittest
+3 wxGrid::CreateGrid=wxgridcreategrid
+3 wxGrid::CurrentCellVisible=wxgridcurrentcellvisible
+3 wxGrid::DeleteCols=wxgriddeletecols
+3 wxGrid::DeleteRows=wxgriddeleterows
+3 wxGrid::EndBatch=wxgridendbatch
+3 wxGrid::GetBatchCount=wxgridgetbatchcount
+3 wxGrid::GetCell=wxgridgetcell
+3 wxGrid::GetCellAlignment=wxgridgetcellalignment
+3 wxGrid::GetCellBackgroundColour=wxgridgetcellbackgroundcolour
+3 wxGrid::GetCells=wxgridgetcells
+3 wxGrid::GetCellTextColour=wxgridgetcelltextcolour
+3 wxGrid::GetCellTextFont=wxgridgetcelltextfont
+3 wxGrid::GetCellValue=wxgridgetcellvalue
+3 wxGrid::GetCols=wxgridgetcols
+3 wxGrid::GetColumnWidth=wxgridcolumnwidth
+3 wxGrid::GetCurrentRect=wxgridgetcurrentrect
+3 wxGrid::GetCursorColumn=wxgridgetcursorcolumn
+3 wxGrid::GetCursorRow=wxgridgetcursorrow
+3 wxGrid::GetEditable=wxgridgeteditable
+3 wxGrid::GetHorizScrollBar=wxgridgethorizscrollbar
+3 wxGrid::GetLabelAlignment=wxgridgetlabelalignment
+3 wxGrid::GetLabelBackgroundColour=wxgridgetlabelbackgroundcolour
+3 wxGrid::GetLabelSize=wxgridgetlabelsize
+3 wxGrid::GetLabelTextColour=wxgridgetlabeltextcolour
+3 wxGrid::GetLabelTextFont=wxgridgetlabeltextfont
+3 wxGrid::GetLabelValue=wxgridgetlabelvalue
+3 wxGrid::GetRowHeight=wxgridgetrowheight
+3 wxGrid::GetRows=wxgridgetrows
+3 wxGrid::GetScrollPosX=wxgridgetscrollposx
+3 wxGrid::GetScrollPosY=wxgridgetscrollposy
+3 wxGrid::GetTextItem=wxgridgettextitem
+3 wxGrid::GetVertScrollBar=wxgridgetvertscrollbar
+3 wxGrid::InsertCols=wxgridinsertcols
+3 wxGrid::InsertRows=wxgridinsertrows
+3 wxGrid::OnActivate=wxgridonactivate
+3 wxGrid::OnChangeLabels=wxgridonchangelabels
+3 wxGrid::OnChangeSelectionLabel=wxgridonchangeselectionlabel
+3 wxGrid::OnCreateCell=wxgridoncreatecell
+3 wxGrid::OnCellLeftClick=wxgridoncellleftclick
+3 wxGrid::OnCellRightClick=wxgridoncellrightclick
+3 wxGrid::OnLabelLeftClick=wxgridonlabelleftclick
+3 wxGrid::OnLabelRightClick=wxgridonlabelrightclick
+3 wxGrid::OnSelectCell=wxgridonselectcell
+3 wxGrid::OnSelectCellImplementation=wxgridonselectcellimplementation
+3 wxGrid::SetCellAlignment=wxgridsetcellalignment
+3 wxGrid::SetCellBackgroundColour=wxgridsetcellbackgroundcolour
+3 wxGrid::SetCellTextColour=wxgridsetcelltextcolour
+3 wxGrid::SetCellTextFont=wxgridsetcelltextfont
+3 wxGrid::SetCellValue=wxgridsetcellvalue
+3 wxGrid::SetColumnWidth=wxgridsetcolumnwidth
+3 wxGrid::SetDividerPen=wxgridsetdividerpen
+3 wxGrid::SetEditable=wxgridseteditable
+3 wxGrid::SetGridCursor=wxgridsetgridcursor
+3 wxGrid::SetLabelAlignment=wxgridsetlabelalignment
+3 wxGrid::SetLabelBackgroundColour=wxgridsetlabelbackgroundcolour
+3 wxGrid::SetLabelSize=wxgridsetlabelsize
+3 wxGrid::SetLabelTextColour=wxgridsetlabeltextcolour
+3 wxGrid::SetLabelTextFont=wxgridsetlabeltextfont
+3 wxGrid::SetLabelValue=wxgridsetlabelvalue
+3 wxGrid::SetRowHeight=wxgridsetrowheight
+3 wxGrid::UpdateDimensions=wxgridupdatedimensions
+2 wxHashTable
+3 wxHashTable=wxhashtable
+3 wxHashTable::wxHashTable=topic369
+3 wxHashTable::~wxHashTable=topic370
+3 wxHashTable::BeginFind=topic371
+3 wxHashTable::Clear=topic372
+3 wxHashTable::Delete=topic373
+3 wxHashTable::Get=topic374
+3 wxHashTable::MakeKey=topic375
+3 wxHashTable::Next=topic376
+3 wxHashTable::Put=topic377
+2 wxHelpInstance
+3 wxHelpInstance=wxhelpinstance
+3 wxHelpInstance::wxHelpInstance=topic378
+3 wxHelpInstance::~wxHelpInstance=topic379
+3 wxHelpInstance::Initialize=topic380
+3 wxHelpInstance::DisplayBlock=topic381
+3 wxHelpInstance::DisplayContents=topic382
+3 wxHelpInstance::DisplaySection=topic383
+3 wxHelpInstance::KeywordSearch=topic384
+3 wxHelpInstance::LoadFile=topic385
+3 wxHelpInstance::OnQuit=topic386
+3 wxHelpInstance::Quit=topic387
+2 wxIdleEvent
+3 wxIdleEvent=wxidleevent
+3 wxIdleEvent::wxIdleEvent=topic388
+2 wxIcon
+3 wxIcon=wxicon
+3 wxIcon::wxIcon=wxiconconstr
+3 wxIcon::~wxIcon=topic389
+3 wxIcon::GetDepth=topic390
+3 wxIcon::GetHeight=wxicongetheight
+3 wxIcon::GetWidth=wxicongetwidth
+3 wxIcon::LoadFile=wxiconloadfile
+3 wxIcon::Ok=wxiconok
+3 wxIcon::SetDepth=wxiconsetdepth
+3 wxIcon::SetHeight=wxiconsetheight
+3 wxIcon::SetOk=topic391
+3 wxIcon::SetWidth=topic392
+3 wxIcon::operator ==topic393
+3 wxIcon::operator ===topic394
+3 wxIcon::operator !==topic395
+2 wxImageList
+3 wxImageList=wximagelist
+3 wxImageList::wxImageList=wximagelistconstr
+3 wxImageList::Add=wximagelistadd
+3 wxImageList::Create=wximagelistcreate
+3 wxImageList::Draw=wximagelistdraw
+3 wxImageList::GetImageCount=wximagelistgetimagecount
+3 wxImageList::Remove=wximagelistremove
+3 wxImageList::RemoveAll=wximagelistremoveall
+3 wxImageList::Replace=wximagelistreplace
+2 wxIndividualLayoutConstraint
+3 wxIndividualLayoutConstraint=wxindividuallayoutconstraint
+3 Edges and relationships=topic396
+3 wxIndividualLayoutConstraint::wxIndividualLayoutConstraint=topic397
+3 wxIndividualLayoutConstraint::Above=topic398
+3 wxIndividualLayoutConstraint::Absolute=topic399
+3 wxIndividualLayoutConstraint::AsIs=topic400
+3 wxIndividualLayoutConstraint::Below=topic401
+3 wxIndividualLayoutConstraint::Unconstrained=topic402
+3 wxIndividualLayoutConstraint::LeftOf=topic403
+3 wxIndividualLayoutConstraint::PercentOf=topic404
+3 wxIndividualLayoutConstraint::RightOf=topic405
+3 wxIndividualLayoutConstraint::SameAs=topic406
+3 wxIndividualLayoutConstraint::Set=topic407
+2 wxInitDialogEvent
+3 wxInitDialogEvent=wxinitdialogevent
+3 wxInitDialogEvent::wxInitDialogEvent=topic408
+2 wxKeyEvent
+3 wxKeyEvent=wxkeyevent
+3 wxKeyEvent::m_altDown=topic409
+3 wxKeyEvent::m_controlDown=topic410
+3 wxKeyEvent::m_keyCode=topic411
+3 wxKeyEvent::m_metaDown=topic412
+3 wxKeyEvent::m_shiftDown=topic413
+3 wxKeyEvent::m_x=topic414
+3 wxKeyEvent::m_y=topic415
+3 wxKeyEvent::wxKeyEvent=topic416
+3 wxKeyEvent::AltDown=topic417
+3 wxKeyEvent::ControlDown=topic418
+3 wxKeyEvent::GetX=topic419
+3 wxKeyEvent::GetY=topic420
+3 wxKeyEvent::KeyCode=topic421
+3 wxKeyEvent::MetaDown=topic422
+3 wxKeyEvent::Position=topic423
+3 wxKeyEvent::ShiftDown=topic424
+2 wxLayoutConstraints
+3 wxLayoutConstraints=wxlayoutconstraints
+3 wxLayoutConstraints::wxLayoutConstraints=topic425
+3 wxLayoutConstraints::bottom=topic426
+3 wxLayoutConstraints::centreX=topic427
+3 wxLayoutConstraints::centreY=topic428
+3 wxLayoutConstraints::height=topic429
+3 wxLayoutConstraints::left=topic430
+3 wxLayoutConstraints::right=topic431
+3 wxLayoutConstraints::top=topic432
+3 wxLayoutConstraints::width=topic433
+2 wxList
+3 wxList=wxlist
+3 wxList::wxList=topic434
+3 wxList::~wxList=topic435
+3 wxList::Append=topic436
+3 wxList::Clear=topic437
+3 wxList::DeleteContents=topic438
+3 wxList::DeleteNode=topic439
+3 wxList::DeleteObject=topic440
+3 wxList::Find=topic441
+3 wxList::First=topic442
+3 wxList::Insert=topic443
+3 wxList::Last=topic444
+3 wxList::Member=topic445
+3 wxList::Nth=topic446
+3 wxList::Number=topic447
+3 wxList::Sort=topic448
+2 wxListBox
+3 wxListBox=wxlistbox
+3 wxListBox::wxListBox=wxlistboxconstr
+3 wxListBox::~wxListBox=topic449
+3 wxListBox::Append=wxlistboxappend
+3 wxListBox::Clear=wxlistboxclear
+3 wxListBox::Create=wxlistboxcreate
+3 wxListBox::Delete=wxlistboxdelete
+3 wxListBox::Deselect=wxlistboxdeselect
+3 wxListBox::FindString=wxlistboxfindstring
+3 wxListBox::GetClientData=wxlistboxgetclientdata
+3 wxListBox::GetSelection=wxlistboxgetselection
+3 wxListBox::GetSelections=wxlistboxgetselections
+3 wxListBox::GetString=wxlistboxgetstring
+3 wxListBox::GetStringSelection=wxlistboxgetstringselection
+3 wxListBox::Number=wxlistboxnumber
+3 wxListBox::Selected=wxlistboxselected
+3 wxListBox::Set=wxlistboxset
+3 wxListBox::SetClientData=wxlistboxsetclientdata
+3 wxListBox::SetFirstItem=wxlistboxsetfirstitem
+3 wxListBox::SetSelection=wxlistboxsetselection
+3 wxListBox::SetString=wxlistboxsetstring
+3 wxListBox::SetStringSelection=wxlistboxsetstringselection
+2 wxListCtrl
+3 wxListCtrl=wxlistctrl
+3 wxListCtrl::wxListCtrl=wxlistctrlconstr
+3 wxListCtrl::~wxListCtrl=topic450
+3 wxListCtrl::Arrange=wxlistctrlarrange
+3 wxListCtrl::Create=wxlistctrlcreate
+3 wxListCtrl::DeleteItem=wxlistctrldeleteitem
+3 wxListCtrl::DeleteAllItems=wxlistctrldeleteallitems
+3 wxListCtrl::DeleteColumn=wxlistctrldeletecolumn
+3 wxListCtrl::Edit=wxlistctrledit
+3 wxListCtrl::EnsureVisible=wxlistctrlensurevisible
+3 wxListCtrl::FindItem=wxlistctrlfinditem
+3 wxListCtrl::GetColumn=wxlistctrlgetcolumn
+3 wxListCtrl::GetColumnWidth=wxlistctrlgetcolumnwidth
+3 wxListCtrl::GetCountPerPage=wxlistctrlgetcountperpage
+3 wxListCtrl::GetEditControl=wxlistctrlgeteditcontrol
+3 wxListCtrl::GetImageList=wxlistctrlgetimagelist
+3 wxListCtrl::GetItem=wxlistctrlgetitem
+3 wxListCtrl::GetItemData=wxlistctrlgetitemdata
+3 wxListCtrl::GetItemPosition=wxlistctrlgetitemposition
+3 wxListCtrl::GetItemRect=wxlistctrlgetitemrect
+3 wxListCtrl::GetItemState=wxlistctrlgetitemstate
+3 wxListCtrl::GetItemCount=wxlistctrlgetitemcount
+3 wxListCtrl::GetItemSpacing=wxlistctrlgetitemspacing
+3 wxListCtrl::GetItemText=wxlistctrlgetitemtext
+3 wxListCtrl::GetNextItem=wxlistctrlgetnextitem
+3 wxListCtrl::GetSelectedItemCount=wxlistctrlgetselecteditemcount
+3 wxListCtrl::GetTextColour=wxlistctrlgettextcolour
+3 wxListCtrl::GetTopItem=wxlistctrlgettopitem
+3 wxListCtrl::HitTest=wxlistctrlhittest
+3 wxListCtrl::InsertColumn=wxlistctrlinsertcolumn
+3 wxListCtrl::InsertItem=wxlistctrlinsertitem
+3 wxListCtrl::ScrollList=wxlistctrlscrolllist
+3 wxListCtrl::SetBackgroundColour=wxlistctrlsetbackgroundcolour
+3 wxListCtrl::SetColumn=wxlistctrlsetcolumn
+3 wxListCtrl::SetColumnWidth=wxlistctrlsetcolumnwidth
+3 wxListCtrl::SetImageList=wxlistctrlsetimagelist
+3 wxListCtrl::SetItem=wxlistctrlsetitem
+3 wxListCtrl::SetItemData=wxlistctrlsetitemdata
+3 wxListCtrl::SetItemImage=wxlistctrlsetitemimage
+3 wxListCtrl::SetItemPosition=wxlistctrlsetitemposition
+3 wxListCtrl::SetItemState=wxlistctrlsetitemstate
+3 wxListCtrl::SetItemText=wxlistctrlsetitemtext
+3 wxListCtrl::SetSingleStyle=wxlistctrlsetsinglestyle
+3 wxListCtrl::SetTextColour=wxlistctrlsettextcolour
+3 wxListCtrl::SetWindowStyleFlag=wxlistctrlsetwindowstyleflag
+3 wxListCtrl::SortItems=wxlistctrlsortitems
+2 wxListEvent
+3 wxListEvent=wxlistevent
+3 wxListEvent::wxListEvent=topic451
+3 wxListEvent::m_code=topic452
+3 wxListEvent::m_itemIndex=topic453
+3 wxListEvent::m_oldItemIndex=topic454
+3 wxListEvent::m_col=topic455
+3 wxListEvent::m_cancelled=topic456
+3 wxListEvent::m_pointDrag=topic457
+3 wxListEvent::m_item=topic458
+2 wxMask
+3 wxMask=wxmask
+3 wxMask::wxMask=wxmaskconstr
+3 wxMask::~wxMask=topic459
+2 wxMDIChildFrame
+3 wxMDIChildFrame=wxmdichildframe
+3 wxMDIChildFrame::wxMDIChildFrame=wxmdichildframeconstr
+3 wxMDIChildFrame::~wxMDIChildFrame=topic460
+3 wxMDIChildFrame::Activate=wxmdichildframeactivate
+3 wxMDIChildFrame::Create=wxmdichildframecreate
+3 wxMDIChildFrame::Maximize=wxmdichildframemaximize
+3 wxMDIChildFrame::Restore=wxmdichildframerestore
+2 wxMDIClientWindow
+3 wxMDIClientWindow=wxmdiclientwindow
+3 wxMDIClientWindow::wxMDIClientWindow=wxmdiclientwindowconstr
+3 wxMDIClientWindow::~wxMDIClientWindow=topic461
+3 wxMDIClientWindow::CreateClient=wxmdiclientwindowcreateclient
+2 wxMDIParentFrame
+3 wxMDIParentFrame=wxmdiparentframe
+3 wxMDIParentFrame::wxMDIParentFrame=wxmdiparentframeconstr
+3 wxMDIParentFrame::~wxMDIParentFrame=topic462
+3 wxMDIParentFrame::ActivateNext=wxmdiparentframeactivatenext
+3 wxMDIParentFrame::ActivatePrevious=wxmdiparentframeactivateprevious
+3 wxMDIParentFrame::ArrangeIcons=wxmdiparentframearrangeicons
+3 wxMDIParentFrame::Cascade=wxmdiparentframecascade
+3 wxMDIParentFrame::Create=wxmdiparentframecreate
+3 wxMDIParentFrame::GetClientSize=wxmdiparentframegetclientsize
+3 wxMDIParentFrame::GetActiveChild=wxmdiparentframegetactivechild
+3 wxMDIParentFrame::GetClientWindow=wxmdiparentframegetclientwindow
+3 wxMDIParentFrame::GetToolBar=wxmdiparentframegettoolbar
+3 wxMDIParentFrame::OnCreateClient=wxmdiparentframeoncreateclient
+3 wxMDIParentFrame::SetToolBar=wxmdiparentframesettoolbar
+3 wxMDIParentFrame::Tile=wxmdiparentframetile
+2 wxMenu
+3 wxMenu=wxmenu
+3 wxMenu::wxMenu=wxmenuconstr
+3 wxMenu::~wxMenu=topic463
+3 wxMenu::Append=wxmenuappend
+3 wxMenu::AppendSeparator=wxmenuappendseparator
+3 wxMenu::Break=wxmenubreak
+3 wxMenu::Check=wxmenucheck
+3 wxMenu::Checked=wxmenuchecked
+3 wxMenu::Enable=wxmenuenable
+3 wxMenu::Enabled=wxmenuenabled
+3 wxMenu::FindItem=wxmenufinditem
+3 wxMenu::FindItemForId=wxmenufinditemforid
+3 wxMenu::GetHelpString=wxmenugethelpstring
+3 wxMenu::GetLabel=wxmenugetlabel
+3 wxMenu::GetTitle=wxmenugettitle
+3 wxMenu::SetHelpString=wxmenusethelpstring
+3 wxMenu::SetLabel=wxmenusetlabel
+3 wxMenu::SetTitle=wxmenusettitle
+2 wxMenuBar
+3 wxMenuBar=wxmenubar
+3 wxMenuBar::wxMenuBar=wxmenubarconstr
+3 wxMenuBar::~wxMenuBar=topic464
+3 wxMenuBar::Append=wxmenubarappend
+3 wxMenuBar::Check=wxmenubarcheck
+3 wxMenuBar::Checked=wxmenubarchecked
+3 wxMenuBar::Enable=wxmenubarenable
+3 wxMenuBar::EnableTop=wxmenubarenabletop
+3 wxMenuBar::FindMenuItem=wxmenubarfindmenuitem
+3 wxMenuBar::FindItemById=wxmenubarfinditembyid
+3 wxMenuBar::GetHelpString=wxmenubargethelpstring
+3 wxMenuBar::GetLabel=wxmenubargetlabel
+3 wxMenuBar::GetLabelTop=wxmenubargetlabeltop
+3 wxMenuBar::SetHelpString=wxmenubarsethelpstring
+3 wxMenuBar::SetLabel=wxmenubarsetlabel
+3 wxMenuBar::SetLabelTop=wxmenubarsetlabeltop
+2 wxMenuEvent
+3 wxMenuEvent=wxmenuevent
+3 wxMenuEvent::wxMenuEvent=topic465
+3 wxMenuEvent::m_menuId=topic466
+3 wxMenuEvent::GetMenuId=wxmenueventgetmenuid
+2 wxMemoryDC
+3 wxMemoryDC=wxmemorydc
+3 wxMemoryDC::wxMemoryDC=topic467
+3 wxMemoryDC::SelectObject=topic468
+2 wxMessageDialog
+3 wxMessageDialog=wxmessagedialog
+3 wxMessageDialog::wxMessageDialog=wxmessagedialogconstr
+3 wxMessageDialog::~wxMessageDialog=topic469
+3 wxMessageDialog::ShowModal=wxmessagedialogshowmodal
+2 wxMetaFile
+3 wxMetaFile=wxmetafile
+3 wxMetaFile::wxMetaFile=topic470
+3 wxMetaFile::~wxMetaFile=topic471
+3 wxMetaFile::Ok=wxmetafileok
+3 wxMetaFile::Play=wxmetafileplay
+3 wxMetaFile::SetClipboard=topic472
+2 wxMetaFileDC
+3 wxMetaFileDC=wxmetafiledc
+3 wxMetaFileDC::wxMetaFileDC=topic473
+3 wxMetaFileDC::~wxMetaFileDC=topic474
+3 wxMetaFileDC::Close=wxmetafiledcclose
+2 wxMiniFrame
+3 wxMiniFrame=wxminiframe
+3 wxMiniFrame::wxMiniFrame=wxminiframeconstr
+3 wxMiniFrame::~wxMiniFrame=topic475
+3 wxMiniFrame::Create=wxminiframecreate
+2 wxMouseEvent
+3 wxMouseEvent=wxmouseevent
+3 wxMouseEvent::m_altDown=topic476
+3 wxMouseEvent::m_controlDown=topic477
+3 wxMouseEvent::m_leftDown=topic478
+3 wxMouseEvent::m_middleDown=topic479
+3 wxMouseEvent::m_rightDown=topic480
+3 wxMouseEvent::m_leftDown=topic481
+3 wxMouseEvent::m_metaDown=topic482
+3 wxMouseEvent::m_shiftDown=topic483
+3 wxMouseEvent::m_x=topic484
+3 wxMouseEvent::m_y=topic485
+3 wxMouseEvent::wxMouseEvent=topic486
+3 wxMouseEvent::AltDown=topic487
+3 wxMouseEvent::Button=topic488
+3 wxMouseEvent::ButtonDClick=buttondclick
+3 wxMouseEvent::ButtonDown=topic489
+3 wxMouseEvent::ButtonUp=topic490
+3 wxMouseEvent::ControlDown=topic491
+3 wxMouseEvent::Dragging=topic492
+3 wxMouseEvent::Entering=wxmouseevententering
+3 wxMouseEvent::GetX=wxmouseeventgetx
+3 wxMouseEvent::GetY=wxmouseeventgety
+3 wxMouseEvent::IsButton=topic493
+3 wxMouseEvent::Leaving=wxmouseeventleaving
+3 wxMouseEvent::LeftDClick=topic494
+3 wxMouseEvent::LeftDown=topic495
+3 wxMouseEvent::LeftIsDown=topic496
+3 wxMouseEvent::LeftUp=topic497
+3 wxMouseEvent::MetaDown=topic498
+3 wxMouseEvent::MiddleDClick=topic499
+3 wxMouseEvent::MiddleDown=topic500
+3 wxMouseEvent::MiddleIsDown=topic501
+3 wxMouseEvent::MiddleUp=topic502
+3 wxMouseEvent::Moving=topic503
+3 wxMouseEvent::Position=topic504
+3 wxMouseEvent::RightDClick=topic505
+3 wxMouseEvent::RightDown=topic506
+3 wxMouseEvent::RightIsDown=topic507
+3 wxMouseEvent::RightUp=topic508
+3 wxMouseEvent::ShiftDown=topic509
+2 wxMoveEvent
+3 wxMoveEvent=wxmoveevent
+3 wxMoveEvent::wxMoveEvent=topic510
+3 wxMoveEvent::GetPosition=wxmoveeventgetposition
+2 wxMultipleChoiceDialog
+3 wxMultipleChoiceDialog=wxmultiplechoicedialog
+2 wxNode
+3 wxNode=wxnode
+3 wxNode::Data=topic511
+3 wxNode::Next=topic512
+3 wxNode::Previous=topic513
+3 wxNode::SetData=topic514
+2 wxObject
+3 wxObject=wxobject
+3 wxObject::wxObject=wxobjectconstr
+3 wxObject::~wxObject=topic515
+3 wxObject::m_refData=wxobjectmrefdata
+3 wxObject::Dump=wxobjectdump
+3 wxObject::GetClassInfo=wxobjectgetclassinfo
+3 wxObject::GetRefData=wxobjectgetrefdata
+3 wxObject::IsKindOf=wxobjectiskindof
+3 wxObject::Ref=wxobjectref
+3 wxObject::SetRefData=wxobjectsetrefdata
+3 wxObject::UnRef=wxobjectunref
+3 wxObject::operator new=wxobjectnew
+3 wxObject::operator delete=wxobjectdelete
+2 wxObjectRefData
+3 wxObjectRefData=wxobjectrefdata
+3 wxObjectRefData::m_count=topic516
+3 wxObjectRefData::wxObjectRefData=wxobjectrefdataconstr
+3 wxObjectRefData::~wxObjectRefData=topic517
+2 wxPageSetupData
+3 wxPageSetupData=wxpagesetupdata
+3 wxPageSetupData::wxPageSetupData=topic518
+3 wxPageSetupData::~wxPageSetupData=topic519
+3 wxPageSetupData::EnableHelp=wxpagesetupdataenablehelp
+3 wxPageSetupData::EnableMargins=wxpagesetupdataenablemargins
+3 wxPageSetupData::EnableOrientation=wxpagesetupdataenableorientation
+3 wxPageSetupData::EnablePaper=wxpagesetupdataenablepaper
+3 wxPageSetupData::EnablePrinter=wxpagesetupdataenableprinter
+3 wxPageSetupData::GetPaperSize=wxpagesetupdatagetpapersize
+3 wxPageSetupData::GetMarginTopLeft=wxpagesetupdatagetmargintopleft
+3 wxPageSetupData::GetMarginBottomRight=wxpagesetupdatagetmarginbottomright
+3 wxPageSetupData::GetMinMarginTopLeft=wxpagesetupdatagetminmargintopleft
+3 wxPageSetupData::GetMinMarginBottomRight=wxpagesetupdatagetminmarginbottomright
+3 wxPageSetupData::GetOrientation=wxpagesetupdatagetorientation
+3 wxPageSetupData::GetDefaultMinMargins=wxpagesetupdatagetdefaultminmargins
+3 wxPageSetupData::GetEnableMargins=wxpagesetupdatagetenablemargins
+3 wxPageSetupData::GetEnableOrientation=wxpagesetupdatagetenableorientation
+3 wxPageSetupData::GetEnablePaper=wxpagesetupdatagetenablepaper
+3 wxPageSetupData::GetEnablePrinter=wxpagesetupdatagetenableprinter
+3 wxPageSetupData::GetEnableHelp=wxpagesetupdatagetenablehelp
+3 wxPageSetupData::GetDefaultInfo=wxpagesetupdatagetdefaultinfo
+3 wxPageSetupData::SetPaperSize=wxpagesetupdatasetpapersize
+3 wxPageSetupData::SetMarginTopLeft=wxpagesetupdatasetmargintopleft
+3 wxPageSetupData::SetMarginBottomRight=wxpagesetupdatasetmarginbottomright
+3 wxPageSetupData::SetMinMarginTopLeft=wxpagesetupdatasetminmargintopleft
+3 wxPageSetupData::SetMinMarginBottomRight=wxpagesetupdatasetminmarginbottomright
+3 wxPageSetupData::SetOrientation=wxpagesetupdatasetorientation
+3 wxPageSetupData::SetDefaultMinMargins=wxpagesetupdatasetdefaultminmargins
+3 wxPageSetupData::SetDefaultInfo=wxpagesetupdatasetdefaultinfo
+2 wxPageSetupDialog
+3 wxPageSetupDialog=wxpagesetupdialog
+3 wxPageSetupDialog::wxPageSetupDialog=topic520
+3 wxPageSetupDialog::~wxPageSetupDialog=topic521
+3 wxPageSetupDialog::GetPageSetupData=wxpagesetupdialoggetpagesetupdata
+3 wxPageSetupDialog::ShowModal=wxpagesetupdialogshowmodal
+2 wxPaintDC
+3 wxPaintDC=wxpaintdc
+3 wxPaintDC::wxPaintDC=topic522
+2 wxPaintEvent
+3 wxPaintEvent=wxpaintevent
+3 wxPaintEvent::wxPaintEvent=topic523
+2 wxPalette
+3 wxPalette=wxpalette
+3 wxPalette::wxPalette=wxpaletteconstr
+3 wxPalette::~wxPalette=topic524
+3 wxPalette::Create=wxpalettecreate
+3 wxPalette::GetPixel=wxpalettegetpixel
+3 wxPalette::GetRGB=wxpalettegetrgb
+3 wxPalette::Ok=wxpaletteok
+3 wxPalette::operator ==wxpaletteassignment
+3 wxPalette::operator ===wxpaletteequals
+3 wxPalette::operator !==wxpalettenotequals
+2 wxPanel
+3 wxPanel=wxpanel
+3 wxPanel::wxPanel=wxpanelconstr
+3 wxPanel::~wxPanel=topic525
+3 wxPanel::Create=wxpanelcreate
+3 wxPanel::InitDialog=wxpanelinitdialog
+3 wxPanel::OnSysColourChanged=wxpanelonsyscolourchanged
+2 wxPanelTabView
+3 wxPanelTabView=wxpaneltabview
+3 wxPanelTabView::wxPanelTabView=wxpaneltabviewconstr
+3 wxPanelTabView::~wxPanelTabView=topic526
+3 wxPanelTabView::AddTabWindow=wxpaneltabviewaddtabwindow
+3 wxPanelTabView::ClearWindows=topic527
+3 wxPanelTabView::GetCurrentWindow=topic528
+3 wxPanelTabView::GetTabWindow=topic529
+3 wxPanelTabView::ShowWindowForTab=topic530
+2 wxPathList
+3 wxPathList=wxpathlist
+3 wxPathList::wxPathList=topic531
+3 wxPathList::AddEnvList=topic532
+3 wxPathList::Add=topic533
+3 wxPathList::EnsureFileAccessible=topic534
+3 wxPathList::FindAbsoluteValidPath=topic535
+3 wxPathList::FindValidPath=topic536
+3 wxPathList::Member=topic537
+2 wxPen
+3 wxPen=wxpen
+3 wxPen::wxPen=wxpenconstr
+3 wxPen::~wxPen=topic538
+3 wxPen::GetCap=wxpengetcap
+3 wxPen::GetColour=wxpengetcolour
+3 wxPen::GetDashes=wxpengetdashes
+3 wxPen::GetJoin=wxpengetjoin
+3 wxPen::GetStipple=wxpengetstipple
+3 wxPen::GetStyle=wxpengetstyle
+3 wxPen::GetWidth=wxpengetwidth
+3 wxPen::Ok=wxpenok
+3 wxPen::SetCap=wxpensetcap
+3 wxPen::SetColour=wxpensetcolour
+3 wxPen::SetDashes=wxpensetdashes
+3 wxPen::SetJoin=wxpensetjoin
+3 wxPen::SetStipple=wxpensetstipple
+3 wxPen::SetStyle=wxpensetstyle
+3 wxPen::SetWidth=wxpensetwidth
+3 wxPen::operator ==wxpenassignment
+3 wxPen::operator ===wxpenequals
+3 wxPen::operator !==wxpennotequals
+2 wxPenList
+3 wxPenList=wxpenlist
+3 wxPenList::wxPenList=topic539
+3 wxPenList::AddPen=wxpenlistaddpen
+3 wxPenList::FindOrCreatePen=wxpenlistfindorcreatepen
+3 wxPenList::RemovePen=wxpenlistremovepen
+2 wxPoint
+3 wxPoint=wxpoint
+3 wxPoint::wxPoint=topic540
+3 wxPoint::x=topic541
+3 wxPoint::y=topic542
+2 wxPreviewCanvas
+3 wxPreviewCanvas=wxpreviewcanvas
+3 wxPreviewCanvas::wxPreviewCanvas=topic543
+3 wxPreviewCanvas::~wxPreviewCanvas=topic544
+3 wxPreviewCanvas::OnPaint=wxpreviewcanvasonpaint
+2 wxPreviewControlBar
+3 wxPreviewControlBar=wxpreviewcontrolbar
+3 wxPreviewControlBar::wxPreviewControlbar=topic545
+3 wxPreviewControlBar::~wxPreviewControlBar=topic546
+3 wxPreviewControlBar::CreateButtons=topic547
+3 wxPreviewControlBar::GetPrintPreview=topic548
+3 wxPreviewControlBar::GetZoomControl=topic549
+3 wxPreviewControlBar::SetZoomControl=topic550
+2 wxPreviewFrame
+3 wxPreviewFrame=wxpreviewframe
+3 wxPreviewFrame::wxPreviewFrame=topic551
+3 wxPreviewFrame::~wxPreviewFrame=topic552
+3 wxPreviewFrame::CreateControlBar=topic553
+3 wxPreviewFrame::CreateCanvas=topic554
+3 wxPreviewFrame::Initialize=topic555
+3 wxPreviewFrame::OnClose=topic556
+2 wxPrintData
+3 wxPrintData=wxprintdata
+3 wxPrintData::wxPrintData=topic557
+3 wxPrintData::~wxPrintData=topic558
+3 wxPrintData::EnableHelp=wxprintdataenablehelp
+3 wxPrintData::EnablePageNumbers=wxprintdataenablepagenumbers
+3 wxPrintData::EnablePrintToFile=wxprintdataenableprinttofile
+3 wxPrintData::EnableSelection=wxprintdataenableselection
+3 wxPrintData::GetAllPages=wxprintdatagetallpages
+3 wxPrintData::GetCollate=wxprintdatagetcollate
+3 wxPrintData::GetFromPage=wxprintdatagetfrompage
+3 wxPrintData::GetMaxPage=wxprintdatagetmaxpage
+3 wxPrintData::GetMinPage=wxprintdatagetminpage
+3 wxPrintData::GetNoCopies=wxprintdatagetnocopies
+3 wxPrintData::GetOrientation=wxprintdatagetorientation
+3 wxPrintData::GetToPage=wxprintdatagettopage
+3 wxPrintData::SetCollate=wxprintdatasetcollate
+3 wxPrintData::SetFromPage=wxprintdatasetfrompage
+3 wxPrintData::SetMaxPage=wxprintdatasetmaxpage
+3 wxPrintData::SetMinPage=wxprintdatasetminpage
+3 wxPrintData::SetOrientation=wxprintdatasetorientation
+3 wxPrintData::SetNoCopies=wxprintdatasetnocopies
+3 wxPrintData::SetPrintToFile=wxprintdatasetprinttofile
+3 wxPrintData::SetSetupDialog=wxprintdatasetsetupdialog
+3 wxPrintData::SetToPage=wxprintdatasettopage
+2 wxPrintDialog
+3 wxPrintDialog=wxprintdialog
+3 wxPrintDialog::wxPrintDialog=topic559
+3 wxPrintDialog::~wxPrintDialog=topic560
+3 wxPrintDialog::GetPrintData=wxprintdialoggetprintdata
+3 wxPrintDialog::GetPrintDC=wxprintdialoggetprintdc
+3 wxPrintDialog::ShowModal=wxprintdialogshowmodal
+2 wxPrinter
+3 wxPrinter=wxprinter
+3 wxPrinter::wxPrinter=topic561
+3 wxPrinter::~wxPrinter=topic562
+3 wxPrinter::Abort=wxprinterabort
+3 wxPrinter::CreateAbortWindow=wxprintercreateabortwindow
+3 wxPrinter::GetPrintData=wxprintergetprintdata
+3 wxPrinter::Print=wxprinterprint
+3 wxPrinter::PrintDialog=wxprinterprintdialog
+3 wxPrinter::ReportError=wxprinterreporterror
+3 wxPrinter::Setup=wxprintersetup
+2 wxPrinterDC
+3 wxPrinterDC=wxprinterdc
+3 wxPrinterDC::wxPrinterDC=topic563
+2 wxPrintout
+3 wxPrintout=wxprintout
+3 wxPrintout::wxPrintout=topic564
+3 wxPrintout::~wxPrintout=topic565
+3 wxPrintout::GetDC=wxprintoutgetdc
+3 wxPrintout::GetPageInfo=wxprintoutgetpageinfo
+3 wxPrintout::GetPageSizeMM=wxprintoutgetpagesizemm
+3 wxPrintout::GetPageSizePixels=wxprintoutgetpagesizepixels
+3 wxPrintout::GetPPIPrinter=wxprintoutgetppiprinter
+3 wxPrintout::GetPPIScreen=wxprintoutgetppiscreen
+3 wxPrintout::HasPage=wxprintouthaspage
+3 wxPrintout::IsPreview=wxprintoutispreview
+3 wxPrintout::OnBeginDocument=wxprintoutonbegindocument
+3 wxPrintout::OnEndDocument=wxprintoutonenddocument
+3 wxPrintout::OnBeginPrinting=wxprintoutonbeginprinting
+3 wxPrintout::OnEndPrinting=wxprintoutonendprinting
+3 wxPrintout::OnPreparePrinting=wxprintoutonprepareprinting
+3 wxPrintout::OnPrintPage=wxprintoutonprintpage
+2 wxPrintPreview
+3 wxPrintPreview=wxprintpreview
+3 wxPrintPreview::wxPrintPreview=topic566
+3 wxPrintPreview::~wxPrintPreview=topic567
+3 wxPrintPreview::DrawBlankPage=wxprintpreviewdrawblankpage
+3 wxPrintPreview::GetCanvas=wxprintpreviewgetcanvas
+3 wxPrintPreview::GetCurrentPage=wxprintpreviewgetcurrentpage
+3 wxPrintPreview::GetFrame=wxprintpreviewgetframe
+3 wxPrintPreview::GetMaxPage=wxprintpreviewgetmaxpage
+3 wxPrintPreview::GetMinPage=wxprintpreviewgetminpage
+3 wxPrintPreview::GetPrintData=wxprintpreviewgetprintdata
+3 wxPrintPreview::GetPrintout=wxprintpreviewgetprintout
+3 wxPrintPreview::GetPrintoutForPrinting=wxprintpreviewgetprintoutforprinting
+3 wxPrintPreview::Ok=wxprintpreviewok
+3 wxPrintPreview::PaintPage=wxprintpreviewpaintpage
+3 wxPrintPreview::Print=wxprintpreviewprint
+3 wxPrintPreview::RenderPage=wxprintpreviewrenderpage
+3 wxPrintPreview::SetCanvas=wxprintpreviewsetcanvas
+3 wxPrintPreview::SetCurrentPage=wxprintpreviewsetcurrentpage
+3 wxPrintPreview::SetFrame=wxprintpreviewsetframe
+3 wxPrintPreview::SetPrintout=wxprintpreviewsetprintout
+3 wxPrintPreview::SetZoom=wxprintpreviewsetzoom
+2 wxPostScriptDC
+3 wxPostScriptDC=wxpostscriptdc
+3 wxPostScriptDC::wxPostScriptDC=topic568
+3 wxPostScriptDC::GetStream=topic569
+2 wxQueryCol
+3 wxQueryCol=wxquerycol
+3 wxQueryCol::wxQueryCol=topic570
+3 wxQueryCol::~wxQueryCol=topic571
+3 wxQueryCol::BindVar=topic572
+3 wxQueryCol::FillVar=topic573
+3 wxQueryCol::GetData=topic574
+3 wxQueryCol::GetName=topic575
+3 wxQueryCol::GetType=topic576
+3 wxQueryCol::GetSize=topic577
+3 wxQueryCol::IsRowDirty=topic578
+3 wxQueryCol::IsNullable=topic579
+3 wxQueryCol::AppendField=topic580
+3 wxQueryCol::SetData=topic581
+3 wxQueryCol::SetName=topic582
+3 wxQueryCol::SetNullable=topic583
+3 wxQueryCol::SetFieldDirty=topic584
+3 wxQueryCol::SetType=topic585
+2 wxQueryField
+3 wxQueryField=wxqueryfield
+3 wxQueryField::wxQueryField=topic586
+3 wxQueryField::~wxQueryField=topic587
+3 wxQueryField::AllocData=topic588
+3 wxQueryField::ClearData=topic589
+3 wxQueryField::GetData=topic590
+3 wxQueryField::GetSize=topic591
+3 wxQueryField::GetType=topic592
+3 wxQueryField::IsDirty=topic593
+3 wxQueryField::SetData=topic594
+3 wxQueryField::SetDirty=topic595
+3 wxQueryField::SetSize=topic596
+3 wxQueryField::SetType=topic597
+2 wxRealPoint
+3 wxRealPoint=wxrealpoint
+3 wxRealPoint::wxRealPoint=topic598
+2 wxRect
+3 wxRect=wxrect
+3 wxRect::wxRect=topic599
+3 wxRect::x=topic600
+3 wxRect::y=topic601
+3 wxRect::width=topic602
+3 wxRect::height=topic603
+3 wxRect::GetBottom=wxrectgetbottom
+3 wxRect::GetHeight=wxrectgetheight
+3 wxRect::GetLeft=wxrectgetleft
+3 wxRect::GetPosition=wxrectgetposition
+3 wxRect::GetRight=wxrectgetright
+3 wxRect::GetSize=wxrectgetsize
+3 wxRect::GetTop=wxrectgettop
+3 wxRect::GetWidth=wxrectgetwidth
+3 wxRect::GetX=wxrectgetx
+3 wxRect::GetY=wxrectgety
+3 wxRect::SetHeight=wxrectsetheight
+3 wxRect::SetWidth=wxrectsetwidth
+3 wxRect::SetX=wxrectsetx
+3 wxRect::SetY=wxrectsety
+3 wxRect::operator ==topic604
+3 wxRect::operator ===topic605
+3 wxRect::operator !==topic606
+2 wxRecordSet
+3 wxRecordSet=wxrecordset
+3 wxRecordSet::wxRecordSet=topic607
+3 wxRecordSet::~wxRecordSet=topic608
+3 wxRecordSet::AddNew=topic609
+3 wxRecordSet::BeginQuery=topic610
+3 wxRecordSet::BindVar=topic611
+3 wxRecordSet::CanAppend=topic612
+3 wxRecordSet::Cancel=topic613
+3 wxRecordSet::CanRestart=topic614
+3 wxRecordSet::CanScroll=topic615
+3 wxRecordSet::CanTransact=topic616
+3 wxRecordSet::CanUpdate=topic617
+3 wxRecordSet::ConstructDefaultSQL=topic618
+3 wxRecordSet::Delete=topic619
+3 wxRecordSet::Edit=topic620
+3 wxRecordSet::EndQuery=topic621
+3 wxRecordSet::ExecuteSQL=wxrecordsetexecutesql
+3 wxRecordSet::FillVars=topic622
+3 wxRecordSet::GetColName=topic623
+3 wxRecordSet::GetColType=topic624
+3 wxRecordSet::GetColumns=topic625
+3 wxRecordSet::GetCurrentRecord=topic626
+3 wxRecordSet::GetDatabase=topic627
+3 wxRecordSet::GetDataSources=wxrecordsetgetdatasources
+3 wxRecordSet::GetDefaultConnect=topic628
+3 wxRecordSet::GetDefaultSQL=topic629
+3 wxRecordSet::GetErrorCode=topic630
+3 wxRecordSet::GetFieldData=wxrecordsetgetfielddata
+3 wxRecordSet::GetFieldDataPtr=wxrecordsetgetfielddataptr
+3 wxRecordSet::GetFilter=topic631
+3 wxRecordSet::GetForeignKeys=topic632
+3 wxRecordSet::GetNumberCols=topic633
+3 wxRecordSet::GetNumberFields=topic634
+3 wxRecordSet::GetNumberParams=topic635
+3 wxRecordSet::GetNumberRecords=topic636
+3 wxRecordSet::GetPrimaryKeys=topic637
+3 wxRecordSet::GetOptions=topic638
+3 wxRecordSet::GetResultSet=topic639
+3 wxRecordSet::GetSortString=topic640
+3 wxRecordSet::GetSQL=topic641
+3 wxRecordSet::GetTableName=topic642
+3 wxRecordSet::GetTables=topic643
+3 wxRecordSet::GetType=topic644
+3 wxRecordSet::GoTo=topic645
+3 wxRecordSet::IsBOF=topic646
+3 wxRecordSet::IsFieldDirty=topic647
+3 wxRecordSet::IsFieldNull=topic648
+3 wxRecordSet::IsColNullable=topic649
+3 wxRecordSet::IsEOF=topic650
+3 wxRecordSet::IsDeleted=topic651
+3 wxRecordSet::IsOpen=topic652
+3 wxRecordSet::Move=topic653
+3 wxRecordSet::MoveFirst=topic654
+3 wxRecordSet::MoveLast=topic655
+3 wxRecordSet::MoveNext=wxrecordsetmovenext
+3 wxRecordSet::MovePrev=wxrecordsetmoveprev
+3 wxRecordSet::Query=topic656
+3 wxRecordSet::RecordCountFinal=topic657
+3 wxRecordSet::Requery=topic658
+3 wxRecordSet::SetFieldDirty=topic659
+3 wxRecordSet::SetDefaultSQL=topic660
+3 wxRecordSet::SetFieldNull=topic661
+3 wxRecordSet::SetOptions=topic662
+3 wxRecordSet::SetTableName=topic663
+3 wxRecordSet::SetType=topic664
+3 wxRecordSet::Update=topic665
+2 wxRadioBox
+3 wxRadioBox=wxradiobox
+3 wxRadioBox::wxRadioBox=wxradioboxconstr
+3 wxRadioBox::~wxRadioBox=topic666
+3 wxRadioBox::Create=wxradioboxcreate
+3 wxRadioBox::Enable=wxradioboxenable
+3 wxRadioBox::FindString=wxradioboxfindstring
+3 wxRadioBox::GetLabel=wxradioboxgetlabel
+3 wxRadioBox::GetSelection=wxradioboxgetselection
+3 wxRadioBox::GetStringSelection=wxradioboxgetstringselection
+3 wxRadioBox::Number=wxradioboxnumber
+3 wxRadioBox::SetLabel=wxradioboxsetlabel
+3 wxRadioBox::SetSelection=wxradioboxsetselection
+3 wxRadioBox::SetStringSelection=wxradioboxsetstringselection
+3 wxRadioBox::Show=wxradioboxshow
+3 wxRadioBox::GetString=wxradioboxgetstring
+2 wxRadioButton
+3 wxRadioButton=wxradiobutton
+3 wxRadioButton::wxRadioButton=wxradiobuttonconstr
+3 wxRadioButton::~wxRadioButton=topic667
+3 wxRadioButton::Create=wxradiobuttoncreate
+3 wxRadioButton::GetValue=wxradiobuttongetvalue
+3 wxRadioButton::SetValue=wxradiobuttonsetvalue
+2 wxScreenDC
+3 wxScreenDC=wxscreendc
+3 wxScreenDC::wxScreenDC=topic668
+3 wxScreenDC::StartDrawingOnTop=wxscreendcstartdrawingontop
+3 wxScreenDC::EndDrawingOnTop=wxscreendcenddrawingontop
+2 wxScrollBar
+3 wxScrollBar=wxscrollbar
+3 wxScrollBar::wxScrollBar=wxscrollbarconstr
+3 wxScrollBar::~wxScrollBar=topic669
+3 wxScrollBar::Create=wxscrollbarcreate
+3 wxScrollBar::GetRange=wxscrollbargetrange
+3 wxScrollBar::GetPageSize=wxscrollbargetpagesize
+3 wxScrollBar::GetPosition=wxscrollbargetposition
+3 wxScrollBar::GetThumbLength=wxscrollbargetthumblength
+3 wxScrollBar::SetPosition=wxscrollbarsetposition
+3 wxScrollBar::SetScrollbar=wxscrollbarsetscrollbar
+2 wxScrollEvent
+3 wxScrollEvent=wxscrollevent
+3 wxScrollEvent::wxScrollEvent=topic670
+3 wxScrollEvent::GetOrientation=wxscrolleventgetorientation
+3 wxScrollEvent::GetPosition=wxscrolleventgetposition
+2 wxScrolledWindow
+3 wxScrolledWindow=wxscrolledwindow
+3 wxScrolledWindow::wxScrolledWindow=wxscrolledwindowconstr
+3 wxScrolledWindow::~wxScrolledWindow=topic671
+3 wxScrolledWindow::Create=wxscrolledwindowcreate
+3 wxScrolledWindow::EnableScrolling=wxscrolledwindowenablescrolling
+3 wxScrolledWindow::GetScrollPixelsPerUnit=wxscrolledwindowgetscrollpixelsperunit
+3 wxScrolledWindow::GetVirtualSize=wxscrolledwindowgetvirtualsize
+3 wxScrolledWindow::IsRetained=wxscrolledwindowisretained
+3 wxScrolledWindow::PrepareDC=wxscrolledwindowpreparedc
+3 wxScrolledWindow::OnDraw=wxscrolledwindowondraw
+3 wxScrolledWindow::OnPaint=wxscrolledwindowonpaint
+3 wxScrolledWindow::OnScroll=wxscrolledwindowonscroll
+3 wxScrolledWindow::Scroll=wxscrolledwindowscroll
+3 wxScrolledWindow::SetScrollbars=wxscrolledwindowsetscrollbars
+3 wxScrolledWindow::ViewStart=wxscrolledwindowviewstart
+2 wxSingleChoiceDialog
+3 wxSingleChoiceDialog=wxsinglechoicedialog
+3 wxSingleChoiceDialog::wxSingleChoiceDialog=wxsinglechoicedialogconstr
+3 wxSingleChoiceDialog::~wxSingleChoiceDialog=topic672
+3 wxSingleChoiceDialog::GetSelection=topic673
+3 wxSingleChoiceDialog::GetSelectionClientData=topic674
+3 wxSingleChoiceDialog::GetStringSelection=topic675
+3 wxSingleChoiceDialog::ShowModal=wxsinglechoicedialogshowmodal
+2 wxSize
+3 wxSize=wxsize
+3 wxSize::wxSize=topic676
+3 wxSize::x=topic677
+3 wxSize::y=topic678
+3 wxSize::GetX=wxsizegetx
+3 wxSize::GetY=wxsizegety
+3 wxSize::Set=wxsizeset
+3 wxSize::operator ==topic679
+2 wxSizeEvent
+3 wxSizeEvent=wxsizeevent
+3 wxSizeEvent::wxSizeEvent=topic680
+3 wxSizeEvent::GetSize=wxsizeeventgetsize
+2 wxSlider
+3 wxSlider=wxslider
+3 wxSlider::wxSlider=wxsliderconstr
+3 wxSlider::~wxSlider=topic681
+3 wxSlider::ClearSel=wxsliderclearsel
+3 wxSlider::ClearTicks=wxsliderclearticks
+3 wxSlider::Create=wxslidercreate
+3 wxSlider::GetLineSize=wxslidergetlinesize
+3 wxSlider::GetMax=wxslidergetmax
+3 wxSlider::GetMin=wxslidergetmin
+3 wxSlider::GetPageSize=wxslidergetpagesize
+3 wxSlider::GetSelEnd=wxslidergetselend
+3 wxSlider::GetSelStart=wxslidergetselstart
+3 wxSlider::GetThumbLength=wxslidergetthumblength
+3 wxSlider::GetTickFreq=wxslidergettickfreq
+3 wxSlider::GetValue=wxslidergetvalue
+3 wxSlider::SetRange=wxslidersetrange
+3 wxSlider::SetTickFreq=wxslidersettickfreq
+3 wxSlider::SetLineSize=wxslidersetlinesize
+3 wxSlider::SetPageSize=wxslidersetpagesize
+3 wxSlider::SetSelection=wxslidersetselection
+3 wxSlider::SetThumbLength=wxslidersetthumblength
+3 wxSlider::SetTick=wxslidersettick
+3 wxSlider::SetValue=wxslidersetvalue
+2 wxSpinButton
+3 wxSpinButton=wxspinbutton
+3 wxSpinButton::wxSpinButton=wxspinbuttonconstr
+3 wxSpinButton::~wxSpinButton=topic682
+3 wxSpinButton::Create=wxspinbuttoncreate
+3 wxSpinButton::GetMax=wxspinbuttongetmax
+3 wxSpinButton::GetMin=wxspinbuttongetmin
+3 wxSpinButton::GetValue=wxspinbuttongetvalue
+3 wxSpinButton::SetRange=wxspinbuttonsetrange
+3 wxSpinButton::SetValue=wxspinbuttonsetvalue
+2 wxSplitterWindow
+3 wxSplitterWindow=wxsplitterwindow
+3 wxSplitterWindow::wxSplitterWindow=wxsplitterwindowconstr
+3 wxSplitterWindow::~wxSplitterWindow=topic683
+3 wxSplitterWindow::Create=wxsplitterwindowcreate
+3 wxSplitterWindow::GetMinimumPaneSize=wxsplitterwindowgetminimumpanesize
+3 wxSplitterWindow::GetSashPosition=wxsplitterwindowgetsashposition
+3 wxSplitterWindow::GetSplitMode=wxsplitterwindowgetsplitmode
+3 wxSplitterWindow::GetWindow1=wxsplitterwindowgetwindow1
+3 wxSplitterWindow::GetWindow2=wxsplitterwindowgetwindow2
+3 wxSplitterWindow::Initialize=wxsplitterwindowinitialize
+3 wxSplitterWindow::IsSplit=wxsplitterwindowissplit
+3 wxSplitterWindow::OnDoubleClickSash=wxsplitterwindowondoubleclicksash
+3 wxSplitterWindow::OnUnsplit=wxsplitterwindowonunsplit
+3 wxSplitterWindow::SetSashPosition=wxsplitterwindowsetsashposition
+3 wxSplitterWindow::SetMinimumPaneSize=wxsplitterwindowsetminimumpanesize
+3 wxSplitterWindow::SetSplitMode=wxsplitterwindowsetsplitmode
+3 wxSplitterWindow::SplitHorizontally=wxsplitterwindowsplithorizontally
+3 wxSplitterWindow::SplitVertically=wxsplitterwindowsplitvertically
+3 wxSplitterWindow::Unsplit=wxsplitterwindowunsplit
+2 wxStaticBitmap
+3 wxStaticBitmap=wxstaticbitmap
+3 wxStaticBitmap::wxStaticBitmap=wxstaticbitmapconstr
+3 wxStaticBitmap::Create=wxstaticbitmapcreate
+3 wxStaticBitmap::GetBitmap=wxstaticbitmapgetbitmap
+3 wxStaticBitmap::SetBitmap=wxstaticbitmapsetbitmap
+2 wxStaticBox
+3 wxStaticBox=wxstaticbox
+3 wxStaticBox::wxStaticBox=wxstaticboxconstr
+3 wxStaticBox::~wxStaticBox=topic684
+3 wxStaticBox::Create=wxstaticboxcreate
+2 wxStaticText
+3 wxStaticText=wxstatictext
+3 wxStaticText::wxStaticText=wxstatictextconstr
+3 wxStaticText::Create=wxstatictextcreate
+3 wxStaticText::GetLabel=wxstatictextgetlabel
+3 wxStaticText::SetLabel=wxstatictextsetlabel
+2 wxStatusBar
+3 wxStatusBar=wxstatusbar
+3 wxStatusBar::wxStatusBar=wxstatusbarconstr
+3 wxStatusBar::~wxStatusBar=topic685
+3 wxStatusBar::Create=wxstatusbarcreate
+3 wxStatusBar::GetFieldRect=wxstatusbargetfieldrect
+3 wxStatusBar::GetFieldsCount=wxstatusbargetfieldscount
+3 wxStatusBar::GetStatusText=wxstatusbargetstatustext
+3 wxStatusBar::DrawField=wxstatusbardrawfield
+3 wxStatusBar::DrawFieldText=wxstatusbardrawfieldtext
+3 wxStatusBar::InitColours=wxstatusbarinitcolours
+3 wxStatusBar::OnSysColourChanged=wxstatusbaronsyscolourchanged
+3 wxStatusBar::SetFieldsCount=wxstatusbarsetfieldscount
+3 wxStatusBar::SetStatusText=wxstatusbarsetstatustext
+3 wxStatusBar::SetStatusWidths=wxstatusbarsetstatuswidths
+2 wxString
+3 wxString=wxstring
+3 wxString::wxString=wxstringconstruct
+3 wxString::~wxString=wxstringdestruct
+3 wxString::Alloc=wxstringAlloc
+3 wxString::Allocation=wxstringAllocation
+3 wxString::Append=wxstringAppend
+3 wxString::After=wxstringAfter
+3 wxString::At=wxstringAt
+3 wxString::Before=wxstringBefore
+3 wxString::Capitalize=wxstringCapitalize
+3 wxString::Cat=wxstringCat
+3 wxString::Chars=wxstringChars
+3 wxString::CompareTo=wxstringCompareTo
+3 wxString::Contains=wxstringContains
+3 wxString::Copy=wxstringCopy
+3 wxString::Del=wxstringDel
+3 wxString::DownCase=wxstringDownCase
+3 wxString::Elem=wxstringElem
+3 wxString::Empty=wxstringEmpty
+3 wxString::Error=wxstringError
+3 wxString::First=wxstringFirst
+3 wxString::Firstchar=wxstringFirstchar
+3 wxString::Freq=wxstringFreq
+3 wxString::From=wxstringFrom
+3 wxString::GetData=wxstringGetData
+3 wxString::GSub=wxstringGSub
+3 wxString::Index=wxstringIndex
+3 wxString::Insert=wxstringInsert
+3 wxString::IsAscii=wxstringIsAscii
+3 wxString::IsDefined=wxstringIsDefined
+3 wxString::IsNull=wxstringIsNull
+3 wxString::IsNumber=wxstringIsNumber
+3 wxString::IsWord=wxstringIsWord
+3 wxString::Last=wxstringLast
+3 wxString::Lastchar=wxstringLastchar
+3 wxString::Length=wxstringLength
+3 wxString::LowerCase=wxstringLowerCase
+3 wxString::Matches=wxstringMatches
+3 wxString::OK=wxstringOK
+3 wxString::Prepend=wxstringPrepend
+3 wxString::Readline=wxstringReadline
+3 wxString::Remove=wxstringRemove
+3 wxString::Replace=wxstringReplace
+3 wxString::Replicate=wxstringReplicate
+3 wxString::Reverse=wxstringReverse
+3 wxString::sprintf=wxstringsprintf
+3 wxString::Strip=wxstringStrip
+3 wxString::SubString=wxstringSubString
+3 wxString::Through=wxstringThrough
+3 wxString::Upcase=wxstringUpcase
+3 wxString::UpperCase=wxstringUpperCase
+3 wxString::operator ==wxstringoperatorassign
+3 wxString::operator +==wxstringPlusEqual
+3 wxString::operator []=wxstringoperatorbracket
+3 wxString::operator ()=wxstringoperatorparenth
+3 wxString::operator <<=wxstringoperatorout
+3 wxString::operator >>=wxstringoperatorin
+3 wxString::operator const char*=wxstringoperatorconstcharpt
+3 wxCHARARG=wxstringwxCHARARG
+3 CommonPrefix=wxstringCommonPrefix
+3 CommonSuffix=wxstringCommonSuffix
+3 Compare=wxstringCompare
+3 FCompare=wxstringFCompare
+3 Comparison operators=wxstringComparison
+3 operator +=wxstringoperatorplus
+3 Join=wxstringJoin
+3 Split=wxstringSplit
+2 wxStringList
+3 wxStringList=wxstringlist
+3 wxStringList::wxStringList=topic686
+3 wxStringList::~wxStringList=topic687
+3 wxStringList::Add=topic688
+3 wxStringList::Delete=topic689
+3 wxStringList::ListToArray=topic690
+3 wxStringList::Member=topic691
+3 wxStringList::Sort=topic692
+2 wxSysColourChangedEvent
+3 wxSysColourChangedEvent=wxsyscolourchangedevent
+3 wxSysColourChangedEvent::wxSysColourChanged=topic693
+2 wxSystemSettings
+3 wxSystemSettings=wxsystemsettings
+3 wxSystemSettings::wxSystemSettings=topic694
+3 wxSystemSettings::GetSystemColour=wxsystemsettingsgetsystemcolour
+3 wxSystemSettings::GetSystemFont=wxsystemsettingsgetsystemfont
+3 wxSystemSettings::GetSystemMetric=wxsystemsettingsgetsystemmetric
+2 wxTabbedDialog
+3 wxTabbedDialog=wxtabbeddialogbox
+3 wxTabbedDialog::wxTabbedDialog=topic695
+3 wxTabbedDialog::~wxTabbedDialog=topic696
+3 wxTabbedDialog::SetTabView=topic697
+3 wxTabbedDialog::GetTabView=topic698
+2 wxTabbedPanel
+3 wxTabbedPanel=wxtabbedpanel
+3 wxTabbedPanel::wxTabbedPanel=topic699
+3 wxTabbedPanel::SetTabView=topic700
+3 wxTabbedPanel::GetTabView=topic701
+2 wxTabControl
+3 wxTabControl=wxtabcontrol
+3 wxTabControl::wxTabControl=topic702
+3 wxTabControl::GetColPosition=topic703
+3 wxTabControl::GetFont=topic704
+3 wxTabControl::GetHeight=topic705
+3 wxTabControl::GetId=topic706
+3 wxTabControl::GetLabel=topic707
+3 wxTabControl::GetRowPosition=topic708
+3 wxTabControl::GetSelected=topic709
+3 wxTabControl::GetWidth=topic710
+3 wxTabControl::GetX=topic711
+3 wxTabControl::GetY=topic712
+3 wxTabControl::HitTest=topic713
+3 wxTabControl::OnDraw=topic714
+3 wxTabControl::SetColPosition=topic715
+3 wxTabControl::SetFont=topic716
+3 wxTabControl::SetId=topic717
+3 wxTabControl::SetLabel=topic718
+3 wxTabControl::SetPosition=topic719
+3 wxTabControl::SetRowPosition=topic720
+3 wxTabControl::SetSelected=topic721
+3 wxTabControl::SetSize=topic722
+2 wxTabView
+3 wxTabView=wxtabview
+3 wxTabView::wxTabView=topic723
+3 wxTabView::AddTab=wxtabviewaddtab
+3 wxTabView::CalculateTabWidth=wxtabviewcalculatetabwidth
+3 wxTabView::ClearTabs=topic724
+3 wxTabView::Draw=topic725
+3 wxTabView::FindTabControlForId=topic726
+3 wxTabView::FindTabControlForPosition=topic727
+3 wxTabView::GetBackgroundBrush=topic728
+3 wxTabView::GetBackgroundColour=topic729
+3 wxTabView::GetBackgroundPen=topic730
+3 wxTabView::GetHighlightColour=topic731
+3 wxTabView::GetHighlightPen=topic732
+3 wxTabView::GetHorizontalTabOffset=topic733
+3 wxTabView::GetNumberOfLayers=topic734
+3 wxTabView::GetSelectedTabFont=topic735
+3 wxTabView::GetShadowColour=topic736
+3 wxTabView::GetTabHeight=topic737
+3 wxTabView::GetTabFont=topic738
+3 wxTabView::GetTabSelectionHeight=topic739
+3 wxTabView::GetTabStyle=topic740
+3 wxTabView::GetTabWidth=topic741
+3 wxTabView::GetTextColour=topic742
+3 wxTabView::GetTopMargin=topic743
+3 wxTabView::GetShadowPen=topic744
+3 wxTabView::GetViewRect=topic745
+3 wxTabView::GetVerticalTabTextSpacing=topic746
+3 wxTabView::GetWindow=topic747
+3 wxTabView::OnCreateTabControl=topic748
+3 wxTabView::Layout=topic749
+3 wxTabView::OnEvent=topic750
+3 wxTabView::OnTabActivate=topic751
+3 wxTabView::OnTabPreActivate=topic752
+3 wxTabView::SetBackgroundColour=topic753
+3 wxTabView::SetHighlightColour=topic754
+3 wxTabView::SetHorizontalTabOffset=topic755
+3 wxTabView::SetSelectedTabFont=topic756
+3 wxTabView::SetShadowColour=topic757
+3 wxTabView::SetTabFont=topic758
+3 wxTabView::SetTabStyle=topic759
+3 wxTabView::SetTabSize=topic760
+3 wxTabView::SetTabSelectionHeight=topic761
+3 wxTabView::SetTabSelection=topic762
+3 wxTabView::SetTextColour=topic763
+3 wxTabView::SetTopMargin=topic764
+3 wxTabView::SetVerticalTabTextSpacing=topic765
+3 wxTabView::SetViewRect=wxtabviewsetviewrect
+3 wxTabView::SetWindow=topic766
+2 wxTextCtrl
+3 wxTextCtrl=wxtextctrl
+3 wxTextCtrl::wxTextCtrl=wxtextctrlconstr
+3 wxTextCtrl::~wxTextCtrl=topic767
+3 wxTextCtrl::Clear=wxtextctrlclear
+3 wxTextCtrl::Copy=wxtextctrlcopy
+3 wxTextCtrl::Create=wxtextctrlcreate
+3 wxTextCtrl::Cut=wxtextctrlcut
+3 wxTextCtrl::DiscardEdits=topic768
+3 wxTextCtrl::GetInsertionPoint=wxtextctrlgetinsertionpoint
+3 wxTextCtrl::GetLastPosition=wxtextctrlgetlastposition
+3 wxTextCtrl::GetLineLength=wxtextctrlgetlinelength
+3 wxTextCtrl::GetLineText=wxtextctrlgetlinetext
+3 wxTextCtrl::GetNumberOfLines=wxtextctrlgetnumberoflines
+3 wxTextCtrl::GetValue=wxtextctrlgetvalue
+3 wxTextCtrl::IsModified=wxtextctrlismodified
+3 wxTextCtrl::LoadFile=wxtextctrlloadfile
+3 wxTextCtrl::OnChar=wxtextctrlonchar
+3 wxTextCtrl::OnDropFiles=wxtextctrlondropfiles
+3 wxTextCtrl::Paste=wxtextctrlpaste
+3 wxTextCtrl::PositionToXY=wxtextctrlpositiontoxy
+3 wxTextCtrl::Remove=wxtextctrlremove
+3 wxTextCtrl::Replace=wxtextctrlreplace
+3 wxTextCtrl::SaveFile=wxtextctrlsavefile
+3 wxTextCtrl::SetEditable=wxtextctrlseteditable
+3 wxTextCtrl::SetInsertionPoint=wxtextctrlsetinsertionpoint
+3 wxTextCtrl::SetInsertionPointEnd=wxtextctrlsetinsertionpointend
+3 wxTextCtrl::SetSelection=wxtextctrlsetselection
+3 wxTextCtrl::SetValue=wxtextctrlsetvalue
+3 wxTextCtrl::ShowPosition=wxtextctrlshowposition
+3 wxTextCtrl::WriteText=wxtextctrlwritetext
+3 wxTextCtrl::XYToPosition=wxtextctrlxytoposition
+3 wxTextCtrl::operator <<=wxtextctrlinsert
+2 wxTextEntryDialog
+3 wxTextEntryDialog=wxtextentrydialog
+3 wxTextEntryDialog::wxTextEntryDialog=wxtextentrydialogconstr
+3 wxTextEntryDialog::~wxTextEntryDialog=topic769
+3 wxTextEntryDialog::GetValue=wxtextentrydialoggetvalue
+3 wxTextEntryDialog::SetValue=wxtextentrydialogsetvalue
+3 wxTextEntryDialog::ShowModal=wxtextentrydialogshowmodal
+2 wxTextValidator
+3 wxTextValidator=wxtextvalidator
+3 wxTextValidator::wxTextValidator=wxtextvalidatorconstr
+3 wxTextValidator::~wxTextValidator=topic770
+3 wxTextValidator::Clone=wxtextvalidatorclone
+3 wxTextValidator::GetExcludeList=wxtextvalidatorgetexcludelist
+3 wxTextValidator::GetIncludeList=wxtextvalidatorgetincludelist
+3 wxTextValidator::GetStyle=wxtextvalidatorgetstyle
+3 wxTextValidator::OnChar=wxtextvalidatoronchar
+3 wxTextValidator::SetExcludeList=wxtextvalidatorsetexcludelist
+3 wxTextValidator::SetIncludeList=wxtextvalidatorsetincludelist
+3 wxTextValidator::SetStyle=wxtextvalidatorsetstyle
+3 wxTextValidator::TransferFromWindow=wxtextvalidatortransferfromwindow
+3 wxTextValidator::TransferToWindow=wxtextvalidatortransfertowindow
+3 wxTextValidator::Validate=wxtextvalidatorvalidate
+2 wxTime
+3 wxTime=wxtime
+2 wxTimer
+3 wxTimer=wxtimer
+3 wxTimer::wxTimer=topic771
+3 wxTimer::~wxTimer=topic772
+3 wxTimer::Interval=topic773
+3 wxTimer::Notify=topic774
+3 wxTimer::Start=topic775
+3 wxTimer::Stop=topic776
+2 wxTreeCtrl
+3 wxTreeCtrl=wxtreectrl
+3 wxTreeCtrl::wxTreeCtrl=wxtreectrlconstr
+3 wxTreeCtrl::~wxTreeCtrl=topic777
+3 wxTreeCtrl::Create=wxtreectrlcreate
+3 wxTreeCtrl::DeleteAllItems=wxtreectrldeleteallitems
+3 wxTreeCtrl::DeleteItem=wxtreectrldeleteitem
+3 wxTreeCtrl::Edit=wxtreectrledit
+3 wxTreeCtrl::EnsureVisible=wxtreectrlensurevisible
+3 wxTreeCtrl::ExpandItem=wxtreectrlexpanditem
+3 wxTreeCtrl::GetChild=wxtreectrlgetchild
+3 wxTreeCtrl::GetCount=wxtreectrlgetcount
+3 wxTreeCtrl::GetEditControl=wxtreectrlgeteditcontrol
+3 wxTreeCtrl::GetFirstVisibleItem=wxtreectrlgetfirstvisibleitem
+3 wxTreeCtrl::GetImageList=wxtreectrlgetimagelist
+3 wxTreeCtrl::GetIndent=wxtreectrlgetindent
+3 wxTreeCtrl::GetItem=wxtreectrlgetitem
+3 wxTreeCtrl::GetItemData=wxtreectrlgetitemdata
+3 wxTreeCtrl::GetItemRect=wxtreectrlgetitemrect
+3 wxTreeCtrl::GetItemState=wxtreectrlgetitemstate
+3 wxTreeCtrl::GetItemText=wxtreectrlgetitemtext
+3 wxTreeCtrl::GetNextItem=wxtreectrlgetnextitem
+3 wxTreeCtrl::GetNextVisibleItem=wxtreectrlgetnextvisibleitem
+3 wxTreeCtrl::GetParent=wxtreectrlgetparent
+3 wxTreeCtrl::GetRootItem=wxtreectrlgetrootitem
+3 wxTreeCtrl::GetSelection=wxtreectrlgetselection
+3 wxTreeCtrl::HitTest=wxtreectrlhittest
+3 wxTreeCtrl::InsertItem=wxtreectrlinsertitem
+3 wxTreeCtrl::ItemHasChildren=wxtreectrlitemhaschildren
+3 wxTreeCtrl::ScrollTo=wxtreectrlscrollto
+3 wxTreeCtrl::SelectItem=wxtreectrlselectitem
+3 wxTreeCtrl::SetIndent=wxtreectrlsetindent
+3 wxTreeCtrl::SetImageList=wxtreectrlsetimagelist
+3 wxTreeCtrl::SetItem=wxtreectrlsetitem
+3 wxTreeCtrl::SetItemImage=wxtreectrlsetitemimage
+3 wxTreeCtrl::SetItemState=wxtreectrlsetitemstate
+3 wxTreeCtrl::SetItemText=wxtreectrlsetitemtext
+3 wxTreeCtrl::SetItemData=wxtreectrlsetitemdata
+3 wxTreeCtrl::SortChildren=wxtreectrlsortchildren
+2 wxTreeEvent
+3 wxTreeEvent=wxtreeevent
+3 wxTreeEvent::wxTreeEvent=topic778
+3 wxTreeEvent::m_code=topic779
+3 wxTreeEvent::m_itemIndex=topic780
+3 wxTreeEvent::m_oldItem=topic781
+3 wxTreeEvent::m_pointDrag=topic782
+2 wxToolBarBase
+3 wxToolBarBase=wxtoolbarbase
+3 wxToolBarBase::wxToolBarBase=wxtoolbarbaseconstr
+3 wxToolBarBase::~wxToolBarBase=topic783
+3 wxToolBarBase::AddSeparator=wxtoolbarbaseaddseparator
+3 wxToolBarBase::AddTool=wxtoolbarbaseaddtool
+3 wxToolBarBase::CreateTools=wxtoolbarbasecreatetools
+3 wxToolBarBase::DrawTool=wxtoolbarbasedrawtool
+3 wxToolBarBase::EnableTool=wxtoolbarbaseenabletool
+3 wxToolBarBase::FindToolForPosition=wxtoolbarbasefindtoolforposition
+3 wxToolBarBase::GetDefaultButtonSize=wxtoolbarbasegetdefaultbuttonsize
+3 wxToolBarBase::GetDefaultSize=wxtoolbarbasegetdefaultsize
+3 wxToolBarBase::GetMargins=wxtoolbarbasegetmargins
+3 wxToolBarBase::GetMaxSize=wxtoolbarbasegetmaxsize
+3 wxToolBarBase::GetToolClientData=wxtoolbarbasegettoolclientdata
+3 wxToolBarBase::GetToolEnabled=wxtoolbarbasegettoolenabled
+3 wxToolBarBase::GetToolLongHelp=wxtoolbarbasegettoollonghelp
+3 wxToolBarBase::GetToolPacking=wxtoolbarbasegettoolpacking
+3 wxToolBarBase::GetToolSeparation=wxtoolbarbasegettoolseparation
+3 wxToolBarBase::GetToolShortHelp=wxtoolbarbasegettoolshorthelp
+3 wxToolBarBase::GetToolState=wxtoolbarbasegettoolstate
+3 wxToolBarBase::Layout=wxtoolbarbaselayout
+3 wxToolBarBase::OnLeftClick=wxtoolbarbaseonleftclick
+3 wxToolBarBase::OnMouseEnter=wxtoolbarbaseonmouseenter
+3 wxToolBarBase::OnRightClick=wxtoolbarbaseonrightclick
+3 wxToolBarBase::SetDefaultSize=wxtoolbarbasesetdefaultsize
+3 wxToolBarBase::SetMargins=wxtoolbarbasesetmargins
+3 wxToolBarBase::SetToolLongHelp=wxtoolbarbasesettoollonghelp
+3 wxToolBarBase::SetToolPacking=wxtoolbarbasesettoolpacking
+3 wxToolBarBase::SetToolShortHelp=wxtoolbarbasesettoolshorthelp
+3 wxToolBarBase::SetToolSeparation=wxtoolbarbasesettoolseparation
+3 wxToolBarBase::ToggleTool=wxtoolbarbasetoggletool
+2 wxToolBar95
+3 wxToolBar95=wxtoolbar95
+3 wxToolBar95::wxToolBar95=wxtoolbar95constr
+2 wxToolBarMSW
+3 wxToolBarMSW=wxtoolbarmsw
+3 wxToolBarMSW::wxToolBarMSW=wxtoolbarmswconstr
+2 wxToolBarSimple
+3 wxToolBarSimple=wxtoolbarsimple
+3 wxToolBarSimple::wxToolBarSimple=wxtoolbarsimpleconstr
+2 wxUpdateIterator
+3 wxUpdateIterator=wxupdateiterator
+3 wxUpdateIterator::wxUpdateIterator=topic784
+3 wxUpdateIterator::GetX=topic785
+3 wxUpdateIterator::GetY=topic786
+3 wxUpdateIterator::GetWidth=topic787
+3 wxUpdateIterator::GetHeight=topic788
+3 wxUpdateIterator::operator ++=topic789
+2 wxUpdateUIEvent
+3 wxUpdateUIEvent=wxupdateuievent
+3 wxUpdateUIEvent::wxUpdateUIEvent=topic790
+3 wxUpdateUIEvent::m_checked=topic791
+3 wxUpdateUIEvent::m_enabled=topic792
+3 wxUpdateUIEvent::m_setChecked=topic793
+3 wxUpdateUIEvent::m_setEnabled=topic794
+3 wxUpdateUIEvent::m_setText=topic795
+3 wxUpdateUIEvent::m_text=topic796
+3 wxUpdateUIEvent::Check=wxupdateuieventcheck
+3 wxUpdateUIEvent::Enable=wxupdateuieventenable
+3 wxUpdateUIEvent::GetChecked=wxupdateuieventgetchecked
+3 wxUpdateUIEvent::GetEnabled=wxupdateuieventgetenabled
+3 wxUpdateUIEvent::GetSetChecked=wxupdateuieventgetsetchecked
+3 wxUpdateUIEvent::GetSetEnabled=wxupdateuieventgetsetenabled
+3 wxUpdateUIEvent::GetSetText=wxupdateuieventgetsettext
+3 wxUpdateUIEvent::GetText=wxupdateuieventgettext
+3 wxUpdateUIEvent::SetText=wxupdateuieventsettext
+2 wxValidator
+3 wxValidator=wxvalidator
+3 wxValidator::wxValidator=wxvalidatorconstr
+3 wxValidator::~wxValidator=topic797
+3 wxValidator::Clone=wxvalidatorclone
+3 wxValidator::GetWindow=wxvalidatorgetwindow
+3 wxValidator::SetWindow=wxvalidatorsetwindow
+3 wxValidator::TransferFromWindow=wxvalidatortransferfromwindow
+3 wxValidator::TransferToWindow=wxvalidatortransfertowindow
+3 wxValidator::Validate=wxvalidatorvalidate
+2 wxView
+3 wxView=wxview
+3 wxView::m_viewDocument=topic798
+3 wxView::m_viewFrame=topic799
+3 wxView::m_viewTypeName=topic800
+3 wxView::wxView=topic801
+3 wxView::~wxView=topic802
+3 wxView::Activate=topic803
+3 wxView::Close=topic804
+3 wxView::GetDocument=topic805
+3 wxView::GetDocumentManager=topic806
+3 wxView::GetFrame=topic807
+3 wxView::GetViewName=topic808
+3 wxView::OnActivateView=topic809
+3 wxView::OnChangeFilename=topic810
+3 wxView::OnClose=topic811
+3 wxView::OnCreate=topic812
+3 wxView::OnCreatePrintout=topic813
+3 wxView::OnUpdate=topic814
+3 wxView::SetDocument=topic815
+3 wxView::SetFrame=topic816
+3 wxView::SetViewName=topic817
+2 wxWindow
+3 wxWindow=wxwindow
+3 wxWindow::wxWindow=topic818
+3 wxWindow::~wxWindow=topic819
+3 wxWindow::AddChild=topic820
+3 wxWindow::CaptureMouse=wxwindowcapturemouse
+3 wxWindow::Center=wxwindowcenter
+3 wxWindow::Centre=wxwindowcentre
+3 wxWindow::Clear=wxwindowclear
+3 wxWindow::ClientToScreen=topic821
+3 wxWindow::Close=wxwindowclose
+3 wxWindow::Destroy=wxwindowdestroy
+3 wxWindow::DestroyChildren=topic822
+3 wxWindow::DragAcceptFiles=wxwindowdragacceptfiles
+3 wxWindow::Enable=wxwindowenable
+3 wxWindow::FakePopupMenu=wxwindowfakepopupmenu
+3 wxWindow::FindFocus=wxwindowfindfocus
+3 wxWindow::Fit=wxwindowfit
+3 wxWindow::GetBackgroundColour=wxwindowgetbackgroundcolour
+3 wxWindow::GetCharHeight=topic823
+3 wxWindow::GetCharWidth=topic824
+3 wxWindow::GetChildren=topic825
+3 wxWindow::GetClientSize=wxwindowgetclientsize
+3 wxWindow::GetConstraints=wxwindowgetconstraints
+3 wxWindow::GetDefaultItem=wxwindowgetdefaultitem
+3 wxWindow::GetEventHandler=wxwindowgeteventhandler
+3 wxWindow::GetFont=wxwindowgetfont
+3 wxWindow::GetForegroundColour=wxwindowgetforegroundcolour
+3 wxWindow::GetGrandParent=topic826
+3 wxWindow::GetHandle=topic827
+3 wxWindow::GetId=wxwindowgetid
+3 wxWindow::GetPosition=topic828
+3 wxWindow::GetLabel=topic829
+3 wxWindow::GetName=wxwindowgetname
+3 wxWindow::GetParent=topic830
+3 wxWindow::GetReturnCode=wxwindowgetreturncode
+3 wxWindow::GetScrollThumb=wxwindowgetscrollthumb
+3 wxWindow::GetScrollPos=wxwindowgetscrollpos
+3 wxWindow::GetScrollRange=wxwindowgetscrollrange
+3 wxWindow::GetSize=topic831
+3 wxWindow::GetTextExtent=topic832
+3 wxWindow::GetTitle=wxwindowgettitle
+3 wxWindow::GetWindowStyleFlag=topic833
+3 wxWindow::InitDialog=wxwindowinitdialog
+3 wxWindow::IsEnabled=wxwindowisenabled
+3 wxWindow::IsRetained=wxwindowisretained
+3 wxWindow::IsShown=wxwindowisshown
+3 wxWindow::Layout=wxwindowlayout
+3 wxWindow::LoadFromResource=wxwindowloadfromresource
+3 wxWindow::Lower=wxwindowlower
+3 wxWindow::MakeModal=wxwindowmakemodal
+3 wxWindow::Move=wxwindowmove
+3 wxWindow::OnActivate=wxwindowonactivate
+3 wxWindow::OnChar=wxwindowonchar
+3 wxWindow::OnCharHook=wxwindowoncharhook
+3 wxWindow::OnCommand=wxwindowoncommand
+3 wxWindow::OnClose=wxwindowonclose
+3 wxWindow::OnCloseWindow=wxwindowonclosewindow
+3 wxWindow::OnDefaultAction=wxwindowondefaultaction
+3 wxWindow::OnDropFiles=wxwindowondropfiles
+3 wxWindow::OnEraseBackground=wxwindowonerasebackground
+3 wxWindow::OnKillFocus=wxwindowonkillfocus
+3 wxWindow::OnIdle=wxwindowonidle
+3 wxWindow::OnInitDialog=wxwindowoninitdialog
+3 wxWindow::OnMenuCommand=wxwindowonmenucommand
+3 wxWindow::OnMenuHighlight=wxwindowonmenuhighlight
+3 wxWindow::OnMouseEvent=wxwindowonmouseevent
+3 wxWindow::OnMove=wxwindowonmove
+3 wxWindow::OnPaint=wxwindowonpaint
+3 wxWindow::OnScroll=wxwindowonscroll
+3 wxWindow::OnSetFocus=wxwindowonsetfocus
+3 wxWindow::OnSize=wxwindowonsize
+3 wxWindow::OnSysColourChanged=wxwindowonsyscolourchanged
+3 wxWindow::PopEventHandler=wxwindowpopeventhandler
+3 wxWindow::PopupMenu=wxwindowpopupmenu
+3 wxWindow::PushEventHandler=wxwindowpusheventhandler
+3 wxWindow::Raise=wxwindowraise
+3 wxWindow::Refresh=wxwindowrefresh
+3 wxWindow::ReleaseMouse=wxwindowreleasemouse
+3 wxWindow::RemoveChild=wxwindowremovechild
+3 wxWindow::ScreenToClient=topic834
+3 wxWindow::ScrollWindow=wxwindowscrollwindow
+3 wxWindow::SetAutoLayout=wxwindowsetautolayout
+3 wxWindow::SetBackgroundColour=wxwindowsetbackgroundcolour
+3 wxWindow::SetConstraints=wxwindowsetconstraints
+3 wxWindow::SetFocus=wxwindowsetfocus
+3 wxWindow::SetFont=wxwindowsetfont
+3 wxWindow::SetForegroundColour=wxwindowsetforegroundcolour
+3 wxWindow::SetId=wxwindowsetid
+3 wxWindow::SetName=wxwindowsetname
+3 wxWindow::SetReturnCode=wxwindowsetreturncode
+3 wxWindow::SetScrollbar=wxwindowsetscrollbar
+3 wxWindow::SetScrollPos=wxwindowsetscrollpos
+3 wxWindow::SetSize=wxwindowsetsize
+3 wxWindow::SetSizeHints=wxwindowsetsizehints
+3 wxWindow::SetClientSize=topic835
+3 wxWindow::SetPalette=topic836
+3 wxWindow::SetCursor=wxwindowsetcursor
+3 wxWindow::SetEventHandler=wxwindowseteventhandler
+3 wxWindow::SetTitle=wxwindowsettitle
+3 wxWindow::Show=topic837
+3 wxWindow::TransferDataFromWindow=wxwindowtransferdatafromwindow
+3 wxWindow::TransferDataToWindow=wxwindowtransferdatatowindow
+3 wxWindow::Validate=wxwindowvalidate
+3 wxWindow::WarpPointer=wxwindowwarppointer
+2 wxWindowDC
+3 wxWindowDC=wxwindowdc
+3 wxWindowDC::wxWindowDC=topic838
+1 Functions
+2 Functions=functions
+2 File functions
+3 File functions=filefunctions
+3 ::wxDirExists=topic839
+3 ::wxDos2UnixFilename=topic840
+3 ::wxFileExists=topic841
+3 ::wxFileNameFromPath=topic842
+3 ::wxFindFirstFile=wxfindfirstfile
+3 ::wxFindNextFile=wxfindnextfile
+3 ::wxIsAbsolutePath=topic843
+3 ::wxPathOnly=topic844
+3 ::wxUnix2DosFilename=topic845
+3 ::wxConcatFiles=topic846
+3 ::wxCopyFile=topic847
+3 ::wxGetHostName=wxgethostname
+3 ::wxGetEmailAddress=wxgetemailaddress
+3 ::wxGetUserId=wxgetuserid
+3 ::wxGetUserName=wxgetusername
+3 ::wxGetWorkingDirectory=topic848
+3 ::wxGetTempFileName=topic849
+3 ::wxIsWild=wxiswild
+3 ::wxMatchWild=wxmatchwild
+3 ::wxMkdir=topic850
+3 ::wxRemoveFile=topic851
+3 ::wxRenameFile=topic852
+3 ::wxRmdir=topic853
+3 ::wxSetWorkingDirectory=topic854
+2 String functions
+3 String functions=topic855
+3 ::copystring=topic856
+3 ::wxStringMatch=topic857
+3 ::wxStringEq=wxstringeq
+3 ::wxTransferFileToStream=wxtransferfiletostream
+3 ::wxTransferStreamToFile=wxtransferstreamtofile
+2 Dialog functions
+3 Dialog functions=dialogfunctions
+3 ::wxFileSelector=wxfileselector
+3 ::wxGetTextFromUser=wxgettextfromuser
+3 ::wxGetMultipleChoice=wxgetmultiplechoice
+3 ::wxGetSingleChoice=wxgetsinglechoice
+3 ::wxGetSingleChoiceIndex=wxgetsinglechoiceindex
+3 ::wxGetSingleChoiceData=wxgetsinglechoicedata
+3 ::wxMessageBox=wxmessagebox
+2 GDI functions
+3 GDI functions=gdifunctions
+3 ::wxColourDisplay=topic858
+3 ::wxDisplayDepth=topic859
+3 ::wxMakeMetaFilePlaceable=wxmakemetafileplaceable
+3 ::wxSetCursor=wxsetcursor
+2 System event functions
+3 System event functions=topic860
+3 ::wxAddPrimaryEventHandler=topic861
+3 ::wxAddSecondaryEventHandler=topic862
+3 ::wxNotifyEvent=topic863
+3 ::wxRegisterEventClass=topic864
+3 ::wxRegisterEventName=topic865
+3 ::wxRegisterExternalEventHandlers=topic866
+3 ::wxRemoveSecondaryEventHandler=topic867
+3 ::wxSendEvent=wxsendevent
+2 Printer settings
+3 Printer settings=printersettings
+3 ::wxGetPrinterCommand=topic868
+3 ::wxGetPrinterFile=topic869
+3 ::wxGetPrinterMode=topic870
+3 ::wxGetPrinterOptions=topic871
+3 ::wxGetPrinterOrientation=topic872
+3 ::wxGetPrinterPreviewCommand=topic873
+3 ::wxGetPrinterScaling=topic874
+3 ::wxGetPrinterTranslation=topic875
+3 ::wxSetPrinterCommand=topic876
+3 ::wxSetPrinterFile=topic877
+3 ::wxSetPrinterMode=topic878
+3 ::wxSetPrinterOptions=topic879
+3 ::wxSetPrinterOrientation=topic880
+3 ::wxSetPrinterPreviewCommand=topic881
+3 ::wxSetPrinterScaling=topic882
+3 ::wxSetPrinterTranslation=topic883
+2 Clipboard functions
+3 Clipboard functions=clipsboard
+3 ::wxClipboardOpen=topic884
+3 ::wxCloseClipboard=topic885
+3 ::wxEmptyClipboard=topic886
+3 ::wxEnumClipboardFormats=topic887
+3 ::wxGetClipboardData=topic888
+3 ::wxGetClipboardFormatName=topic889
+3 ::wxIsClipboardFormatAvailable=topic890
+3 ::wxOpenClipboard=topic891
+3 ::wxRegisterClipboardFormat=topic892
+3 ::wxSetClipboardData=topic893
+2 Miscellaneous functions
+3 Miscellaneous functions=miscellany
+3 ::NewId=topic894
+3 ::RegisterId=topic895
+3 ::wxBeginBusyCursor=wxbeginbusycursor
+3 ::wxBell=topic896
+3 ::wxCleanUp=wxcleanup
+3 ::wxCreateDynamicObject=wxcreatedynamicobject
+3 ::wxDebugMsg=topic897
+3 ::wxDisplaySize=topic898
+3 ::wxEntry=wxentry
+3 ::wxError=wxerror
+3 ::wxEndBusyCursor=wxendbusycursor
+3 ::wxExecute=wxexecute
+3 ::wxExit=wxexit
+3 ::wxFatalError=wxfatalerror
+3 ::wxFindMenuItemId=topic899
+3 ::wxFindWindowByLabel=topic900
+3 ::wxFindWindowByName=wxfindwindowbyname
+3 ::wxGetActiveWindow=wxgetactivewindow
+3 ::wxGetDisplayName=wxgetdisplayname
+3 ::wxGetHomeDir=topic901
+3 ::wxGetHostName=topic902
+3 ::wxGetElapsedTime=wxgetelapsedtime
+3 ::wxGetFreeMemory=topic903
+3 ::wxGetMousePosition=topic904
+3 ::wxGetOsVersion=topic905
+3 ::wxGetResource=wxgetresource
+3 ::wxGetUserId=topic906
+3 ::wxGetUserName=topic907
+3 ::wxKill=wxkill
+3 ::wxInitClipboard=wxinitclipboard
+3 ::wxIPCCleanUp=wxipccleanup
+3 ::wxIPCInitialize=wxipcinitialize
+3 ::wxIsBusy=wxisbusy
+3 ::wxLoadUserResource=wxloaduserresource
+3 ::wxNow=wxnow
+3 ::wxPostDelete=wxpostdelete
+3 ::wxSetDisplayName=wxsetdisplayname
+3 ::wxShell=wxshell
+3 ::wxSleep=topic908
+3 ::wxStripMenuCodes=topic909
+3 ::wxStartTimer=wxstarttimer
+3 ::wxToLower=wxtolower
+3 ::wxToUpper=wxtoupper
+3 ::wxTrace=wxtrace
+3 ::wxTraceLevel=wxtracelevel
+3 ::wxWriteResource=wxwriteresource
+3 ::wxYield=topic910
+2 Macros
+3 Macros=macros
+3 CLASSINFO=classinfo
+3 WXDEBUG_NEW=debugnew
+3 DECLARE_ABSTRACT_CLASS=topic911
+3 DECLARE_APP=declareapp
+3 DECLARE_CLASS=topic912
+3 DECLARE_DYNAMIC_CLASS=topic913
+3 IMPLEMENT_ABSTRACT_CLASS=topic914
+3 IMPLEMENT_ABSTRACT_CLASS2=topic915
+3 IMPLEMENT_APP=implementapp
+3 IMPLEMENT_CLASS=topic916
+3 IMPLEMENT_CLASS2=topic917
+3 IMPLEMENT_DYNAMIC_CLASS=topic918
+3 IMPLEMENT_DYNAMIC_CLASS2=topic919
+3 WXTRACE=trace
+3 WXTRACELEVEL=tracelevel
+2 wxWindows resource functions
+3 wxWindows resource functions=resourcefuncs
+3 ::wxResourceAddIdentifier=wxresourceaddidentifier
+3 ::wxResourceClear=topic920
+3 ::wxResourceCreateBitmap=topic921
+3 ::wxResourceCreateIcon=topic922
+3 ::wxResourceCreateMenuBar=topic923
+3 ::wxResourceGetIdentifier=topic924
+3 ::wxResourceParseData=wxresourcedata
+3 ::wxResourceParseFile=topic925
+3 ::wxResourceParseString=wxresourceparsestring
+3 ::wxResourceRegisterBitmapData=registerbitmapdata
+3 ::wxResourceRegisterIconData=topic926
+1 Classes by category
+2 Classes by category=classesbycat
+1 Topic overviews
+2 Topic overviews=overviews
+2 wxApp overview=wxappoverview
+2 Bitmaps overview
+3 Bitmaps overview=wxbitmapoverview
+3 Loading bitmaps: further information=topic927
+3 Bitmap format handlers=topic928
+3 wxIcon overview=wxiconoverview
+2 wxDialog overview
+3 wxDialog overview=wxdialogoverview
+2 Font overview
+3 Font overview=wxfontoverview
+2 wxString overview
+3 wxString overview=wxstringoverview
+3 Copyright of the original GNU code portion=topic929
+3 Features/Additions/Modifications=topic930
+3 Function calls=topic931
+3 Header files=topic932
+3 Test program=topic933
+3 Compilers=topic934
+3 GNU Documentation
+4 GNU Documentation=topic935
+4 The wxString class=topic936
+4 Constructor examples=topic937
+4 Examples=topic938
+4 Comparing, Searching and Matching examples=topic939
+4 Substring extraction examples=topic940
+4 Concatenation examples=topic941
+4 Other manipulation examples=topic942
+4 Reading, Writing and Conversion examples=topic943
+3 Regular Expressions
+4 Regular Expressions=regularexpressions
+4 Regular Expression Overview=topic944
+4 Syntax of Regular Expressions=topic945
+2 wxString member functions
+3 wxString member functions=wxstringcategories
+2 wxSplitterWindow overview
+3 wxSplitterWindow overview=wxsplitterwindowoverview
+3 Example=topic946
+2 wxTreeCtrl overview
+3 wxTreeCtrl overview=wxtreectrloverview
+2 wxListCtrl overview
+3 wxListCtrl overview=wxlistctrloverview
+2 wxImageList overview
+3 wxImageList overview=wximagelistoverview
+2 Common dialogs overview
+3 Common dialogs overview=commondialogsoverview
+3 wxColourDialog overview=wxcolourdialogoverview
+3 wxFontDialog overview=wxfontdialogoverview
+3 wxPrintDialog overview=wxprintdialogoverview
+3 wxFileDialog overview=wxfiledialogoverview
+3 wxDirDialog overview=wxdirdialogoverview
+3 wxTextEntryDialog overview=wxtextentrydialogoverview
+3 wxMessageDialog overview=wxmessagedialogoverview
+3 wxSingleChoiceDialog overview=wxsinglechoicedialogoverview
+3 wxMultipleChoiceDialog overview=wxmultiplechoicedialogoverview
+2 Constraints overview
+3 Constraints overview=constraintsoverview
+3 Constraint layout: more detail=topic947
+3 Window layout examples
+4 Window layout examples=layoutexamples
+4 Example 1: subwindow layout=topic948
+4 Example 2: panel item layout=topic949
+2 Database classes overview
+3 Database classes overview=odbcoverview
+3 Procedures for writing an ODBC application=topic950
+3 wxDatabase overview=wxdatabaseoverview
+3 wxQueryCol overview=wxquerycoloverview
+3 wxQueryField overview=wxqueryfieldoverview
+3 wxRecordSet overview=wxrecordsetoverview
+3 ODBC SQL data types=sqltypes
+3 A selection of SQL commands
+4 A selection of SQL commands=sqlcommands
+4 Create=topic951
+4 Insert=topic952
+4 Select=topic953
+4 Update=topic954
+2 Device context overview
+3 Device context overview=dcoverview
+2 Debugging overview
+3 Debugging overview=debuggingoverview
+3 wxDebugContext overview=wxdebugcontextoverview
+2 Window deletion overview
+3 Window deletion overview=windowdeletionoverview
+2 Scrolling overview
+3 Scrolling overview=scrollingoverview
+2 Document/view overview
+3 Document/view overview=docviewoverview
+3 wxDocument overview=wxdocumentoverview
+3 wxView overview=wxviewoverview
+3 wxDocTemplate overview=wxdoctemplateoverview
+3 wxDocManager overview=wxdocmanageroverview
+3 wxCommand overview=wxcommandoverview
+3 wxCommandProcessor overview=wxcommandprocessoroverview
+3 wxFileHistory overview=wxfilehistoryoverview
+3 wxWindows predefined command identifiers=predefinedids
+2 Event handling overview
+3 Event handling overview=eventhandlingoverview
+3 Introduction=topic955
+3 How events are processed=eventprocessing
+3 Pluggable event handlers=topic956
+3 Event macros summary=eventmacros
+2 Writing a wxWindows application: a rough guide
+3 Writing a wxWindows application: a rough guide=roughguide
+2 Interprocess communication overview
+3 Interprocess communication overview=ipcoverview
+3 Data transfer=topic957
+3 Examples=topic958
+3 More DDE details=topic959
+2 Printing overview
+3 Printing overview=printingoverview
+2 The wxWindows resource system
+3 The wxWindows resource system=resourceformats
+3 The format of a .WXR file=topic960
+3 Dialog resource format=topic961
+3 Menubar resource format=topic962
+3 Bitmap resource format=topic963
+3 Icon resource format=topic964
+3 Resource format design issues=topic965
+3 Compiling the resource system=topic966
+2 Run time class information overview
+3 Run time class information overview=runtimeclassoverview
+3 wxClassInfo=wxclassinfooverview
+3 Example=topic967
+2 Window styles
+3 Window styles=windowstyles
+2 Tab classes overview
+3 Tab classes overview=wxtaboverview
+3 Example=topic968
+3 wxTab change log=topic969
+2 wxTabView overview
+3 wxTabView overview=wxtabviewoverview
+2 Toolbar overview
+3 Toolbar overview=wxtoolbaroverview
+3 Using the toolbar library=topic970
+2 Validator overview
+3 Validator overview=validatoroverview
+2 wxExpr overview
+3 wxExpr overview=exproverview
+3 wxExpr for data file manipulation=topic971
+3 wxExpr compilation=topic972
+3 Bugs=topic973
+3 Using wxExpr=topic974
+2 wxGrid classes overview
+3 wxGrid classes overview=gridoverview
+3 Example=topic975
+2 Notes on using the reference
+3 Notes on using the reference=referencenotes
+1 References
+2 References=bibliography
--- /dev/null
+[OPTIONS]
+BMROOT=d:\wx2\docs\latex\wx ; Assume that bitmaps are where the source is
+TITLE=wxWindows Manual
+CONTENTS=Contents
+COMPRESS=HIGH
+
+[FILES]
+wx.rtf
+
+[CONFIG]
+CreateButton("Up", "&Up", "JumpId(`wx.hlp', `Contents')")
+BrowseButtons()
+
+[MAP]
+
+[BITMAPS]
+
--- /dev/null
+\section{\class{wxString}}\label{wxstring}
+
+\overview{Overview}{wxstringoverview}
+
+\helpref{Member functions by category}{wxstringcategories}
+
+{\bf CAVE:} The description of the memberfunctions is very
+sparse in the moment. It will be extended in the next
+version of the help file. The list of memberfunctions
+is complete.
+
+\membersection{wxString::wxString}\label{wxstringconstruct}
+
+\func{void}{wxString}{\param{void}{}}\\
+\func{void}{wxString}{\param{const wxString\&}{ x}}\\
+\func{void}{wxString}{\param{const wxSubString\&}{ x}}\\
+\func{void}{wxString}{\param{const char*}{ t}}\\
+\func{void}{wxString}{\param{const char*}{ t}, \param{int}{ len}}\\
+\func{void}{wxString}{\param{char}{ c}}
+
+Constructors.
+
+\membersection{wxString::\destruct{wxString}}\label{wxstringdestruct}
+
+\func{void}{\destruct{wxString}}{\void}
+
+String destructor.
+
+\membersection{wxString::Alloc}\label{wxstringAlloc}
+
+\func{void}{Alloc}{\param{int}{ newsize}}
+
+Preallocate some space for wxString.
+
+\membersection{wxString::Allocation}\label{wxstringAllocation}
+
+\func{int}{Allocation}{\param{void}{}} \param{ const}{}
+
+Report current allocation (not length!).
+
+\membersection{wxString::Append}\label{wxstringAppend}
+
+\func{wxString\&}{Append}{\param{const char*}{ cs}}\\
+\func{wxString\&}{Append}{\param{const wxString\&}{ s}}
+
+Concatenation.
+
+\func{wxString\&}{Append}{\param{char}{ c}, \param{int}{ rep = 1}}
+
+Append {\it c}, {\it rep} times
+
+\membersection{wxString::After}\label{wxstringAfter}
+
+\func{wxSubString}{After}{\param{int}{ pos}}\\
+\func{wxSubString}{After}{\param{const wxString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{After}{\param{const wxSubString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{After}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{After}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{After}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+\membersection{wxString::At}\label{wxstringAt}
+
+\func{wxSubString}{At}{\param{int}{ pos}, \param{int}{ len}}\\
+\func{wxSubString}{operator ()}{\param{int}{ pos}, \param{int}{ len}}\\
+\func{wxSubString}{At}{\param{const wxString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{At}{\param{const wxSubString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{At}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{At}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{At}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+wxSubString extraction.
+
+Note that you can't take a substring of a const wxString, since
+this leaves open the possiblility of indirectly modifying the
+wxString through the wxSubString.
+
+\membersection{wxString::Before}\label{wxstringBefore}
+
+\func{wxSubString}{Before}{\param{int}{ pos}}\\
+\func{wxSubString}{Before}{\param{const wxString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Before}{\param{const wxSubString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Before}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Before}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Before}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+\membersection{wxString::Capitalize}\label{wxstringCapitalize}
+
+\func{void}{Capitalize}{\param{void}{}}\\
+\func{friend wxString}{Capitalize}{\param{wxString\&}{ x}}
+
+\membersection{wxString::Cat}\label{wxstringCat}
+
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxSubString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const char*}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{char}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxSubString\&}{ a}, \param{const wxString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxSubString\&}{ a}, \param{const wxSubString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxSubString\&}{ a}, \param{const char*}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const wxSubString\&}{ a}, \param{char}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxSubString\&}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const char*}{ b}, \param{wxString\&}{ c}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{char}{ b}, \param{wxString\&}{ c}}
+
+Concatenate first two arguments, store the result in the last argument.
+
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxString\&}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxString\&}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxString\&}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxString\&}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxSubString\&}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxSubString\&}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxSubString\&}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const wxSubString\&}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const char*}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const char*}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const char*}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const wxString\&}{ a}, \param{const char*}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}
+
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxString\&}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxString\&}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxString\&}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxString\&}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxSubString\&}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxSubString\&}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxSubString\&}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const wxSubString\&}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const char*}{ b}, \param{const wxString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const char*}{ b}, \param{const wxSubString\&}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const char*}{ b}, \param{const char*}{ c}, \param{wxString\&}{ d}}\\
+\func{friend void}{Cat}{\param{const char*}{ a}, \param{const char*}{ b}, \param{char}{ c}, \param{wxString\&}{ d}}
+
+Double concatenation, by request. (Yes, there are too many versions,
+but if one is supported, then the others should be too).
+Concatenate the first 3 args, store the result in the last argument.
+
+\membersection{wxString::Chars}\label{wxstringChars}
+
+\func{const char*}{Chars}{\param{void}{}} \param{ const}{}
+
+Conversion.
+
+\membersection{wxString::CompareTo}\label{wxstringCompareTo}
+
+\begin{verbatim}
+#define NO_POS ((int)(-1)) // undefined position
+enum CaseCompare {exact, ignoreCase};
+\end{verbatim}
+
+\func{int}{CompareTo}{\param{const char*}{ cs}, \param{CaseCompare}{ cmp = exact}} \param{ const}{}\\
+\func{int}{CompareTo}{\param{const wxString\&}{ cs}, \param{CaseCompare}{ cmp = exact}} \param{ const}{}
+
+\membersection{wxString::Contains}\label{wxstringContains}
+
+\func{bool}{Contains}{\param{char}{ c}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxString\&}{ y}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxSubString\&}{ y}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const char*}{ t}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxRegex\&}{ r}} \param{ const}{}
+
+Return 1 if target appears anyhere in wxString; else 0.
+
+\func{bool}{Contains}{\param{const char*}{ pat}, \param{CaseCompare}{ cmp}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxString\&}{ pat}, \param{CaseCompare}{ cmp}} \param{ const}{}
+
+Case dependent/independent variation .
+
+\func{bool}{Contains}{\param{char}{ c}, \param{int}{ pos}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxString\&}{ y}, \param{int}{ pos}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxSubString\&}{ y}, \param{int}{ pos}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const char*}{ t}, \param{int}{ pos}} \param{ const}{}\\
+\func{bool}{Contains}{\param{const wxRegex\&}{ r}, \param{int}{ pos}} \param{ const}{}
+
+Return 1 if the target appears anywhere after position {\it pos} (or
+before, if {\it pos} is negative) in wxString; else 0.
+
+\membersection{wxString::Copy}\label{wxstringCopy}
+
+\func{wxString}{Copy}{\param{void}{}} \param{ const}{}
+
+Duplication.
+
+\membersection{wxString::Del}\label{wxstringDel}
+
+\func{wxString\&}{Del}{\param{int}{ pos}, \param{int}{ len}}
+
+Delete {\it len} characters starting at {\it pos}.
+
+\func{wxString\&}{Del}{\param{const wxString\&}{ y}, \param{int}{ startpos = 0}}\\
+\func{wxString\&}{Del}{\param{const wxSubString\&}{ y}, \param{int}{ startpos = 0}}\\
+\func{wxString\&}{Del}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxString\&}{Del}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxString\&}{Del}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+Delete the first occurrence of target after {\it startpos}.
+
+\membersection{wxString::DownCase}\label{wxstringDownCase}
+
+\func{void}{Downcase}{\param{void}{}}\\
+\func{friend wxString}{Downcase}{\param{wxString\&}{ x}}
+
+\membersection{wxString::Elem}\label{wxstringElem}
+
+\func{char}{Elem}{\param{int}{ i}} \param{ const}{}
+
+Element extraction.
+
+\membersection{wxString::Empty}\label{wxstringEmpty}
+
+\func{int}{Empty}{\param{void}{}} \param{ const}{}
+
+\membersection{wxString::Error}\label{wxstringError}
+
+\func{void}{Error}{\param{const char*}{ msg}} \param{ const}{}
+
+\membersection{wxString::First}\label{wxstringFirst}
+
+\func{int}{First}{\param{char}{ c}} \param{ const}{}\\
+\func{int}{First}{\param{const char*}{ cs}} \param{ const}{}\\
+\func{int}{First}{\param{const wxString\&}{ cs}} \param{ const}{}
+
+Return first or last occurrence of item.
+
+\membersection{wxString::Firstchar}\label{wxstringFirstchar}
+\func{char}{Firstchar}{\param{void}{}} \param{ const}{}
+
+Element extraction.
+
+\membersection{wxString::Freq}\label{wxstringFreq}
+
+\func{int}{Freq}{\param{char}{ c}} \param{ const}{}\\
+\func{int}{Freq}{\param{const wxString\&}{ y}} \param{ const}{}\\
+\func{int}{Freq}{\param{const wxSubString\&}{ y}} \param{ const}{}\\
+\func{int}{Freq}{\param{const char*}{ t}} \param{ const}{}
+
+Return number of occurrences of target in wxString.
+
+\membersection{wxString::From}\label{wxstringFrom}
+
+\func{wxSubString}{From}{\param{int}{ pos}}\\
+\func{wxSubString}{From}{\param{const wxString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{From}{\param{const wxSubString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{From}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{From}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{From}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+\membersection{wxString::GetData}\label{wxstringGetData}
+
+\func{char*}{GetData}{\param{void}{}}
+
+wxWindows compatibility conversion.
+
+\membersection{wxString::GSub}\label{wxstringGSub}
+\func{int}{GSub}{\param{const wxString\&}{ pat}, \param{const wxString\&}{ repl}}\\
+\func{int}{GSub}{\param{const wxSubString\&}{ pat}, \param{const wxString\&}{ repl}}\\
+\func{int}{GSub}{\param{const char*}{ pat}, \param{const wxString\&}{ repl}}\\
+\func{int}{GSub}{\param{const char*}{ pat}, \param{const char*}{ repl}}\\
+\func{int}{GSub}{\param{const wxRegex\&}{ pat}, \param{const wxString\&}{ repl}}
+
+Global substitution: substitute all occurrences of {\it pat} with {\it repl},
+returning the number of matches.
+
+\membersection{wxString::Index}\label{wxstringIndex}
+
+\func{int}{Index}{\param{char}{ c}, \param{int}{ startpos = 0}} \param{ const}{}\\
+\func{int}{Index}{\param{const wxString\&}{ y}, \param{int}{ startpos = 0}} \param{ const}{}\\
+\func{int}{Index}{\param{const wxString\&}{ y}, \param{int}{ startpos}, \param{CaseCompare}{ cmp}} \param{ const}{}\\
+\func{int}{Index}{\param{const wxSubString\&}{ y}, \param{int}{ startpos = 0}} \param{ const}{}\\
+\func{int}{Index}{\param{const char*}{ t}, \param{int}{ startpos = 0}} \param{ const}{}\\
+\func{int}{Index}{\param{const char*}{ t}, \param{int}{ startpos}, \param{CaseCompare}{ cmp}} \param{ const}{}\\
+\func{int}{Index}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}} \param{ const}{}
+
+Return the position of target in string, or -1 for failure.
+
+\membersection{wxString::Insert}\label{wxstringInsert}
+
+\func{wxString\&}{Insert}{\param{int}{ pos}, \param{const char*}{ s}}\\
+\func{wxString\&}{Insert}{\param{int}{ pos}, \param{const wxString\&}{ s}}
+
+Insertion.
+
+\membersection{wxString::IsAscii}\label{wxstringIsAscii}
+
+\func{int}{IsAscii}{\param{void}{}} \param{ const}{}
+
+Classification (should be capital, because of ctype.h macros).
+
+\membersection{wxString::IsDefined}\label{wxstringIsDefined}
+
+\func{int}{IsDefined}{\param{void}{}} \param{ const}{}
+
+Classification (should be capital, because of ctype.h macros).
+
+\membersection{wxString::IsNull}\label{wxstringIsNull}
+
+\func{int}{IsNull}{\param{void}{}} \param{ const}{}
+
+Classification (should be capital, because of ctype.h macros).
+
+\membersection{wxString::IsNumber}\label{wxstringIsNumber}
+
+\func{int}{IsNumber}{\param{void}{}} \param{ const}{}
+
+Classification (should be capital, because of ctype.h macros).
+
+\membersection{wxString::IsWord}\label{wxstringIsWord}
+
+\func{int}{IsWord}{\param{void}{}} \param{ const}{}
+
+Classification (should be capital, because of ctype.h macros).
+
+\membersection{wxString::Last}\label{wxstringLast}
+
+\func{int}{Last}{\param{char}{ c}} \param{ const}{}\\
+\func{int}{Last}{\param{const char*}{ cs}} \param{ const}{}\\
+\func{int}{Last}{\param{const wxString\&}{ cs}} \param{ const}{}
+
+First or last occurrence of item.
+
+\membersection{wxString::Lastchar}\label{wxstringLastchar}
+
+\func{char}{Lastchar}{\param{void}{}} \param{ const}{}
+
+Element extraction.
+
+\membersection{wxString::Length}\label{wxstringLength}
+
+\func{unsigned int}{Length}{\param{void}{}} \param{ const}{}
+
+\membersection{wxString::LowerCase}\label{wxstringLowerCase}
+
+\func{void}{LowerCase}{\param{void}{}}
+
+\membersection{wxString::Matches}\label{wxstringMatches}
+
+\func{bool}{Matches}{\param{char}{ c}, \param{int}{ pos = 0}} \param{ const}{}\\
+\func{bool}{Matches}{\param{const wxString\&}{ y}, \param{int}{ pos = 0}} \param{ const}{}\\
+\func{bool}{Matches}{\param{const wxSubString\&}{ y}, \param{int}{ pos = 0}} \param{ const}{}\\
+\func{bool}{Matches}{\param{const char*}{ t}, \param{int}{ pos = 0}} \param{ const}{}\\
+\func{bool}{Matches}{\param{const wxRegex\&}{ r}, \param{int}{ pos = 0}} \param{ const}{}
+
+Return 1 if target appears at position {\it pos} in wxString; else 0.
+
+\membersection{wxString::OK}\label{wxstringOK}
+
+\func{int}{OK}{\param{void}{}} \param{ const}{}
+
+\membersection{wxString::Prepend}\label{wxstringPrepend}
+
+\func{wxString\&}{Prepend}{\param{const wxString\&}{ y}}\\
+\func{wxString\&}{Prepend}{\param{const wxSubString\&}{ y}}\\
+\func{wxString\&}{Prepend}{\param{const char*}{ t}}\\
+\func{wxString\&}{Prepend}{\param{char}{ c}}
+
+Prepend.
+
+\func{wxString\&}{Prepend}{\param{char}{ c}, \param{int}{ rep=1}}
+
+Prepend {\it c}, {\it rep} times.
+
+\membersection{wxString::Readline}\label{wxstringReadline}
+
+\func{friend int}{Readline}{\param{istream\&}{ s}, \param{wxString\&}{ x},
+ \param{char}{ terminator = '$\backslash$n'},
+ \param{int}{ discard\_terminator = 1}}\\
+\func{friend int}{Readline}{\param{FILE *}{ f}, \param{wxString\&}{ x},
+ \param{char}{ terminator = '$\backslash$n'},
+ \param{int}{ discard\_terminator = 1}}
+
+\membersection{wxString::Remove}\label{wxstringRemove}
+
+\func{wxString\&}{RemoveLast}{\param{void}{}}\\
+\func{wxString\&}{Remove}{\param{int}{ pos}}\\
+\func{wxString\&}{Remove}{\param{int}{ pos}, \param{int}{ len}}
+
+Remove {\it pos} to end of string.
+
+\membersection{wxString::Replace}\label{wxstringReplace}
+
+\func{wxString\&}{Replace}{\param{int}{ pos}, \param{int}{ n}, \param{const char*}{ s}}\\
+\func{wxString\&}{Replace}{\param{int}{ pos}, \param{int}{ n}, \param{const wxString\&}{ s}}
+
+\membersection{wxString::Replicate}\label{wxstringReplicate}
+
+\func{friend wxString}{Replicate}{\param{char}{ c}, \param{int}{ n}}\\
+\func{friend wxString}{Replicate}{\param{const wxString\&}{ y}, \param{int}{ n}}
+
+Replication.
+
+\membersection{wxString::Reverse}\label{wxstringReverse}
+
+\func{void}{Reverse}{\param{void}{}}\\
+\func{friend wxString}{Reverse}{\param{wxString\&}{ x}}
+
+\membersection{wxString::sprintf}\label{wxstringsprintf}
+\func{void}{sprintf}{\param{const wxString\& }{ fmt}}
+
+Formatted assignment. We do not use the 'sprintf' constructor anymore,
+because with that constructor, every initialisation with a string would
+go through sprintf and this is not desirable, because sprintf
+interprets some characters. With the above function we can write:
+
+\begin{verbatim}
+wxString msg; msg.sprintf("Processing item %d\n", count);
+\end{verbatim}
+
+\membersection{wxString::Strip}\label{wxstringStrip}
+
+\begin{verbatim}
+enumStripType {leading = 0x1, trailing = 0x2, both = 0x3};
+\end{verbatim}
+
+\func{wxSubString}{Strip}{\param{StripType}{ s = trailing}, \param{char}{ c = ' '}}
+
+Strip characterss at the front and/or end.
+StripType is defined for bitwise ORing.
+
+\membersection{wxString::SubString}\label{wxstringSubString}
+
+\func{wxString}{SubString}{\param{int}{ from}, \param{int}{ to}}
+
+Edward Zimmermann's additions.
+
+\membersection{wxString::Through}\label{wxstringThrough}
+
+\func{wxSubString}{Through}{\param{int}{ pos}}\\
+\func{wxSubString}{Through}{\param{const wxString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Through}{\param{const wxSubString\&}{ x}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Through}{\param{const char*}{ t}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Through}{\param{char}{ c}, \param{int}{ startpos = 0}}\\
+\func{wxSubString}{Through}{\param{const wxRegex\&}{ r}, \param{int}{ startpos = 0}}
+
+\membersection{wxString::Upcase}\label{wxstringUpcase}
+
+\func{void}{Upcase}{\param{void}{}}\\
+\func{friend wxString}{Upcase}{\param{wxString\&}{ x}}
+
+\membersection{wxString::UpperCase}\label{wxstringUpperCase}
+
+\func{void}{UpperCase}{\param{void}{}}\\
+
+\membersection{wxString::operator $=$}\label{wxstringoperatorassign}
+
+\func{wxString\&}{operator $=$}{\param{const wxString\&}{ y}}\\
+\func{wxString\&}{operator $=$}{\param{const char*}{ y}}\\
+\func{wxString\&}{operator $=$}{\param{char}{ c}}\\
+\func{wxString\&}{operator $=$}{\param{const wxSubString\&}{ y}}
+
+Assignment.
+
+\membersection{wxString::operator $+=$}\label{wxstringPlusEqual}
+
+\func{wxString\&}{operator $+=$}{\param{const wxString\&}{ y}}\\
+\func{wxString\&}{operator $+=$}{\param{const wxSubString\&}{ y}}\\
+\func{wxString\&}{operator $+=$}{\param{const char*}{ t}}\\
+\func{wxString\&}{operator $+=$}{\param{char}{ c}}
+
+Concatenation.
+
+\membersection{wxString::operator []}\label{wxstringoperatorbracket}
+
+\func{char\&}{operator []}{\param{int}{ i}}
+
+Element extraction.
+
+\membersection{wxString::operator ()}\label{wxstringoperatorparenth}
+
+\func{char\&}{operator ()}{\param{int}{ i}}
+
+\membersection{wxString::operator \cinsert}\label{wxstringoperatorout}
+\func{friend ostream\&}{operator \cinsert}{\param{ostream\&}{ s}, \param{const wxString\&}{ x}}\\
+\func{friend ostream\&}{operator \cinsert}{\param{ostream\&}{ s}, \param{const wxSubString\&}{ x}}
+
+\membersection{wxString::operator \cextract}\label{wxstringoperatorin}
+\func{friend istream\&}{operator \cextract}{\param{istream\&}{ s}, \param{wxString\&}{ x}}
+
+\membersection{wxString::operator const char*}\label{wxstringoperatorconstcharpt}
+\constfunc{}{operator const char*}{\param{void}{}}
+
+Conversion.
+
+\membersection{wxCHARARG}\label{wxstringwxCHARARG}
+
+\begin{verbatim}
+#define wxCHARARG(s) ((const wxString\& )(s).Chars())
+\end{verbatim}
+
+Here is a very, very, very ugly macro, but it makes things more
+transparent in cases, where a library function requires a
+(const wxString\& ) argument. This is especially the case in wxWindows,
+where all char-arguments are (const wxString\& ) and not (const char* ).
+This macro should only be used in such cases and NOT to
+modify the internal data.
+The conventional way would be 'function((char*)string.Chars())'.
+With the wxCHARARG macro, this can be achieved by 'function(wxCHARARG(string))'.
+This makes it clearer that the usage should be confined
+to arguments.
+
+\membersection{CommonPrefix}\label{wxstringCommonPrefix}
+
+\func{friend wxString}{CommonPrefix}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y},\\
+ \param{int}{ startpos = 0}}\\
+
+\membersection{CommonSuffix}\label{wxstringCommonSuffix}
+
+\func{friend wxString}{CommonSuffix}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y},\\
+ \param{int}{ startpos = -1}}
+
+\membersection{Compare}\label{wxstringCompare}
+
+\func{int}{Compare}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{Compare}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{Compare}{\param{const wxString\&}{ x}, \param{const char*}{ y}}\\
+\func{int}{Compare}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{Compare}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{Compare}{\param{const wxSubString\&}{ x}, \param{const char*}{ y}}
+
+Case dependent comparison. Returns 0 if the match succeeded.
+
+\membersection{FCompare}\label{wxstringFCompare}
+
+\func{int}{FCompare}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}
+
+Case independent comparison. Returns 0 if the match succeeded.
+
+\membersection{Comparison operators}\label{wxstringComparison}
+
+\func{int}{operator $==$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $!=$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $>$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $>=$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $<$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $<=$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $==$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $!=$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $>$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $>=$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $<$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $<=$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $==$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $!=$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $>$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $>=$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $<$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $<=$}{\param{const wxString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $==$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $!=$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $>$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $>=$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $<$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $<=$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{int}{operator $==$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $!=$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $>$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $>=$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $<$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $<=$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{int}{operator $==$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $!=$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $>$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $>=$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $<$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}\\
+\func{int}{operator $<=$}{\param{const wxSubString\&}{ x}, \param{const char*}{ t}}
+
+\membersection{operator $+$}\label{wxstringoperatorplus}
+
+\func{wxString}{operator $+$}{\param{const wxString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxString\&}{ x}, \param{const char*}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxString\&}{ x}, \param{char}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxSubString\&}{ x}, \param{const wxString\&}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxSubString\&}{ x}, \param{const wxSubString\&}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxSubString\&}{ x}, \param{const char*}{ y}}\\
+\func{wxString}{operator $+$}{\param{const wxSubString\&}{ x}, \param{char}{ y}}\\
+\func{wxString}{operator $+$}{\param{const char*}{ x}, \param{const wxString\&}{ y}}\\
+\func{wxString}{operator $+$}{\param{const char*}{ x}, \param{const wxSubString\&}{ y}}
+
+\membersection{Join}\label{wxstringJoin}
+
+\func{friend wxString}{Join}{\param{wxString}{ src[]}, \param{int}{ n}, \param{const wxString\&}{ sep}}
+
+\membersection{Split}\label{wxstringSplit}
+
+\func{friend int}{Split}{\param{const wxString\&}{ x}, \param{wxString}{ res[]}, \param{int}{ maxn},\\
+ \param{const wxString\&}{ sep}}\\
+\func{friend int}{Split}{\param{const wxString\&}{ x}, \param{wxString}{ res[]}, \param{int}{ maxn},\\
+ \param{const wxRegex\&}{ sep}}\\
+
+Split string into array res at separators; return number of elements
+
+
+
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: wxtab1.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 124 196 489 596
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+124 196 translate
+
+% size of image (on paper, in 1/72inch coords)
+365 400 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 15 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 0000bf c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+365 400 8 % dimensions of data
+[365 0 0 -400 0 400] % mapping matrix
+rlecmapimage
+
+7f037f036b030000
+8103047f047f046804810300
+83030402037f037f0364038304020300
+8403040203017f017f0163018304020300
+8403040203017f017f0163018304020300
+8403040203017f017f0152010e0485000104020300
+8403040203017f017f0152018104020b028603000104020300
+840304020301810104040408010104040101040f01010404010404030101040701010412
+0104047f0175018104020b028603000104020300
+840304020301020101040a010104040101040f01010404010104010101040c0101041201
+0104010101047f017401810402010201000302010001028603000104020300
+840304020301020101040a010104040101040f01010404010104020101040b0101041201
+0104010101047f017401810402020201000102010002028603000104020300
+840304020301020101040401030401010404010104040201030402010404040101040201
+010401010104010103040101010401010304020104040401010401010104020103040101
+01048101048104017f0165018104020302030003028603000104020300
+840304020301020101040701010481010481040181010482040104810401810104820401
+048104018101048204010481040181010481040103010104020101040101010404010104
+810104820401048104018101048204010481040181010481040103010404020101040101
+0104810104820401048104017f0165018104020402010004028603000104020300
+840304020301020101040401040481010481040181010482040104810401810104820401
+040404810104810401810104810401030101040201010401010104010104048101048204
+010481040181010482040104810401810104810401030101040101010401010104010101
+04010102047f0167018104020302030003028603000104020300
+840304020301020101040301010401010104810104810401810104820401048104018101
+048204010481040103010104010101040401010402010104010101048101048104018101
+048204010482040104810401810104820401048104018101048104010301010401010104
+0101010401010104010102047f0167018104020202010001020100020286030001040203
+00
+840304020301020101040301010401010104810104810401810104820401048104018101
+048204010481040181010482040104810401810104810401030101040101010402010104
+810104810401810104820401048204010481040181010482040104810401810104810401
+03010104010101040101010401010104810104820401048104017f016501810402010201
+000302010001028603000104020300
+840304020301020101040401040481010403040101040402010304020104040401040403
+010104010104048101048104018101040204020104040401040403010304010101048101
+048104017f0165018104020b028603000104020300
+840304020301500101047f017f018104020b028603000104020300
+8403040203014c0104047f017f01820104030c0385000104020300
+8403040203017f017f0152010f00840104020300
+8403040203017f017f0163018304020300
+8403040203017f017f0163018304020300
+83030402047f047f04650482020300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+8203040218024f04820302044e04820302044e04820302044e048103020602810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104021e0203000102810002260283030004021502020008028100020402
+81000205028100021a028303000402110281000210028100020f02810002140283030004
+020602810002020281000215028100020b02810002030281000207028100020902820300
+020502810300
+8203040218028104021e0281000201028100022802830300040214028100020102810002
+06028100020c028100021a028303000402100283000200020f028100020f028100021402
+83030004020602810002020281000223028100020d028100020902820300020502810300
+
+8203040218028104021e0281000201028300020002810200830002000220028303000402
+130281000203028100028102000100810200010086020002000200028102000100010282
+000200810002170283030004021002830002000202020200010283000200028102008500
+020002000201028100028102000100010285000200020002820200021102830300040206
+028100020202830002000201028400020002000200010282000200020001028200020002
+000202010085020002000200810002860200020002000281020083000200020902820300
+020502810300
+8203040218028104021e0281000201028500020002000281020081000220028303000402
+130281000203028300020002010283000200028102008100028402000200020102820002
+008100028202000216028303000402100283000200020102810002010282000200810002
+820200028102008300020002010283000200020102820002008100028402000200021202
+830300040206020500820200020102820002008300020002830200020083000200028602
+000200020002010283000200028102008200020081000285020002000200810002820200
+028102008100020902820300020502810300
+8203040218028104021e0203000102830002000201028100022002830300040213028100
+020302810002810200810002010281000282020002010283000200020302810002010281
+0002160283030004020f0281000201028100020102030082020002010281000201028100
+028402000200020102030082020002010201001402830300040206028100020202830002
+000201028300020002820200028402000200028202000286020002000200020102830002
+000201028300020002010285000200020002010281000201028100020902820300020502
+810300
+8203040218028104021e0281000203028300020002010281000220028303000402130281
+000203028100020202810002820200028202000201028300020002030281000201028100
+02160283030004020f020400010281000201028300020002010281000201028100028402
+000200028202000201028300020002010283000200021202830300040206028100020202
+830002000201028300020002820200028402000200028202000286020002000200020102
+830002000201028300020002010285000200020002010281000201028100020902820300
+020502810300
+8203040218028104021e0281000203028300020002810200810002200283030004021402
+810002010281000282020002010283000200028202000201028300020002010283000200
+020102810002160283030004020e02810002030283000200028102008300020002010281
+000281020081000201028100020102810002810200830002000201028300020002120283
+030004020602810002020283000200028102008300020002820200028402000200028202
+000286020002000200020102830002000281020082000200810002860200020002000201
+028100028102008100020902820300020502810300
+8203040218028104021e0281000203028100028102008300020002200283030004021502
+020003020200010201008202000201028100028102000100010281000201028100021602
+83030004020e028100020302810002810200850002000200020202010082020002010281
+000202020100840200020002010281000282020002110283030004020602810002020281
+000281020085000200020002820200028402000200028202000286020002000200020102
+810002810200860002000200020081000284020002000202020100820200020902820300
+020502810300
+8203040218028104022a02810002200283030004024d0283030004024d0283030004022f
+028100021b02820300020502810300
+82030402180281040226020300220283030004024d0283030004024d0283030004022b02
+03001d02820300020502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+8203040218028104024d0283030004024d0283030004024d0283030004024d0282030002
+0502810300
+820304020e024f04820302044e04820302044e04820302044e0481030207028203000205
+02810300
+820304020e028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e028104021102810002080281000210028100021b0283030004021602030001
+028100022e0283030004021b0202002e028303000402160281000202028100022f028203
+00020602820300020502810300
+820304020e0281040210028300020002070281000210028100021b028303000402150281
+0002020283000200022e0283030004021a0281000201028100022c028303000402160281
+000202028100022f02820300020602820300020502810300
+820304020e02810402100283000200020102030081020001000502020002020200810200
+010001020200010283000200021002830300040215028100020402820002008100020102
+020002020200010282000200810002190283030004021902810002050202000102810002
+010281000201028100021c02830300040216028100020202810002810200010001028300
+0200028102000100020202001b02820300020602820300020502810300
+820304020e02810402100283000200020102810002010283000200020402810002010283
+000200020102830002000282020002010282000200810002110283030004021602010003
+020100010283000200020102830002000201028200020081000282020002180283030004
+021902810002040281000201028300020002840200020002820200021c02830300040216
+020500820200020102820002008100028202000201028300020002010281000219028203
+00020602820300020502810300
+820304020e028104020f0281000201028100028202000201028300020002040204000102
+030082020002810200030082020002120283030004021802010001028100020102820002
+000300810200030082020002010281000218028303000402190281000204028100020102
+810002880200020002000200021d02830300040216028100020202830002000201028300
+02000202020100020204001a02820300020602820300020502810300
+820304020e028104020f0204000102810002010283000200028102000100820200020302
+81000201028300020002820200020302810002120283030004021a028300020002010283
+000200020302810002030281000201028100021802830300040219028100020402810002
+0102810002880200020002000200021d0283030004021602810002020283000200020102
+83000200020402810002820200021d02820300020602820300020502810300
+820304020e028104020e0281000203028300020002010283000200020402810002010283
+000200028102008300020002820200020102830002000212028303000402150281000202
+028300020002010283000200020102830002000201028200020081000282020002180283
+030004021a02810002010283000200020102810002010281000201028100021e02830300
+040216028100020202830002000201028300020002010281000201028300020002010281
+00021902820300020602820300020502810300
+820304020e028104020e0281000203028300020002010282000200810002040202000202
+010083020002008100028102000100010281000212028303000402160203000102810002
+0102810002810200010002020200010282000200810002190283030004021b0202000202
+0200030281000201028100021e0283030004021602810002020281000281020001000102
+81000202020200020202001b02820300020602820300020502810300
+820304020e028104024d0283030004022e028100021c0283030004024d0283030004024d
+02820300020602820300020502810300
+820304020e028104024d0283030004022e028100021c0283030004024d0283030004024d
+02820300020602820300020502810300
+820304020e0281040245024f04810302070283030004024d0283030004024d0282030002
+0602820300020502810300
+820304020e0281040245028104024d0282030002060283030004024d0283030004024d02
+820300020602820300020502810300
+820304020e0281040245028104024d0282030002060283030004024d0283030004024d02
+820300020602820300020502810300
+820304020e0281040245028104024d0282030002060283030004024d0283030004024d02
+820300020602820300020502810300
+8203040204024f0483030204024d02820300044e04820302044e04810302070282030002
+0602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104021f0202000702810002200283030004021a0204002d028303000402
+0d0202000802810002140203000102810002140283030004021b0202000e028100021d02
+820300020602820300020602820300020502810300
+8203040204028104021e0281000201028100020502810002200283030004021a02010001
+0201002c0283030004020c0281000201028100021d028100020102810002160283030004
+021a0281000201028100020c028100021d02820300020602820300020602820300020502
+810300
+8203040204028104021d02810002050202008102000100200283030004021a0201000102
+010001020300020204001e0283030004020b028100020302830002000201028400020002
+000200020202000202020004028100020102830002000281020083000200020e02830300
+04021902810002030281000281020001000202020081020001001d028203000206028203
+00020602820300020502810300
+8203040204028104021d02810002040281000201028300020002200283030004021a0201
+0001020100810200810002810200820002008100028102008100021d0283030004020b02
+810002050281000201028500020002000201028300020002010283000200020102810002
+02028100020102850002000200028102008100020e028303000402190281000205028100
+0201028300020002010283000200021d0282030002060282030002060282030002050281
+0300
+8203040204028104021d028100020502030082020002200283030004021a020100010201
+00810200810002810200820002008100028102008100021d0283030004020b0281000201
+020200820200020102850002000200020102820002000300010203000302030001028300
+02000201028100020e028303000402190281000201020200820200020102810002810200
+0200820200021d02820300020602820300020602820300020502810300
+8203040204028104021d02810002040281000201028300020002200283030004021a0201
+0001020100810200810002810200820002008100028102008100021d0283030004020b02
+810002030283000200020102850002000200020102830002000203028100020102810002
+02028100020302830002000201028100020e028303000402190281000203028300020002
+01028300020002010283000200021d028203000206028203000206028203000205028103
+00
+8203040204028104021e0281000201028300020002810200830002000220028303000402
+1a02010001020100810200810002810200820002008100028102008100021d0283030004
+020c02810002010281000282020002810200850002000200020102830002000201028300
+0200028102008100020202810002030283000200028102008100020e0283030004021a02
+8100020102810002820200020102830002000281020083000200021d0282030002060282
+0300020602820300020502810300
+8203040204028104021f0202000202010083020002008100021f0283030004021a020400
+02020300020204001e0283030004020d0202000302010086020002000200020102810002
+810200010002020100820200020202810002030281000281020083000200020e02830300
+04021b020200030202000202010083020002008100021c02820300020602820300020602
+820300020502810300
+8203040204028104024d0283030004022802810002010201001e0283030004023c028100
+020e0283030004024d02820300020602820300020602820300020502810300
+8203040204028104024d028303000402290203001f028303000402380203001002830300
+04024d02820300020602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+8203040204028104024d0283030004024d0283030004024d0283030004024d0282030002
+0602820300020602820300020502810300
+82030402040252044e027f042304820300020602820300020602820300020502810300
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104021602810002030281000205028100020b028100020e028100020d02
+8100027f026d02820300020602820300020602820300020502810300
+82030402040281040216028100020b028100020a028100021f028100027f026d02820300
+020602820300020602820300020502810300
+820304020402810402160281000203028100028102000100810200010004020200010202
+0004020200010203000102840002000200020002020200010281000281020001007f0269
+02820300020602820300020602820300020502810300
+820304020402810402160281000203028300020002010283000200020302810002010281
+000282020002030281000201028300020002010284000200020083000200028402000200
+0201028500020002000201028100027f0267028203000206028203000206028203000205
+02810300
+820304020402810402160281000203028100028102008100020102810002030281000201
+028100028202000204020300820200020102850002000200028202000282020002810200
+0200820200028102008100027f0269028203000206028203000206028203000205028103
+00
+820304020402810402160281000203028100020202810002820200020302810002010281
+000282020002030281000201028300020002010285000200020002820200028402000200
+020102830002000202028100027f02680282030002060282030002060282030002050281
+0300
+820304020402810402160281000203028300020002010283000200020302810002010281
+000282020002030281000281020083000200020102850002000200028202000284020002
+00028102008500020002000201028100027f026702820300020602820300020602820300
+020502810300
+820304020402810402160204008202000281020001000102010004020200020281000204
+020100840200020002010285000200020002820200028202000281020085000200020002
+81020001007f026902820300020602820300020602820300020502810300
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f025f024d00150282030002060282030002060282030002050281
+0300
+82030402040281040215027f032b031c028100044b048203000213028203000206028203
+00020602820300020502810300
+82030402040281040215028103007f0028008104021b028100044a040103810002130282
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f0419040b0201008104021b028100048104024802
+01038100021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048102040804810300820004021b02810004
+81040214029d000200020002000200020002000200020002000200020002000200020002
+150201038100021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+04810402480201038100021302820300020602820300020602820300020502810300
+8203040204028104021502820300048204000402048100047f0411048202040207028103
+00820004021b028100048104021402810002190281000215020103810002130282030002
+0602820300020602820300020502810300
+8203040204028104021502820300048204000402048100047f0411048202040207028103
+00820004021b028100048104024802010381000213028203000206028203000206028203
+00020502810300
+820304020402810402150282030004820400040204810004810400010001048300040004
+81040001007f0403048202040202028100020202810300820004021b0281000481040214
+028100028102000100010281000211028100021502010381000213028203000206028203
+00020602820300020502810300
+820304020402810402150282030004810400040082040004010482000400810004820400
+0401048100047f04010482020402010202000202810300820004021b0281000481040216
+028100020102830002000229020103810002130282030002060282030002060282030002
+0502810300
+820304020402810402150282030004820400040204810004810400020082040004010404
+007f0402048202040281020003000102810300820004021b028100048104021402010005
+028100028102000100020202000202020001028100021502010381000213028203000206
+02820300020602820300020502810300
+820304020402810402150282030004820400040204830004000401048300040004010481
+00047f040504820204020702810300820004021b02810004810402150281000204028300
+020002010283000200020102830002000201028100021702010381000213028203000206
+02820300020602820300020502810300
+820304020402810402150282030004820400040204830004000481040083000400040104
+81000401048100047f040104820204020702810300820004021b02810004810402140201
+000502830002000201028100028102008100020102040082020002150201038100021302
+820300020602820300020602820300020502810300
+820304020402810402150282030004820400040204810004810400850004000400040204
+02007f040304820204020702810300820004021b02810004810402150281000204028300
+02000201028100020202810002820200021b020103810002130282030002060282030002
+0602820300020502810300
+8203040204028104021502820300047f041904810203090301008104021b028100048104
+021402830002000201028500020002000201028300020002010283000200020102830002
+0002150201038100021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f0419040d008104021b0281000481040217020200
+010281000281020001000202020002020200190201038100021302820300020602820300
+020602820300020502810300
+8203040204028104021502820300047f0419048f02040204020402040204020402000402
+1b0281000481040214028100021902810002150201038100021302820300020602820300
+020602820300020502810300
+8203040204028104021502820300047f041a048e0204020402040204020402040004021b
+028100048104024802010381000213028203000206028203000206028203000205028103
+00
+8203040204028104021502820300047f0419048f02040204020402040204020402000402
+1b0281000481040214028100021902810002150201038100021302820300020602820300
+020602820300020502810300
+8203040204028104021502820300047f041a048e0204020402040204020402040004021b
+0281000481040215029b0002000200020002000200020002000200020002000200020002
+0002160201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004810400030007048100040304810004030483000400
+047b048f020402040204020402040204020004021b028100048104024802010381000213
+02820300020602820300020602820300020502810300
+820304020402810402150282030004820400040204810004050481000403048100040504
+8100047c048e0204020402040204020402040004021b0281000481040248020103810002
+1302820300020602820300020602820300020502810300
+820304020402810402150282030004820400040204810004810400010001048200040081
+0004830400040081000481040002007b048f020402040204020402040204020004021b02
+820004034b038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004810400030001048100040104820004008100048304
+00040081000486040004000400047b040b0201008104021b028100034c03810002130282
+0300020602820300020602820300020502810300
+820304020402810402150282030004820400048204000402040300820400040104830004
+00040104850004000400047b048102040804810300820004021c024d0015028203000206
+02820300020602820300020502810300
+820304020402810402150282030004820400040104810004820400040104830004000401
+0483000400040104850004000400047b04820204020702810300820004027f0283020300
+020602820300020602820300020502810300
+820304020402810402150282030004820400040104810004820400048104008200040081
+0004830400040081000486040004000400047b04820204020702810300820004027f0283
+020300020602820300020602820300020502810300
+820304020402810402150282030004820400040204810004810400860004000400040081
+0004830400040081000483040004008100047a04820204020702810300820004027f0283
+020300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004027f028302
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004027f028302
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021c024d00
+1502820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+044b04820300021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+044a0401038100021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+04810402480201038100021302820300020602820300020602820300020502810300
+82030402040281040215028203000401040300070481000411048100040c048100048204
+00040d048100040204810004820400044b04820204020702810300820004021b02810004
+810402480201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004820400040204810004050481000411048100040c04
+810004820400040d0481000402048100044e04820204020702810300820004021b028100
+04810402480201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004820400040504020001048200040081000484040004
+000481040001000404020001040200020402008104000100830400040081000401040200
+020401008204000401040200820400048104008300040004810400010001048300040004
+3b04820204020702810300820004021b0281000481040248020103810002130282030002
+0602820300020602820300020502810300
+820304020402810402150282030004010401000304810004010482000400810004830400
+040081000482040004010481000403048100048204000401048300040004010483000400
+048104008100048404000400040104830004000481040081000402048100048404000400
+0481040083000400040104820004008100043c04820204020702810300820004021b0281
+0004810402480201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004030401000204030082040004010483000400040104
+040004048100048204000401048300040004010483000400048204000401048200040003
+0082040004010481000402048100048404000400040104820004000300820400043d0482
+0204020702810300820004021b0281000481040218028100020202810002050281000220
+0201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004050483000400040104830004000401048300040004
+010481000403040200820400048204000401048300040004010483000400048204000401
+048300040004030481000401048100040204810004840400040004010483000400040304
+8100043d04820204020702810300820004021b0281000481040218028100020202810002
+0502810002200201038100021302820300020602820300020602820300020502810300
+820304020402810402150282030004820400040204830004000481040082000400810004
+840400040004010481000401048100040304810004820400040104830004000401048300
+040004820400040104830004000401048300040004810400810004020481000484040004
+00048104008300040004010483000400043d04820204020702810300820004021b028100
+0481040218028100020202810002810200010001028400020002008100021b0201038100
+021302820300020602820300020602820300020502810300
+820304020402810402150282030004010403000204010085040004000400810004820400
+040204020005040100010402000204020001040100820400040104810004810400010002
+0401008204000402040100820400048104008300040004810400010001048100043d0482
+0204020702810300820004021b0281000481040218020500820200020102840002000200
+810002820200021a02010381000213028203000206028203000206028203000205028103
+00
+82030402040281040215028203000451048100044504820204020702810300820004021b
+028100048104021802810002020282000200030084020002000201028100021a02010381
+00021302820300020602820300020602820300020502810300
+8203040204028104021502820300044d0403004704820204020702810300820004021b02
+8100048104021802810002020283000200020302830002000201028100021a0201038100
+021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+048104021802810002020283000200020102840002000200810002820200021a02010381
+00021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+0481040218028100020202810002810200010001028400020002008100021b0201038100
+021302820300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+0481040227028100021e0201038100021302820300020602820300020602820300020502
+810300
+8203040204028104021502820300047f041904820204020702810300820004021b028100
+0481040227028100021e0201038100021302820300020602820300020602820300020502
+810300
+8203040204028104021502820300048104000300030404007f040a048202040207028103
+00820004021b028100048104024802010381000213028203000206028203000206028203
+00020502810300
+8203040204028104021502820300040204810004040481000402048100047f0408048102
+03090301008104021b028100048104024802010381000213028203000206028203000206
+02820300020502810300
+820304020402810402150282030004020481000404048100040204810004810400010001
+0481000401048100047c040d008104021b02810004810402480201038100021302820300
+020602820300020602820300020502810300
+820304020402810402150282030004020481000404040400010481000401048100048404
+000400047d040b0201008104021b02810004810402480201038100021302820300020602
+820300020602820300020502810300
+820304020402810402150282030004020481000404048100048204000401040400020481
+00047e048102040804810300820004021b02820004034b03810002130282030002060282
+0300020602820300020502810300
+820304020402810402150282030004020481000404048100040104810004820400040504
+8100047e04820204020702810300820004021b028100034c038100021302820300020602
+820300020602820300020502810300
+820304020402810402150282030004020481000404048100040104810004820400040104
+8100048404000400047d04820204020702810300820004021c024d001502820300020602
+820300020602820300020502810300
+820304020402810402150282030004020481000404048100040204810004810400010001
+0481000401048100047c04820204020702810300820004027f0283020300020602820300
+020602820300020502810300
+8203040204028104021502820300047f0419048202040281020003000102810300820004
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048202040201020200020281030082000402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048202040202028100020202810300820004
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004027f028302
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004027f028302
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f041904820204020702810300820004027f028302
+0300020602820300020602820300020502810300
+8203040204028104021502820300047f041904810203090301008104027f028302030002
+0602820300020602820300020502810300
+8203040204028104021502820300047f0419040d008104027f0283020300020602820300
+020602820300020502810300
+82030402040281040215028103027f021a020d008104027f028302030002060282030002
+0602820300020502810300
+82030402040281040215027f042b047f0201028203000206028203000206028203000205
+02810300
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104021602810002020281000205028100027f027f021d02820300020602
+820300020602820300020502810300
+82030402040281040216020100020281000205028100027f027f021d0282030002060282
+0300020602820300020502810300
+820304020402810402160283000200028202000281020001008102000100010202000202
+02007f027f021202820300020602820300020602820300020502810300
+820304020402810402160283000200028402000200020102830002000282020002010283
+0002000201028100027f027f021002820300020602820300020602820300020502810300
+
+820304020402810402160281000286020002000200020102830002000281020003000102
+01007f027f021302820300020602820300020602820300020502810300
+820304020402810402160281000286020002000200020102830002000282020002060281
+00027f027f021102820300020602820300020602820300020502810300
+820304020402810402160281000201020100820200020102830002000282020002010283
+0002000201028100027f027f021002820300020602820300020602820300020502810300
+
+820304020402810402160281000202028100028102000100010201000102020002020200
+7f027f021202820300020602820300020602820300020502810300
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+82030402040281040215027f032b037f0201028203000206028203000206028203000205
+02810300
+82030402040281040215028103007f0028008104027f0283020300020602820300020602
+820300020502810300
+8203040204028104021502820300047f04190482000204080483030004027f0283020300
+020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300048104000200240481000415048100040f0481000403
+048100048204000418048100040d048100040f0483000204020202810002020283030004
+027f0283020300020602820300020602820300020502810300
+82030402040281040215028403000400040204810004220481000415048100040f048100
+0403048100048204000428048100040f04830002040201020200020283030004027f0283
+020300020602820300020602820300020502810300
+820304020402810402150284030004000405040200010482000400020002040200040403
+000204020081040001000104020002040200050402000104820004008100040104020001
+048100040104030002040200830400040081000401040200050402000104030001048400
+04000400020002040200010481000481040001000b048300020402810200030001028303
+0004027f0283020300020602820300020602820300020502810300
+820304020402810402150282030004810400810004020481000401048200040083000400
+048404000400040104810004020481000401048300040004010483000400048204000401
+048300040004010481000402048100040104820004008100048404000400040104830004
+000401048300040004030481000481040081000484040004000401048100040204810004
+010483000400040104840004000400830004000484040004000401048500040004000401
+0481000409048300020402070283030004027f0283020300020602820300020602820300
+020502810300
+820304020402810402150282030004020401000104810004010483000400048204000483
+040004000300030481000401048300040004010483000400048104000300010401000604
+030082040004010483000400040104830004000401048300040004030481000482040004
+010482000400030004040300820400040104850004000400048204000482040004810400
+0200820400048104008100040b048300020402070283030004027f028302030002060282
+0300020602820300020502810300
+820304020402810402150282030004040483000400040104830004000482040004840400
+040004060481000401048300040004010483000400048204000406048100040304810004
+010483000400040104830004000401048300040004010483000400040304810004820400
+040104830004000406048100040104830004000401048500040004000482040004840400
+0400040104830004000402048100040a048300020402070283030004027f028302030002
+0602820300020602820300020502810300
+820304020402810402150284030004000402048300040004010483000400048204000484
+040004000401048100040204810004010483000400040104830004000482040004010483
+000400040104810004020481000481040082000400810004840400040004010483000400
+048104008300040004030481000482040004010483000400040104810004020481000481
+040083000400040104850004000400048204000484040004000481040085000400040004
+01048100040904820002030903820004027f028302030002060282030002060282030002
+0502810300
+820304020402810402150282030004810400020002040200010481000482040004820400
+048104000100040481000401048100048104000100010401000104020002040200050401
+008504000400040081000401040200020401008304000400810004020401008204000401
+048100048104000100050401008404000400040104850004000400048204000482040004
+8104008500040004000481040001000b040d008104027f02830203000206028203000206
+02820300020502810300
+8203040204028104021502820300047f0419048100020a02820004027f02830203000206
+02820300020602820300020502810300
+8203040204028104021502820300047f04190482000204080483030004027f0283020300
+020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+820304020402810402150284030004000408048100048204000403048100040804810004
+78048300020402070283030004027f028302030002060282030002060282030002050281
+0300
+8203040204028104021502820300040a04810004820400040e0481000478048300020402
+070283030004027f0283020300020602820300020602820300020502810300
+820304020402810402150285030004000400020003040200830400040081000482040004
+810400010004048200040081000401040200010481000401048100048104000100020402
+005e048300020402070283030004027f0283020300020602820300020602820300020502
+810300
+820304020402810402150286030004000400040104810004020481000481040081000486
+040004000400040104810004020401000104830004000401048300040004010483000400
+040104830004000401048100045c048300020402070283030004027f0283020300020602
+820300020602820300020502810300
+820304020402810402150286030004000400040104810004020481000482040004010483
+000400048104008100040404810004010483000400040104830004000401048100048104
+00810004010404005d048300020402070283030004027f02830203000206028203000206
+02820300020502810300
+820304020402810402150286030004000400040104810004020481000482040004010483
+000400040204810004030481000401048300040004010483000400040104810004020481
+0004820400046004820002030903820004027f0283020300020602820300020602820300
+020502810300
+820304020402810402150286030004000400040104810004020481000482040004010485
+000400040004010481000402048100040104830004000401048300040004810400830004
+00040104830004000401048100045c040d008104027f0283020300020602820300020602
+820300020502810300
+820304020402810402150286030004000400040104810004020401008204000401048300
+040004810400010004048100040104810004810400010002040100820400048104000100
+020402005e048d00040204020402040204020402048104027f0283020300020602820300
+020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048d00040204020402040204020402048104
+027f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048f00020402040204020402040204020402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048100020a02820004027f02830203000206
+02820300020602820300020502810300
+8203040204028104021502820300047f04190482000204080483030004027f0283020300
+020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402810200030001028303000402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f041904830002040201020200020283030004027f
+0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402020281000202028303000402
+7f0283020300020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f0419048300020402070283030004027f02830203
+00020602820300020602820300020502810300
+8203040204028104021502820300047f041904820002030903820004027f028302030002
+0602820300020602820300020502810300
+82030402040281040215028103027f021a020d008104027f028302030002060282030002
+0602820300020502810300
+82030402040281040215027f042b047f0201028203000206028203000206028203000205
+02810300
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f024302820300020602820300020602820300020502810300
+
+8203040204028104027f027f0243028203000206028203000307038100020502810300
+8203040204028104027f027f02430282030002060281030008000702810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f024302820300020602820300020f02810300
+8203040204028104027f027f0243028203000307038100020f02810300
+8203040204028104027f027f02430281030008001102810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104027f027f024302820300021902810300
+8203040204028104037f037f0344038100021902810300
+8203040204027f007f0047001a02810300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+820304027f027f026702810300
+7f037f036b030000
+7f007f006c00
+
+%
+% Compression made this file 5.76% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: alignb.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 298 389 314 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+298 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+07010700
+070181000204020000
+070181000204020000
+070181000204020000
+070181000204020000
+070181000204020000
+8101000300010181000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+810100030001010700
+0f01
+0f01
+
+%
+% Compression made this file 3.12% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: alignl.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+020105000601
+020181000202028100010501
+020181000202028100010501
+020181000202028100010501
+020105000601
+0f01
+0f01
+02010a000101
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+02010a000101
+0f01
+
+%
+% Compression made this file 16.11% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: alignr.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+070105000101
+070181000202028100010001
+070181000202028100010001
+070181000202028100010001
+070105000101
+0f01
+0f01
+02010a000101
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+02010a000101
+0f01
+
+%
+% Compression made this file 16.11% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: alignt.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+810100030001010700
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8101000300010181000204020000
+070181000204020000
+070181000204020000
+070181000204020000
+070181000204020000
+070181000204020000
+07010700
+0f01
+0f01
+
+%
+% Compression made this file 20.28% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: arrow.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+8102001900
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030106018100010c0101020000
+82000301060101000c0101020000
+82000301060102000b0101020000
+82000301060103000a0101020000
+8200030106010400090101020000
+8200030106010500080101020000
+8200030106010600070101020000
+8200030106010700060101020000
+8200030106010400090101020000
+8200030106010100810100810001080101020000
+82000301060181000101010100080101020000
+820003010a010100080101020000
+820003010b010100070101020000
+820003010b010100070101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+1b00
+
+%
+% Compression made this file 13.95% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: bmpbuttn.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030103010c00040101020000
+8200030102018100010b01810001020101020000
+82000301020181000101018100010201010002010100020101020000
+8200030102018100010101810001010181000182010001810100810001010101020000
+82000301020185000100010001010181000182010001810100810001010101020000
+8200030102018400010001008100010101010002010100020101020000
+82000301020183000100018201000106010100020101020000
+82000301020182000100820001000900020101020000
+820003010201810001010181000107010100020101020000
+82000301020181000101018100010101010003010100020101020000
+8200030103010e00020101020000
+8200030104010c00030101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 18.45% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\chapter{Introduction}\label{introduction}
+\pagenumbering{arabic}%
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+The wxWindows Dialog Editor is a tool for creating dialog resource files, in {\tt .wxr} format.
+It differs from wxBuilder in the following respectes:
+
+\begin{enumerate}\itemsep=0pt
+\item Scope. It is written for dialog editing only, and is therefore more convenient than wxBuilder for this purpose.
+\item File format. Dialog editor reads and writes wxWindows resource files (extension {\tt .wxr}) and has
+no independent file format.
+\item Robustness. It is written in a more principled way than wxBuilder, and is less ambitious.
+\item Ease of use. Windows are edited using the mouse or via consistent {\it property editors}, which
+provide immediate visual feedback of changed properties.
+\end{enumerate}
+
+Dialog Editor should be compiled and used with wxWindows 1.65 or later.
+
+\section{Current status}
+
+Dialog Editor currently runs under MS Windows. It has yet to
+be tested under Motif and XView: see \helpref{Technical notes}{technotes} for a discussion
+of what needs to be done.
+
+\section{Future developments}
+
+\begin{itemize}\itemsep=0pt
+\item XView and Motif versions.
+\item It would be nice to have a dialog browser, showing thumbnails of
+all dialogs in a particular directory.
+\item Maybe add a menubar editor (from wxBuilder).
+\item Maybe convert Windows .rc files.
+\end{itemize}
+
+\chapter{Commands}\label{commands}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\section{Dialog editor menu bar}
+
+\subsection{File menu}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{New project}{Creates a new project (clears index and resets project name).}
+\twocolitem{New dialog}{Creates a new dialog resource.}
+\twocolitem{Open}{Opens an existing resource file.}
+\twocolitem{Save}{Saves the current resources.}
+\twocolitem{Save as}{Saves the current resources in a named file.}
+\twocolitem{Clear}{Clears the current resources.}
+\twocolitem{Exit}{Exit the program.}
+\end{twocollist}
+
+\subsection{Edit menu}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{Recreate}{Recreates the currently selected panel item from the underlying resource. This may be necessary
+to regenerate items that cannot be changed dynamically, and which have got out of sync with the displayed
+item.}
+\twocolitem{Delete}{Deletes the currently selected resource.}
+\twocolitem{Toggle edit/test mode}{Toggles from edit to test mode, and vice versa. Edit mode is used for editing
+dialogs, test mode allows panel items to be manipulated as they will appear to the user.}
+\end{twocollist}
+
+\subsection{Help menu}
+
+\begin{twocollist}\itemsep=0pt
+\twocolitem{Help topics}{Displays on-line help at the contents page.}
+\twocolitem{About}{Displays an dialog showing the Dialog Editor version and author.}
+\end{twocollist}
+
+\latexonly{\newpage}
+\section{Command toolbar}
+
+The command toolbar consists of the following tools:
+
+\begin{twocollist}%\itemsep=0pt
+\twocolitem{\icon{new.eps}{New}}{Clears the project.}
+\twocolitem{\icon{open.eps}{Open}}{Opens an existing resource file.}
+\twocolitem{\icon{save.eps}{Save}}{Saves the current resources.}
+\twocolitem{\icon{vert.eps}{Horizontal align}}{Aligns the centre of the selected items horizontally.}
+\twocolitem{\icon{alignt.eps}{Horizontal top-align}}{Aligns the top sides of the selected items horizontally.}
+\twocolitem{\icon{alignb.eps}{Horizontal bottom-align}}{Aligns the bottom sides of the selected items horizontally.}
+\twocolitem{\icon{horiz.eps}{Vertical align}}{Aligns the centre of the selected items vertically.}
+\twocolitem{\icon{alignl.eps}{Vertical left-align}}{Aligns the left sides of the selected items vertically.}
+\twocolitem{\icon{alignr.eps}{Vertical right-align}}{Aligns the right sides of the selected items vertically.}
+\twocolitem{\icon{copysize.eps}{Copy size}}{Copies the size of the first selected item to the subsequently selected item(s).}
+\twocolitem{\icon{tofront.eps}{To front}}{Puts the selected item(s) to the front of the display list.}
+\twocolitem{\icon{toback.eps}{To back}}{Puts the selected item(s) to the back of the display list.}
+\twocolitem{\icon{help.eps}{Help}}{Invokes Dialog Editor help.}
+\end{twocollist}
+
+\latexonly{\newpage}
+\section{Tool palette}
+
+The tool palette is used to select a type of panel item to create on the dialog.
+To create a new panel item, select a tool with left-click, then left-click on the dialog to
+window. Select the pointer tool to use left-click for selecting and deselecting
+items.
+
+The tool palette consists of the following tools.
+
+\begin{twocollist}%\itemsep=0pt
+\twocolitem{\icon{arrow.eps}{Pointer}}{Click this to select/deselect items on a dialog.}
+\twocolitem{\icon{message.eps}{Message}}{Text message item.}
+\twocolitem{\icon{picture.eps}{Bitmap message}}{Bitmap message item.}
+\twocolitem{\icon{button.eps}{Button}}{Text button item.}
+\twocolitem{\icon{bmpbuttn.eps}{Bitmap button}}{Bitmap button item.}
+\twocolitem{\icon{check.eps}{Checkbox}}{Checkbox item.}
+\twocolitem{\icon{radio.eps}{Radiobox}}{Radiobox item.}
+\twocolitem{\icon{listbox.eps}{Listbox}}{Listbox item.}
+\twocolitem{\icon{choice.eps}{Choice}}{Choice item.}
+\twocolitem{\icon{text.eps}{Text}}{Single-line text item.}
+\twocolitem{\icon{mtext.eps}{Multitext}}{Multi-line text item.}
+\twocolitem{\icon{slider.eps}{Slider}}{Slider item.}
+\twocolitem{\icon{group.eps}{Groupbpx}}{Groupbox item.}
+\twocolitem{\icon{gauge.eps}{Gauge}}{Gauge item.}
+\twocolitem{\icon{scroll.eps}{Scrollbar}}{Scrollbar item.}
+\end{twocollist}
+
+\section{Resource list}
+
+The resource list shows a list of the dialogs, panel items and bitmaps currently loaded
+in Dialog Editor. Double-clicking on a dialog item shows the associated dialog box.
+
+\chapter{Procedures}\label{procedures}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\section{Running Dialog Editor}
+
+To run Dialog Editor under Windows, click on the Program Manager or Explorer icon.
+Under UNIX, run from the command line.
+
+The main window shows a menu bar, command toolbar, tool palette, resource list, and
+status line.
+
+\section{Creating a dialog}
+
+To create a new dialog, click on the {\bf File: New} menu item, or equivalent
+toolbar button. A dialog will appear. To put a panel item on the dialog, left-click
+on the appropriate palette icon and then left-click on the dialog. A new item
+will appear at the place you clicked.
+
+You can edit any panel item or dialog by control-left clicking. A property editor
+will appear, allowing any property to be selected and edited (see \helpref{Using property editors}{propeditors}).
+You can also edit items by right-clicking to show a menu, and then selecting {\it Edit properties}.
+
+To move a panel item, drag the item with the left mouse button, or edit
+the position values in the property editor. To resize a panel item, you
+can either select it by left-clicking and then dragging on a selection
+handle, or edit the size values in the property editor.
+
+You can delete items from the right-click menu, or by selecting the item and
+choosing {\bf Edit: Delete} from the menu bar.
+
+\section{Using property editors}\label{propeditors}
+
+Property editors consist of a list of properties and current values, plus controls at the top of
+the editor. If the property is of an appropriate type, you can edit the value directly in the
+text field, and confirm or cancel the value using the two buttons to the left of it.
+If the property has a predefined range of values, such as labelFontFamily, you can
+see a list of permissable values by clicking on the button labelled with an ellipsis symbol ({\bf ...}).
+This will show a listbox with possible values and current selection. You may also be able
+to cycle through values by double-clicking the value in the listbox.
+
+Properties may have special editors appropriate to the type. Filename properties invoke
+the file selector, and properties containing list of user-definable strings use a
+string editor.
+
+When you change a property value, this value is immediately reflected in
+the dialog or panel item. If the item allows this value to be changed
+dynamically, the relevant wxWindows function will be called internally
+to effect the change. If the value cannot be changed dynamically, the
+item will be destroyed and re-created, which means that there will be
+more flickering associated with some kinds of property changes than
+others.
+
+\section{Saving and loading files}
+
+Use {\it File: Save} and {\it File: Save as} or the equivalent toolbar button
+to save the current dialog(s) in a wxWindows resource file (extension {\tt .wxr}).
+
+The {\tt .wxr} file can be used directly in a wxWindows program, if
+wxWindows resources have been enabled when building the wxWindows library.
+These files can be loaded dynamically, or included directly into program source
+with a \verb$#include$ directive. See the wxWindows user manual for further details.
+
+\section{Multi-platform development}
+
+{\tt .wxr} files generated on one environment (e.g. Windows) can be used in another (e.g. Motif).
+However, because the same panel item can have different sizes on different GUIs,
+the user should be cautious in assuming that one resource file will work for all
+platforms. It may be better to plan to conditionally include or load different
+resource files for different platforms, with spacing modified to suit each
+environment.
+
--- /dev/null
+\chapter{Bugs}\label{bugs}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+Version 1.0
+
+\begin{itemize}\itemsep=0pt
+\item No XView or Motif versions yet.
+\item In Watcom-compiled 32-bit Windows version, bitmap buttons and messages
+don't work properly.
+\item Some panel item properties missing, e.g. wxPASSWORD, wxREADONLY.
+\item When dragging a selected item, other selected items should follow (to be
+consistent with convention), but don't.
+\item wxSlider sizing a bit broken: a wxWindows problem.
+\end{itemize}
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: button.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030103010c00040101020000
+8200030102018100010b01810001020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030102018100010b010100020101020000
+8200030103010e00020101020000
+8200030104010c00030101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 15.35% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\chapter{Change log}\label{changes}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+March 15th 1997, Version 1.7
+
+\begin{itemize}\itemsep=0pt
+\item Added fix to wx\_rprop.cpp to avoid Fafa bitmap buttons growing every time the
+button edited.
+\item Added fix to wx\_resed.cpp, case wxID\_EXIT, to clean up properly on exit, avoiding double deletion of wxBitmap.
+\end{itemize}
+
+May 6th 1996, Version 1.6
+
+\begin{itemize}\itemsep=0pt
+\item Added panel editing in addition to dialog box editing.
+\item Cured some bugs with changing window styles such as wxUSER\_COLOURS and label position.
+\item Now preserves syntax of bitmap resources in wxr files.
+\end{itemize}
+
+March 1996, Version 1.5
+
+\begin{itemize}\itemsep=0pt
+\item Changed behaviour of New tool, and changed File menu to include New project and New dialog items.
+Behaviour should be more standard now.
+\end{itemize}
+
+March 1st 1996, Version 1.4
+
+\begin{itemize}\itemsep=0pt
+\item Items (but not dialogs) can now have duplicate names.
+\item Can pass a filename to the program from the command line.
+\item Cured bizarre error caused by a Windows combobox sending
+a fake left-mouse-up error when losing the focus (switching to another
+window). This fix will be in wxWindows 1.66.
+\item Rewritten code to use only the new type system, and to take account of
+of new window style partitioning (flags for different items may have the same value).
+Again, wxWindows 1.66 will have the new style values, to make room for more window
+styles.
+\end{itemize}
+
+January 28th 1996, Version 1.2
+
+\begin{itemize}\itemsep=0pt
+\item Now starts off in non-user-colour mode under Windows
+\item Dragging item drags other selected items
+\item wxMessage saves size correctly, if used in conjunction with wxWin 1.66
+\end{itemize}
+
+January 19th 1996, Version 1.1
+
+\begin{itemize}\itemsep=0pt
+\item Cured crash bug when quitting dialog window
+\item Added Clear menu item
+\item Added window type name to property window
+\end{itemize}
+
+December 19th 1995, Version 1.0
+
+\begin{itemize}\itemsep=0pt
+\item First release.
+\end{itemize}
+
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: check.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030103010c00040101020000
+820003010301010008010100040101020000
+820003010301830001000105018300010001030101020000
+82000301030181000182010001030181000182010001030101020000
+820003010301810001010181000101018100010101810001030101020000
+820003010301810001020183000100010201810001030101020000
+82000301030181000103018100010301810001030101020000
+820003010301810001020183000100010201810001030101020000
+820003010301810001010181000101018100010101810001030101020000
+82000301030181000182010001030181000182010001030101020000
+820003010301830001000105018300010001030101020000
+820003010301010008010100040101020000
+8200030103010c00040101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 18.88% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: choice.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003018101001200810102810200
+82000301820100010a01010002010100810102810200
+82000301820100010a0102008101000100810102810200
+82000301820100010a010600810102810200
+820003018101001200810102810200
+8200030101018100010901810001030182000102810200
+8200030101018100010901810001820100018301000102810200
+82000301010182000100050002018200010001008301000102810200
+8200030101018100010901810001030182000102810200
+8200030101018100010901810001030182000102810200
+8200030101018200010007008101000500810102810200
+8200030101018100010901810001030182000102810200
+8200030101018100010901810001030182000102810200
+82000301010182000100060001018200010001008301000102810200
+8200030101018100010901810001820100018301000102810200
+8200030101018100010901810001030182000102810200
+8200030101011200810102810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 20.11% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\chapter{Alphabetical class reference}\label{classref}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+To be written.
+
+\begin{comment}
+
+\overview{Property classes overview}{propertyoverview}
+
+
+\section{\class{wxBoolFormValidator}: wxPropertyFormValidator}\label{wxboolformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a boolean value for a form view. The associated panel item must be a wxCheckBox.
+
+\membersection{wxBoolFormValidator::wxBoolFormValidator}
+
+\func{void}{wxBoolFormValidator}{\param{long }{flags=0}}
+
+Constructor.
+
+\section{\class{wxBoolListValidator}: wxPropertyListValidator}\label{wxboollistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a boolean value for a list view.
+
+\membersection{wxBoolListValidator::wxBoolListValidator}
+
+\func{void}{wxBoolListValidator}{\param{long }{flags=0}}
+
+Constructor.
+
+\section{\class{wxIntegerFormValidator}: wxPropertyFormValidator}\label{wxintegerformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of integer values for a form view. The associated panel item must be a wxText
+or wxSlider.
+
+\membersection{wxIntegerFormValidator::wxIntegerFormValidator}
+
+\func{void}{wxIntegerFormValidator}{\param{long }{min=0}, \param{long }{max=0},
+ \param{long}{ flags=0}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxIntegerListValidator}: wxPropertyListValidator}\label{wxintegerlistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of integer values for a list view.
+
+\membersection{wxIntegerListValidator::wxIntegerListValidator}
+
+\func{void}{wxIntegerListValidator}{\param{long }{min=0}, \param{long }{max=0},
+ \param{long}{ flags=wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+\section{\class{wxFilenameListValidator}: wxPropertyListValidator}\label{wxfilenamelistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a filename for a list view, allowing the user to edit it textually and also popping up
+a file selector in ``detailed editing" mode.
+
+\membersection{wxFilenameListValidator::wxFilenameListValidator}
+
+\func{void}{wxFilenameListValidator}{\param{wxString }{message = ``Select a file"}, \param{wxString }{wildcard = ``*.*"},
+ \param{long}{ flags=0}}
+
+Constructor. Supply an optional message and wildcard.
+
+\section{\class{wxListOfStringsListValidator}: wxPropertyListValidator}\label{wxlistofstringslistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a list of strings for a list view. When editing the property,
+a dialog box is presented for adding, deleting or editing entries in the list.
+At present no constraints may be supplied.
+
+You can construct a string list property value by constructing a wxStringList object.
+
+For example:
+
+\begin{verbatim}
+ myListValidatorRegistry.RegisterValidator((wxString)"stringlist",
+ new wxListOfStringsListValidator);
+
+ wxStringList *strings = new wxStringList("earth", "fire", "wind", "water", NULL);
+
+ sheet->AddProperty(new wxProperty("fred", strings, "stringlist"));
+\end{verbatim}
+
+\membersection{wxListOfStringsListValidator::wxListofStringsListValidator}
+
+\func{void}{wxListOfStringsListValidator}{\param{long}{ flags=0}}
+
+Constructor.
+
+\section{\class{wxProperty}: wxObject}\label{wxproperty}
+
+The {\bf wxProperty} class represents a property, with a \helpref{wxPropertyValue}{wxpropertyvalue}\rtfsp
+containing the actual value, a name a role, an optional validator, and
+an optional associated window.
+
+A property might correspond to an actual C++ data member, or it
+might correspond to a conceptual property, such as the width of a window.
+There is no explicit data member {\it wxWindow::width}, but it may be convenient
+to invent such a property for the purposes of editing attributes of the window.
+The properties in the property sheet can be mapped to ``reality" by
+whatever means (in this case by calling wxWindow::SetSize when the user has
+finished editing the property sheet).
+
+A validator may be associated with the property in order to ensure that this and
+only this validator will be used for editing and validating the property.
+An alternative method is to use the {\it role} parameter to specify what kind
+of validator would be appropriate; for example, specifying ``filename" for the role
+would allow the property view to find an appropriate validator at edit time.
+
+
+\membersection{wxProperty::wxProperty}
+
+\func{void}{wxProperty}{\void}
+
+\func{void}{wxProperty}{\param{wxProperty\& }{prop}}
+
+\func{void}{wxProperty}{\param{wxString}{ name}, \param{wxString}{ role}, \param{wxPropertyValidator *}{validator=NULL}}
+
+\func{void}{wxProperty}{\param{wxString}{ name}, \param{const wxPropertyValue\&}{ val}, \param{wxString}{ role}, \param{wxPropertyValidator *}{validator=NULL}}
+
+Constructors.
+
+\membersection{wxProperty::\destruct{wxProperty}}
+
+\func{void}{\destruct{wxProperty}}{\void}
+
+Destructor. Destroys the wxPropertyValue, and the property validator if there is one. However, if the
+actual C++ value in the wxPropertyValue is a pointer, the data in that variable is not destroyed.
+
+\membersection{wxProperty::GetValue}
+
+\func{wxPropertyValue\&}{GetValue}{\void}
+
+Returns a reference to the property value.
+
+\membersection{wxProperty::GetValidator}
+
+\func{wxPropertyValidator *}{GetValidator}{\void}
+
+Returns a pointer to the associated property validator (if any).
+
+\membersection{wxProperty::GetName}
+
+\func{wxString\&}{GetName}{\void}
+
+Returns the name of the property.
+
+\membersection{wxProperty::GetRole}
+
+\func{wxRole\&}{GetRole}{\void}
+
+Returns the role of the property, to be used when choosing an appropriate validator.
+
+\membersection{wxProperty::GetWindow}
+
+\func{wxWindow *}{GetWindow}{\void}
+
+Returns the window associated with the property (if any).
+
+\membersection{wxProperty::SetValue}
+
+\func{void}{SetValue}{\param{wxPropertyValue\&}{ val}}
+
+Sets the value of the property.
+
+\membersection{wxProperty::SetName}
+
+\func{void}{SetName}{\param{wxString\&}{ name}}
+
+Sets the name of the property.
+
+\membersection{wxProperty::SetRole}
+
+\func{void}{SetRole}{\param{wxString\&}{ role}}
+
+Sets the role of the property.
+
+\membersection{wxProperty::SetValidator}
+
+\func{void}{SetValidator}{\param{wxPropertyValidator *}{validator}}
+
+Sets the validator: this will be deleted when the property is deleted.
+
+\membersection{wxProperty::SetWindow}
+
+\func{void}{SetWindow}{\param{wxWindow *}{win}}
+
+Sets the window associated with the property.
+
+\membersection{wxProperty::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxPropertyValue\&}{ val}}
+
+Assignment operator.
+
+\section{\class{wxPropertyFormValidator}: wxPropertyValidator}\label{wxpropertyformvalidator}
+
+The {\bf wxPropertyFormValidator} abstract class is the root of classes that define validation
+for a wxPropertyFormView.
+
+
+\section{\class{wxPropertyFormDialog}: wxDialogBox}\label{wxpropertyformdialog}
+
+The {\bf wxPropertyFormDialog} class is a prepackaged dialog which can
+be used for viewing a form property sheet. Pass a property form view object, and the dialog
+will pass OnClose and OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyFormDialog::wxPropertyFormDialog}
+
+\func{void}{wxPropertyFormDialog}{\param{wxPropertyFormView *}{view}, \param{wxWindow *}{parent}, \param{char *}{title},
+ \param{Bool}{ modal=FALSE}, \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxDEFAULT\_DIALOG\_STYLE}, \param{char *}{name=``dialogBox"}}
+
+Constructor.
+
+\membersection{wxPropertyFormDialog::\destruct{wxPropertyFormDialog}}
+
+\func{void}{\destruct{wxPropertyFormDialog}}{\void}
+
+Destructor.
+
+
+\section{\class{wxPropertyFormFrame}: wxFrame}\label{wxpropertyformframe}
+
+The {\bf wxPropertyFormFrame} class is a prepackaged frame which can
+be used for viewing a property form. Pass a property form view object, and the frame
+will pass OnClose messages to the view class for processing.
+
+Call Initialize to create the panel and associate the view; override OnCreatePanel
+if you wish to use a panel class other than the default wxPropertyFormPanel.
+
+\membersection{wxPropertyFormFrame::wxPropertyFormFrame}
+
+\func{void}{wxPropertyFormFrame}{\param{wxPropertyFormView *}{view}, \param{wxFrame *}{parent}, \param{char *}{title},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxSDI $\|$ wxDEFAULT\_FRAME}, \param{char *}{name=``frame"}}
+
+Constructor.
+
+\membersection{wxPropertyFormFrame::\destruct{wxPropertyFormFrame}}
+
+\func{void}{\destruct{wxPropertyFormFrame}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormFrame::GetPropertyPanel}
+
+\func{wxPanel *}{GetPropertyPanel}{\void}
+
+Returns the panel associated with the frame.
+
+\membersection{wxPropertyFormFrame::Initialize}
+
+\func{Bool}{Initialize}{\void}
+
+Must be called to create the panel and associate the view with the panel and frame.
+
+\membersection{wxPropertyFormFrame::OnCreatePanel}
+
+\func{wxPanel *}{OnCreatePanel}{\param{wxFrame *}{parent}, \param{wxPropertyFormView *}{view}}
+
+Creates a panel. Override this to create a panel type other than wxPropertyFormPanel.
+
+
+\section{\class{wxPropertyFormPanel}: wxPanel}\label{wxpropertyformpanel}
+
+The {\bf wxPropertyFormPanel} class is a prepackaged panel which can
+be used for viewing a property form. Pass a property form view object, and the panel
+will pass OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyFormPanel::wxPropertyFormPanel}
+
+\func{void}{wxPropertyFormPanel}{\param{wxPropertyFormView *}{view}, \param{wxWindow *}{parent},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=0}, \param{char *}{name=``panel"}}
+
+Constructor.
+
+\membersection{wxPropertyFormPanel::\destruct{wxPropertyFormPanel}}
+
+\func{void}{\destruct{wxPropertyFormPanel}}{\void}
+
+Destructor.
+
+
+
+\section{\class{wxPropertyFormValidator}: wxPropertyValidator}\label{wxpropertyformvalidatir}
+
+\overview{wxPropertyFormValidator overview}{wxpropertyformvalidatoroverview}
+
+The {\bf wxPropertyFormValidator} class defines a base class for form validators. By overriding virtual functions,
+the programmer can create custom behaviour for kinds of property.
+
+\membersection{wxPropertyFormValidator::wxPropertyFormValidator}
+
+\func{void}{wxPropertyFormValidator}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyFormValidator::\destruct{wxPropertyFormValidator}}
+
+\func{void}{\destruct{wxPropertyFormValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormValidator::OnCommand}
+
+\func{Bool}{OnCommand}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}, \param{wxCommandEvent\& }{event}}
+
+Called when the control corresponding to the property receives a command (if not intercepted
+by a callback associated with the actual control).
+
+\membersection{wxPropertyFormValidator::OnCheckValue}
+
+\func{Bool}{OnCheckValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the view checks the property value. The value checked by this validator should be taken from the
+panel item corresponding to the property.
+
+\membersection{wxPropertyFormValidator::OnDisplayValue}
+
+\func{Bool}{OnDisplayValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should display the property value in the appropriate control.
+
+\membersection{wxPropertyFormValidator::OnDoubleClick}
+
+\func{Bool}{OnDoubleClick}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the control corresponding to the property is double clicked (listboxes only).
+
+\membersection{wxPropertyFormValidator::OnRetrieveValue}
+
+\func{Bool}{OnRetrieveValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should do the transfer from the property editing area to the property itself.
+
+
+\section{\class{wxPropertyFormView}: wxPropertyView}\label{wxpropertyformview}
+
+\overview{wxPropertyFormView overview}{wxpropertyformviewoverview}
+
+The {\bf wxPropertyFormView} class shows a wxPropertySheet as a view onto a panel or dialog
+box which has already been created.
+
+\membersection{wxPropertyFormView::wxPropertyFormView}
+
+\func{void}{wxPropertyFormView}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyFormView::\destruct{wxPropertyFormView}}
+
+\func{void}{\destruct{wxPropertyFormView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormView::AssociateNames}\label{wxpropertyformviewassociatenames}
+
+\func{void}{AssociateNames}{\void}
+
+Associates the properties with the controls on the panel. For each panel item, if the
+panel item name is the same as a property name, the two objects will be associated.
+This function should be called manually since the programmer may wish to do the
+association manually.
+
+\membersection{wxPropertyFormView::Check}\label{wxpropertyformviewcheck}
+
+\func{Bool}{Check}{\void}
+
+Checks all properties by calling the appropriate validators; returns FALSE if a validation failed.
+
+\membersection{wxPropertyFormView::GetPanel}\label{wxpropertyformviewgetpanel}
+
+\func{wxPanel *}{GetPanel}{\void}
+
+Returns the panel associated with the view.
+
+\membersection{wxPropertyFormView::GetManagedWindow}\label{wxpropertyformviewgetmanagedwindow}
+
+\func{wxWindow *}{GetManagedWindow}{\void}
+
+Returns the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyFormView::OnOk}\label{wxpropertyformviewonok}
+
+\func{void}{OnOk}{\void}
+
+Virtual function that will be called when the OK button on the physical window is pressed.
+By default, checks and updates the form values, closes and deletes the frame or dialog, then deletes the view.
+
+\membersection{wxPropertyFormView::OnCancel}\label{wxpropertyformviewoncancel}
+
+\func{void}{OnCancel}{\void}
+
+Virtual function that will be called when the Cancel button on the physical window is pressed.
+By default, closes and deletes the frame or dialog, then deletes the view.
+
+\membersection{wxPropertyFormView::OnHelp}\label{wxpropertyformviewonhelp}
+
+\func{void}{OnHelp}{\void}
+
+Virtual function that will be called when the Help button on the physical window is pressed.
+This needs to be overridden by the application for anything interesting to happen.
+
+\membersection{wxPropertyFormView::OnRevert}\label{wxpropertyformviewonrevert}
+
+\func{void}{OnRevert}{\void}
+
+Virtual function that will be called when the Revert button on the physical window is pressed.
+By default transfers the wxProperty values to the panel items (in effect
+undoing any unsaved changes in the items).
+
+\membersection{wxPropertyFormView::OnUpdate}\label{wxpropertyformviewonupdate}
+
+\func{void}{OnUpdate}{\void}
+
+Virtual function that will be called when the Update button on the physical window is pressed.
+By defaults transfers the displayed values to the wxProperty objects.
+
+\membersection{wxPropertyFormView::SetManagedWindow}\label{wxpropertyformviewsetmanagedwindow}
+
+\func{void}{SetManagedWindow}{\param{wxWindow *}{win}}
+
+Sets the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyFormView::TransferToDialog}\label{wxpropertyformviewtransfertodialog}
+
+\func{Bool}{TransferToDialog}{\void}
+
+Transfers property values to the controls in the dialog.
+
+\membersection{wxPropertyFormView::TransferToPropertySheet}\label{wxpropertyformviewtransfertopropertysheet}
+
+\func{Bool}{TransferToPropertySheet}{\void}
+
+Transfers property values from the controls in the dialog to the property sheet.
+
+
+\section{\class{wxPropertyListDialog}: wxDialogBox}\label{wxpropertylistdialog}
+
+The {\bf wxPropertyListDialog} class is a prepackaged dialog which can
+be used for viewing a property list. Pass a property list view object, and the dialog
+will pass OnClose and OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyListDialog::wxPropertyListDialog}
+
+\func{void}{wxPropertyListDialog}{\param{wxPropertyListView *}{view}, \param{wxWindow *}{parent}, \param{char *}{title},
+ \param{Bool}{ modal=FALSE}, \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxDEFAULT\_DIALOG\_STYLE}, \param{char *}{name=``dialogBox"}}
+
+Constructor.
+
+\membersection{wxPropertyListDialog::\destruct{wxPropertyListDialog}}
+
+\func{void}{\destruct{wxPropertyListDialog}}{\void}
+
+Destructor.
+
+
+\section{\class{wxPropertyListFrame}: wxFrame}\label{wxpropertylistframe}
+
+The {\bf wxPropertyListFrame} class is a prepackaged frame which can
+be used for viewing a property list. Pass a property list view object, and the frame
+will pass OnClose messages to the view class for processing.
+
+Call Initialize to create the panel and associate the view; override OnCreatePanel
+if you wish to use a panel class other than the default wxPropertyListPanel.
+
+\membersection{wxPropertyListFrame::wxPropertyListFrame}
+
+\func{void}{wxPropertyListFrame}{\param{wxPropertyListView *}{view}, \param{wxFrame *}{parent}, \param{char *}{title},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxSDI $\|$ wxDEFAULT\_FRAME}, \param{char *}{name=``frame"}}
+
+Constructor.
+
+\membersection{wxPropertyListFrame::\destruct{wxPropertyListFrame}}
+
+\func{void}{\destruct{wxPropertyListFrame}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListFrame::GetPropertyPanel}
+
+\func{wxPanel *}{GetPropertyPanel}{\void}
+
+Returns the panel associated with the frame.
+
+\membersection{wxPropertyListFrame::Initialize}
+
+\func{Bool}{Initialize}{\void}
+
+Must be called to create the panel and associate the view with the panel and frame.
+
+\membersection{wxPropertyListFrame::OnCreatePanel}
+
+\func{wxPanel *}{OnCreatePanel}{\param{wxFrame *}{parent}, \param{wxPropertyListView *}{view}}
+
+Creates a panel. Override this to create a panel type other than wxPropertyListPanel.
+
+
+\section{\class{wxPropertyListPanel}: wxPanel}\label{wxpropertylistpanel}
+
+The {\bf wxPropertyListPanel} class is a prepackaged panel which can
+be used for viewing a property list. Pass a property list view object, and the panel
+will pass OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyListPanel::wxPropertyListPanel}
+
+\func{void}{wxPropertyListPanel}{\param{wxPropertyListView *}{view}, \param{wxWindow *}{parent},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=0}, \param{char *}{name=``panel"}}
+
+Constructor.
+
+\membersection{wxPropertyListPanel::\destruct{wxPropertyListPanel}}
+
+\func{void}{\destruct{wxPropertyListPanel}}{\void}
+
+Destructor.
+
+
+
+
+\section{\class{wxPropertyListValidator}: wxPropertyValidator}\label{wxpropertylistvalidator}
+
+\overview{wxPropertyListValidator overview}{wxpropertylistvalidatoroverview}
+
+The {\bf wxPropertyListValidator} abstract class is the base class for
+deriving validators for property lists.
+
+\membersection{wxPropertyListValidator::wxPropertyListValidator}
+
+\func{void}{wxPropertyListValidator}{\param{long}{ flags = wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor.
+
+\membersection{wxPropertyListValidator::\destruct{wxPropertyListValidator}}
+
+\func{void}{\destruct{wxPropertyListValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListValidator::OnCheckValue}
+
+\func{Bool}{OnCheckValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the Tick (Confirm) button is pressed or focus is list. Return FALSE if the value
+was invalid, which is a signal restores the old value. Return TRUE if the value was valid.
+
+\membersection{wxPropertyListValidator::OnClearControls}
+
+\func{Bool}{OnClearControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Allows the clearing (enabling, disabling) of property list controls, when the focus leaves the current property.
+
+\membersection{wxPropertyListValidator::OnClearDetailControls}
+
+\func{Bool}{OnClearDetailControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the focus is lost, if the validator is in detailed editing mode.
+
+\membersection{wxPropertyListValidator::OnDisplayValue}
+
+\func{Bool}{OnDisplayValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should display the value in the appropriate controls. The default implementation gets the
+textual value from the property and inserts it into the text edit control.
+
+\membersection{wxPropertyListValidator::OnDoubleClick}
+
+\func{Bool}{OnDoubleClick}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is double clicked. Extra functionality can be provided,
+such as cycling through possible values.
+
+\membersection{wxPropertyListValidator::OnEdit}
+
+\func{Bool}{OnEdit}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the Edit (detailed editing) button is pressed. The default implementation
+calls wxPropertyListView::BeginDetailedEditing; a filename validator (for example) overrides
+this function to show the file selector.
+
+\membersection{wxPropertyListValidator::OnPrepareControls}
+
+\func{Bool}{OnPrepareControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called to allow the validator to setup the display, such enabling or disabling buttons, and
+setting the values and selection in the standard listbox control (the one optionally used for displaying
+value options).
+
+\membersection{wxPropertyListValidator::OnPrepareDetailControls}
+
+\func{Bool}{OnPrepareDetailControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is edited `in detail', i.e. when the Edit button is pressed.
+
+\membersection{wxPropertyListValidator::OnRetrieveValue}
+
+\func{Bool}{OnRetrieveValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when Tick (Confirm) is pressed or focus is lost or view wants to update
+the property list. Should do the transfer from the property editing area to the property itself
+
+\membersection{wxPropertyListValidator::OnSelect}
+
+\func{Bool}{OnSelect}{\param{Bool}{ select}, \param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is selected or deselected: typically displays the value
+in the edit control (having chosen a suitable control to display: (non)editable text or listbox).
+
+\membersection{wxPropertyListValidator::OnValueListSelect}
+
+\func{Bool}{OnValueListSelect}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the value listbox is selected. The default behaviour is to copy
+string to text control, and retrieve the value into the property.
+
+
+
+\section{\class{wxPropertyListView}: wxPropertyView}\label{wxpropertylistview}
+
+\overview{wxPropertyListView overview}{wxpropertylistviewoverview}
+
+The {\bf wxPropertyListView} class shows a wxPropertySheet as a Visual Basic-style property list.
+
+\membersection{wxPropertyListView::wxPropertyListView}
+
+\func{void}{wxPropertyListView}{\param{long}{ flags = wxPROP\_BUTTON\_DEFAULT}}
+
+Constructor.
+
+The {\it flags} argument can be a bit list of the following:
+
+\begin{itemize}\itemsep=0pt
+\item wxPROP\_BUTTON\_CLOSE
+\item wxPROP\_BUTTON\_OK
+\item wxPROP\_BUTTON\_CANCEL
+\item wxPROP\_BUTTON\_CHECK\_CROSS
+\item wxPROP\_BUTTON\_HELP
+\item wxPROP\_DYNAMIC\_VALUE\_FIELD
+\item wxPROP\_PULLDOWN
+\end{itemize}
+
+\membersection{wxPropertyListView::\destruct{wxPropertyListView}}
+
+\func{void}{\destruct{wxPropertyListView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListView::AssociatePanel}\label{wxpropertylistviewassociatepanel}
+
+\func{void}{AssociatePanel}{\param{wxPanel *}{panel}}
+
+Associates the window on which the controls will be displayed, with the view (sets an internal pointer to the window).
+
+\membersection{wxPropertyListView::BeginShowingProperty}\label{wxpropertylistviewbeginshowingproperty}
+
+\func{Bool}{BeginShowingProperty}{\param{wxProperty *}{property}}
+
+Finds the appropriate validator and loads the property into the controls, by calling
+wxPropertyValidator::OnPrepareControls and then wxPropertyListView::DisplayProperty.
+
+\membersection{wxPropertyListView::DisplayProperty}\label{wxpropertylistviewdisplayproperty}
+
+\func{Bool}{DisplayProperty}{\param{wxProperty *}{property}}
+
+Calls wxPropertyValidator::OnDisplayValue for the current property's validator. This function
+gets called by wxPropertyListView::BeginShowingProperty, which is in turn called
+from ShowProperty, called by OnPropertySelect, called by the listbox callback when selected.
+
+\membersection{wxPropertyListView::EndShowingProperty}\label{wxpropertylistviewendshowingproperty}
+
+\func{Bool}{EndShowingProperty}{\param{wxProperty *}{property}}
+
+Finds the appropriate validator and unloads the property from the controls, by calling
+wxPropertyListView::RetrieveProperty, wxPropertyValidator::OnClearControls and (if we're in
+detailed editing mdoe) wxPropertyValidator::OnClearDetailControls.
+
+\membersection{wxPropertyListView::GetPanel}\label{wxpropertylistviewgetpanel}
+
+\func{wxPanel *}{GetPanel}{\void}
+
+Returns the panel associated with the view.
+
+\membersection{wxPropertyListView::GetManagedWindow}\label{wxpropertylistviewgetmanagedwindow}
+
+\func{wxWindow *}{GetManagedWindow}{\void}
+
+Returns the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyListView::GetWindowCancelButton}\label{wxpropertylistviewgetwindowcancelbutton}
+
+\func{wxButton *}{GetWindowCancelButton}{\void}
+
+Returns the window cancel button, if any.
+
+\membersection{wxPropertyListView::GetWindowCloseButton}\label{wxpropertylistviewgetwindowclosebutton}
+
+\func{wxButton *}{GetWindowCloseButton}{\void}
+
+Returns the window close or OK button, if any.
+
+\membersection{wxPropertyListView::GetWindowHelpButton}\label{wxpropertylistviewgetwindowhelpbutton}
+
+\func{wxButton *}{GetWindowHelpButton}{\void}
+
+Returns the window help button, if any.
+
+\membersection{wxPropertyListView::SetManagedWindow}\label{wxpropertylistviewsetmanagedwindow}
+
+\func{void}{SetManagedWindow}{\param{wxWindow *}{win}}
+
+Sets the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyListView::UpdatePropertyDisplayInList}\label{wxpropertylistviewupdatepropdisplay}
+
+\func{Bool}{UpdatePropertyDisplayInList}{\param{wxProperty *}{property}}
+
+Updates the display for the given changed property.
+
+\membersection{wxPropertyListView::UpdatePropertyList}\label{wxpropertylistviewupdateproplist}
+
+\func{Bool}{UpdatePropertyList}{\param{Bool }{clearEditArea = TRUE}}
+
+Updates the whole property list display.
+
+
+\section{\class{wxPropertySheet}: wxObject}\label{wxpropertysheet}
+
+\overview{wxPropertySheet overview}{wxpropertysheetoverview}
+
+The {\bf wxPropertySheet} class is used for storing a number of
+wxProperty objects (essentially names and values).
+
+\membersection{wxPropertySheet::wxPropertySheet}
+
+\func{void}{wxPropertySheet}{\void}
+
+Constructor.
+
+\membersection{wxPropertySheet::\destruct{wxPropertySheet}}
+
+\func{void}{\destruct{wxPropertySheet}}{\void}
+
+Destructor. Destroys all contained properties.
+
+\membersection{wxPropertySheet::AddProperty}\label{wxpropertysheetaddproperty}
+
+\func{void}{AddProperty}{\param{wxProperty *}{property}}
+
+Adds a property to the sheet.
+
+\membersection{wxPropertySheet::Clear}\label{wxpropertysheetclear}
+
+\func{void}{Clear}{\void}
+
+Clears all the properties from the sheet (deleting them).
+
+\membersection{wxPropertySheet::GetProperties}\label{wxpropertysheetgetproperties}
+
+\func{wxList\&}{GetProperties}{\void}
+
+Returns a reference to the internal list of properties.
+
+\membersection{wxPropertySheet::GetProperty}\label{wxpropertysheetgetproperty}
+
+\func{wxProperty *}{GetProperty}{\param{char *}{name}}
+
+Gets a property by name.
+
+\membersection{wxPropertySheet::SetAllModified}
+
+\func{void}{SetAllModified}{\param{Bool}{ flag}}
+
+Sets the `modified' flag of each property value.
+
+
+
+\section{\class{wxPropertyValidator}: wxEvtHandler}\label{wxpropertyvalidator}
+
+\overview{wxPropertyValidator overview}{wxpropertyvalidatoroverview}
+
+The {\bf wxPropertyValidator} abstract class is the base class for deriving
+validators for properties.
+
+\membersection{wxPropertyValidator::wxPropertyValidator}
+
+\func{void}{wxPropertyValidator}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyValidator::\destruct{wxPropertyValidator}}
+
+\func{void}{\destruct{wxPropertyValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValidator::GetFlags}
+
+\func{long}{GetFlags}{\void}
+
+Returns the flags for the validator.
+
+\membersection{wxPropertyValidator::GetValidatorProperty}
+
+\func{wxProperty *}{GetValidatorProperty}{\void}
+
+Gets the property for the validator.
+
+\membersection{wxPropertyValidator::SetValidatorProperty}
+
+\func{void}{SetValidatorProperty}{\param{wxProperty *}{property}}
+
+Sets the property for the validator.
+
+
+\section{\class{wxPropertyValidatorRegistry}: wxHashTable}\label{wxpropertyvalidatorregistry}
+
+The {\bf wxPropertyValidatorRegistry} class is used for storing validators,
+indexed by the `role name' of the property, by which groups of property
+can be identified for the purpose of validation and editing.
+
+\membersection{wxPropertyValidatorRegistry::wxPropertyValidatorRegistry}
+
+\func{void}{wxPropertyValidatorRegistry}{\void}
+
+Constructor.
+
+\membersection{wxPropertyValidatorRegistry::\destruct{wxPropertyValidatorRegistry}}
+
+\func{void}{\destruct{wxPropertyValidatorRegistry}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValidatorRegistry::Clear}
+
+\func{void}{ClearRegistry}{\void}
+
+Clears the registry, deleting the validators.
+
+\membersection{wxPropertyValidatorRegistry::GetValidator}
+
+\func{wxPropertyValidator *}{GetValidator}{\param{wxString\& }{roleName}}
+
+Retrieve a validator by the property role name.
+
+\membersection{wxPropertyValidatorRegistry::RegisterValidator}\label{wxpropertyvalidatorregistervalidator}
+
+\func{void}{RegisterValidator}{\param{wxString\& }{roleName}, \param{wxPropertyValidator *}{validator}}
+
+Register a validator with the registry. {\it roleName} is a name indicating the
+role of the property, such as ``filename''. Later, when a validator is chosen for
+editing a property, this role name is matched against the class names of the property,
+if the property does not already have a validator explicitly associated with it.
+
+
+\section{\class{wxPropertyValue}: wxObject}\label{wxpropertyvalue}
+
+The {\bf wxPropertyValue} class represents the value of a property,
+and is normally associated with a wxProperty object.
+
+A wxPropertyValue has one of the following types:
+
+\begin{itemize}\itemsep=0pt
+\item wxPropertyValueNull
+\item wxPropertyValueInteger
+\item wxPropertyValueReal
+\item wxPropertyValueBool
+\item wxPropertyValueString
+\item wxPropertyValueList
+\item wxPropertyValueIntegerPtr
+\item wxPropertyValueRealPtr
+\item wxPropertyValueBoolPtr
+\item wxPropertyValueStringPtr
+\end{itemize}
+
+\membersection{wxPropertyValue::wxPropertyValue}
+
+\func{void}{wxPropertyValue}{\void}
+
+Default constructor.
+
+\func{void}{wxPropertyValue}{\param{const wxPropertyValue\& }{copyFrom}}
+
+Copy constructor.
+
+\func{void}{wxPropertyValue}{\param{char *}{val}}
+
+Construction from a string value.
+
+\func{void}{wxPropertyValue}{\param{long}{ val}}
+
+Construction from an integer value. You may need to cast to (long) to
+avoid confusion with other constructors (such as the Bool constructor).
+
+\func{void}{wxPropertyValue}{\param{Bool}{ val}}
+
+Construction from a boolean value.
+
+\func{void}{wxPropertyValue}{\param{float}{ val}}
+
+Construction from a floating point value.
+
+\func{void}{wxPropertyValue}{\param{double}{ val}}
+
+Construction from a floating point value.
+
+\func{void}{wxPropertyValue}{\param{wxList *}{ val}}
+
+Construction from a list of wxPropertyValue objects. The
+list, but not each contained wxPropertyValue, will be deleted
+by the constructor. The wxPropertyValues will be assigned to
+this wxPropertyValue list. In other words, so do not delete wxList or
+its data after calling this constructor.
+
+\func{void}{wxPropertyValue}{\param{wxStringList *}{ val}}
+
+Construction from a list of strings. The list (including the strings
+contained in it) will be deleted by the constructor, so do not
+destroy {\it val} explicitly.
+
+\func{void}{wxPropertyValue}{\param{char **}{val}}
+
+Construction from a string pointer.
+
+\func{void}{wxPropertyValue}{\param{long *}{val}}
+
+Construction from an integer pointer.
+
+\func{void}{wxPropertyValue}{\param{Bool *}{val}}
+
+Construction from an boolean pointer.
+
+\func{void}{wxPropertyValue}{\param{float *}{val}}
+
+Construction from a floating point pointer.
+
+The last four constructors use pointers to various C++ types, and do not
+store the types themselves; this allows the values to stand in for actual
+data values defined elsewhere.
+
+\membersection{wxPropertyValue::\destruct{wxPropertyValue}}
+
+\func{void}{\destruct{wxPropertyValue}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValue::Append}
+
+\func{void}{Append}{\param{wxPropertyValue *}{expr}}
+
+Appends a property value to the list.
+
+\membersection{wxPropertyValue::BoolValue}
+
+\func{Bool}{BoolValue}{\void}
+
+Returns the boolean value.
+
+\membersection{wxPropertyValue::BoolValuePtr}
+
+\func{Bool *}{BoolValuePtr}{\void}
+
+Returns the pointer to the boolean value.
+
+\membersection{wxPropertyValue::ClearList}
+
+\func{void}{ClearList}{\void}
+
+Deletes the contents of the list.
+
+\membersection{wxPropertyValue::Delete}
+
+\func{void}{Delete}{\param{wxPropertyValue *}{expr}}
+
+Deletes {\it expr} from this list.
+
+\membersection{wxPropertyValue::GetFirst}
+
+\func{wxPropertyValue *}{GetFirst}{\void}
+
+Gets the first value in the list.
+
+\membersection{wxPropertyValue::GetLast}
+
+\func{wxPropertyValue *}{GetFirst}{\void}
+
+Gets the last value in the list.
+
+\membersection{wxPropertyValue::GetModified}
+
+\func{Bool}{GetModified}{\void}
+
+Returns TRUE if the value was modified since being created
+(or since SetModified was called).
+
+\membersection{wxPropertyValue::GetNext}
+
+\func{wxPropertyValue *}{GetNext}{\void}
+
+Gets the next value in the list (the one after `this').
+
+\membersection{wxPropertyValue::GetStringRepresentation}
+
+\func{wxString}{GetStringRepresentation}{\void}
+
+Gets a string representation of the value.
+
+\membersection{wxPropertyValue::IntegerValue}
+
+\func{long}{IntegerValue}{\void}
+
+Returns the integer value.
+
+\membersection{wxPropertyValue::Insert}
+
+\func{void}{Insert}{\param{wxPropertyValue *}{expr}}
+
+Inserts a property value at the front of a list.
+
+\membersection{wxPropertyValue::IntegerValuePtr}
+
+\func{long *}{IntegerValuePtr}{\void}
+
+Returns the pointer to the integer value.
+
+\membersection{wxPropertyValue::Nth}
+
+\func{wxPropertyValue *}{Nth}{\param{int}{ n}}
+
+Returns the nth value of a list expression (starting from zero).
+
+\membersection{wxPropertyValue::Number}
+
+\func{int}{Number}{\void}
+
+Returns the number of elements in a list expression.
+
+\membersection{wxPropertyValue::RealValue}
+
+\func{float}{RealValue}{\void}
+
+Returns the floating point value.
+
+\membersection{wxPropertyValue::RealValuePtr}
+
+\func{float *}{RealValuePtr}{\void}
+
+Returns the pointer to the floating point value.
+
+\membersection{wxPropertyValue::SetModified}
+
+\func{void}{SetModified}{\param{Bool}{ flag}}
+
+Sets the `modified' flag.
+
+\membersection{wxPropertyValue::StringValue}
+
+\func{char *}{StringValue}{\void}
+
+Returns the string value.
+
+\membersection{wxPropertyValue::StringValuePtr}
+
+\func{char **}{StringValuePtr}{\void}
+
+Returns the pointer to the string value.
+
+\membersection{wxPropertyValue::Type}
+
+\func{wxPropertyValueType}{Type}{\void}
+
+Returns the value type.
+
+\membersection{wxPropertyValue::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxPropertyValue\& }{val}}
+
+\func{void}{operator $=$}{\param{const char *}{val}}
+
+\func{void}{operator $=$}{\param{const long }{val}}
+
+\func{void}{operator $=$}{\param{const Bool }{val}}
+
+\func{void}{operator $=$}{\param{const float }{val}}
+
+\func{void}{operator $=$}{\param{const char **}{val}}
+
+\func{void}{operator $=$}{\param{const long *}{val}}
+
+\func{void}{operator $=$}{\param{const Bool *}{val}}
+
+\func{void}{operator $=$}{\param{const float *}{val}}
+
+Assignment operators.
+
+
+
+\section{\class{wxPropertyView}: wxEvtHandler}\label{wxpropertyview}
+
+\overview{wxPropertyView overview}{wxpropertyviewoverview}
+
+The {\bf wxPropertyView} abstract class is the base class for views
+of property sheets, acting as intermediaries between properties and
+actual windows.
+
+\membersection{wxPropertyView::wxPropertyView}
+
+\func{void}{wxPropertyView}{\param{long}{ flags = wxPROP\_BUTTON\_DEFAULT}}
+
+Constructor.
+
+The {\it flags} argument can be a bit list of the following:
+
+\begin{itemize}\itemsep=0pt
+\item wxPROP\_BUTTON\_CLOSE
+\item wxPROP\_BUTTON\_OK
+\item wxPROP\_BUTTON\_CANCEL
+\item wxPROP\_BUTTON\_CHECK\_CROSS
+\item wxPROP\_BUTTON\_HELP
+\item wxPROP\_DYNAMIC\_VALUE\_FIELD
+\item wxPROP\_PULLDOWN
+\end{itemize}
+
+\membersection{wxPropertyView::\destruct{wxPropertyView}}
+
+\func{void}{\destruct{wxPropertyView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyView::AddRegistry}\label{wxpropertyviewaddregistry}
+
+\func{void}{AddRegistry}{\param{wxPropertyValidatorRegistry *}{registry}}
+
+Adds a registry (list of property validators) the view's list of registries, which is initially empty.
+
+\membersection{wxPropertyView::FindPropertyValidator}\label{wxpropertyviewfindpropertyvalidator}
+
+\func{wxPropertyValidator *}{FindPropertyValidator}{\param{wxProperty *}{property}}
+
+Finds the property validator that is most appropriate to this property.
+
+\membersection{wxPropertyView::GetPropertySheet}\label{wxpropertyviewgetpropertysheet}
+
+\func{wxPropertySheet *}{GetPropertySheet}{\void}
+
+Gets the property sheet for this view.
+
+\membersection{wxPropertyView::GetRegistryList}\label{wxpropertyviewgetregistrylist}
+
+\func{wxList\&}{GetRegistryList}{\void}
+
+Returns a reference to the list of property validator registries.
+
+\membersection{wxPropertyView::OnOk}\label{wxpropertyviewonok}
+
+\func{void}{OnOk}{\void}
+
+Virtual function that will be called when the OK button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnCancel}\label{wxpropertyviewoncancel}
+
+\func{void}{OnCancel}{\void}
+
+Virtual function that will be called when the Cancel button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnClose}\label{wxpropertyviewonclose}
+
+\func{Bool}{OnClose}{\void}
+
+Virtual function that will be called when the physical window is closed. The default implementation returns FALSE.
+
+\membersection{wxPropertyView::OnHelp}\label{wxpropertyviewonhelp}
+
+\func{void}{OnHelp}{\void}
+
+Virtual function that will be called when the Help button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnPropertyChanged}\label{wxpropertyviewonpropertychanged}
+
+\func{void}{OnPropertyChanged}{\param{wxProperty *}{property}}
+
+Virtual function called by a view or validator when a property's value changed. Validators
+must be written correctly for this to be called. You can override this function
+to respond immediately to property value changes.
+
+\membersection{wxPropertyView::OnUpdateView}\label{wxpropertyviewonupdateview}
+
+\func{Bool}{OnUpdateView}{\void}
+
+Called by the viewed object to update the view. The default implementation just returns
+FALSE.
+
+\membersection{wxPropertyView::SetPropertySheet}\label{wxpropertyviewsetpropertysheet}
+
+\func{void}{SetPropertySheet}{\param{wxPropertySheet *}{sheet}}
+
+Sets the property sheet for this view.
+
+\membersection{wxPropertyView::ShowView}\label{wxpropertyviewshowview}
+
+\func{void}{ShowView}{\param{wxPropertySheet *}{sheet}, \param{wxPanel *}{panel}}
+
+Associates this view with the given panel, and shows the view.
+
+\section{\class{wxRealFormValidator}: wxPropertyFormValidator}\label{wxrealformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of real values for form views. The associated panel item must be a wxText.
+
+\membersection{wxRealFormValidator::wxRealFormValidator}
+
+\func{void}{wxRealFormValidator}{\param{float }{min=0.0}, \param{float }{max=0.0},
+ \param{long}{ flags=0}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxStringFormValidator}: wxPropertyFormValidator}\label{wxstringformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a string value for a form view, with an optional choice of possible values.
+The associated panel item must be a wxText, wxListBox or wxChoice. For wxListBox and wxChoice items,
+if the item is empty, the validator attempts to initialize the item from the strings in
+the validator. Note that this does not happen for XView wxChoice items since XView cannot reinitialize a wxChoice.
+
+\membersection{wxStringFormValidator::wxStringFormValidator}
+
+\func{void}{wxStringFormValidator}{\param{wxStringList *}{list=NULL}, \param{long}{ flags=0}}
+
+Constructor. Supply a list of strings to indicate a choice, or no strings to allow the
+user to freely edit the string. The string list will be deleted when the validator is deleted.
+
+
+\section{\class{wxRealListValidator}: wxPropertyListValidator}\label{wxreallistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of real values for property lists.
+
+\membersection{wxRealListValidator::wxreallistvalidator}
+
+\func{void}{wxRealListValidator}{\param{float }{min=0.0}, \param{float }{max=0.0},
+ \param{long}{ flags=wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxStringListValidator}: wxPropertyListValidator}\label{wxstringlistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a string value, with an optional choice of possible values.
+
+\membersection{wxStringListValidator::wxStringListValidator}
+
+\func{void}{wxStringListValidator}{\param{wxStringList *}{list=NULL}, \param{long}{ flags=0}}
+
+Constructor. Supply a list of strings to indicate a choice, or no strings to allow the
+user to freely edit the string. The string list will be deleted when the validator is deleted.
+
+
+\chapter{Classes by category}\label{classesbycat}
+
+A classification of property sheet classes by category.
+
+\section{Data classes}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxProperty}{wxproperty}
+\item \helpref{wxPropertyValue}{wxpropertyvalue}
+\item \helpref{wxPropertySheet}{wxpropertysheet}
+\end{itemize}
+
+
+\section{Validator classes}\label{validatorclasses}
+
+Validators check that the values the user has entered for a property are
+valid. They can also define specific ways of entering data, such as a
+file selector for a filename, and they are responsible for transferring
+values between the wxProperty and the physical display.
+
+Base classes:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyValidator}{wxproperty}
+\item \helpref{wxPropertyListValidator}{wxpropertylistvalidator}
+\item \helpref{wxPropertyFormValidator}{wxpropertyformvalidator}
+\end{itemize}
+
+List view validators:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxBoolListValidator}{wxboollistvalidator}
+\item \helpref{wxFilenameListValidator}{wxfilenamelistvalidator}
+\item \helpref{wxIntegerListValidator}{wxintegerlistvalidator}
+\item \helpref{wxListOfStringsListValidator}{wxlistofstringslistvalidator}
+\item \helpref{wxRealListValidator}{wxreallistvalidator}
+\item \helpref{wxStringListValidator}{wxstringlistvalidator}
+\end{itemize}
+
+Form view validators:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxBoolFormValidator}{wxboolformvalidator}
+\item \helpref{wxIntegerFormValidator}{wxintegerformvalidator}
+\item \helpref{wxRealFormValidator}{wxrealformvalidator}
+\item \helpref{wxStringFormValidator}{wxstringformvalidator}
+\end{itemize}
+
+\section{View classes}\label{viewclasses}
+
+View classes mediate between a property sheet and a physical window.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyView}{wxpropertyview}
+\item \helpref{wxPropertyListView}{wxpropertylistview}
+\item \helpref{wxPropertyFormView}{wxpropertyformview}
+\end{itemize}
+
+\section{Window classes}\label{windowclasses}
+
+The class library defines some window classes that can be used as-is with a suitable
+view class and property sheet.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyFormFrame}{wxpropertyformframe}
+\item \helpref{wxPropertyFormDialog}{wxpropertyformdialog}
+\item \helpref{wxPropertyFormPanel}{wxpropertyformpanel}
+\item \helpref{wxPropertyListFrame}{wxpropertylistframe}
+\item \helpref{wxPropertyListDialog}{wxpropertylistdialog}
+\item \helpref{wxPropertyListPanel}{wxpropertylistpanel}
+\end{itemize}
+
+\section{Registry classes}
+
+A validator registry is a list of validators that can be applied to properties in a property sheet.
+There may be one or more registries per property view.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyValidatorRegistry}{wxpropertyvalidatorregistry}
+\end{itemize}
+
+
+\chapter{Topic overviews}\label{overviews}
+
+This chapter contains a selection of topic overviews.
+
+\section{Property classes overview}\label{propertyoverview}
+
+The property classes help a programmer to express relationships between
+data and physical windows, in particular:
+
+\begin{itemize}\itemsep=0pt
+\item the transfer of data to and from the physical controls;
+\item the behaviour of various controls and custom windows for particular
+types of data;
+\item the validation of data, notifying the user when incorrect data is entered,
+or even better, constraining the input so only valid data can be entered.
+\end{itemize}
+
+With a consistent framework, the programmer should be able to use existing
+components and design new ones in a principled manner, to solve many data entry
+requirements.
+
+Each datum is represented in a \helpref{wxProperty}{wxproperty}, which has a name and a value.
+Various C++ types are permitted in the value of a property, and the property can store a pointer
+to the data instead of a copy of the data. A \helpref{wxPropertySheet}{wxpropertysheet} represents a number of these properties.
+
+These two classes are independent from the way in which the data is visually manipulated. To
+mediate between property sheets and windows, the abstract class \helpref{wxPropertyView}{wxpropertyview} is
+available for programmers to derive new kinds of view. One kind of view that is available is the \helpref{wxPropertyListView}{wxpropertylistview},
+which displays the data in a Visual Basic-style list, with a small number of controls for editing
+the currently selected property. Another is \helpref{wxPropertyFormView}{wxpropertyformview} which
+mediates between an existing dialog or panel and the property sheet.
+
+The hard work of mediation is actually performed by validators, which are instances of classes
+derived from \helpref{wxPropertyValidator}{wxpropertyvalidator}. A validator is associated with
+a particular property and is responsible for
+responding to user interface events, and displaying, updating and checking the property value.
+Because a validator's behaviour depends largely on the kind of view being used, there has to be
+a separate hierarchy of validators for each class of view. So for wxPropertyListView, there is
+an abstract class \helpref{wxPropertyListValidator}{wxpropertylistvalidator} from which concrete
+classes are derived, such as \helpref{wxRealListValidator}{wxreallistvalidator} and
+\rtfsp\helpref{wxStringListValidator}{wxstringlistvalidator}.
+
+A validator can be explicitly set for a property, so there is no doubt which validator
+should be used to edit that property. However, it is also possible to define a registry
+of validators, and have the validator chosen on the basis of the {\it role} of the property.
+So a property with a ``filename" role would match the ``filename" validator, which pops
+up a file selector when the user double clicks on the property.
+
+You don't have to define your own frame or window classes: there are some predefined
+that will work with the property list view. See \helpref{Window classes}{windowclasses} for
+further details.
+
+\subsection{Example 1: Property list view}
+
+The following code fragment shows the essentials of creating a registry of
+standard validators, a property sheet containing some properties, and
+a property list view and dialog or frame. RegisterValidators will be
+called on program start, and PropertySheetTest is called in response to a
+menu command.
+
+Note how some properties are created with an explicit reference to
+a validator, and others are provided with a ``role'' which can be matched
+against a validator in the registry.
+
+The interface generated by this test program is shown in the section \helpref{Appearance and
+behaviour of a property list view}{appearance}.
+
+\begin{verbatim}
+void RegisterValidators(void)
+{
+ myListValidatorRegistry.RegisterValidator((wxString)"real", new wxRealListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"string", new wxStringListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolListValidator);
+}
+
+void PropertyListTest(Bool useDialog)
+{
+ wxPropertySheet *sheet = new wxPropertySheet;
+
+ sheet->AddProperty(new wxProperty("fred", 1.0, "real"));
+ sheet->AddProperty(new wxProperty("tough choice", (Bool)TRUE, "bool"));
+ sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerListValidator(-50, 50)));
+ sheet->AddProperty(new wxProperty("bill", 25.0, "real", new wxRealListValidator(0.0, 100.0)));
+ sheet->AddProperty(new wxProperty("julian", "one", "string"));
+ sheet->AddProperty(new wxProperty("bitmap", "none", "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp")));
+ wxStringList *strings = new wxStringList("one", "two", "three", NULL);
+ sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringListValidator(strings)));
+
+ wxPropertyListView *view =
+ new wxPropertyListView(NULL,
+ wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN);
+
+ wxDialogBox *propDialog = NULL;
+ wxPropertyListFrame *propFrame = NULL;
+ if (useDialog)
+ {
+ propDialog = new wxPropertyListDialog(view, NULL, "Property Sheet Test", TRUE, -1, -1, 400, 500);
+ }
+ else
+ {
+ propFrame = new wxPropertyListFrame(view, NULL, "Property Sheet Test", -1, -1, 400, 500);
+ }
+
+ view->AddRegistry(&myListValidatorRegistry);
+
+ if (useDialog)
+ {
+ view->ShowView(sheet, propDialog);
+ propDialog->Centre(wxBOTH);
+ propDialog->Show(TRUE);
+ }
+ else
+ {
+ propFrame->Initialize();
+ view->ShowView(sheet, propFrame->GetPropertyPanel());
+ propFrame->Centre(wxBOTH);
+ propFrame->Show(TRUE);
+ }
+}
+\end{verbatim}
+
+\subsection{Example 2: Property form view}
+
+This example is similar to Example 1, but uses a property form view to
+edit a property sheet using a predefined dialog box.
+
+\begin{verbatim}
+void RegisterValidators(void)
+{
+ myFormValidatorRegistry.RegisterValidator((wxString)"real", new wxRealFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"string", new wxStringFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolFormValidator);
+}
+
+void PropertyFormTest(Bool useDialog)
+{
+ wxPropertySheet *sheet = new wxPropertySheet;
+
+ sheet->AddProperty(new wxProperty("fred", 25.0, "real", new wxRealFormValidator(0.0, 100.0)));
+ sheet->AddProperty(new wxProperty("tough choice", (Bool)TRUE, "bool"));
+ sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerFormValidator(-50, 50)));
+ sheet->AddProperty(new wxProperty("julian", "one", "string"));
+ wxStringList *strings = new wxStringList("one", "two", "three", NULL);
+ sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringFormValidator(strings)));
+
+ wxPropertyFormView *view = new wxPropertyFormView(NULL);
+
+ wxDialogBox *propDialog = NULL;
+ wxPropertyFormFrame *propFrame = NULL;
+ if (useDialog)
+ {
+ propDialog = new wxPropertyFormDialog(view, NULL, "Property Form Test", TRUE, -1, -1, 400, 300);
+ }
+ else
+ {
+ propFrame = new wxPropertyFormFrame(view, NULL, "Property Form Test", -1, -1, 400, 300);
+ propFrame->Initialize();
+ }
+
+ wxPanel *panel = propDialog ? propDialog : propFrame->GetPropertyPanel();
+ panel->SetLabelPosition(wxVERTICAL);
+
+ // Add items to the panel
+
+ (void) new wxButton(panel, (wxFunction)NULL, "OK", -1, -1, -1, -1, 0, "ok");
+ (void) new wxButton(panel, (wxFunction)NULL, "Cancel", -1, -1, 80, -1, 0, "cancel");
+ (void) new wxButton(panel, (wxFunction)NULL, "Update", -1, -1, 80, -1, 0, "update");
+ (void) new wxButton(panel, (wxFunction)NULL, "Revert", -1, -1, -1, -1, 0, "revert");
+ panel->NewLine();
+
+ // The name of this text item matches the "fred" property
+ (void) new wxText(panel, (wxFunction)NULL, "Fred", "", -1, -1, 90, -1, 0, "fred");
+ (void) new wxCheckBox(panel, (wxFunction)NULL, "Yes or no", -1, -1, -1, -1, 0, "tough choice");
+ (void) new wxSlider(panel, (wxFunction)NULL, "Sliding scale", 0, -50, 50, 100, -1, -1, wxHORIZONTAL, "ian");
+ panel->NewLine();
+ (void) new wxListBox(panel, (wxFunction)NULL, "Constrained", wxSINGLE, -1, -1, 100, 90, 0, NULL, 0, "constrained");
+
+ view->AddRegistry(&myFormValidatorRegistry);
+
+ if (useDialog)
+ {
+ view->ShowView(sheet, propDialog);
+ view->AssociateNames();
+ view->TransferToDialog();
+ propDialog->Centre(wxBOTH);
+ propDialog->Show(TRUE);
+ }
+ else
+ {
+ view->ShowView(sheet, propFrame->GetPropertyPanel());
+ view->AssociateNames();
+ view->TransferToDialog();
+ propFrame->Centre(wxBOTH);
+ propFrame->Show(TRUE);
+ }
+}
+\end{verbatim}
+
+\section{Validator classes overview}\label{validatoroverview}
+
+Classes: \helpref{Validator classes}{validatorclasses}
+
+The validator classes provide functionality for mediating between a wxProperty and
+the actual display. There is a separate family of validator classes for each
+class of view, since the differences in user interface for these views implies
+that little common functionality can be shared amongst validators.
+
+\subsection{wxPropertyValidator overview}\label{wxpropertyvalidatoroverview}
+
+Class: \helpref{wxPropertyValidator}{wxpropertyvalidator}
+
+This class is the root of all property validator classes. It contains a small
+amount of common functionality, including functions to convert between
+strings and C++ values.
+
+A validator is notionally an object which sits between a property and its displayed
+value, and checks that the value the user enters is correct, giving an error message
+if the validation fails. In fact, the validator does more than that, and is akin to
+a view class but at a finer level of detail. It is also responsible for
+loading the dialog box control with the value from the property, putting it back
+into the property, preparing special controls for editing the value, and
+may even invoke special dialogs for editing the value in a convenient way.
+
+In a property list dialog, there is quite a lot of scope for supplying custom dialogs,
+such as file or colour selectors. For a form dialog, there is less scope because
+there is no concept of `detailed editing' of a value: one control is associated with
+one property, and there is no provision for invoking further dialogs. The reader
+may like to work out how the form view could be extended to provide some of the
+functionality of the property list!
+
+Validator objects may be associated explictly with a wxProperty, or they may be
+indirectly associated by virtue of a property `kind' that matches validators having
+that kind. In the latter case, such validators are stored in a validator registry
+which is passed to the view before the dialog is shown. If the validator takes
+arguments, such as minimum and maximum values in the case of a wxIntegerListValidator,
+then the validator must be associated explicitly with the property. The validator
+will be deleted when the property is deleted.
+
+\subsection{wxPropertyListValidator overview}\label{wxpropertylistvalidatoroverview}
+
+Class: \helpref{wxPropertyListValidator}{wxpropertylistvalidator}
+
+This class is the abstract base class for property list view validators.
+The list view acts upon a user interface containing a list of properties,
+a text item for direct property value editing, confirm/cancel buttons for the value,
+a pulldown list for making a choice between values, and OK/Cancel/Help buttons
+for the dialog (see \helpref{property list appearance}{appearance}).
+
+By overriding virtual functions, the programmer can create custom
+behaviour for different kinds of property. Custom behaviour can use just the
+available controls on the property list dialog, or the validator can
+invoke custom editors with quite different controls, which pop up in
+`detailed editing' mode.
+
+See the detailed class documentation for the members you should override
+to give your validator appropriate behaviour.
+
+\subsection{wxPropertyFormValidator overview}\label{wxpropertyformvalidatoroverview}
+
+This class is the abstract base class for property form view validators.
+The form view acts upon an existing dialog box or panel, where either the
+panel item names correspond to property names, or the programmer has explicitly
+associated the panel item with the property.
+
+By overriding virtual functions, the programmer determines how
+values are displayed or retrieved, and the checking that the validator does.
+
+See the detailed class documentation for the members you should override
+to give your validator appropriate behaviour.
+
+\section{View classes overview}\label{viewoverview}
+
+Classes: \helpref{View classes}{viewclasses}
+
+An instance of a view class relates a property sheet with an actual window.
+Currently, there are two classes of view: wxPropertyListView and wxPropertyFormView.
+
+\subsection{wxPropertyView overview}\label{wxpropertyviewoverview}
+
+Class: \helpref{wxPropertyView}{wxpropertyview}
+
+This is the abstract base class for property views.
+
+\subsection{wxPropertyListView overview}\label{wxpropertylistviewoverview}
+
+Class: \helpref{wxPropertyListView}{wxpropertylistview}
+
+The property list view defines the relationship between a property sheet and
+a property list dialog or panel. It manages user interface events such as
+clicking on a property, pressing return in the text edit field, and clicking
+on Confirm or Cancel. These events cause member functions of the
+class to be called, and these in turn may call member functions of
+the appropriate validator to be called, to prepare controls, check the property value,
+invoke detailed editing, etc.
+
+\subsection{wxPropertyFormView overview}\label{wxpropertyformviewoverview}
+
+Class: \helpref{wxPropertyFormView}{wxpropertyformview}
+
+The property form view manages the relationship between a property sheet
+and an existing dialog or panel.
+
+You must first create a panel or dialog box for the view to work on.
+The panel should contain panel items with names that correspond to
+properties in your property sheet; or you can explicitly set the
+panel item for each property.
+
+Apart from any custom panel items that you wish to control independently
+of the property-editing items, wxPropertyFormView takes over the
+processing of item events. It can also control normal dialog behaviour such
+as OK, Cancel, so you should also create some standard buttons that the property view
+can recognise. Just create the buttons with standard names and the view
+will do the rest. The following button names are recognised:
+
+\begin{itemize}\itemsep=0pt
+\item {\bf ok}: indicates the OK button. Calls wxPropertyFormView::OnOk. By default,
+checks and updates the form values, closes and deletes the frame or dialog, then deletes the view.
+\item {\bf cancel}: indicates the Cancel button. Calls wxPropertyFormView::OnCancel. By default,
+closes and deletes the frame or dialog, then deletes the view.
+\item {\bf help}: indicates the Help button. Calls wxPropertyFormView::OnHelp. This needs
+to be overridden by the application for anything interesting to happen.
+\item {\bf revert}: indicates the Revert button. Calls wxPropertyFormView::OnRevert,
+which by default transfers the wxProperty values to the panel items (in effect
+undoing any unsaved changes in the items).
+\item {\bf update}: indicates the Revert button. Calls wxPropertyFormView::OnUpdate, which
+by defaults transfers the displayed values to the wxProperty objects.
+\end{itemize}
+
+\section{wxPropertySheet overview}\label{wxpropertysheetoverview}
+
+Classes: \helpref{wxPropertySheet}{wxpropertysheet}, \helpref{wxProperty}{wxproperty}, \helpref{wxPropertyValue}{wxpropertyvalue}
+
+A property sheet defines zero or more properties. This is a bit like an explicit representation of
+a C++ object. wxProperty objects can have values which are pointers to C++ values, or they
+can allocate their own storage for values.
+
+Because the property sheet representation is explicit and can be manipulated by
+a program, it is a convenient form to be used for a variety of
+editing purposes. wxPropertyListView and wxPropertyFormView are two classes that
+specify the relationship between a property sheet and a user interface. You could imagine
+other uses for wxPropertySheet, for example to generate a form-like user interface without
+the need for GUI programming. Or for storing the names and values of command-line switches, with the
+option to subsequently edit these values using a wxPropertyListView.
+
+A typical use for a property sheet is to represent values of an object
+which are only implicit in the current representation of it. For
+example, in Visual Basic and similar programming environments, you can
+`edit a button', or rather, edit the button's properties. One of the
+properties you can edit is {\it width} - but there is no explicit
+representation of width in a wxWindows button; instead, you call SetSize
+and GetSize members. To translate this into a consisent,
+property-oriented scheme, we could derive a new class
+wxButtonWithProperties, which has two new functions: SetProperty and
+GetProperty. SetProperty accepts a property name and a value, and calls
+an appropriate function for the property that is being passed.
+GetProperty accepts a property name, returning a property value. So
+instead of having to use the usual arbitrary set of C++ member functions
+to set or access attributes of a window, programmer deals merely with
+SetValue/GetValue, and property names and values.
+We now have a single point at which we can modify or query an object by specifying
+names and values at run-time. (The implementation of SetProperty and GetProperty
+is probably quite messy and involves a large if-then-else statement to
+test the property name and act accordingly.)
+
+When the user invokes the property editor for a wxButtonWithProperties, the system
+creates a wxPropertySheet with `imaginary' properties such as width, height, font size
+and so on. For each property, wxButtonWithProperties::GetProperty is called, and the result is
+passed to the corresponding wxProperty. The wxPropertySheet is passed to a wxPropertyListView
+as described elsewhere, and the user edits away. When the user has finished editing, the system calls
+wxButtonWithProperties::SetProperty to transfer the wxProperty value back into the button
+by way of an appropriate call, wxWindow::SetSize in the case of width and height properties.
+
+\end{comment}
\ No newline at end of file
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: copysize.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+090081010001000101
+810002060281000101018100010001
+810002060281000101018100010001
+8100020602820001000300
+810002060281000181010001000001
+090002018100010001
+0f01
+03018b000100010001000100010001
+0f01
+0301810001810100040082010001
+060181000202028100010101
+0301810001810100040082010001
+0f01
+03018b000100010001000100010001
+
+%
+% Compression made this file 21.11% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: dialog.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 15 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 bf0000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81030018000003
+8100041704810300
+82000402150201030000
+820004028102011101010201030000
+8200040294020100010001000100010001000100010001000102810203810300
+820004028102011001810002810203810300
+82000402820200020f02810002810203810300
+82000402820200020f02810002810203810300
+82000402820200028102000b000102810002810203810300
+820004028202000282020004090481000282020002810203810300
+820004028202000282020004090481000282020002810203810300
+820004028202000282020004090481000282020002810203810300
+82000402820200028102000b000102810002810203810300
+82000402820200020f02810002810203810300
+82000402820200020f02810002810203810300
+82000402820200020f02810002810203810300
+8200040283020002000500810200050082020002810203810300
+820004028402000200030303830002000303038300020002810203810300
+820004028402000200030303830002000303038300020002810203810300
+8200040283020002000500810200050082020002810203810300
+82000402820200020f02810002810203810300
+820004028102001100010201030000
+82000402150201030000
+82000402150201030000
+82000402150201030000
+8200040317030000
+81000318030000
+81030018000003
+
+%
+% Compression made this file 21.77% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+[OPTIONS]
+BMROOT=d:\wx2\utils\dialoged\docs ; Assume that bitmaps are where the source is
+TITLE=Dialog Editor Manual
+CONTENTS=Contents
+COMPRESS=HIGH
+
+[FILES]
+dialoged.rtf
+
+[CONFIG]
+CreateButton("Up", "&Up", "JumpId(`dialoged.hlp', `Contents')")
+BrowseButtons()
+
+[MAP]
+
+[BITMAPS]
+
--- /dev/null
+\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
+\latexonly{\newcommand{\icon}[2]{\image{1cm;0cm}{#1}}}
+\input psbox.tex
+% Remove this for processing with dvi2ps instead of dvips
+%\special{!/@scaleunit 1 def}
+\parskip=10pt
+\parindent=0pt
+\title{User Manual for wxWindows Dialog Editor Version 1.7}
+\winhelponly{\author{by Julian Smart, A.I. Applications Institute, University of Edinburgh\\}}
+\winhelpignore{\author{Julian Smart\\Artificial Intelligence Applications Institute\\
+University of Edinburgh\\EH1 1HN}
+\date{March 1997}
+}
+\makeindex
+\begin{document}
+\maketitle
+\pagestyle{fancyplain}
+\bibliographystyle{plain}
+\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter*{Copyright notice}
+\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\begin{center}
+Copyright (c) 1996 Artificial Intelligence Applications Institute,
+The University of Edinburgh\\
+\end{center}
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose is hereby granted without fee, provided that the
+above copyright notice, author statement and this permission notice appear in
+all copies of this software and related documentation.
+
+THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
+IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL THE ARTIFICIAL INTELLIGENCE APPLICATIONS INSTITUTE OR THE
+UNIVERSITY OF EDINBURGH BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF
+DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+\input{body.tex}
+\input{classes.tex}
+\input{changes.tex}
+\input{bugs.tex}
+\input{tech.tex}
+
+\newpage
+
+\addcontentsline{toc}{chapter}{Index}
+\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\printindex
+\end{document}
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: gauge.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 15 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 bf0000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81030018000003
+8100041704810300
+82000402150201030000
+82000402150201030000
+8200040204020a00050201030000
+8200040204028100020702810002040201030000
+8200040204028100020702810002040201030000
+8200040204028100020702810002040201030000
+8200040204028100020702810002040201030000
+8200040204028100020702810002040201030000
+8200040204028100020702810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204028100010701810002040201030000
+8200040204020a00050201030000
+82000402150201030000
+82000402150201030000
+8200040317030000
+81000318030000
+81030018000003
+
+%
+% Compression made this file 18.92% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: group.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 292 382 320 410
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+292 382 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+820003010301880001000100010001000100060101020000
+82000301040181000184010001000182010001060101020000
+820003018101008100018201000101018100018201000101010300010101020000
+82000301820100018401000100018201000181010001000301810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+82000301820100010f01810001810102810200
+820003018101001100010101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 20.15% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: help.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 008080 c0c0c0
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f02
+040205000402
+0302810001030101000302
+02028100018101000100010101000202
+02028200010081000283020001008100020102
+02028200010083000200018101008100020102
+03020100820200018101008100020202
+05028100018101008100020302
+0502820001008100020402
+0502820001008100020402
+0502820001008100020402
+060201000602
+05028100018101008100020302
+05028100018101008100020302
+060202000502
+
+%
+% Compression made this file 24.03% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: horiz.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+050104000401
+050181000201028100010301
+050181000201028100010301
+050181000201028100010301
+050104000401
+0f01
+0f01
+02010a000101
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+02010a000101
+0f01
+
+%
+% Compression made this file 16.11% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: listbox.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 292 382 320 410
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+292 382 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003018101001100010101020000
+820003018201000109018100010301810001810102810200
+820003018201000109018100018201000182010001810102810200
+8200030183010001000500020182000100010082010001810102810200
+820003018201000109018100010301810001810102810200
+820003018201000109018100010301810001810102810200
+82000301830100010007008101000500010101020000
+820003018201000109018100010301810001810102810200
+820003018201000109018100010301810001810102810200
+8200030183010001000600010182000100010082010001810102810200
+820003018201000109018100018201000182010001810102810200
+820003018201000109018100010301810001810102810200
+820003018101001100010101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 5.09% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: load.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 15 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 808000 c0c0c0 ffff00 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f02
+090202000202
+0802810002010282000200
+0d020100
+0102020007020200
+8502000304030005000302
+8c020004030403040304030400020202
+8c020003040304030403040300020202
+86020004030403000800
+860200030403000107010000
+82020004820400010701810002
+84020003000107018100020002
+81020081000107018100020102
+81020009000302
+0f02
+
+%
+% Compression made this file 20.00% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: message.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003010901810001090101020000
+8200030108010200090101020000
+8200030108010200090101020000
+820003010701820001000100080101020000
+820003010701820001000100080101020000
+82000301060181000101010200070101020000
+82000301060181000101010200070101020000
+82000301050181000103010200060101020000
+8200030105010800060101020000
+82000301040181000105010200050101020000
+82000301040181000105010200050101020000
+82000301030181000107010200040101020000
+820003010201010008010300030101020000
+820003010101030006010500020101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 15.73% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: mtext.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003018101001200810102810200
+820003018201000105018100010601010382000102810200
+82000301820100010101010001018100010601010382000102810200
+8200030182010001020181000181010002000401010282000102810200
+820003018201000181010001000101810001820100010301010282000102810200
+820003018201000184010001000182010001820100010301010282000102810200
+8200030182010001810100010081010003000401010282000102810200
+82000301820100010e01010282000102810200
+820003018201000108018100010301010282000102810200
+820003018201000108018100010301010282000102810200
+82000301820100018101000100010103000401010282000102810200
+8200030182010001820100010201810001820100010301010282000102810200
+8200030182010001820100010201810001820100010301010282000102810200
+82000301820100018101000100010104000301010382000102810200
+82000301820100010e01010382000102810200
+820003018101001200810102810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 22.07% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: new.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+020107000401
+0201810002040201000301
+0201810002040283000200010101
+0201810002040203000101
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+020181000207028100010001
+02010a000101
+0f01
+
+%
+% Compression made this file 20.56% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+
+To do
+-----
+
+Nov 26th 1995
+
+ - Add wxPropertyView::OnPropertyChange(wxProperty *property) member
+ so that when a property is changed, this can be immediately
+ reflected in the object. Derive a new wxPropertyListView
+ in dialoged.
+
+ - Make the property list a modeless dialog or (preferably) resizeable
+ frame. Allow many property lists to be up at once. Associate
+ real window, resource and property list. When window is deleted,
+ delete property list.
+
\ No newline at end of file
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: open.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+090102000201
+0801810001010182000100
+0d010100
+0101020007010200
+82010003010306000301
+8201000307038100010201
+8201000307038100010201
+8201000302030900
+82010003010381000207020000
+82010003820300020702810001
+84010003000281020081000203028100010001
+81010081000207028100010101
+81010009000301
+0f01
+
+%
+% Compression made this file 19.17% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: picture.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003018101001100010101020000
+82000301820100010f01810001810102810200
+82000301820100010201810001040102000201810001810102810200
+8200030182010001010183000100010201810001010181000182010001810102810200
+820003018201000181010083000100010201810001010181000182010001810102810200
+
+82000301880100010001000100010201810001010181000182010001810102810200
+82000301870100010001000100810001020102000201810001810102810200
+820003018a01000100010001000100010701810001810102810200
+8200030182010001820100018401000100010701810001810102810200
+8200030181010002000101820001000900010101020000
+82000301820100010101810001820100010801810001810102810200
+820003018201000101018300010001810100810001810100810001010181000181010281
+0200
+8200030182010001010185000100010001820100010401810001810102810200
+8200030182010001810100020081010003000101010082010001810102810200
+82000301830100010001000c01810001810102810200
+820003018101001100010101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 23.43% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: radio.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030107010400080101020000
+820003010501010004010100060101020000
+8200030104018100010701810001040101020000
+8200030103018100010901810001030101020000
+820003010301810001020102000301810001030101020000
+820003010201810001020104000301810001020101020000
+820003010201810001010106000201810001020101020000
+820003010201810001010106000201810001020101020000
+820003010201810001010106000201810001020101020000
+820003010201810001020104000301810001020101020000
+820003010301810001020102000301810001030101020000
+8200030103018100010901810001030101020000
+8200030104018100010701810001040101020000
+820003010501010004010100060101020000
+8200030107010400080101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 18.24% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+
+Prototype dialog editor and property sheet classes
+--------------------------------------------------
+
+Julian Smart, October 4th 1995
+------------------------------
+
+Here's what I've done so far on a lightweight dialog editor. The 16-bit
+Windows binaries in the bin directory are dialoged.exe (the dialog
+editor) and test.exe (a small property sheet demo).
+
+Main points:
+
+ - You can create a new dialog box and add items to it.
+ - You can move items around, and right-click
+ to edit a few properties (very incomplete).
+ - Can't write out .wxr files yet. Loading code is in
+ wxWindows, but writing code is absent: should be put
+ into wxWindows.
+ - No attempt at resources other than dialogs yet.
+ Should have menu editor too.
+ - Should *somehow* have a protocol to allow
+ existing resources e.g. in wxCLIPS/wxPython
+ to be edited in situ.
+ This should be made simpler by the existance of
+ the plug-in event handler mechanism, which means you
+ can temporarily handle all the events yourself.
+ - See dialoged.cc: the main program is tiny because
+ it's meant to be embeddable.
+ - The wxPropertySheet (set of) classes are very
+ general and should be put into wxWin and documented.
+
+Comments, chivvying and help all appreciated. Maybe if
+I documented what I had, it would be easier for others
+to do some work on it.
+
+Regards,
+
+Julian
\ No newline at end of file
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: save.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+8101000c000001
+84010002000106018300010001
+840100020001060102000001
+84010002000106018300020001
+84010002000106018300020001
+84010002000106018300020001
+84010002000106018300020001
+8201000281020006000102810001
+820100020a02810001
+82010002810200070082020001
+82010002810200040001018300020001
+82010002810200040001018300020001
+82010002810200040001018300020001
+01010c000001
+
+%
+% Compression made this file 24.44% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: scroll.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+83000301001300810102810200
+8400030100010701810001070182000102810200
+8400030100010701810001070182000102810200
+840003010001020181000102018100010201810001020182000102810200
+8400030100010101030001018100018101000200020182000102810200
+840003010001810100030001018100018101000300010182000102810200
+8400030100010101030001018100018101000200020182000102810200
+840003010001020181000102018100010201810001020182000102810200
+8400030100010701810001070182000102810200
+8400030100010701810001070182000102810200
+83000301001300810102810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 17.47% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: slider.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+83000301008100010b0101008101000100810102810200
+82000301820100010c018600010001000102810200
+82000301820100010c018600010001000102810200
+830003010001000b010500810102810200
+82000301150101020000
+83000301001300810102810200
+840003010001020101020c0181000201020000
+840003010001020101000c0181000201020000
+840003010001020101000c0181000201020000
+840003010001020101020c0181000201020000
+8300030100130002020000
+8200030181010215020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 14.88% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\chapter{Technical notes}\label{technotes}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\section{Overview}
+
+The dialog editor is written as a library, to be invoked by other programs. As you can see,
+dialoged.cc is a very small program which invokes the main window via a wxResourceManager
+object. The wxResourceManager object controls the user interface and other aspects
+of the dialog editor.
+
+There is wxResourceTable object in wxResourceManager: this contains a list of
+all the wxItemResources currently being edited. wxResourceTable and wxItemResource
+are classes already in wxWindows, defined in wx\_res.h. In order to edit a new
+dialog box, the dialog is created, and the existing event handler is temporarily replaced
+with a new one which defines editing functionality. This allows existing dialogs - even
+instances of subclasses of wxDialogBox - to be edited, the application-specific functionality
+being temporarily taken over by the dialog editor.
+
+In order to edit the properties of a dialog box or item, a property list editor is invoked.
+This uses the property classes from utils/wxprop. In order to map between properties and the
+actual window API, such as SetSize and GetSize, a `proxy' class called wxPropertyInfo
+has been defined, with a subclass for each class of wxWindows window to be edited.
+This class defines the main members SetProperty, GetProperty, GetPropertyNames,
+which transform the normal API into `property' terms.
+
+Properties are mostly extracted directly from the window being edited. This is
+in contrast with wxBuilder, where everything is stored in a set of parallel
+data structures, and windows `properties' only only set. However, there
+are exceptions to this rule in the dialog editor. There {\it is} in fact a set of
+parallel objects, the wxItemResource objects which can be seen listed in
+the main Dialog Editor window as a dialog is built up. These usually parallel
+the properties in the windows, but occasionally this is not possible. For example,
+all dialog boxes being edited must be modeless: or the user would not be
+able to access other windows. However, the user must be able to specify that
+when used in an application, that dialog box will be modal. In this case,
+the value in the wxItemResource will not match that in the actual dialog box.
+
+There is a major problem with taking values directly from the windows: this
+information sometimes does not match what went in. In Motif and XView,
+size values returned are not the same as those given. This causes speedy
+`degeneration' of window properties. Under Windows, properties are almost
+always consistent. The other platforms will need to be catered for by
+relying more on the wxItemResource objects, and not taking size
+information directly from windows.
+
+\subsection{Dynamic setting versus recreation}
+
+The property editor scheme relies on being able to set window properties
+dynamically: the user changes a value, and the window changes immediately
+to reflect the new value. Unfortunately, not all properties can be
+changed dynamically in wxWindows; for example, in Motif, the label position
+must be given at panel item creation time, because the way the widgets
+are laid out depend on the label position. The label position cannot then
+be changed without deleting and recreating the item.
+
+Hence the dialog editor takes two approaches: where values are dynamically
+settable, this is done. Where they are not, the item is deleted and recreated,
+after all existing values have been transferred into the parallel wxItemResource
+object. Therefore in wx\_rprop.cc, some of the SetProperty implementations have one or
+more call to RecreateWindowFromResource.
+
+\section{Resource associations}
+
+wxItemResource objects (containing information about panel items and dialogs) are not visual
+objects. However, they need to be associated with the visual objects when the latter
+are created for editing purposes. Therefore there is a hash table called resourceAssociations
+in wxResourceManager. When a window is created, the resource pointer and window pointer
+are associated via the hash table. When the window is deleted, the association is removed.
+Children of a dialog are associated with child wxItemResource objects by calling
+wxFindWindowByName with the wxItemResource name.
+
+\section{What needs to be done for XView and Motif}
+
+The following areas need attention before Dialog Editor will run properly on these platforms.
+
+\begin{enumerate}\itemsep=0pt
+\item For XView, the property editor needs to be made a modeless, not modal dialog, which has
+implications for flow of control in wxPropertyInfo::Edit.
+\item Properties which do not return the same value they are set to, such as width and height,
+need to be stored directly in wxItemResource and {\it not} transferred from window to wxItemResource
+in wxWindowPropertyInfo::InstantiateResource.
+\item Properties which cannot be dynamically set in XView or Motif need to have the item recreated (e.g. labelOrientation).
+\end{enumerate}
+
+\section{Files}
+
+The Dialog Editor source files are as follows:
+
+\begin{itemize}\itemsep=0pt
+\item wx\_rprop.h, wx\_rprop.cc: handle property setting and getting through the `proxy' wxPropertyInfo
+classes and using the property list editor from utils/wxprop.
+\item wx\_resed.h, wx\_resed.cc: the main implementation, in particular the wxResourceManager class.
+\item wx\_reswr.cc: resource writing code.
+\item wx\_repal.cc: the dialog editor palette implementation.
+\item dialoged.h, dialoged.cc: small `stub' for invoking the user interface via a wxResourceManager object.
+\end{itemize}
--- /dev/null
+runTwice = yes
+titleFontSize = 12
+authorFontSize = 10
+chapterFontSize = 12
+sectionFontSize = 12
+subsectionFontSize = 12
+headerRule = yes
+footerRule = yes
+useHeadingStyles = yes
+listItemIndent=40
+generateHPJ = yes
+htmlBrowseButtons = bitmap
+winHelpVersion = 3
+winHelpContents = yes
+winHelpTitle = "Dialog Editor Manual"
+truncateFilenames = yes
+\overview [2] { \sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}}
+\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
+\sethotspotcolour{on}\sethotspotunderline{on}}
+\icon [2] {\xlpignore{\image{2cm;0cm}{#1}}\xlponly{#2}}
+
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: text.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 375 282 403
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 375 translate
+
+% size of image (on paper, in 1/72inch coords)
+28 28 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+28 28 8 % dimensions of data
+[28 0 0 -28 0 28] % mapping matrix
+rlecmapimage
+
+81020018000002
+8100031703810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+82000301150101020000
+820003018101001200810102810200
+8200030182010001100182000102810200
+82000301820100010e01840001000102810200
+8200030182010001060101000501840001000102810200
+8200030182010001060101000501840001000102810200
+8200030182010001060101000501840001000102810200
+82000301820100018101000200010104000201840001000102810200
+820003018301000100810001810100820001008100018101008100018501000100010281
+0200
+82000301820100010101030081010081000181010081000185010001000102810200
+820003018201000181010082000100820001008100018101008100018501000100010281
+0200
+820003018301000100810001810100820001008100018101008100018501000100010281
+0200
+820003018301000100810001810100820001008100018101008100018501000100010281
+0200
+8200030182010001810100030081010003000201840001000102810200
+82000301820100010e01840001000102810200
+8200030182010001100182000102810200
+820003018101001200810102810200
+82000301150101020000
+82000301150101020000
+82000301150101020000
+8200030217020000
+81000218020000
+81020018000002
+
+%
+% Compression made this file 22.15% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: toback.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+81010005000701
+8201000203028100010601
+82010002030205000201
+82010002030281000302038100010101
+82010002030281000302038100010101
+82010002030281000302038100010101
+810100050003038100010101
+030181000302030600
+0301810003020381000203020000
+0301810003020381000203020000
+0301050004020000
+080181000203020000
+080181000203020000
+08010600
+0f01
+
+%
+% Compression made this file 21.81% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tofront.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 12 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 808080 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+81010005000701
+8201000203028100010601
+8201000281020007000201
+820100028202000305038100010101
+820100028202000305038100010101
+820100028202000305038100010101
+810100020006038100010101
+030181000305030300
+03018100030503810002810200
+03018100030503810002810200
+0301080001020000
+080181000203020000
+080181000203020000
+08010600
+0f01
+
+%
+% Compression made this file 21.25% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: vert.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 254 389 270 404
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+254 389 translate
+
+% size of image (on paper, in 1/72inch coords)
+16 15 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 9 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 c0c0c0 ffff00
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+16 15 8 % dimensions of data
+[16 0 0 -15 0 15] % mapping matrix
+rlecmapimage
+
+0f01
+07010700
+070181000204020000
+070181000204020000
+8101000300010181000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8201000201028100018201000204020000
+8101000300010181000204020000
+070181000204020000
+070181000204020000
+07010700
+0f01
+0f01
+
+%
+% Compression made this file 20.28% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+\chapter{Introduction}\label{introduction}
+\pagenumbering{arabic}%
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+The Property Sheet Classes help the programmer to specify complex dialogs and
+their relationship with their associated data. By specifying data as a
+wxPropertySheet containing wxProperty objects, the programmer can use
+a range of available or custom wxPropertyView classes to allow the user to
+edit this data. Classes derived from wxPropertyView act as mediators between the
+wxPropertySheet and the actual window (and associated panel items).
+
+For example, the wxPropertyListView is a kind of wxPropertyView which displays
+data in a Visual Basic-style property list (see \helpref{the next section}{appearance} for
+screen shots). This is a listbox containing names and values, with
+an edit control and other optional controls via which the user edits the selected
+data item.
+
+wxPropertyFormView is another kind of wxPropertyView which mediates between
+the data and a panel or dialog box which has already been created. This makes it a contender for
+the replacement of wxForm, since programmer-controlled layout is going to be much more
+satisfactory. If automatic layout is desired, then wxPropertyListView could be used instead.
+
+The main intention of this class library was to provide property {\it list} behaviour, but
+it has been generalised as much as possible so that the concept of a property sheet and its viewers
+can reduce programming effort in a range of user interface tasks.
+
+For further details on the classes and how they are used, please see \helpref{Property classes overview}{propertyoverview}.
+
+\section{The appearance and behaviour of a property list view}\label{appearance}
+
+The property list, as seen in an increasing number of development tools
+such as Visual Basic and Delphi, is a convenient and compact method for
+displaying and editing a number of items without the need for one
+control per item, and without the need for designing a special form. The
+controls are as follows:
+
+\begin{itemize}\itemsep=0pt
+\item A listbox showing the properties and their current values, which has double-click
+properties dependent on the nature of the current property;
+\item a text editing area at the top of the display, allowing the user to edit
+the currently selected property if appropriate;
+\item `confirm' and `cancel' buttons to confirm or cancel an edit (for the property, not the
+whole sheet);
+\item an optional list that appears when the user can make a choice from several known possible values;
+\item a small Edit button to invoke `detailed editing' (perhaps showing or hiding the above value list, or
+maybe invoking a common dialog);
+\item optional OK/Close, Cancel and Help buttons for the whole dialog.
+\end{itemize}
+
+The concept of `detailed editing' versus quick editing gives the user a choice
+of editing mode, so novice and expert behaviour can be catered for, or the user can just
+use what he feels comfortable with.
+
+Behaviour alters depending on the kind of property being edited. For example, a boolean value has
+the following behaviour:
+
+\begin{itemize}\itemsep=0pt
+\item Double-clicking on the item toggles between TRUE and FALSE.
+\item Showing the value list enables the user to select TRUE or FALSE.
+\item The user may be able to type in the word TRUE or FALSE, or the edit control
+may be read-only to disallow this since it is error-prone.
+\end{itemize}
+
+A list of strings may pop up a dialog for editing them, a simple string just allows text editing,
+double-clicking a colour property may show a colour selector, double-clicking on a filename property may
+show a file selector (in addition to being able to type in the name in the edit control), etc.
+
+Note that the `type' of property, such as string or integer, does not
+necessarily determine the behaviour of the property. The programmer has
+to be able to specify different behaviours for the same type, depending
+on the meaning of the property. For example, a colour and a filename may
+both be strings, but their editing behaviour should be different. This
+is why objects of type wxPropertyValidator need to be used, to define
+behaviour for a given class of properties or even specific property
+name. Objects of class wxPropertyView contain a list of property
+registries, which enable reuse of bunches of these validators in
+different circumstances. Or a wxProperty can be explicitly set to use a
+particular validator object.
+
+The following screen shot of the property classes test program shows the
+user editing a string, which is constrained to be one of three possible
+values.
+
+$$\image{8cm;0cm}{prop1.eps}$$\\
+
+The second picture shows the user having entered a integer that
+was outside the range specified to the validator. Note that in this picture,
+the value list is hidden because it is not used when editing an integer.
+
+$$\image{8cm;0cm}{prop2.eps}$$
+
+\chapter{Files}\label{files}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+The property class library comprises the following files:
+
+\begin{itemize}\itemsep=0pt
+\item wx\_prop.h: base property class header
+\item wx\_plist.h: wxPropertyListView and associated classes
+\item wx\_pform.h: wxPropertyListView and associated classes
+\item wx\_prop.cc: base property class implementation
+\item wx\_plist.cc: wxPropertyListView and associated class implementions
+\item wx\_pform.cc: wxPropertyFormView and associated class implementions
+\end{itemize}
--- /dev/null
+\chapter{Change log}\label{changes}
+\pagenumbering{arabic}%
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+November 26th 1995, Version 1.1
+
+\begin{itemize}\itemsep=0pt
+\item Added wxListOfStringsListValidator - allows adding, deleting, editing
+strings.
+\item Added wxPropertyValue::ClearList, wxPropertyValue::Delete,
+wxPropertyValue::wxPropertyValue(wxStringList *).
+\item Added wxPropertyValue::Set/GetModified, wxPropertySheet::SetAllModified.
+\item Added wxPropertyView::OnPropertyChanged support, for immediate feedback.
+\end{itemize}
+
+October 1995, Version 1.0
+
+\begin{itemize}\itemsep=0pt
+\item First release.
+\end{itemize}
+
--- /dev/null
+\chapter{Alphabetical class reference}\label{classref}
+\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\overview{Property classes overview}{propertyoverview}
+
+
+\section{\class{wxBoolFormValidator}: wxPropertyFormValidator}\label{wxboolformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a boolean value for a form view. The associated panel item must be a wxCheckBox.
+
+\membersection{wxBoolFormValidator::wxBoolFormValidator}
+
+\func{void}{wxBoolFormValidator}{\param{long }{flags=0}}
+
+Constructor.
+
+\section{\class{wxBoolListValidator}: wxPropertyListValidator}\label{wxboollistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a boolean value for a list view.
+
+\membersection{wxBoolListValidator::wxBoolListValidator}
+
+\func{void}{wxBoolListValidator}{\param{long }{flags=0}}
+
+Constructor.
+
+\section{\class{wxIntegerFormValidator}: wxPropertyFormValidator}\label{wxintegerformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of integer values for a form view. The associated panel item must be a wxText
+or wxSlider.
+
+\membersection{wxIntegerFormValidator::wxIntegerFormValidator}
+
+\func{void}{wxIntegerFormValidator}{\param{long }{min=0}, \param{long }{max=0},
+ \param{long}{ flags=0}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxIntegerListValidator}: wxPropertyListValidator}\label{wxintegerlistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of integer values for a list view.
+
+\membersection{wxIntegerListValidator::wxIntegerListValidator}
+
+\func{void}{wxIntegerListValidator}{\param{long }{min=0}, \param{long }{max=0},
+ \param{long}{ flags=wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+\section{\class{wxFilenameListValidator}: wxPropertyListValidator}\label{wxfilenamelistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a filename for a list view, allowing the user to edit it textually and also popping up
+a file selector in ``detailed editing" mode.
+
+\membersection{wxFilenameListValidator::wxFilenameListValidator}
+
+\func{void}{wxFilenameListValidator}{\param{wxString }{message = ``Select a file"}, \param{wxString }{wildcard = ``*.*"},
+ \param{long}{ flags=0}}
+
+Constructor. Supply an optional message and wildcard.
+
+\section{\class{wxListOfStringsListValidator}: wxPropertyListValidator}\label{wxlistofstringslistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a list of strings for a list view. When editing the property,
+a dialog box is presented for adding, deleting or editing entries in the list.
+At present no constraints may be supplied.
+
+You can construct a string list property value by constructing a wxStringList object.
+
+For example:
+
+\begin{verbatim}
+ myListValidatorRegistry.RegisterValidator((wxString)"stringlist",
+ new wxListOfStringsListValidator);
+
+ wxStringList *strings = new wxStringList("earth", "fire", "wind", "water", NULL);
+
+ sheet->AddProperty(new wxProperty("fred", strings, "stringlist"));
+\end{verbatim}
+
+\membersection{wxListOfStringsListValidator::wxListofStringsListValidator}
+
+\func{void}{wxListOfStringsListValidator}{\param{long}{ flags=0}}
+
+Constructor.
+
+\section{\class{wxProperty}: wxObject}\label{wxproperty}
+
+The {\bf wxProperty} class represents a property, with a \helpref{wxPropertyValue}{wxpropertyvalue}\rtfsp
+containing the actual value, a name a role, an optional validator, and
+an optional associated window.
+
+A property might correspond to an actual C++ data member, or it
+might correspond to a conceptual property, such as the width of a window.
+There is no explicit data member {\it wxWindow::width}, but it may be convenient
+to invent such a property for the purposes of editing attributes of the window.
+The properties in the property sheet can be mapped to ``reality" by
+whatever means (in this case by calling wxWindow::SetSize when the user has
+finished editing the property sheet).
+
+A validator may be associated with the property in order to ensure that this and
+only this validator will be used for editing and validating the property.
+An alternative method is to use the {\it role} parameter to specify what kind
+of validator would be appropriate; for example, specifying ``filename" for the role
+would allow the property view to find an appropriate validator at edit time.
+
+
+\membersection{wxProperty::wxProperty}
+
+\func{void}{wxProperty}{\void}
+
+\func{void}{wxProperty}{\param{wxProperty\& }{prop}}
+
+\func{void}{wxProperty}{\param{wxString}{ name}, \param{wxString}{ role}, \param{wxPropertyValidator *}{validator=NULL}}
+
+\func{void}{wxProperty}{\param{wxString}{ name}, \param{const wxPropertyValue\&}{ val}, \param{wxString}{ role}, \param{wxPropertyValidator *}{validator=NULL}}
+
+Constructors.
+
+\membersection{wxProperty::\destruct{wxProperty}}
+
+\func{void}{\destruct{wxProperty}}{\void}
+
+Destructor. Destroys the wxPropertyValue, and the property validator if there is one. However, if the
+actual C++ value in the wxPropertyValue is a pointer, the data in that variable is not destroyed.
+
+\membersection{wxProperty::GetValue}
+
+\func{wxPropertyValue\&}{GetValue}{\void}
+
+Returns a reference to the property value.
+
+\membersection{wxProperty::GetValidator}
+
+\func{wxPropertyValidator *}{GetValidator}{\void}
+
+Returns a pointer to the associated property validator (if any).
+
+\membersection{wxProperty::GetName}
+
+\func{wxString\&}{GetName}{\void}
+
+Returns the name of the property.
+
+\membersection{wxProperty::GetRole}
+
+\func{wxRole\&}{GetRole}{\void}
+
+Returns the role of the property, to be used when choosing an appropriate validator.
+
+\membersection{wxProperty::GetWindow}
+
+\func{wxWindow *}{GetWindow}{\void}
+
+Returns the window associated with the property (if any).
+
+\membersection{wxProperty::SetValue}
+
+\func{void}{SetValue}{\param{wxPropertyValue\&}{ val}}
+
+Sets the value of the property.
+
+\membersection{wxProperty::SetName}
+
+\func{void}{SetName}{\param{wxString\&}{ name}}
+
+Sets the name of the property.
+
+\membersection{wxProperty::SetRole}
+
+\func{void}{SetRole}{\param{wxString\&}{ role}}
+
+Sets the role of the property.
+
+\membersection{wxProperty::SetValidator}
+
+\func{void}{SetValidator}{\param{wxPropertyValidator *}{validator}}
+
+Sets the validator: this will be deleted when the property is deleted.
+
+\membersection{wxProperty::SetWindow}
+
+\func{void}{SetWindow}{\param{wxWindow *}{win}}
+
+Sets the window associated with the property.
+
+\membersection{wxProperty::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxPropertyValue\&}{ val}}
+
+Assignment operator.
+
+\section{\class{wxPropertyFormValidator}: wxPropertyValidator}\label{wxpropertyformvalidator}
+
+The {\bf wxPropertyFormValidator} abstract class is the root of classes that define validation
+for a wxPropertyFormView.
+
+
+\section{\class{wxPropertyFormDialog}: wxDialogBox}\label{wxpropertyformdialog}
+
+The {\bf wxPropertyFormDialog} class is a prepackaged dialog which can
+be used for viewing a form property sheet. Pass a property form view object, and the dialog
+will pass OnClose and OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyFormDialog::wxPropertyFormDialog}
+
+\func{void}{wxPropertyFormDialog}{\param{wxPropertyFormView *}{view}, \param{wxWindow *}{parent}, \param{char *}{title},
+ \param{Bool}{ modal=FALSE}, \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxDEFAULT\_DIALOG\_STYLE}, \param{char *}{name=``dialogBox"}}
+
+Constructor.
+
+\membersection{wxPropertyFormDialog::\destruct{wxPropertyFormDialog}}
+
+\func{void}{\destruct{wxPropertyFormDialog}}{\void}
+
+Destructor.
+
+
+\section{\class{wxPropertyFormFrame}: wxFrame}\label{wxpropertyformframe}
+
+The {\bf wxPropertyFormFrame} class is a prepackaged frame which can
+be used for viewing a property form. Pass a property form view object, and the frame
+will pass OnClose messages to the view class for processing.
+
+Call Initialize to create the panel and associate the view; override OnCreatePanel
+if you wish to use a panel class other than the default wxPropertyFormPanel.
+
+\membersection{wxPropertyFormFrame::wxPropertyFormFrame}
+
+\func{void}{wxPropertyFormFrame}{\param{wxPropertyFormView *}{view}, \param{wxFrame *}{parent}, \param{char *}{title},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxSDI $\|$ wxDEFAULT\_FRAME}, \param{char *}{name=``frame"}}
+
+Constructor.
+
+\membersection{wxPropertyFormFrame::\destruct{wxPropertyFormFrame}}
+
+\func{void}{\destruct{wxPropertyFormFrame}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormFrame::GetPropertyPanel}
+
+\func{wxPanel *}{GetPropertyPanel}{\void}
+
+Returns the panel associated with the frame.
+
+\membersection{wxPropertyFormFrame::Initialize}
+
+\func{Bool}{Initialize}{\void}
+
+Must be called to create the panel and associate the view with the panel and frame.
+
+\membersection{wxPropertyFormFrame::OnCreatePanel}
+
+\func{wxPanel *}{OnCreatePanel}{\param{wxFrame *}{parent}, \param{wxPropertyFormView *}{view}}
+
+Creates a panel. Override this to create a panel type other than wxPropertyFormPanel.
+
+
+\section{\class{wxPropertyFormPanel}: wxPanel}\label{wxpropertyformpanel}
+
+The {\bf wxPropertyFormPanel} class is a prepackaged panel which can
+be used for viewing a property form. Pass a property form view object, and the panel
+will pass OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyFormPanel::wxPropertyFormPanel}
+
+\func{void}{wxPropertyFormPanel}{\param{wxPropertyFormView *}{view}, \param{wxWindow *}{parent},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=0}, \param{char *}{name=``panel"}}
+
+Constructor.
+
+\membersection{wxPropertyFormPanel::\destruct{wxPropertyFormPanel}}
+
+\func{void}{\destruct{wxPropertyFormPanel}}{\void}
+
+Destructor.
+
+
+
+\section{\class{wxPropertyFormValidator}: wxPropertyValidator}\label{wxpropertyformvalidatir}
+
+\overview{wxPropertyFormValidator overview}{wxpropertyformvalidatoroverview}
+
+The {\bf wxPropertyFormValidator} class defines a base class for form validators. By overriding virtual functions,
+the programmer can create custom behaviour for kinds of property.
+
+\membersection{wxPropertyFormValidator::wxPropertyFormValidator}
+
+\func{void}{wxPropertyFormValidator}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyFormValidator::\destruct{wxPropertyFormValidator}}
+
+\func{void}{\destruct{wxPropertyFormValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormValidator::OnCommand}
+
+\func{Bool}{OnCommand}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}, \param{wxCommandEvent\& }{event}}
+
+Called when the control corresponding to the property receives a command (if not intercepted
+by a callback associated with the actual control).
+
+\membersection{wxPropertyFormValidator::OnCheckValue}
+
+\func{Bool}{OnCheckValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the view checks the property value. The value checked by this validator should be taken from the
+panel item corresponding to the property.
+
+\membersection{wxPropertyFormValidator::OnDisplayValue}
+
+\func{Bool}{OnDisplayValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should display the property value in the appropriate control.
+
+\membersection{wxPropertyFormValidator::OnDoubleClick}
+
+\func{Bool}{OnDoubleClick}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the control corresponding to the property is double clicked (listboxes only).
+
+\membersection{wxPropertyFormValidator::OnRetrieveValue}
+
+\func{Bool}{OnRetrieveValue}{\param{wxProperty *}{property}, \param{wxPropertyFormView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should do the transfer from the property editing area to the property itself.
+
+
+\section{\class{wxPropertyFormView}: wxPropertyView}\label{wxpropertyformview}
+
+\overview{wxPropertyFormView overview}{wxpropertyformviewoverview}
+
+The {\bf wxPropertyFormView} class shows a wxPropertySheet as a view onto a panel or dialog
+box which has already been created.
+
+\membersection{wxPropertyFormView::wxPropertyFormView}
+
+\func{void}{wxPropertyFormView}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyFormView::\destruct{wxPropertyFormView}}
+
+\func{void}{\destruct{wxPropertyFormView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyFormView::AssociateNames}\label{wxpropertyformviewassociatenames}
+
+\func{void}{AssociateNames}{\void}
+
+Associates the properties with the controls on the panel. For each panel item, if the
+panel item name is the same as a property name, the two objects will be associated.
+This function should be called manually since the programmer may wish to do the
+association manually.
+
+\membersection{wxPropertyFormView::Check}\label{wxpropertyformviewcheck}
+
+\func{Bool}{Check}{\void}
+
+Checks all properties by calling the appropriate validators; returns FALSE if a validation failed.
+
+\membersection{wxPropertyFormView::GetPanel}\label{wxpropertyformviewgetpanel}
+
+\func{wxPanel *}{GetPanel}{\void}
+
+Returns the panel associated with the view.
+
+\membersection{wxPropertyFormView::GetManagedWindow}\label{wxpropertyformviewgetmanagedwindow}
+
+\func{wxWindow *}{GetManagedWindow}{\void}
+
+Returns the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyFormView::OnOk}\label{wxpropertyformviewonok}
+
+\func{void}{OnOk}{\void}
+
+Virtual function that will be called when the OK button on the physical window is pressed.
+By default, checks and updates the form values, closes and deletes the frame or dialog, then deletes the view.
+
+\membersection{wxPropertyFormView::OnCancel}\label{wxpropertyformviewoncancel}
+
+\func{void}{OnCancel}{\void}
+
+Virtual function that will be called when the Cancel button on the physical window is pressed.
+By default, closes and deletes the frame or dialog, then deletes the view.
+
+\membersection{wxPropertyFormView::OnHelp}\label{wxpropertyformviewonhelp}
+
+\func{void}{OnHelp}{\void}
+
+Virtual function that will be called when the Help button on the physical window is pressed.
+This needs to be overridden by the application for anything interesting to happen.
+
+\membersection{wxPropertyFormView::OnRevert}\label{wxpropertyformviewonrevert}
+
+\func{void}{OnRevert}{\void}
+
+Virtual function that will be called when the Revert button on the physical window is pressed.
+By default transfers the wxProperty values to the panel items (in effect
+undoing any unsaved changes in the items).
+
+\membersection{wxPropertyFormView::OnUpdate}\label{wxpropertyformviewonupdate}
+
+\func{void}{OnUpdate}{\void}
+
+Virtual function that will be called when the Update button on the physical window is pressed.
+By defaults transfers the displayed values to the wxProperty objects.
+
+\membersection{wxPropertyFormView::SetManagedWindow}\label{wxpropertyformviewsetmanagedwindow}
+
+\func{void}{SetManagedWindow}{\param{wxWindow *}{win}}
+
+Sets the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyFormView::TransferToDialog}\label{wxpropertyformviewtransfertodialog}
+
+\func{Bool}{TransferToDialog}{\void}
+
+Transfers property values to the controls in the dialog.
+
+\membersection{wxPropertyFormView::TransferToPropertySheet}\label{wxpropertyformviewtransfertopropertysheet}
+
+\func{Bool}{TransferToPropertySheet}{\void}
+
+Transfers property values from the controls in the dialog to the property sheet.
+
+
+\section{\class{wxPropertyListDialog}: wxDialogBox}\label{wxpropertylistdialog}
+
+The {\bf wxPropertyListDialog} class is a prepackaged dialog which can
+be used for viewing a property list. Pass a property list view object, and the dialog
+will pass OnClose and OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyListDialog::wxPropertyListDialog}
+
+\func{void}{wxPropertyListDialog}{\param{wxPropertyListView *}{view}, \param{wxWindow *}{parent}, \param{char *}{title},
+ \param{Bool}{ modal=FALSE}, \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxDEFAULT\_DIALOG\_STYLE}, \param{char *}{name=``dialogBox"}}
+
+Constructor.
+
+\membersection{wxPropertyListDialog::\destruct{wxPropertyListDialog}}
+
+\func{void}{\destruct{wxPropertyListDialog}}{\void}
+
+Destructor.
+
+
+\section{\class{wxPropertyListFrame}: wxFrame}\label{wxpropertylistframe}
+
+The {\bf wxPropertyListFrame} class is a prepackaged frame which can
+be used for viewing a property list. Pass a property list view object, and the frame
+will pass OnClose messages to the view class for processing.
+
+Call Initialize to create the panel and associate the view; override OnCreatePanel
+if you wish to use a panel class other than the default wxPropertyListPanel.
+
+\membersection{wxPropertyListFrame::wxPropertyListFrame}
+
+\func{void}{wxPropertyListFrame}{\param{wxPropertyListView *}{view}, \param{wxFrame *}{parent}, \param{char *}{title},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=wxSDI $\|$ wxDEFAULT\_FRAME}, \param{char *}{name=``frame"}}
+
+Constructor.
+
+\membersection{wxPropertyListFrame::\destruct{wxPropertyListFrame}}
+
+\func{void}{\destruct{wxPropertyListFrame}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListFrame::GetPropertyPanel}
+
+\func{wxPanel *}{GetPropertyPanel}{\void}
+
+Returns the panel associated with the frame.
+
+\membersection{wxPropertyListFrame::Initialize}
+
+\func{Bool}{Initialize}{\void}
+
+Must be called to create the panel and associate the view with the panel and frame.
+
+\membersection{wxPropertyListFrame::OnCreatePanel}
+
+\func{wxPanel *}{OnCreatePanel}{\param{wxFrame *}{parent}, \param{wxPropertyListView *}{view}}
+
+Creates a panel. Override this to create a panel type other than wxPropertyListPanel.
+
+
+\section{\class{wxPropertyListPanel}: wxPanel}\label{wxpropertylistpanel}
+
+The {\bf wxPropertyListPanel} class is a prepackaged panel which can
+be used for viewing a property list. Pass a property list view object, and the panel
+will pass OnDefaultAction listbox messages to the view class for
+processing.
+
+\membersection{wxPropertyListPanel::wxPropertyListPanel}
+
+\func{void}{wxPropertyListPanel}{\param{wxPropertyListView *}{view}, \param{wxWindow *}{parent},
+ \param{int}{ x=-1}, \param{int}{ y=-1}, \param{int}{ width=-1}, \param{int}{height=-1},
+ \param{long}{ style=0}, \param{char *}{name=``panel"}}
+
+Constructor.
+
+\membersection{wxPropertyListPanel::\destruct{wxPropertyListPanel}}
+
+\func{void}{\destruct{wxPropertyListPanel}}{\void}
+
+Destructor.
+
+
+
+
+\section{\class{wxPropertyListValidator}: wxPropertyValidator}\label{wxpropertylistvalidator}
+
+\overview{wxPropertyListValidator overview}{wxpropertylistvalidatoroverview}
+
+The {\bf wxPropertyListValidator} abstract class is the base class for
+deriving validators for property lists.
+
+\membersection{wxPropertyListValidator::wxPropertyListValidator}
+
+\func{void}{wxPropertyListValidator}{\param{long}{ flags = wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor.
+
+\membersection{wxPropertyListValidator::\destruct{wxPropertyListValidator}}
+
+\func{void}{\destruct{wxPropertyListValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListValidator::OnCheckValue}
+
+\func{Bool}{OnCheckValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the Tick (Confirm) button is pressed or focus is list. Return FALSE if the value
+was invalid, which is a signal restores the old value. Return TRUE if the value was valid.
+
+\membersection{wxPropertyListValidator::OnClearControls}
+
+\func{Bool}{OnClearControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Allows the clearing (enabling, disabling) of property list controls, when the focus leaves the current property.
+
+\membersection{wxPropertyListValidator::OnClearDetailControls}
+
+\func{Bool}{OnClearDetailControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the focus is lost, if the validator is in detailed editing mode.
+
+\membersection{wxPropertyListValidator::OnDisplayValue}
+
+\func{Bool}{OnDisplayValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Should display the value in the appropriate controls. The default implementation gets the
+textual value from the property and inserts it into the text edit control.
+
+\membersection{wxPropertyListValidator::OnDoubleClick}
+
+\func{Bool}{OnDoubleClick}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is double clicked. Extra functionality can be provided,
+such as cycling through possible values.
+
+\membersection{wxPropertyListValidator::OnEdit}
+
+\func{Bool}{OnEdit}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the Edit (detailed editing) button is pressed. The default implementation
+calls wxPropertyListView::BeginDetailedEditing; a filename validator (for example) overrides
+this function to show the file selector.
+
+\membersection{wxPropertyListValidator::OnPrepareControls}
+
+\func{Bool}{OnPrepareControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called to allow the validator to setup the display, such enabling or disabling buttons, and
+setting the values and selection in the standard listbox control (the one optionally used for displaying
+value options).
+
+\membersection{wxPropertyListValidator::OnPrepareDetailControls}
+
+\func{Bool}{OnPrepareDetailControls}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is edited `in detail', i.e. when the Edit button is pressed.
+
+\membersection{wxPropertyListValidator::OnRetrieveValue}
+
+\func{Bool}{OnRetrieveValue}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when Tick (Confirm) is pressed or focus is lost or view wants to update
+the property list. Should do the transfer from the property editing area to the property itself
+
+\membersection{wxPropertyListValidator::OnSelect}
+
+\func{Bool}{OnSelect}{\param{Bool}{ select}, \param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the property is selected or deselected: typically displays the value
+in the edit control (having chosen a suitable control to display: (non)editable text or listbox).
+
+\membersection{wxPropertyListValidator::OnValueListSelect}
+
+\func{Bool}{OnValueListSelect}{\param{wxProperty *}{property}, \param{wxPropertyListView *}{view},
+ \param{wxWindow *}{parentWindow}}
+
+Called when the value listbox is selected. The default behaviour is to copy
+string to text control, and retrieve the value into the property.
+
+
+
+\section{\class{wxPropertyListView}: wxPropertyView}\label{wxpropertylistview}
+
+\overview{wxPropertyListView overview}{wxpropertylistviewoverview}
+
+The {\bf wxPropertyListView} class shows a wxPropertySheet as a Visual Basic-style property list.
+
+\membersection{wxPropertyListView::wxPropertyListView}
+
+\func{void}{wxPropertyListView}{\param{long}{ flags = wxPROP\_BUTTON\_DEFAULT}}
+
+Constructor.
+
+The {\it flags} argument can be a bit list of the following:
+
+\begin{itemize}\itemsep=0pt
+\item wxPROP\_BUTTON\_CLOSE
+\item wxPROP\_BUTTON\_OK
+\item wxPROP\_BUTTON\_CANCEL
+\item wxPROP\_BUTTON\_CHECK\_CROSS
+\item wxPROP\_BUTTON\_HELP
+\item wxPROP\_DYNAMIC\_VALUE\_FIELD
+\item wxPROP\_PULLDOWN
+\end{itemize}
+
+\membersection{wxPropertyListView::\destruct{wxPropertyListView}}
+
+\func{void}{\destruct{wxPropertyListView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyListView::AssociatePanel}\label{wxpropertylistviewassociatepanel}
+
+\func{void}{AssociatePanel}{\param{wxPanel *}{panel}}
+
+Associates the window on which the controls will be displayed, with the view (sets an internal pointer to the window).
+
+\membersection{wxPropertyListView::BeginShowingProperty}\label{wxpropertylistviewbeginshowingproperty}
+
+\func{Bool}{BeginShowingProperty}{\param{wxProperty *}{property}}
+
+Finds the appropriate validator and loads the property into the controls, by calling
+wxPropertyValidator::OnPrepareControls and then wxPropertyListView::DisplayProperty.
+
+\membersection{wxPropertyListView::DisplayProperty}\label{wxpropertylistviewdisplayproperty}
+
+\func{Bool}{DisplayProperty}{\param{wxProperty *}{property}}
+
+Calls wxPropertyValidator::OnDisplayValue for the current property's validator. This function
+gets called by wxPropertyListView::BeginShowingProperty, which is in turn called
+from ShowProperty, called by OnPropertySelect, called by the listbox callback when selected.
+
+\membersection{wxPropertyListView::EndShowingProperty}\label{wxpropertylistviewendshowingproperty}
+
+\func{Bool}{EndShowingProperty}{\param{wxProperty *}{property}}
+
+Finds the appropriate validator and unloads the property from the controls, by calling
+wxPropertyListView::RetrieveProperty, wxPropertyValidator::OnClearControls and (if we're in
+detailed editing mdoe) wxPropertyValidator::OnClearDetailControls.
+
+\membersection{wxPropertyListView::GetPanel}\label{wxpropertylistviewgetpanel}
+
+\func{wxPanel *}{GetPanel}{\void}
+
+Returns the panel associated with the view.
+
+\membersection{wxPropertyListView::GetManagedWindow}\label{wxpropertylistviewgetmanagedwindow}
+
+\func{wxWindow *}{GetManagedWindow}{\void}
+
+Returns the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyListView::GetWindowCancelButton}\label{wxpropertylistviewgetwindowcancelbutton}
+
+\func{wxButton *}{GetWindowCancelButton}{\void}
+
+Returns the window cancel button, if any.
+
+\membersection{wxPropertyListView::GetWindowCloseButton}\label{wxpropertylistviewgetwindowclosebutton}
+
+\func{wxButton *}{GetWindowCloseButton}{\void}
+
+Returns the window close or OK button, if any.
+
+\membersection{wxPropertyListView::GetWindowHelpButton}\label{wxpropertylistviewgetwindowhelpbutton}
+
+\func{wxButton *}{GetWindowHelpButton}{\void}
+
+Returns the window help button, if any.
+
+\membersection{wxPropertyListView::SetManagedWindow}\label{wxpropertylistviewsetmanagedwindow}
+
+\func{void}{SetManagedWindow}{\param{wxWindow *}{win}}
+
+Sets the managed window (a frame or dialog) associated with the view.
+
+\membersection{wxPropertyListView::UpdatePropertyDisplayInList}\label{wxpropertylistviewupdatepropdisplay}
+
+\func{Bool}{UpdatePropertyDisplayInList}{\param{wxProperty *}{property}}
+
+Updates the display for the given changed property.
+
+\membersection{wxPropertyListView::UpdatePropertyList}\label{wxpropertylistviewupdateproplist}
+
+\func{Bool}{UpdatePropertyList}{\param{Bool }{clearEditArea = TRUE}}
+
+Updates the whole property list display.
+
+
+\section{\class{wxPropertySheet}: wxObject}\label{wxpropertysheet}
+
+\overview{wxPropertySheet overview}{wxpropertysheetoverview}
+
+The {\bf wxPropertySheet} class is used for storing a number of
+wxProperty objects (essentially names and values).
+
+\membersection{wxPropertySheet::wxPropertySheet}
+
+\func{void}{wxPropertySheet}{\void}
+
+Constructor.
+
+\membersection{wxPropertySheet::\destruct{wxPropertySheet}}
+
+\func{void}{\destruct{wxPropertySheet}}{\void}
+
+Destructor. Destroys all contained properties.
+
+\membersection{wxPropertySheet::AddProperty}\label{wxpropertysheetaddproperty}
+
+\func{void}{AddProperty}{\param{wxProperty *}{property}}
+
+Adds a property to the sheet.
+
+\membersection{wxPropertySheet::Clear}\label{wxpropertysheetclear}
+
+\func{void}{Clear}{\void}
+
+Clears all the properties from the sheet (deleting them).
+
+\membersection{wxPropertySheet::GetProperties}\label{wxpropertysheetgetproperties}
+
+\func{wxList\&}{GetProperties}{\void}
+
+Returns a reference to the internal list of properties.
+
+\membersection{wxPropertySheet::GetProperty}\label{wxpropertysheetgetproperty}
+
+\func{wxProperty *}{GetProperty}{\param{char *}{name}}
+
+Gets a property by name.
+
+\membersection{wxPropertySheet::SetAllModified}
+
+\func{void}{SetAllModified}{\param{Bool}{ flag}}
+
+Sets the `modified' flag of each property value.
+
+
+
+\section{\class{wxPropertyValidator}: wxEvtHandler}\label{wxpropertyvalidator}
+
+\overview{wxPropertyValidator overview}{wxpropertyvalidatoroverview}
+
+The {\bf wxPropertyValidator} abstract class is the base class for deriving
+validators for properties.
+
+\membersection{wxPropertyValidator::wxPropertyValidator}
+
+\func{void}{wxPropertyValidator}{\param{long}{ flags = 0}}
+
+Constructor.
+
+\membersection{wxPropertyValidator::\destruct{wxPropertyValidator}}
+
+\func{void}{\destruct{wxPropertyValidator}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValidator::GetFlags}
+
+\func{long}{GetFlags}{\void}
+
+Returns the flags for the validator.
+
+\membersection{wxPropertyValidator::GetValidatorProperty}
+
+\func{wxProperty *}{GetValidatorProperty}{\void}
+
+Gets the property for the validator.
+
+\membersection{wxPropertyValidator::SetValidatorProperty}
+
+\func{void}{SetValidatorProperty}{\param{wxProperty *}{property}}
+
+Sets the property for the validator.
+
+
+\section{\class{wxPropertyValidatorRegistry}: wxHashTable}\label{wxpropertyvalidatorregistry}
+
+The {\bf wxPropertyValidatorRegistry} class is used for storing validators,
+indexed by the `role name' of the property, by which groups of property
+can be identified for the purpose of validation and editing.
+
+\membersection{wxPropertyValidatorRegistry::wxPropertyValidatorRegistry}
+
+\func{void}{wxPropertyValidatorRegistry}{\void}
+
+Constructor.
+
+\membersection{wxPropertyValidatorRegistry::\destruct{wxPropertyValidatorRegistry}}
+
+\func{void}{\destruct{wxPropertyValidatorRegistry}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValidatorRegistry::Clear}
+
+\func{void}{ClearRegistry}{\void}
+
+Clears the registry, deleting the validators.
+
+\membersection{wxPropertyValidatorRegistry::GetValidator}
+
+\func{wxPropertyValidator *}{GetValidator}{\param{wxString\& }{roleName}}
+
+Retrieve a validator by the property role name.
+
+\membersection{wxPropertyValidatorRegistry::RegisterValidator}\label{wxpropertyvalidatorregistervalidator}
+
+\func{void}{RegisterValidator}{\param{wxString\& }{roleName}, \param{wxPropertyValidator *}{validator}}
+
+Register a validator with the registry. {\it roleName} is a name indicating the
+role of the property, such as ``filename''. Later, when a validator is chosen for
+editing a property, this role name is matched against the class names of the property,
+if the property does not already have a validator explicitly associated with it.
+
+
+\section{\class{wxPropertyValue}: wxObject}\label{wxpropertyvalue}
+
+The {\bf wxPropertyValue} class represents the value of a property,
+and is normally associated with a wxProperty object.
+
+A wxPropertyValue has one of the following types:
+
+\begin{itemize}\itemsep=0pt
+\item wxPropertyValueNull
+\item wxPropertyValueInteger
+\item wxPropertyValueReal
+\item wxPropertyValueBool
+\item wxPropertyValueString
+\item wxPropertyValueList
+\item wxPropertyValueIntegerPtr
+\item wxPropertyValueRealPtr
+\item wxPropertyValueBoolPtr
+\item wxPropertyValueStringPtr
+\end{itemize}
+
+\membersection{wxPropertyValue::wxPropertyValue}
+
+\func{void}{wxPropertyValue}{\void}
+
+Default constructor.
+
+\func{void}{wxPropertyValue}{\param{const wxPropertyValue\& }{copyFrom}}
+
+Copy constructor.
+
+\func{void}{wxPropertyValue}{\param{char *}{val}}
+
+Construction from a string value.
+
+\func{void}{wxPropertyValue}{\param{long}{ val}}
+
+Construction from an integer value. You may need to cast to (long) to
+avoid confusion with other constructors (such as the Bool constructor).
+
+\func{void}{wxPropertyValue}{\param{Bool}{ val}}
+
+Construction from a boolean value.
+
+\func{void}{wxPropertyValue}{\param{float}{ val}}
+
+Construction from a floating point value.
+
+\func{void}{wxPropertyValue}{\param{double}{ val}}
+
+Construction from a floating point value.
+
+\func{void}{wxPropertyValue}{\param{wxList *}{ val}}
+
+Construction from a list of wxPropertyValue objects. The
+list, but not each contained wxPropertyValue, will be deleted
+by the constructor. The wxPropertyValues will be assigned to
+this wxPropertyValue list. In other words, so do not delete wxList or
+its data after calling this constructor.
+
+\func{void}{wxPropertyValue}{\param{wxStringList *}{ val}}
+
+Construction from a list of strings. The list (including the strings
+contained in it) will be deleted by the constructor, so do not
+destroy {\it val} explicitly.
+
+\func{void}{wxPropertyValue}{\param{char **}{val}}
+
+Construction from a string pointer.
+
+\func{void}{wxPropertyValue}{\param{long *}{val}}
+
+Construction from an integer pointer.
+
+\func{void}{wxPropertyValue}{\param{Bool *}{val}}
+
+Construction from an boolean pointer.
+
+\func{void}{wxPropertyValue}{\param{float *}{val}}
+
+Construction from a floating point pointer.
+
+The last four constructors use pointers to various C++ types, and do not
+store the types themselves; this allows the values to stand in for actual
+data values defined elsewhere.
+
+\membersection{wxPropertyValue::\destruct{wxPropertyValue}}
+
+\func{void}{\destruct{wxPropertyValue}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyValue::Append}
+
+\func{void}{Append}{\param{wxPropertyValue *}{expr}}
+
+Appends a property value to the list.
+
+\membersection{wxPropertyValue::BoolValue}
+
+\func{Bool}{BoolValue}{\void}
+
+Returns the boolean value.
+
+\membersection{wxPropertyValue::BoolValuePtr}
+
+\func{Bool *}{BoolValuePtr}{\void}
+
+Returns the pointer to the boolean value.
+
+\membersection{wxPropertyValue::ClearList}
+
+\func{void}{ClearList}{\void}
+
+Deletes the contents of the list.
+
+\membersection{wxPropertyValue::Delete}
+
+\func{void}{Delete}{\param{wxPropertyValue *}{expr}}
+
+Deletes {\it expr} from this list.
+
+\membersection{wxPropertyValue::GetFirst}
+
+\func{wxPropertyValue *}{GetFirst}{\void}
+
+Gets the first value in the list.
+
+\membersection{wxPropertyValue::GetLast}
+
+\func{wxPropertyValue *}{GetFirst}{\void}
+
+Gets the last value in the list.
+
+\membersection{wxPropertyValue::GetModified}
+
+\func{Bool}{GetModified}{\void}
+
+Returns TRUE if the value was modified since being created
+(or since SetModified was called).
+
+\membersection{wxPropertyValue::GetNext}
+
+\func{wxPropertyValue *}{GetNext}{\void}
+
+Gets the next value in the list (the one after `this').
+
+\membersection{wxPropertyValue::GetStringRepresentation}
+
+\func{wxString}{GetStringRepresentation}{\void}
+
+Gets a string representation of the value.
+
+\membersection{wxPropertyValue::IntegerValue}
+
+\func{long}{IntegerValue}{\void}
+
+Returns the integer value.
+
+\membersection{wxPropertyValue::Insert}
+
+\func{void}{Insert}{\param{wxPropertyValue *}{expr}}
+
+Inserts a property value at the front of a list.
+
+\membersection{wxPropertyValue::IntegerValuePtr}
+
+\func{long *}{IntegerValuePtr}{\void}
+
+Returns the pointer to the integer value.
+
+\membersection{wxPropertyValue::Nth}
+
+\func{wxPropertyValue *}{Nth}{\param{int}{ n}}
+
+Returns the nth value of a list expression (starting from zero).
+
+\membersection{wxPropertyValue::Number}
+
+\func{int}{Number}{\void}
+
+Returns the number of elements in a list expression.
+
+\membersection{wxPropertyValue::RealValue}
+
+\func{float}{RealValue}{\void}
+
+Returns the floating point value.
+
+\membersection{wxPropertyValue::RealValuePtr}
+
+\func{float *}{RealValuePtr}{\void}
+
+Returns the pointer to the floating point value.
+
+\membersection{wxPropertyValue::SetModified}
+
+\func{void}{SetModified}{\param{Bool}{ flag}}
+
+Sets the `modified' flag.
+
+\membersection{wxPropertyValue::StringValue}
+
+\func{char *}{StringValue}{\void}
+
+Returns the string value.
+
+\membersection{wxPropertyValue::StringValuePtr}
+
+\func{char **}{StringValuePtr}{\void}
+
+Returns the pointer to the string value.
+
+\membersection{wxPropertyValue::Type}
+
+\func{wxPropertyValueType}{Type}{\void}
+
+Returns the value type.
+
+\membersection{wxPropertyValue::operator $=$}
+
+\func{void}{operator $=$}{\param{const wxPropertyValue\& }{val}}
+
+\func{void}{operator $=$}{\param{const char *}{val}}
+
+\func{void}{operator $=$}{\param{const long }{val}}
+
+\func{void}{operator $=$}{\param{const Bool }{val}}
+
+\func{void}{operator $=$}{\param{const float }{val}}
+
+\func{void}{operator $=$}{\param{const char **}{val}}
+
+\func{void}{operator $=$}{\param{const long *}{val}}
+
+\func{void}{operator $=$}{\param{const Bool *}{val}}
+
+\func{void}{operator $=$}{\param{const float *}{val}}
+
+Assignment operators.
+
+
+
+\section{\class{wxPropertyView}: wxEvtHandler}\label{wxpropertyview}
+
+\overview{wxPropertyView overview}{wxpropertyviewoverview}
+
+The {\bf wxPropertyView} abstract class is the base class for views
+of property sheets, acting as intermediaries between properties and
+actual windows.
+
+\membersection{wxPropertyView::wxPropertyView}
+
+\func{void}{wxPropertyView}{\param{long}{ flags = wxPROP\_BUTTON\_DEFAULT}}
+
+Constructor.
+
+The {\it flags} argument can be a bit list of the following:
+
+\begin{itemize}\itemsep=0pt
+\item wxPROP\_BUTTON\_CLOSE
+\item wxPROP\_BUTTON\_OK
+\item wxPROP\_BUTTON\_CANCEL
+\item wxPROP\_BUTTON\_CHECK\_CROSS
+\item wxPROP\_BUTTON\_HELP
+\item wxPROP\_DYNAMIC\_VALUE\_FIELD
+\item wxPROP\_PULLDOWN
+\end{itemize}
+
+\membersection{wxPropertyView::\destruct{wxPropertyView}}
+
+\func{void}{\destruct{wxPropertyView}}{\void}
+
+Destructor.
+
+\membersection{wxPropertyView::AddRegistry}\label{wxpropertyviewaddregistry}
+
+\func{void}{AddRegistry}{\param{wxPropertyValidatorRegistry *}{registry}}
+
+Adds a registry (list of property validators) the view's list of registries, which is initially empty.
+
+\membersection{wxPropertyView::FindPropertyValidator}\label{wxpropertyviewfindpropertyvalidator}
+
+\func{wxPropertyValidator *}{FindPropertyValidator}{\param{wxProperty *}{property}}
+
+Finds the property validator that is most appropriate to this property.
+
+\membersection{wxPropertyView::GetPropertySheet}\label{wxpropertyviewgetpropertysheet}
+
+\func{wxPropertySheet *}{GetPropertySheet}{\void}
+
+Gets the property sheet for this view.
+
+\membersection{wxPropertyView::GetRegistryList}\label{wxpropertyviewgetregistrylist}
+
+\func{wxList\&}{GetRegistryList}{\void}
+
+Returns a reference to the list of property validator registries.
+
+\membersection{wxPropertyView::OnOk}\label{wxpropertyviewonok}
+
+\func{void}{OnOk}{\void}
+
+Virtual function that will be called when the OK button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnCancel}\label{wxpropertyviewoncancel}
+
+\func{void}{OnCancel}{\void}
+
+Virtual function that will be called when the Cancel button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnClose}\label{wxpropertyviewonclose}
+
+\func{Bool}{OnClose}{\void}
+
+Virtual function that will be called when the physical window is closed. The default implementation returns FALSE.
+
+\membersection{wxPropertyView::OnHelp}\label{wxpropertyviewonhelp}
+
+\func{void}{OnHelp}{\void}
+
+Virtual function that will be called when the Help button on the physical window is pressed (if it exists).
+
+\membersection{wxPropertyView::OnPropertyChanged}\label{wxpropertyviewonpropertychanged}
+
+\func{void}{OnPropertyChanged}{\param{wxProperty *}{property}}
+
+Virtual function called by a view or validator when a property's value changed. Validators
+must be written correctly for this to be called. You can override this function
+to respond immediately to property value changes.
+
+\membersection{wxPropertyView::OnUpdateView}\label{wxpropertyviewonupdateview}
+
+\func{Bool}{OnUpdateView}{\void}
+
+Called by the viewed object to update the view. The default implementation just returns
+FALSE.
+
+\membersection{wxPropertyView::SetPropertySheet}\label{wxpropertyviewsetpropertysheet}
+
+\func{void}{SetPropertySheet}{\param{wxPropertySheet *}{sheet}}
+
+Sets the property sheet for this view.
+
+\membersection{wxPropertyView::ShowView}\label{wxpropertyviewshowview}
+
+\func{void}{ShowView}{\param{wxPropertySheet *}{sheet}, \param{wxPanel *}{panel}}
+
+Associates this view with the given panel, and shows the view.
+
+\section{\class{wxRealFormValidator}: wxPropertyFormValidator}\label{wxrealformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of real values for form views. The associated panel item must be a wxText.
+
+\membersection{wxRealFormValidator::wxRealFormValidator}
+
+\func{void}{wxRealFormValidator}{\param{float }{min=0.0}, \param{float }{max=0.0},
+ \param{long}{ flags=0}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxStringFormValidator}: wxPropertyFormValidator}\label{wxstringformvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a string value for a form view, with an optional choice of possible values.
+The associated panel item must be a wxText, wxListBox or wxChoice. For wxListBox and wxChoice items,
+if the item is empty, the validator attempts to initialize the item from the strings in
+the validator. Note that this does not happen for XView wxChoice items since XView cannot reinitialize a wxChoice.
+
+\membersection{wxStringFormValidator::wxStringFormValidator}
+
+\func{void}{wxStringFormValidator}{\param{wxStringList *}{list=NULL}, \param{long}{ flags=0}}
+
+Constructor. Supply a list of strings to indicate a choice, or no strings to allow the
+user to freely edit the string. The string list will be deleted when the validator is deleted.
+
+
+\section{\class{wxRealListValidator}: wxPropertyListValidator}\label{wxreallistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a range of real values for property lists.
+
+\membersection{wxRealListValidator::wxreallistvalidator}
+
+\func{void}{wxRealListValidator}{\param{float }{min=0.0}, \param{float }{max=0.0},
+ \param{long}{ flags=wxPROP\_ALLOW\_TEXT\_EDITING}}
+
+Constructor. Assigning zero to minimum and maximum values indicates that there is no range to check.
+
+
+\section{\class{wxStringListValidator}: wxPropertyListValidator}\label{wxstringlistvalidator}
+
+\overview{Validator classes}{validatorclasses}
+
+This class validates a string value, with an optional choice of possible values.
+
+\membersection{wxStringListValidator::wxStringListValidator}
+
+\func{void}{wxStringListValidator}{\param{wxStringList *}{list=NULL}, \param{long}{ flags=0}}
+
+Constructor. Supply a list of strings to indicate a choice, or no strings to allow the
+user to freely edit the string. The string list will be deleted when the validator is deleted.
+
+
+\chapter{Classes by category}\label{classesbycat}
+
+A classification of property sheet classes by category.
+
+\section{Data classes}
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxProperty}{wxproperty}
+\item \helpref{wxPropertyValue}{wxpropertyvalue}
+\item \helpref{wxPropertySheet}{wxpropertysheet}
+\end{itemize}
+
+
+\section{Validator classes}\label{validatorclasses}
+
+Validators check that the values the user has entered for a property are
+valid. They can also define specific ways of entering data, such as a
+file selector for a filename, and they are responsible for transferring
+values between the wxProperty and the physical display.
+
+Base classes:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyValidator}{wxproperty}
+\item \helpref{wxPropertyListValidator}{wxpropertylistvalidator}
+\item \helpref{wxPropertyFormValidator}{wxpropertyformvalidator}
+\end{itemize}
+
+List view validators:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxBoolListValidator}{wxboollistvalidator}
+\item \helpref{wxFilenameListValidator}{wxfilenamelistvalidator}
+\item \helpref{wxIntegerListValidator}{wxintegerlistvalidator}
+\item \helpref{wxListOfStringsListValidator}{wxlistofstringslistvalidator}
+\item \helpref{wxRealListValidator}{wxreallistvalidator}
+\item \helpref{wxStringListValidator}{wxstringlistvalidator}
+\end{itemize}
+
+Form view validators:
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxBoolFormValidator}{wxboolformvalidator}
+\item \helpref{wxIntegerFormValidator}{wxintegerformvalidator}
+\item \helpref{wxRealFormValidator}{wxrealformvalidator}
+\item \helpref{wxStringFormValidator}{wxstringformvalidator}
+\end{itemize}
+
+\section{View classes}\label{viewclasses}
+
+View classes mediate between a property sheet and a physical window.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyView}{wxpropertyview}
+\item \helpref{wxPropertyListView}{wxpropertylistview}
+\item \helpref{wxPropertyFormView}{wxpropertyformview}
+\end{itemize}
+
+\section{Window classes}\label{windowclasses}
+
+The class library defines some window classes that can be used as-is with a suitable
+view class and property sheet.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyFormFrame}{wxpropertyformframe}
+\item \helpref{wxPropertyFormDialog}{wxpropertyformdialog}
+\item \helpref{wxPropertyFormPanel}{wxpropertyformpanel}
+\item \helpref{wxPropertyListFrame}{wxpropertylistframe}
+\item \helpref{wxPropertyListDialog}{wxpropertylistdialog}
+\item \helpref{wxPropertyListPanel}{wxpropertylistpanel}
+\end{itemize}
+
+\section{Registry classes}
+
+A validator registry is a list of validators that can be applied to properties in a property sheet.
+There may be one or more registries per property view.
+
+\begin{itemize}\itemsep=0pt
+\item \helpref{wxPropertyValidatorRegistry}{wxpropertyvalidatorregistry}
+\end{itemize}
+
+
+\chapter{Topic overviews}\label{overviews}
+
+This chapter contains a selection of topic overviews.
+
+\section{Property classes overview}\label{propertyoverview}
+
+The property classes help a programmer to express relationships between
+data and physical windows, in particular:
+
+\begin{itemize}\itemsep=0pt
+\item the transfer of data to and from the physical controls;
+\item the behaviour of various controls and custom windows for particular
+types of data;
+\item the validation of data, notifying the user when incorrect data is entered,
+or even better, constraining the input so only valid data can be entered.
+\end{itemize}
+
+With a consistent framework, the programmer should be able to use existing
+components and design new ones in a principled manner, to solve many data entry
+requirements.
+
+Each datum is represented in a \helpref{wxProperty}{wxproperty}, which has a name and a value.
+Various C++ types are permitted in the value of a property, and the property can store a pointer
+to the data instead of a copy of the data. A \helpref{wxPropertySheet}{wxpropertysheet} represents a number of these properties.
+
+These two classes are independent from the way in which the data is visually manipulated. To
+mediate between property sheets and windows, the abstract class \helpref{wxPropertyView}{wxpropertyview} is
+available for programmers to derive new kinds of view. One kind of view that is available is the \helpref{wxPropertyListView}{wxpropertylistview},
+which displays the data in a Visual Basic-style list, with a small number of controls for editing
+the currently selected property. Another is \helpref{wxPropertyFormView}{wxpropertyformview} which
+mediates between an existing dialog or panel and the property sheet.
+
+The hard work of mediation is actually performed by validators, which are instances of classes
+derived from \helpref{wxPropertyValidator}{wxpropertyvalidator}. A validator is associated with
+a particular property and is responsible for
+responding to user interface events, and displaying, updating and checking the property value.
+Because a validator's behaviour depends largely on the kind of view being used, there has to be
+a separate hierarchy of validators for each class of view. So for wxPropertyListView, there is
+an abstract class \helpref{wxPropertyListValidator}{wxpropertylistvalidator} from which concrete
+classes are derived, such as \helpref{wxRealListValidator}{wxreallistvalidator} and
+\rtfsp\helpref{wxStringListValidator}{wxstringlistvalidator}.
+
+A validator can be explicitly set for a property, so there is no doubt which validator
+should be used to edit that property. However, it is also possible to define a registry
+of validators, and have the validator chosen on the basis of the {\it role} of the property.
+So a property with a ``filename" role would match the ``filename" validator, which pops
+up a file selector when the user double clicks on the property.
+
+You don't have to define your own frame or window classes: there are some predefined
+that will work with the property list view. See \helpref{Window classes}{windowclasses} for
+further details.
+
+\subsection{Example 1: Property list view}
+
+The following code fragment shows the essentials of creating a registry of
+standard validators, a property sheet containing some properties, and
+a property list view and dialog or frame. RegisterValidators will be
+called on program start, and PropertySheetTest is called in response to a
+menu command.
+
+Note how some properties are created with an explicit reference to
+a validator, and others are provided with a ``role'' which can be matched
+against a validator in the registry.
+
+The interface generated by this test program is shown in the section \helpref{Appearance and
+behaviour of a property list view}{appearance}.
+
+\begin{verbatim}
+void RegisterValidators(void)
+{
+ myListValidatorRegistry.RegisterValidator((wxString)"real", new wxRealListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"string", new wxStringListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerListValidator);
+ myListValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolListValidator);
+}
+
+void PropertyListTest(Bool useDialog)
+{
+ wxPropertySheet *sheet = new wxPropertySheet;
+
+ sheet->AddProperty(new wxProperty("fred", 1.0, "real"));
+ sheet->AddProperty(new wxProperty("tough choice", (Bool)TRUE, "bool"));
+ sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerListValidator(-50, 50)));
+ sheet->AddProperty(new wxProperty("bill", 25.0, "real", new wxRealListValidator(0.0, 100.0)));
+ sheet->AddProperty(new wxProperty("julian", "one", "string"));
+ sheet->AddProperty(new wxProperty("bitmap", "none", "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp")));
+ wxStringList *strings = new wxStringList("one", "two", "three", NULL);
+ sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringListValidator(strings)));
+
+ wxPropertyListView *view =
+ new wxPropertyListView(NULL,
+ wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN);
+
+ wxDialogBox *propDialog = NULL;
+ wxPropertyListFrame *propFrame = NULL;
+ if (useDialog)
+ {
+ propDialog = new wxPropertyListDialog(view, NULL, "Property Sheet Test", TRUE, -1, -1, 400, 500);
+ }
+ else
+ {
+ propFrame = new wxPropertyListFrame(view, NULL, "Property Sheet Test", -1, -1, 400, 500);
+ }
+
+ view->AddRegistry(&myListValidatorRegistry);
+
+ if (useDialog)
+ {
+ view->ShowView(sheet, propDialog);
+ propDialog->Centre(wxBOTH);
+ propDialog->Show(TRUE);
+ }
+ else
+ {
+ propFrame->Initialize();
+ view->ShowView(sheet, propFrame->GetPropertyPanel());
+ propFrame->Centre(wxBOTH);
+ propFrame->Show(TRUE);
+ }
+}
+\end{verbatim}
+
+\subsection{Example 2: Property form view}
+
+This example is similar to Example 1, but uses a property form view to
+edit a property sheet using a predefined dialog box.
+
+\begin{verbatim}
+void RegisterValidators(void)
+{
+ myFormValidatorRegistry.RegisterValidator((wxString)"real", new wxRealFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"string", new wxStringFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerFormValidator);
+ myFormValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolFormValidator);
+}
+
+void PropertyFormTest(Bool useDialog)
+{
+ wxPropertySheet *sheet = new wxPropertySheet;
+
+ sheet->AddProperty(new wxProperty("fred", 25.0, "real", new wxRealFormValidator(0.0, 100.0)));
+ sheet->AddProperty(new wxProperty("tough choice", (Bool)TRUE, "bool"));
+ sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerFormValidator(-50, 50)));
+ sheet->AddProperty(new wxProperty("julian", "one", "string"));
+ wxStringList *strings = new wxStringList("one", "two", "three", NULL);
+ sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringFormValidator(strings)));
+
+ wxPropertyFormView *view = new wxPropertyFormView(NULL);
+
+ wxDialogBox *propDialog = NULL;
+ wxPropertyFormFrame *propFrame = NULL;
+ if (useDialog)
+ {
+ propDialog = new wxPropertyFormDialog(view, NULL, "Property Form Test", TRUE, -1, -1, 400, 300);
+ }
+ else
+ {
+ propFrame = new wxPropertyFormFrame(view, NULL, "Property Form Test", -1, -1, 400, 300);
+ propFrame->Initialize();
+ }
+
+ wxPanel *panel = propDialog ? propDialog : propFrame->GetPropertyPanel();
+ panel->SetLabelPosition(wxVERTICAL);
+
+ // Add items to the panel
+
+ (void) new wxButton(panel, (wxFunction)NULL, "OK", -1, -1, -1, -1, 0, "ok");
+ (void) new wxButton(panel, (wxFunction)NULL, "Cancel", -1, -1, 80, -1, 0, "cancel");
+ (void) new wxButton(panel, (wxFunction)NULL, "Update", -1, -1, 80, -1, 0, "update");
+ (void) new wxButton(panel, (wxFunction)NULL, "Revert", -1, -1, -1, -1, 0, "revert");
+ panel->NewLine();
+
+ // The name of this text item matches the "fred" property
+ (void) new wxText(panel, (wxFunction)NULL, "Fred", "", -1, -1, 90, -1, 0, "fred");
+ (void) new wxCheckBox(panel, (wxFunction)NULL, "Yes or no", -1, -1, -1, -1, 0, "tough choice");
+ (void) new wxSlider(panel, (wxFunction)NULL, "Sliding scale", 0, -50, 50, 100, -1, -1, wxHORIZONTAL, "ian");
+ panel->NewLine();
+ (void) new wxListBox(panel, (wxFunction)NULL, "Constrained", wxSINGLE, -1, -1, 100, 90, 0, NULL, 0, "constrained");
+
+ view->AddRegistry(&myFormValidatorRegistry);
+
+ if (useDialog)
+ {
+ view->ShowView(sheet, propDialog);
+ view->AssociateNames();
+ view->TransferToDialog();
+ propDialog->Centre(wxBOTH);
+ propDialog->Show(TRUE);
+ }
+ else
+ {
+ view->ShowView(sheet, propFrame->GetPropertyPanel());
+ view->AssociateNames();
+ view->TransferToDialog();
+ propFrame->Centre(wxBOTH);
+ propFrame->Show(TRUE);
+ }
+}
+\end{verbatim}
+
+\section{Validator classes overview}\label{validatoroverview}
+
+Classes: \helpref{Validator classes}{validatorclasses}
+
+The validator classes provide functionality for mediating between a wxProperty and
+the actual display. There is a separate family of validator classes for each
+class of view, since the differences in user interface for these views implies
+that little common functionality can be shared amongst validators.
+
+\subsection{wxPropertyValidator overview}\label{wxpropertyvalidatoroverview}
+
+Class: \helpref{wxPropertyValidator}{wxpropertyvalidator}
+
+This class is the root of all property validator classes. It contains a small
+amount of common functionality, including functions to convert between
+strings and C++ values.
+
+A validator is notionally an object which sits between a property and its displayed
+value, and checks that the value the user enters is correct, giving an error message
+if the validation fails. In fact, the validator does more than that, and is akin to
+a view class but at a finer level of detail. It is also responsible for
+loading the dialog box control with the value from the property, putting it back
+into the property, preparing special controls for editing the value, and
+may even invoke special dialogs for editing the value in a convenient way.
+
+In a property list dialog, there is quite a lot of scope for supplying custom dialogs,
+such as file or colour selectors. For a form dialog, there is less scope because
+there is no concept of `detailed editing' of a value: one control is associated with
+one property, and there is no provision for invoking further dialogs. The reader
+may like to work out how the form view could be extended to provide some of the
+functionality of the property list!
+
+Validator objects may be associated explictly with a wxProperty, or they may be
+indirectly associated by virtue of a property `kind' that matches validators having
+that kind. In the latter case, such validators are stored in a validator registry
+which is passed to the view before the dialog is shown. If the validator takes
+arguments, such as minimum and maximum values in the case of a wxIntegerListValidator,
+then the validator must be associated explicitly with the property. The validator
+will be deleted when the property is deleted.
+
+\subsection{wxPropertyListValidator overview}\label{wxpropertylistvalidatoroverview}
+
+Class: \helpref{wxPropertyListValidator}{wxpropertylistvalidator}
+
+This class is the abstract base class for property list view validators.
+The list view acts upon a user interface containing a list of properties,
+a text item for direct property value editing, confirm/cancel buttons for the value,
+a pulldown list for making a choice between values, and OK/Cancel/Help buttons
+for the dialog (see \helpref{property list appearance}{appearance}).
+
+By overriding virtual functions, the programmer can create custom
+behaviour for different kinds of property. Custom behaviour can use just the
+available controls on the property list dialog, or the validator can
+invoke custom editors with quite different controls, which pop up in
+`detailed editing' mode.
+
+See the detailed class documentation for the members you should override
+to give your validator appropriate behaviour.
+
+\subsection{wxPropertyFormValidator overview}\label{wxpropertyformvalidatoroverview}
+
+This class is the abstract base class for property form view validators.
+The form view acts upon an existing dialog box or panel, where either the
+panel item names correspond to property names, or the programmer has explicitly
+associated the panel item with the property.
+
+By overriding virtual functions, the programmer determines how
+values are displayed or retrieved, and the checking that the validator does.
+
+See the detailed class documentation for the members you should override
+to give your validator appropriate behaviour.
+
+\section{View classes overview}\label{viewoverview}
+
+Classes: \helpref{View classes}{viewclasses}
+
+An instance of a view class relates a property sheet with an actual window.
+Currently, there are two classes of view: wxPropertyListView and wxPropertyFormView.
+
+\subsection{wxPropertyView overview}\label{wxpropertyviewoverview}
+
+Class: \helpref{wxPropertyView}{wxpropertyview}
+
+This is the abstract base class for property views.
+
+\subsection{wxPropertyListView overview}\label{wxpropertylistviewoverview}
+
+Class: \helpref{wxPropertyListView}{wxpropertylistview}
+
+The property list view defines the relationship between a property sheet and
+a property list dialog or panel. It manages user interface events such as
+clicking on a property, pressing return in the text edit field, and clicking
+on Confirm or Cancel. These events cause member functions of the
+class to be called, and these in turn may call member functions of
+the appropriate validator to be called, to prepare controls, check the property value,
+invoke detailed editing, etc.
+
+\subsection{wxPropertyFormView overview}\label{wxpropertyformviewoverview}
+
+Class: \helpref{wxPropertyFormView}{wxpropertyformview}
+
+The property form view manages the relationship between a property sheet
+and an existing dialog or panel.
+
+You must first create a panel or dialog box for the view to work on.
+The panel should contain panel items with names that correspond to
+properties in your property sheet; or you can explicitly set the
+panel item for each property.
+
+Apart from any custom panel items that you wish to control independently
+of the property-editing items, wxPropertyFormView takes over the
+processing of item events. It can also control normal dialog behaviour such
+as OK, Cancel, so you should also create some standard buttons that the property view
+can recognise. Just create the buttons with standard names and the view
+will do the rest. The following button names are recognised:
+
+\begin{itemize}\itemsep=0pt
+\item {\bf ok}: indicates the OK button. Calls wxPropertyFormView::OnOk. By default,
+checks and updates the form values, closes and deletes the frame or dialog, then deletes the view.
+\item {\bf cancel}: indicates the Cancel button. Calls wxPropertyFormView::OnCancel. By default,
+closes and deletes the frame or dialog, then deletes the view.
+\item {\bf help}: indicates the Help button. Calls wxPropertyFormView::OnHelp. This needs
+to be overridden by the application for anything interesting to happen.
+\item {\bf revert}: indicates the Revert button. Calls wxPropertyFormView::OnRevert,
+which by default transfers the wxProperty values to the panel items (in effect
+undoing any unsaved changes in the items).
+\item {\bf update}: indicates the Revert button. Calls wxPropertyFormView::OnUpdate, which
+by defaults transfers the displayed values to the wxProperty objects.
+\end{itemize}
+
+\section{wxPropertySheet overview}\label{wxpropertysheetoverview}
+
+Classes: \helpref{wxPropertySheet}{wxpropertysheet}, \helpref{wxProperty}{wxproperty}, \helpref{wxPropertyValue}{wxpropertyvalue}
+
+A property sheet defines zero or more properties. This is a bit like an explicit representation of
+a C++ object. wxProperty objects can have values which are pointers to C++ values, or they
+can allocate their own storage for values.
+
+Because the property sheet representation is explicit and can be manipulated by
+a program, it is a convenient form to be used for a variety of
+editing purposes. wxPropertyListView and wxPropertyFormView are two classes that
+specify the relationship between a property sheet and a user interface. You could imagine
+other uses for wxPropertySheet, for example to generate a form-like user interface without
+the need for GUI programming. Or for storing the names and values of command-line switches, with the
+option to subsequently edit these values using a wxPropertyListView.
+
+A typical use for a property sheet is to represent values of an object
+which are only implicit in the current representation of it. For
+example, in Visual Basic and similar programming environments, you can
+`edit a button', or rather, edit the button's properties. One of the
+properties you can edit is {\it width} - but there is no explicit
+representation of width in a wxWindows button; instead, you call SetSize
+and GetSize members. To translate this into a consisent,
+property-oriented scheme, we could derive a new class
+wxButtonWithProperties, which has two new functions: SetProperty and
+GetProperty. SetProperty accepts a property name and a value, and calls
+an appropriate function for the property that is being passed.
+GetProperty accepts a property name, returning a property value. So
+instead of having to use the usual arbitrary set of C++ member functions
+to set or access attributes of a window, programmer deals merely with
+SetValue/GetValue, and property names and values.
+We now have a single point at which we can modify or query an object by specifying
+names and values at run-time. (The implementation of SetProperty and GetProperty
+is probably quite messy and involves a large if-then-else statement to
+test the property name and act accordingly.)
+
+When the user invokes the property editor for a wxButtonWithProperties, the system
+creates a wxPropertySheet with `imaginary' properties such as width, height, font size
+and so on. For each property, wxButtonWithProperties::GetProperty is called, and the result is
+passed to the corresponding wxProperty. The wxPropertySheet is passed to a wxPropertyListView
+as described elsewhere, and the user edits away. When the user has finished editing, the system calls
+wxButtonWithProperties::SetProperty to transfer the wxProperty value back into the button
+by way of an appropriate call, wxWindow::SetSize in the case of width and height properties.
+
+
+
--- /dev/null
+[OPTIONS]
+BMROOT=c:\wx\utils\wxprop\docs ; Assume that bitmaps are where the source is
+TITLE=Property Classes Manual
+CONTENTS=Contents
+COMPRESS=HIGH
+
+[FILES]
+Prop.rtf
+
+[CONFIG]
+CreateButton("Up", "&Up", "JumpId(`Prop.hlp', `Contents')")
+BrowseButtons()
+
+[MAP]
+
+[BITMAPS]
+
--- /dev/null
+\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
+\input psbox.tex
+% Remove this for processing with dvi2ps instead of dvips
+%\special{!/@scaleunit 1 def}
+\parskip=10pt
+\parindent=0pt
+\title{User Manual for wxWindows Property Sheet Classes Version 2.0}
+\winhelponly{\author{by Julian Smart, Anthemion Software\\$$\image{}{prop1}$$}}
+\winhelpignore{\author{Julian Smart, Anthemion Software}
+\date{October 1997}
+}
+\makeindex
+\begin{document}
+\maketitle
+\pagestyle{fancyplain}
+\bibliographystyle{plain}
+\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter*{Copyright notice}
+\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+
+\begin{center}
+Copyright (c) 1997 Julian Smart, Anthemion Software
+\end{center}
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose is hereby granted without fee, provided that the
+above copyright notice, author statement and this permission notice appear in
+all copies of this software and related documentation.
+
+THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
+IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL JULIAN SMART OR ANTHEMION SOFTWARE BE LIABLE FOR ANY SPECIAL,
+INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED
+OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+\input{body.tex}
+\input{classes.tex}
+\input{changes.tex}
+
+\newpage
+
+\addcontentsline{toc}{chapter}{Index}
+\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
+\setfooter{\thepage}{}{}{}{}{\thepage}%
+\printindex
+\end{document}
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: prop1.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 167 292 445 500
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+167 292 translate
+
+% size of image (on paper, in 1/72inch coords)
+278 208 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 42 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 bf0000 00bf00 bfbf00 0000bf 00bfbf c0c0c0 808080 ff0000 00ff00
+ffff00 0000ff 00ffff ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+278 208 8 % dimensions of data
+[278 0 0 -208 0 208] % mapping matrix
+rlecmapimage
+
+7f067f0614060000
+81060d7f0d7f0d110d810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d068106047f047f040c040106810700
+82060d068106048204060d820d060783070d0702010203098102047f047a040106810700
+
+82060d068106048704060b060001020781070283020702098109028102047f0446040e0d
+81000d0d0d81000481040d0d0d81000481040682060700
+82060d0681060482040806810600820002078507020902070201028109047f044604810d
+060b068307000d060b068207000482040d060b068207000481040682060700
+82060d0681060481040685060800040307820702098409020702098109040104050d2d04
+030d0204010d1a04050d6604810d060b068307000d06810600070001068207000482040d
+060b068207000481040682060700
+82060d068106048704060b0604000a0789070209020702070209040104010d0204010d1d
+04010d0b04010d0104010d0104010d1204010d0704010d1004010d5504810d060b068307
+000d06810600070001068207000482040d06010601000306010001068207000481040682
+060700
+82060d068106048204070681060001000107010286070209020702040104010d0204010d
+1d04010d0b04010d0504010d1204010d0704010d1004010d5504810d060b068307000d06
+820600060506810006830607000482040d06020601000106010002068207000481040682
+060700
+82060d0681060485040d0607060d010d8407020002090109820200040104010d0204010d
+81040d010d0104030d0104040d0204030d0104020d81040d010d81040d820d040d810d04
+0304010d0504040d0204030d0204030d0104020d0604010d0404030d0204020d0104020d
+5404810d060b068307000d06820600060506810006830607000482040d06030603000306
+8207000481040682060700
+82060d068106048104070507010006020204050d0104010d0104010d0104010d81040d81
+0d0481040d820d040d810d0481040d820d040d810d0481040d810d0481040d820d040d81
+0d040404030d0204020d81040d820d040d810d0481040d820d040d810d0481040d820d04
+0d810d040604010d0304010d0104010d81040d820d040d820d040d810d045404810d060b
+068307000d06820600060506810006830607000482040d06040601000406820700048104
+0682060700
+82060d068106048104050505010006030204010d0504010d0104010d0104010d81040d81
+0d0481040d820d040d040d81040d810d0481040d810d0481040d820d040d810d04070401
+0d0104010d0104010d81040d040d81040d040d81040d810d040604010d0304050d010401
+0d0204010d5504810d060b068307000d06820600060506810006830607000482040d0603
+06030003068207000481040682060700
+82060d0681060481040c010c8205080c830c05030a020a81030a810a040104010d050401
+0d0104010d0104010d81040d810d0481040d820d040d810d040304010d0104010d010401
+0d81040d810d040704010d0104010d0104010d81040d810d040304010d0404010d070401
+0d0304010d0604010d0104010d5504810d060b068307000d068206000605068100068306
+07000482040d06020601000106010002068207000481040682060700
+82060d068106048c040c05070507050c05030a030a840a03000a040104010d0504010d01
+04010d0104010d81040d810d0481040d820d040d810d0481040d820d040d810d0481040d
+810d040104020d0504010d0104010d0104010d0104010d81040d810d0481040d820d040d
+810d0481040d820d040d810d040604010d0304010d0104010d81040d820d040d820d040d
+810d045404810d060106050003068307000d06820600060506810006830607000482040d
+06010601000306010001068207000481040682060700
+82060d0681060482040c08020886070c05030a030a010a82030a040104010d0504010d02
+04030d0104040d0204030d0104010d0204010d0104010d0704030d0204010d0104010d01
+04030d0204030d0204010d0604010d0404030d0204020d0204010d5404810d0601060500
+03068307000d06810600070001068207000482040d060b068207000481040682060700
+82060d0681060482040c080208010c8205030a810a0384030a030a041404010d1404010d
+7f041804810d060b068307000d060b068207000482040d060b0682070004810406820607
+00
+82060d0681060482040c080308850c05030a030a010a82000a041404010d1204020d7f04
+1904810d070c0782000d070c0781000482040d070c0781000481040682060700
+82060d0681060483040c05080208850c05030a030a810a0382030a047f0446041f000104
+0f0001040106810700
+82060d0681060481040c050c8205030a050a7f047b040106810700
+82060d068106047f047f040c040106810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d0637067f073907810d061c06810700
+82060d06030616000306160001068107007f00360082060d0681060015000406810700
+82060d06020681000d140d820700068206000d140d8507000607000d7f0d350d84060d06
+000d140d820700060206810700
+82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
+84060d06000d130d01078100060206810700
+82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
+84060d06000d810d06110601078100060206810700
+82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
+84060d06000d810d06110601078100060206810700
+82060d06020682000d0603068100060606810006030601078100068306000d0612060107
+84000607000d820d000d7f0d320d84060d06000d810d06110601078100060206810700
+82060d06020682000d06030683000600060306810006040601078100068306000d061206
+010785000607000d0081000d7f0d320d84060d06000d810d061106010781000602068107
+00
+82060d06020682000d06040683000600060106810006050601078100068306000d060b06
+8100060406010785000607000d000100810d0081000d820d000d810d0081000d810d0002
+007f0d220d84060d06000d810d06110601078100060206810700
+82060d06020682000d06050685000600060006060601078100068306000d060a06830006
+00060306010785000607000d0081000d810d0082000d000100810d0082000d0081000d81
+0d0081000d7f0d200d84060d06000d810d06110601078100060206810700
+82060d06020682000d0606068300060006070601078100068306000d0609068300060006
+0406010785000607000d0081000d810d0082000d000100810d0082000d0081000d810d00
+81000d7f0d200d84060d06000d810d06110601078100060206810700
+82060d06020682000d0607068300060006060601078100068306000d0604068100060106
+83000600060506010785000607000d0081000d010d0200810d000100010d0100010d0100
+7f0d210d84060d06000d810d06110601078100060206810700
+82060d06020682000d06060685000600060006050601078100068306000d060306870006
+0006000600060606010785000607000d0081000d010d0200810d000100010d0100010d01
+007f0d210d84060d06000d810d06110601078100060206810700
+82060d06020682000d06050681000601068300060006040601078100068306000d060406
+850006000600060706010784000607000d810d0081000d810d0081000d010d0100020d03
+007f0d220d84060d06000d810d0603060100810600820006008100060406010781000602
+06810700
+82060d06020682000d06040681000603068300060006030601078100068306000d060506
+83000600060806010784000607000d7f0d350d84060d06000d810d060306010081060082
+000600810006040601078100060206810700
+82060d06020682000d060306010005060100040601078100068306000d06060681000609
+06010784000607000d7f0d350d84060d06000d810d06110601078100060206810700
+82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
+84060d06000d810d06110601078100060206810700
+82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
+84060d06000d810d06110601078100060206810700
+82060d06020682000d0714078100068306000d07140784000607000d7f0d350d85060d06
+000d0714078100060206810700
+82060d06020682000d0714078100068306000d07140784000607000d7f0d350d84060d06
+000715078100060206810700
+82060d06030616000306160001068207000d7f0d350d82060d0681060015000406810700
+
+82060d0637068107067f063706810d061c06810700
+82060d0637067f0d3a0d1d06810700
+82060d0601067f077f070a07810d060106810700
+82060d0601068107007f007f00070082060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d010d0300010d0400020d03007f0d720d82060d060106810700
+82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
+810d0081000d7f0d700d82060d060106810700
+82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0004007f
+0d710d82060d060106810700
+82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
+7f0d740d82060d060106810700
+82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
+810d0081000d7f0d700d82060d060106810700
+82060d0601068207000d010d0300010d0100010d0100010d03007f0d720d82060d060106
+810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d060106ff0700040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040aff040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a8c040a040a040a040a040a060d060106810700
+82060d0601068307000a047f047f04050482060d060106810700
+82060d060106820700047f047f040504830a060d060106810700
+82060d0601068307000a0482040d047f047f04020482060d060106810700
+82060d0601068207000481040d810d047f047f040104830a060d060106810700
+82060d0601068307000a0d020d81040d810d0482040d0481040d810d0481040d020d7f04
+720482060d060106810700
+82060d0601068207000481040d810d0481040d820d040d010d81040d820d040d810d0481
+040d810d047f046f04830a060d060106810700
+82060d0601068407000a040d810d0481040d820d040d010d81040d820d040d810d048104
+0d810d047f04700482060d060106810700
+82060d0601068207000481040d810d040104020d81040d010d0104010d0104010d7f0470
+04830a060d060106810700
+82060d0601068407000a040d810d040104020d81040d010d0104010d0104010d7f047104
+82060d060106810700
+82060d060106820700040104010d0104010d0204010d0204030d7f047104830a060d0601
+06810700
+82060d0601068307000a047f047f04050482060d060106810700
+82060d060106820700047f047f040504830a060d060106810700
+82060d060106ff07000a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
+040a040a040a040a040a040a040a040a040a040a040a040a040a04ff0a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
+0a040a040a040a040a040a048c0a040a040a040a040a04060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d010d81000d810d0081000d7f0d7e0d82060d060106810700
+82060d0601068207000d810d0081000d810d0081000d7f0d7e0d82060d060106810700
+82060d0601068307000d000200810d000300010d0300010d0300020d03007f0d690d8206
+0d060106810700
+82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
+010d0100810d0081000d810d0081000d7f0d670d82060d060106810700
+82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0500
+810d0004007f0d680d82060d060106810700
+82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
+040d01007f0d6c0d82060d060106810700
+82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
+010d0100810d0081000d810d0081000d7f0d670d82060d060106810700
+82060d0601068207000d010d0100810d0081000d810d0082000d0081000d020d0300020d
+03007f0d690d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068207000d7f0d7f0d060d82060d060106810700
+82060d0601068107067f067f060806810d060106810700
+82060d0601067f0d7f0d0b0d0206810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d0601067f077f070b070206810700
+82060d0601068107007f007f000800810d060106810700
+82060d0601068207000d7f0d760d0e060100810d060106810700
+82060d0601068207000d7f0d760d81060d0b0d81070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d1c0d0100120d01000e0d81000d6b0d0400400d82060d060a0681
+070082000d060106810700
+82060d0601068207000d010d81000d190d81000d120d81000d7b0d85000d000d000d3f0d
+82060d060a0681070082000d060106810700
+82060d0601068207000d810d000300030d0200010d0100010d0100020d0100810d008400
+0d000d0081000d090d0300010d82000d0081000d020d0200020d0200040d0300020d0200
+5f0d81000d020d0100810d0082000d0081000d810d0081000d010d02002c0d82060d0603
+06810006040681070082000d060106810700
+82060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d820d
+000d810d0081000d810d0081000d820d000d070d81000d010d81000d810d0081000d820d
+000d820d000d010d81000d020d81000d020d81000d010d81000d820d000d010d81000d5d
+0d81000d030d0100030d81000d010d81000d820d000d010d81000d2a0d82060d06020602
+00040681070082000d060106810700
+82060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d820d
+000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d820d000d01
+0d81000d020d81000d020d81000d040d04005e0d81000d030d81000d030d81000d010d81
+000d810d0003002b0d82060d0601060400030681070082000d060106810700
+82060d0601068207000d010d81000d010d81000d820d000d010d81000d820d000d810d00
+81000d820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d
+820d000d010d81000d020d81000d020d81000d040d81000d610d81000d030d81000d030d
+81000d810d0081000d820d000d2e0d82060d068106000500020681070082000d06010681
+0700
+82060d0601068207000d020d0200030d0200030d0100810d0081000d810d000200810d00
+0100810d000100080d0300810d000100810d000100010d0200020d0400020d0300020d03
+005d0d0200020d0300030d0100810d0081000d810d0002002b0d82060d060a0681070082
+000d060106810700
+82060d0601068207000d1a0d81000d7f0d590d82060d060a0681070082000d0601068107
+00
+82060d0601068207000d170d02007f0d5b0d82060d060a0681070082000d060106810700
+
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d8106070c070100810d060106810700
+82060d0601068207000d7f0d760d1000810d060106810700
+82060d0601068207000d7f0d760d92060d060d060d060d060d060d060d060d000d060106
+810700
+82060d0601068207000d7f0d770d91060d060d060d060d060d060d060d06000d06010681
+0700
+82060d0601068207000d030d81000d7f0d2d0d81000d020d0300390d92060d060d060d06
+0d060d060d060d060d000d060106810700
+82060d0601068207000d7f0d320d0100030d81000d3c0d91060d060d060d060d060d060d
+060d06000d060106810700
+82060d0601068207000d010d0200040d0200010d0100810d0081000d7f0d1c0d83000d00
+0d020d81000d3b0d92060d060d060d060d060d060d060d060d000d060106810700
+82060d0601068207000d030d81000d020d81000d010d81000d810d0081000d820d000d7f
+0d1a0d81000d820d000d020d02003b0d91060d060d060d060d060d060d060d06000d0601
+06810700
+82060d0601068207000d030d81000d030d0300010d81000d010d81000d7f0d1a0d040005
+0d81000d380d92060d060d060d060d060d060d060d060d000d060106810700
+82060d0601068207000d030d81000d020d81000d010d81000d820d000d010d81000d7f0d
+1d0d81000d010d81000d010d81000d380d0e060100810d060106810700
+82060d0601068207000d010d0400010d0800810d0001007f0d1c0d0200020d02003a0d81
+060d0b0d81070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d810d0081000d060d81000d030d0100040d01007f0d170d020003
+0d0300390d82060d060a0681070082000d060106810700
+82060d0601068207000d010d81000d0d0d81000d040d81000d7f0d150d81000d010d8100
+0d010d81000d3b0d82060d060a0681070082000d060106810700
+82060d0601068207000d010d82000d0081000d010d0200050d81000d040d81000d7f0d18
+0d81000d020d81000d3b0d82060d060a0681070082000d060106810700
+82060d0601068207000d010d0100010d81000d020d81000d040d81000d040d81000d7f0d
+170d81000d030d02003a0d82060d060a0681070082000d060106810700
+82060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d81000d7f
+0d160d81000d070d81000d380d82060d060a0681070082000d060106810700
+82060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d81000d7f
+0d150d81000d040d81000d010d81000d380d82060d060a0681070082000d060106810700
+
+82060d0601068207000d810d000300020d0400010d0400010d04007f0d140d0400020d02
+003a0d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d030d81000d0a0d0100050d81000d7f0d5b0d82060d060a068107
+0082000d060106810700
+82060d0601068207000d110d81000d7f0d620d82060d060a0681070082000d0601068107
+00
+82060d0601068207000d010d0300010d0100010d0100030d81000d020d0200040d020001
+0d0100810d0081000d7f0d070d0200010d0100810d0081000d020d0200330d82060d060a
+0681070082000d060106810700
+82060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d81000d02
+0d81000d010d81000d810d0081000d820d000d7f0d050d81000d010d81000d810d008100
+0d820d000d820d000d010d81000d310d82060d060a0681070082000d060106810700
+82060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d81000d03
+0d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81000d810d
+000300320d82060d060a0681070082000d060106810700
+82060d0601068207000d040d81000d010d81000d810d0081000d020d81000d040d81000d
+020d81000d010d81000d820d000d010d81000d7f0d050d81000d010d81000d820d000d01
+0d81000d820d000d350d82060d060a0681070082000d060106810700
+82060d0601068207000d040d81000d020d0100810d0082000d000300010d0400010d0800
+810d0001007f0d060d0200010d0200810d000100010d0300320d82060d060a0681070082
+000d060106810700
+82060d0601068207000d040d81000d7f0d6f0d82060d060a0681070082000d0601068107
+00
+82060d0601068207000d010d02007f0d710d82060d060a0681070082000d060106810700
+
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
+82060d0601068207000d810d0081000d060d81000d7f0d690d82060d060a068107008200
+0d060106810700
+82060d0601068207000d010d81000d0b0d81000d7f0d640d82060d060a0681070082000d
+060106810700
+82060d0601068207000d010d82000d0081000d010d0200020d0400010d0200820d000d02
+0d0200010d0100810d0081000d7f0d050d0100810d0081000d020d0200010d0100810d00
+81000d020d02002c0d82060d060a0681070082000d060106810700
+82060d0601068207000d010d0100010d81000d020d81000d020d81000d040d85000d000d
+000d820d000d010d81000d810d0081000d820d000d7f0d050d0100010d81000d820d000d
+010d81000d810d0081000d820d000d820d000d010d81000d2a0d82060d060a0681070082
+000d060106810700
+82060d0601068207000d010d81000d010d81000d020d81000d020d81000d040d85000d00
+0d000d010d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81
+000d820d000d010d81000d810d0003002b0d82060d060a0681070082000d060106810700
+
+82060d0601068207000d010d81000d010d81000d020d81000d020d81000d010d81000d86
+0d000d000d000d820d000d010d81000d820d000d010d81000d7f0d050d81000d010d8100
+0d820d000d010d81000d820d000d010d81000d820d000d2e0d82060d060a068107008200
+0d060106810700
+82060d0601068207000d810d000300020d0400020d0200010d0600810d000400810d0002
+007f0d060d0200810d000100010d0200010d0200810d000100010d03002b0d8106070c07
+0100810d060106810700
+82060d0601068207000d240d81000d7f0d4f0d1000810d060106810700
+82060d0601068207000d230d02007f0d4f0d0e060100810d060106810700
+82060d0601068207000d7f0d760d81060d0b0d81070082000d060106810700
+82060d060106820700047f04760482060d060a0681070082000d060106810700
+82060d060106820700047f04760482060d060a0681070082000d060106810700
+82060d060106820700047f04760482060d060a0681070082000d060106810700
+82060d060106820700047f04760482060d060a0681070082000d060106810700
+82060d060106820700043404810d041304010d7f04290482060d06810600050002068107
+0082000d060106810700
+82060d060106820700041d04810d042b04810d046204810d04430482060d060106040003
+0681070082000d060106810700
+82060d060106820700040204030d0204020d0104010d81040d810d040204030d81040d03
+0d0204010d81040d810d040104020d0204020d0204010d81040d810d040204020d030401
+0d82040d046104040d0104020d81040d010d0104020d330482060d060206020004068107
+0082000d060106810700
+82060d060106820700040104810d040104810d0482040d040104810d0481040d810d0482
+040d0482040d040404810d040504010d0304810d040104810d040204810d040204010d01
+04810d0482040d040104810d0482040d0481040d810d046204810d040404810d04010481
+0d0482040d040104810d04310482060d060306810006040681070082000d060106810700
+
+82060d060106820700040104810d040404810d040104810d0482040d040104810d040104
+020d0204810d040504810d040404030d0304810d040204810d040104810d0481040d030d
+0104810d040104810d046204810d040404850d040d040d0482040d040104810d04310482
+060d060a0681070082000d060106810700
+82060d060106820700040104810d040404810d040104810d0482040d040104810d040404
+810d0482040d040104810d040104810d040304810d040104810d040204810d040204810d
+040104810d0482040d040404810d040104810d046204810d040104810d0486040d040d04
+0d0482040d040104810d04310482060d060a0681070082000d060106810700
+82060d060106820700040204030d0204020d0104020d81040d010d81040d020d0304020d
+0204030d0204050d81040d030d81040d010d81040d010d0104030d0204040d6304020d03
+04830d040d040204020d330482060d060a0681070082000d060106810700
+82060d060106820700047f04760482060d060a0681070082000d060106810700
+82060d060106820700047f0476048106070c070100810d060106810700
+82060d060106820700047f0476041000810d060106810700
+82060d0601068107067f0677061000810d060106810700
+82060d0601067f0d7f0d0b0d0206810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+82060d067f067f061006810700
+8106077f077f0712070000
+7f007f001500
+
+%
+% Compression made this file 6.27% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: prop2.eps
+%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
+%%BoundingBox: 167 221 466 500
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% lower left corner
+167 221 translate
+
+% size of image (on paper, in 1/72inch coords)
+299 279 scale
+
+% define 'colorimage' if it isn't defined
+% ('colortogray' and 'mergeprocs' come from xwd2ps
+% via xgrab)
+/colorimage where % do we know about 'colorimage'?
+ { pop } % yes: pop off the 'dict' returned
+ { % no: define one
+ /colortogray { % define an RGB->I function
+ /rgbdata exch store % call input 'rgbdata'
+ rgbdata length 3 idiv
+ /npixls exch store
+ /rgbindx 0 store
+ /grays npixls string store % str to hold the result
+ 0 1 npixls 1 sub {
+ grays exch
+ rgbdata rgbindx get 20 mul % Red
+ rgbdata rgbindx 1 add get 32 mul % Green
+ rgbdata rgbindx 2 add get 12 mul % Blue
+ add add 64 idiv % I = .5G + .31R + .18B
+ put
+ /rgbindx rgbindx 3 add store
+ } for
+ grays
+ } bind def
+
+ % Utility procedure for colorimage operator.
+ % This procedure takes two procedures off the
+ % stack and merges them into a single procedure.
+
+ /mergeprocs { % def
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+
+ /colorimage { % def
+ pop pop % remove 'false 3' operands
+ {colortogray} mergeprocs
+ image
+ } bind def
+ } ifelse % end of 'false' case
+
+
+
+% define the colormap
+/cmap 42 string def
+
+
+% load up the colormap
+currentfile cmap readhexstring
+000000 bf0000 00bf00 bfbf00 0000bf 00bfbf c0c0c0 808080 ff0000 00ff00
+ffff00 0000ff 00ffff ffffff
+pop pop % lose return values from readhexstring
+
+
+% rlecmapimage expects to have 'w h bits matrix' on stack
+/rlecmapimage {
+ /buffer 1 string def
+ /rgbval 3 string def
+ /block 384 string def
+
+ % proc to read a block from file, and return RGB data
+ { currentfile buffer readhexstring pop
+ /bcount exch 0 get store
+ bcount 128 ge
+ { % it's a non-run block
+ 0 1 bcount 128 sub
+ { currentfile buffer readhexstring pop pop
+
+ % look up value in color map
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ % and put it in position i*3 in block
+ block exch 3 mul rgbval putinterval
+ } for
+ block 0 bcount 127 sub 3 mul getinterval
+ }
+
+ { % else it's a run block
+ currentfile buffer readhexstring pop pop
+
+ % look up value in colormap
+ /rgbval cmap buffer 0 get 3 mul 3 getinterval store
+
+ 0 1 bcount { block exch 3 mul rgbval putinterval } for
+
+ block 0 bcount 1 add 3 mul getinterval
+ } ifelse
+ } % end of proc
+ false 3 colorimage
+} bind def
+
+
+299 279 8 % dimensions of data
+[299 0 0 -279 0 279] % mapping matrix
+rlecmapimage
+
+7f0003007f072607
+07077f067f0618068100070707
+070781060d7f0d7f0d150d820700070707
+070782060d067f067f061406820700070707
+070782060d067f067f061406820700070707
+070782060d068106077f077f0710070106820700070707
+070782060d068106078207060d820d060783070d0702010203098102077f077e07010682
+0700070707
+070782060d068106078707060b060001020781070283020702098109028102077f074a07
+0e0d81000d0d0d81000781070d0d0d81000781070683060700070707
+070782060d0681060782070806810600820002078507020902070201028109077f074a07
+810d060b068307000d060b068207000782070d060b068207000781070683060700070707
+
+070782060d06810607810706850608000403078207020984090207020981090701070506
+2d070306020701061a0705066a07810d060b068307000d06810600070001068207000782
+070d060b068207000781070683060700070707
+070782060d068106078707060b0604000a07890702090207020702090701070106020701
+061d0701060b07010601070106010701061207010607070106100701065907810d060b06
+8307000d06810600070001068207000782070d0601060100030601000106820700078107
+0683060700070707
+070782060d0681060701070106020001070102860702090207020701070106020701061d
+0701060b070106050701061207010607070106100701065907810d060b068307000d0682
+0600060506810006830607000782070d0602060100010601000206820700078107068306
+0700070707
+070782060d0681060785070d0607060d010d840702000209010982020007010701060207
+010681070601060107030601070406020703060107020681070601068107068206070681
+060703070106050704060207030602070306010702060607010604070306020702060107
+02065807810d060b068307000d06820600060506810006830607000782070d0603060300
+03068207000781070683060700070707
+070782060d06810607070701000602020705060107010601070106010701068107068106
+078107068206070681060781070682060706810607810706810607810706820607068106
+070407030602070206810706820607068106078107068206070681060781070682060706
+81060706070106030701060107010681070682060706820607068106075807810d060b06
+8307000d06820600060506810006830607000782070d0604060100040682070007810706
+83060700070707
+070782060d06810607810705050501000603020701060507010601070106010701068107
+068106078107068206070604068107068106078107068106078107068206070681060707
+070106010701060107010681070604068107060406810706810607060701060307050601
+070106020701065907810d060b068307000d06820600060506810006830607000782070d
+060306030003068207000781070683060700070707
+070782060d0681060781070c010c8205080c830c05030a020a81030a810a070107010605
+070106010701060107010681070681060781070682060706810607030701060107010601
+070106810706810607070701060107010601070106810706810607030701060407010607
+0701060307010606070106010701065907810d060b068307000d06820600060506810006
+830607000782070d06020601000106010002068207000781070683060700070707
+070782060d068106078c070c05070507050c05030a030a840a03000a0701070106050701
+060107010601070106810706810607810706820607068106078107068206070681060781
+070681060701070206050701060107010601070106010701068107068106078107068206
+070681060781070682060706810607060701060307010601070106810706820607068206
+07068106075807810d060106050003068307000d06820600060506810006830607000782
+070d06010601000306010001068207000781070683060700070707
+070782060d0681060782070c08020886070c05030a030a010a82030a0701070106050701
+060207030601070406020703060107010602070106010701060707030602070106010701
+06010703060207030602070106060701060407030602070206020701065807810d060106
+050003068307000d06810600070001068207000782070d060b0682070007810706830607
+00070707
+070782060d0681060782070c080208010c8205030a810a0384030a030a07140701061407
+01067f071c07810d060b068307000d060b068207000782070d060b068207000781070683
+060700070707
+070782060d0681060782070c080308850c05030a030a010a82000a071407010612070206
+7f071d07810d070c0782000d070c0781000782070d070c07810007810706830607000707
+07
+070782060d0681060783070c05080208850c05030a030a810a0382030a077f074a071f00
+01070f0001070106820700070707
+070782060d0681060781070c050c8205030a050a7f077f070106820700070707
+070782060d068106077f077f0710070106820700070707
+070782060d067f067f061406820700070707
+070782060d067f067f061406820700070707
+070782060d0637067f073d07810d061c06820700070707
+070782060d06030616000306160001068107007f003a0082060d06810600150004068207
+00070707
+070782060d06020681000d140d820700068206000d140d8507000607000d7f0d390d8406
+0d06000d140d820700060206820700070707
+070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
+390d84060d06000d130d01078100060206820700070707
+070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
+390d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
+390d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0603068100060606810006030601078100068306000d061206
+010784000607000d010d0100020d0200020d0200020d02007f0d230d84060d06000d810d
+06110601078100060206820700070707
+070782060d06020682000d060306020003060200040601078100068306000d060b068100
+060406010784000607000d810d000100010d0100810d0082000d0082000d0082000d0082
+000d0081000d7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d060406020001060200050601078100068306000d060a060200
+0406010785000607000d000200010d0100810d0082000d0082000d0082000d0082000d00
+81000d7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0605060500060601078100068306000d060906030004060107
+87000607000d000d0081000d810d0082000d0082000d0082000d0082000d0082000d0081
+000d7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0606060300070601078100068306000d060806030005060107
+84000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d0081000d
+7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0606060300070601078100068306000d060306010001060300
+0606010784000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d
+0081000d7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0605060500060601078100068306000d060306060007060107
+84000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d0081000d
+7f0d210d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d060406020001060200050601078100068306000d0604060400
+0806010784000607000d010d0100020d0200020d0200020d02007f0d230d84060d06000d
+810d060306010781060782070607810706040601078100060206820700070707
+070782060d06020682000d060306020003060200040601078100068306000d0605060200
+0906010784000607000d7f0d390d84060d06000d810d0603060107810607820706078107
+06040601078100060206820700070707
+070782060d06020682000d060306010005060100040601078100068306000d0606068100
+060906010784000607000d7f0d390d84060d06000d810d06110601078100060206820700
+070707
+070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
+390d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
+390d84060d06000d810d06110601078100060206820700070707
+070782060d06020682000d0714078100068306000d07140784000607000d7f0d390d8506
+0d06000d0714078100060206820700070707
+070782060d06020682000d0714078100068306000d07140784000607000d7f0d390d8406
+0d06000715078100060206820700070707
+070782060d06030616000306160001068207000d7f0d390d82060d068106001500040682
+0700070707
+070782060d0637068107067f063b06810d061c06820700070707
+070782060d0637067f0d3e0d1d06820700070707
+070782060d0601067f077f070e07810d060106820700070707
+070782060d0601068107007f007f000b0082060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d040d0100120d01007f0d150d0200550d82060d0601068207
+00070707
+070782060d0601068207000d030d81000d140d81000d7f0d130d81000d010d81000d530d
+82060d060106820700070707
+070782060d0601068207000d020d0300010d0100810d0081000d010d0200030d0100820d
+000d7f0d130d81000d010d81000d530d82060d060106820700070707
+070782060d0601068207000d030d81000d030d0100030d81000d010d81000d820d000d81
+0d0081000d7f0d130d81000d010d81000d530d82060d060106820700070707
+070782060d0601068207000d030d81000d030d81000d030d0400010d81000d010d81000d
+7f0d130d81000d010d81000d530d82060d060106820700070707
+070782060d0601068207000d030d81000d030d81000d030d81000d040d81000d010d8100
+0d7f0d130d81000d010d81000d530d82060d060106820700070707
+070782060d0601068207000d020d0300010d0300030d0300020d04007f0d140d0200550d
+82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d1c0d0100120d01000e0d81000d6b0d0400090d0100480d82
+060d060106820700070707
+070782060d0601068207000d010d81000d190d81000d120d81000d7c0d81000d820d000d
+090d81000d470d82060d060106820700070707
+070782060d0601068207000d810d000300030d0200010d0100010d0100020d0100810d00
+84000d000d0081000d090d0300010d82000d0081000d020d0200020d0200040d0300020d
+02005e0d83000d000d020d0200040d81000d030d0300020d0200390d82060d0601068207
+00070707
+070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
+820d000d810d0081000d810d0081000d820d000d070d81000d010d81000d810d0081000d
+820d000d820d000d010d81000d020d81000d020d81000d010d81000d820d000d010d8100
+0d5c0d0200020d81000d010d81000d020d81000d020d81000d040d81000d010d81000d37
+0d82060d060106820700070707
+070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
+820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d820d00
+0d010d81000d020d81000d020d81000d040d04005d0d83000d000d020d0300030d81000d
+030d0200020d0400380d82060d060106820700070707
+070782060d0601068207000d010d81000d010d81000d820d000d010d81000d820d000d81
+0d0081000d820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81
+000d820d000d010d81000d020d81000d020d81000d040d81000d600d81000d030d81000d
+010d81000d020d81000d060d81000d820d000d3b0d82060d060106820700070707
+070782060d0601068207000d020d0200030d0200030d0100810d0081000d810d00020081
+0d000100810d000100080d0300810d000100810d000100010d0200020d0400020d030002
+0d03005c0d0200030d0500810d000300010d0300030d0300380d82060d06010682070007
+0707
+070782060d0601068207000d1a0d81000d7f0d6d0d82060d060106820700070707
+070782060d0601068207000d170d02007f0d6f0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700040304810d047f043204010d4f0482060d0601068207000707
+07
+070782060d060106820700047f043904810d044e0482060d060106820700070707
+070782060d060106820700040104020d0404020d0104010d81040d810d047f042404810d
+044e0482060d060106820700070707
+070782060d060106820700040304810d040204810d040104810d0481040d810d0482040d
+047f041a04040d0304810d044e0482060d060106820700070707
+070782060d060106820700040304810d040304030d0104810d040104810d047f04230481
+0d044e0482060d060106820700070707
+070782060d060106820700040304810d040204810d040104810d0482040d040104810d04
+7f042304810d044e0482060d060106820700070707
+070782060d060106820700040104040d0104080d81040d010d7f042104040d4d0482060d
+060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d060106820700047f047f040a0482060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d810d0081000d060d81000d030d0100040d01007f0d170d02
+00030d03004d0d82060d060106820700070707
+070782060d0601068207000d010d81000d0d0d81000d040d81000d7f0d150d81000d010d
+81000d010d81000d4f0d82060d060106820700070707
+070782060d0601068207000d010d82000d0081000d010d0200050d81000d040d81000d7f
+0d180d81000d020d81000d4f0d82060d060106820700070707
+070782060d0601068207000d010d0100010d81000d020d81000d040d81000d040d81000d
+7f0d170d81000d030d02004e0d82060d060106820700070707
+070782060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d8100
+0d7f0d160d81000d070d81000d4c0d82060d060106820700070707
+070782060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d8100
+0d7f0d150d81000d040d81000d010d81000d4c0d82060d060106820700070707
+070782060d0601068207000d810d000300020d0400010d0400010d04007f0d140d040002
+0d02004e0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d030d81000d0a0d0100050d81000d7f0d6f0d82060d060106
+820700070707
+070782060d0601068207000d110d81000d7f0d760d82060d060106820700070707
+070782060d0601068207000d010d0300010d0100010d0100030d81000d020d0200040d02
+00010d0100810d0081000d7f0d070d0200010d0100810d0081000d020d0200470d82060d
+060106820700070707
+070782060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d8100
+0d020d81000d010d81000d810d0081000d820d000d7f0d050d81000d010d81000d810d00
+81000d820d000d820d000d010d81000d450d82060d060106820700070707
+070782060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d8100
+0d030d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81000d
+810d000300460d82060d060106820700070707
+070782060d0601068207000d040d81000d010d81000d810d0081000d020d81000d040d81
+000d020d81000d010d81000d820d000d010d81000d7f0d050d81000d010d81000d820d00
+0d010d81000d820d000d490d82060d060106820700070707
+070782060d0601068207000d040d81000d020d0100810d0082000d000300010d0400010d
+0800810d0001007f0d060d0200010d0200810d000100010d0300460d82060d0601068207
+00070707
+070782060d0601068207000d040d81000d7f0d7f0d030d82060d060106820700070707
+070782060d0601068207000d010d02007f0d7f0d050d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d810d0081000d060d81000d7f0d7d0d82060d060106820700
+070707
+070782060d0601068207000d010d81000d0b0d81000d7f0d780d82060d06010682070007
+0707
+070782060d0601068207000d010d82000d0081000d010d0200020d0400010d0200820d00
+0d020d0200010d0100810d0081000d7f0d050d0100810d0081000d020d0200010d010081
+0d0081000d020d0200400d82060d060106820700070707
+070782060d0601068207000d010d0100010d81000d020d81000d020d81000d040d85000d
+000d000d820d000d010d81000d810d0081000d820d000d7f0d050d0100010d81000d820d
+000d010d81000d810d0081000d820d000d820d000d010d81000d3e0d82060d0601068207
+00070707
+070782060d0601068207000d010d81000d010d81000d020d81000d020d81000d040d8500
+0d000d000d010d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d01
+0d81000d820d000d010d81000d810d0003003f0d82060d060106820700070707
+070782060d0601068207000d010d81000d010d81000d020d81000d020d81000d010d8100
+0d860d000d000d000d820d000d010d81000d820d000d010d81000d7f0d050d81000d010d
+81000d820d000d010d81000d820d000d010d81000d820d000d420d82060d060106820700
+070707
+070782060d0601068207000d810d000300020d0400020d0200010d0600810d000400810d
+0002007f0d060d0200810d000100010d0200010d0200810d000100010d03003f0d82060d
+060106820700070707
+070782060d0601068207000d240d81000d7f0d630d82060d060106820700070707
+070782060d0601068207000d230d02007f0d630d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d340d81000d130d01007f0d3d0d82060d0601068207000707
+07
+070782060d0601068207000d1d0d81000d2b0d81000d620d81000d570d82060d06010682
+0700070707
+070782060d0601068207000d020d0300020d0200010d0100810d0081000d020d0300810d
+000300020d0100810d0081000d010d0200020d0200020d0100810d0081000d020d020003
+0d0100820d000d610d0400010d0200810d000100010d0200470d82060d06010682070007
+0707
+070782060d0601068207000d010d81000d010d81000d820d000d010d81000d810d008100
+0d820d000d820d000d040d81000d050d0100030d81000d010d81000d020d81000d020d01
+00010d81000d820d000d010d81000d820d000d810d0081000d620d81000d040d81000d01
+0d81000d820d000d010d81000d450d82060d060106820700070707
+070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
+010d0200020d81000d050d81000d040d0300030d81000d020d81000d010d81000d810d00
+0300010d81000d010d81000d620d81000d040d85000d000d000d820d000d010d81000d45
+0d82060d060106820700070707
+070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
+040d81000d820d000d010d81000d010d81000d030d81000d010d81000d020d81000d020d
+81000d010d81000d820d000d040d81000d010d81000d620d81000d010d81000d860d000d
+000d000d820d000d010d81000d450d82060d060106820700070707
+070782060d0601068207000d020d0300020d0200010d0200810d000100810d000200030d
+0200020d0300020d0500810d000300810d000100810d000100010d0300020d0400630d02
+00030d83000d000d020d0200470d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
+7f077f0726078100070107
+03077f0d7f0d210d820700070107
+0307820d06077f077f071c07840d060700070107
+0307830d0607047f047f041c0483060700070107
+0307830d0607047f047f041c0483060700070107
+0307830d0607047f047f040a040e0d8100048404060700070107
+0307830d0607047f047f040a04810d060b06820700048404060700070107
+0307830d06070481040d040d3a04010d7f044604810d060b068207000484040607000701
+07
+0307830d06070481040d810d040104010d1d04010d1904010d7f044604810d0601060107
+030601070106820700048404060700070107
+0307830d06070481040d810d040104010d1d04010d1904010d7f044604810d0602060107
+01060107010d83060700048404060700070107
+0307830d06070481040d810d040104010d81040d010d0104030d0104040d0204030d0104
+020d81040d010d81040d820d040d810d040304010d0104010d0104030d0104010d81040d
+810d0481040d810d0481040d020d0604030d0104020d81040d010d0104030d0104020d7f
+041a04810d0603060307010d0106820700048404060700070107
+0307830d06070481040d040d0104010d0104010d0104010d81040d810d0481040d820d04
+0d810d0481040d820d040d810d0481040d810d0481040d820d040d810d040304010d0104
+010d0404010d81040d820d040d810d0481040d820d040d810d0481040d810d040304010d
+0104010d81040d810d0481040d810d0481040d810d0481040d820d040d810d047f041a04
+810d0604060107010d0206820700048404060700070107
+0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
+040d040d81040d810d0481040d810d0481040d820d040d810d040404030d0204040d8104
+0d820d040d810d0481040d820d040d040d0404050d81040d810d0481040d810d0481040d
+810d0481040d820d040d810d047f041a04810d0603060307030682070004840406070007
+0107
+0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
+040d810d040304010d0104010d0104010d81040d810d040404030d0104010d0104010d81
+040d820d040d810d0481040d820d040d810d040704010d0404010d0104010d0104010d01
+04010d81040d810d047f041a04810d0602060107010d0107020682070004840406070007
+0107
+0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
+040d810d0481040d820d040d810d0481040d810d040104020d0704010d0204010d010401
+0d81040d820d040d820d040d010d81040d810d0481040d810d040304010d0104010d8104
+0d810d0481040d810d0481040d810d0481040d820d040d810d047f041a04810d06010601
+07010d010601070106820700048404060700070107
+0307830d06070481040d810d040404010d0204030d0104040d0204030d0104010d020401
+0d0104010d0804010d0304040d81040d810d0481040d030d0104030d0604030d0104010d
+0104010d0204030d0104010d7f041b04810d060206010d0306010d830607000484040607
+00070107
+0307830d0607041304010d1404010d7f045d04810d060b06820700048404060700070107
+
+0307830d0607041304010d1204020d7f045e04810d070c078100048404060700070107
+0307830d0607047f047f040a040f00010483060700070107
+0307830d0607047f047f041c0483060700070107
+0307830d0607047f047f041c0483060700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d06170602037f067f060406820700070107
+0307810d06160681030a830a0600067f067f060206820700070107
+0307810d06150681030a020a83060007067f067f0683060700070107
+0307810d06150681030a030a8100078107067f067f06820700070107
+0307810d06140681030a040a820600078107067f067e06820700070107
+0307810d06140681030a050a8100078107067f067e06820700070107
+0307810d06130681030a060a820600078107067f067d06820700070107
+0307810d06130681030a070a8100078107067f067d06820700070107
+0307810d06120681030a080a820600078107067f067c06820700070107
+0307810d06120681030a010a810600010081060a010a8100078107067f067c0682070007
+0107
+0307810d06110681030a020a0400020a820600078107067f067b06820700070107
+0307810d06110681030a020a0400030a8100078107061606810006030681000605068100
+0627068100061b0681000620068100062c06040001060200140681000602060400010602
+0001068100060a06820700070107
+0307810d06100681030a030a0400030a8206000781070615068100060306810006050681
+000621068100060306810006230681000618068100060906810006200681000603068100
+060106810006120681000602068100060306810006010683000600060a06820700070107
+
+0307810d06100681030a030a0400040a8100078107061606810006010681000606068100
+062106810006030681000623068100061806810006090681000620068100060306810006
+0106810006120681000602068100060306810006010683000600060a06820700070107
+0307810d060f0681030a040a0400040a8206000781070615068100060106810006010602
+000106830006000601068100068106000100040602008106008100068206000601068100
+068106008100068106008100060206030002060200050602000106820006008100060306
+840006000600810006810600810006810600010002060300010602000106010003060300
+020602000106010082060006820600068206000681060001000206020001068200060081
+000606060300010681000601068100060306020001068200060081000601060300030603
+000106810006010683000600060a06820700070107
+0307810d060f0681030a040a810300010081030a040a8100078107061506810006010681
+000604068500060006000601068300060006010681000602068100068206000684060006
+000601068300060006840600060006030681000601068300060006010681000606068200
+060081000682060006020682000600810006840600060006820600060106830006000601
+068300060006010683000600060306810006010683000600060106830006000682060006
+820600068406000600060106830006000601068200060081000682060006050681000601
+068300060006010681000606068200060081000684060006000601068100060206810006
+01068300060006010683000600060a06820700070107
+0307810d060e0681030a050a810600010081060a040a8206000781070615068300060006
+020603008406000600060106820006000300030681000682060006840600060006010681
+000682060006010681000603068100060106820006000300040603008206000601068100
+060206830006000601068300060006810600030082060006010682000600030082060006
+030681000601068200060003008206000689060006000600060006000300810600030082
+060006010681000602060100040683000600060106810006030603008206000601068300
+060006010681000606068300060006010683000600060a06820700070107
+0307810d060e0681030a060a0200070a8100078107061506830006000601068100060106
+850006000600060106830006000606068100068206000684060006000601068100060106
+810006820600060306810006010683000600060606810006010683000600060106810006
+020683000600060106830006000682060006030681000601068300060006030681000603
+068100060106830006000603068100068a06000600060006000600060306810006030681
+000601068100060906830006000601068100060206810006010683000600060106830006
+0006010681000606068300060006010683000600060a06820700070107
+0307810d060d0681030a070a830300030a060a8206000781070615068100060206810006
+010685000600060006810600830006000601068100060206810006820600068406000600
+068106008300060006840600060006030681000601068300060006010681000602068100
+060106830006000601068100060206830006000601068300060006820600060106830006
+000601068300060006010683000600060306810006010683000600060106830006000601
+068100060106810006820600060106830006000601068300060006010681000605068100
+060106830006000601068100060206810006010683000600060106830006000601068100
+0602068100060106830006000601068100060c06820700070107
+0307810d060d0681030a070a830600060a070a8100078107061506810006030603008206
+000681060083000600068106000100040681000682060006820600068106008300060006
+810600810006010681000602060300020602000506030082060006010681000602068300
+060006010681000682060006810600010002060300010602000106810006030603000206
+020002068100068206000601068100060106020002060200010681000601068100060606
+020002060200050603008206000601068100068106000200040602000206020001068100
+060a06820700070107
+0307810d060c0681030a090a81000a080a820600078107067c0681000677068207000701
+07
+0307810d060c0681030a150a810007810706780603007906820700070107
+0307810d060b0681030a090a8106008200060a070a820600078107067f06750682070007
+0107
+0307810d060b0681030a090a0300090a8100078107067f067506820700070107
+0307810d060a0681030a0a0a0300090a820600078107067f067406820700070107
+0307810d060a0681030a0a0a8106008200060a090a8100078107067f0674068207000701
+07
+0307810d060a0681030a190a81000701077f067406820700070107
+0307810d060a0681030a180a8206000701077f067406820700070107
+0307810d060b0681030a160a8206000702077f067406820700070107
+0307810d060c06810300160004077f067406820700070107
+0307810d060e061a077f067506820700070107
+0307810d060f0618077f067606820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d066b0648006a06820700070107
+0307810d066a064a006906820700070107
+0307810d066a060100450d8107008100066806820700070107
+0307810d066a060100440d010701006906820700070107
+0307810d066a060100010d18069100060006000600060006000600060006000617060107
+01006906820700070107
+0307810d066a060100010d4206010701006906820700070107
+0307810d066a060100010d18068100060d068100061706010701006906820700070107
+0307810d066a060100010d1b060300020681000601068100061906010701006906820700
+070107
+0307810d066a060100010d18068300060006020681000682060006820600068206000617
+06010701006906820700070107
+0307810d066a060100010d1a0681000602068100068406000600061b0601070100690682
+0700070107
+0307810d066a060100010d18068300060006020681000681060081000602068100061706
+010701006906820700070107
+0307810d066a060100010d1a0681000602068100068106008100061c0601070100690682
+0700070107
+0307810d066a060100010d18068300060006020681000684060006000601068100061706
+010701006906820700070107
+0307810d066a060100010d1a06810006020681000682060006820600061a060107010069
+06820700070107
+0307810d066a060100010d18068300060006020681000682060006010683000600061706
+010701006906820700070107
+0307810d066a060100010d1b060300020681000602068100061806010701006906820700
+070107
+0307810d066a060100010d18068100060d068100061706010701006906820700070107
+0307810d066a060100010d4206010701006906820700070107
+0307810d066a060100010d18069100060006000600060006000600060006000617060107
+01006906820700070107
+0307810d066a060100810d07440701006906820700070107
+0307810d066a060100460701006906820700070107
+0307810d066a064a006906820700070107
+0307810d066b0648006a06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+0307810d067f067f061f06820700070107
+7f077f0726078100070107
+02077f007f0024000207
+7f077f072a07
+7f077f072a07
+7f077f072a07
+7f077f072a07
+7f077f072a07
+7f077f072a07
+
+%
+% Compression made this file 5.68% of the uncompressed size.
+%
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null
+
+Prototype dialog editor and property sheet classes
+--------------------------------------------------
+
+Julian Smart, October 4th 1995
+------------------------------
+
+Here's what I've done so far on a lightweight dialog editor. The 16-bit
+Windows binaries in the bin directory are dialoged.exe (the dialog
+editor) and test.exe (a small property sheet demo).
+
+Main points:
+
+ - You can create a new dialog box and add items to it.
+ - You can move items around, and right-click
+ to edit a few properties (very incomplete).
+ - Can't write out .wxr files yet. Loading code is in
+ wxWindows, but writing code is absent: should be put
+ into wxWindows.
+ - No attempt at resources other than dialogs yet.
+ Should have menu editor too.
+ - Should *somehow* have a protocol to allow
+ existing resources e.g. in wxCLIPS/wxPython
+ to be edited in situ.
+ This should be made simpler by the existance of
+ the plug-in event handler mechanism, which means you
+ can temporarily handle all the events yourself.
+ - See dialoged.cc: the main program is tiny because
+ it's meant to be embeddable.
+ - The wxPropertySheet (set of) classes are very
+ general and should be put into wxWin and documented.
+
+Comments, chivvying and help all appreciated. Maybe if
+I documented what I had, it would be easier for others
+to do some work on it.
+
+Regards,
+
+Julian
\ No newline at end of file
--- /dev/null
+runTwice = yes
+titleFontSize = 12
+authorFontSize = 10
+chapterFontSize = 12
+sectionFontSize = 12
+subsectionFontSize = 12
+headerRule = yes
+footerRule = yes
+useHeadingStyles = yes
+contentsDepth = 2
+listItemIndent=40
+generateHPJ = yes
+htmlBrowseButtons = bitmap
+winHelpVersion = 3
+winHelpContents = yes
+winHelpTitle = "Property Classes Manual"
+truncateFilenames = yes
+\overview [2] {\rtfonly{See also }\sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}}
+\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
+\sethotspotcolour{on}\sethotspotunderline{on}}
+
--- /dev/null
+[OPTIONS]
+BMROOT=d:\wx2\utils\wxprop\docs ; Assume that bitmaps are where the source is
+TITLE=Property Classes Manual
+CONTENTS=Contents
+COMPRESS=HIGH
+
+[FILES]
+wxprop.rtf
+
+[CONFIG]
+CreateButton("Up", "&Up", "JumpId(`wxprop.hlp', `Contents')")
+BrowseButtons()
+
+[MAP]
+
+[BITMAPS]
+