Aa 7R33HH  d    dFootnote TableFootnotee*e*e. . / - lp(2\2 ])TOCHHeadingargv main(argcF !   eee!fH&*FGFGFGFGFGFoB-s-.Co :28581: Figure: Figure 1: The SlingShot extension hierarchy ula)84037: Figure: Figure 2: A sample program 818998: Figure: Figure 3: Execution of the sample program >53210: Figure: Figure 4: Assigning help and menus to an object R45319: Figure: Figure 5: Setting up single and double click callbacks on an object RF68954: Figure: Figure 6: Iterating through a list of SlingShot objects   :28581: Figure: Figure 1: The SlingShot extension hierarchy:28581: Figure: Figure 1: The SlingShot extension hierarchylp)84037: Figure: Figure 2: A sample program)818998: Figure: Figure 3: Execution of the sample program!>53210: Figure: Figure 4: Assigning help and menus to an object)84037: Figure: Figure 2: A sample programGR45319: Figure: Figure 5: Setting up single and double click callbacks on an objectF68954: Figure: Figure 6: Iterating through a list of SlingShot objects!<$lastpagenum>ig<$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear>e <$monthname> <$daynum>, <$year>:"<$monthnum>/<$daynum>/<$shortyear>ob<$monthname> <$daynum>, <$year>S"<$monthnum>/<$daynum>/<$shortyear>s  <$fullfilename>8  <$filename>  <$paratext[Title]>t  <$paratext[Heading]>  <$curpagenum>  <$marker1>1: <$marker2> T (Continued)Pagepage<$pagenum>:Heading & Page<$paranumonly>See Heading & Page%See <$paratext> on page<$pagenum>.m Table & Page7Table<$paranumonly>, <$paratext>, on page<$pagenum>p+ (Sheet <$tblsheetnum> of <$tblsheetcount>) wwPaobxxPyyP:igzzP og{{QA||Q:Ag}}Pusi~~P icQaAbQAQ:Ag@ghr%QSAg""@!''@apa,,@e>VynuJr>V$moI$daIhorJUthnIynuIr>:=$moJ$daEhorRbthnhynuEr>SE$moR$daThorK KlfiK  KenaZZt[TZ  \ateRg]>Z$cuQl$ma Figure 1: ZkerZ Zed)XZageQm>:PdinP<$Ply>P HePagePparkn pZenuY Tahe7ZaraZ <Z>,Z<$pRRet RtnuRblsR>) RKPobKxKEyP:B\ogB{\\|Q:Zhsih~hhQahhABhh@gKKAgK"KE'@aPPPVPJPVPIPIPJPUPIPIP=PJPEPRPbPhPEPEPRPPKPKPKPKgZPZPZP\PRPZPQ Pl P Fi PZ PZ lZ Figure 2: hZhm>:ZdinZ<$Bly>Z Helage Figure 3: Bn phenuZ Tale7 Figure 4: Z <k>,k<$pkket ktnukbls k>) !k"k#kob$kx%Z&kyP:'h(Bog)k{*h+k|Q:,k-ksi.k~/k0kQa1k2kA3k4k5k@g6k7hAg8k"9k:k'@a;k<k=kV>kJ?kV@kIAkIBkJCkUDhIElI Figure 5: GhJHhEI`RPJ`hK`PL`EPMgNgOgPkQhRZShThUl Figure 6: WhXkYkZk[k\k]k^k_k2: `kakm>:bkdinck<$dkly>ek Hefkage hureu&du7w|<dv}nuH$ wxu H$ ZUU` Hz xwyu Hz ~kUU` kH$ yxzu kH$ "UU`k aHz zy{u VHz kUU`U HH{z|u : HH`` `HH|{u HHh` lH$ }~v kH$ UU`k Hz ~}v >:Hz kUTUThre/SlingShot 2.0 Programmers Handbook9 HH~v HHnu` dH3K ^ H RH RFootnoteHqv? ^ kHzHzk Single Line H'Footnote z HvDf ^ HHU Double LineH  Double LinehH  Single LinezHZ TableFootnote EGX-Rb ^ EPoEPo TableFootnoted$HCm $HCmK ` ` 4 `v H `SlingShot Extensions to XView \ ` mUT UT`&Programmers Handbook for Version 2.1 }UR UT` UP UT` UN UT` UL UT` UJ UT` UH UT`le nUF UT` UD UT` `leBrian Warkentine UU` UU`  UU` ,UU` 8UU` DUU` PUU` \UU` hUUh!October 25, 1993 ztUU` UU` UU` dtn$HCm $HCm` d$   6)Sh6)S6SDS6F -n\ijJkIXVew d HZ*JkI~`aJkI UN UTӜqJkI~ ӜqLTJİ! y UDJRectobj`ӜqLTUU\ijaJkIZJkI~ ZLTUUOLJkIM8*JkI~!M8*LTZ*LT`ۊ@ y j$`$n XView CanvasZ*LT>LJkISJ9eJkI~ SJ9eLTOL^JkIM8\%JkI~SDM8\%LTOL$JkIM8"FJkI~M8"FLT HOLJkIM8WJkI~UTӜqM8WLT OLȂJkIJM8ggJkI~M8ggLTOKJkIaJkM8wJkI~ZJkM8wLTOKNJkIJkM83JkI~*JkM83LT*OLJkI*LTM8JkI~ۊ@M8LTOLw JkITM8tJkI~kIM8tLTkOLZJkITM8WeJkI~kIM8WeLTkOL=*JkITM8:JkI~kIM8:LTkOL ;LJkITM81JkI~kIM81LTk_uİA y Tj_u XView GenericU5ۊ; y ggs$U5$ Canvas_shellggAI nK_\%'` y 8s, _\, DrawrectkZ_l_j2@ y sfTZ_lfT Drawimage^и|Y) y s^иTDrawicon]8+P y s"]"DrawareaI~`4]IQ&_ y Ts`4]Drawline fQ/ y 8?Y3TfY3TGripk^ *4 y sP^P Array_tileicև- y skikeTreejǽ y ksaVjaVTBagM8kR)S8u y Is1@kR1@BoxfNa(T y sqfNaqTacho_Bz'm y sIú_IúDrawtextM81LTuM8:LTM8WeLT$M8tLTnM8LTyM83LTM8wLTM8ggLTDrM8WLTM8"FLTM8\%LTSJ9eLTIQM8*LT4]ZLTy7)A-n6cn-n>gJkIy_ileSe9eJkI~sSe9eLTחl+P y ?t3Tחt3TRTempGripySe9eLT@OLAPJkIM8?65JkI~TahoM8?65LTgkFo y 8sN0$gkN0$CBoxuM8?65LT>NJkI$S3JkI~nS3LT*8&Q y ?"*"ClockobjS3LT6-n/U7nh 6-n^Sl**6Ƨ-n6-n tM-nHH HH  y_UT UT`I~Preface -UU 9erThe XView toolkit provides a number of user interface objects such as Frames, Icons, and Panel items. While these 9UUqare necessary and appropriate for many types applications, programmers are forced to use Xlib to implement other EUUutypes of user interfaces. Unfortunately, Xlib programming is difficult and tedious. The SlingShot extensions provide QUU$vone answer to this dilemma, by supplying a set of objects and event handling routines that implement commonly ]UU@needed functionality. nUU oThe SlingShot extensions to XView are based on the XView toolkit. Programmers who already know XView will find zUU@*the SlingShot extensions very familiar because the XView API (xv_create(), xv_set(), xv_get(), etc.) is used. UU This document describes release 2.1 of SlingShot extensions. Release 2.1 is based on XView 3.0 (or later) and UUrflincorporates the XView 3.0 selections and drag and drop interfaces. This document is intended as a guide to riUU amapplication developers who want to write applications using the SlingShot extensions. Readers should have an cUU@ X$understanding of XView programming. us6Q-n Q6-nis6--nf bje6JO-natimp6g~-nne6ff-n =cnw re  =,ȴnmmrs M.nztU7-n t xtenp7-n ecused ,  HH  usHHt beUT UT` Introduction e-UU  2zLike many modern user interface toolkits, object oriented classes can be added to XView. The SlingShot extensions 9UUes}take advantage of this feature by adding 17 new object types. The SlingShot extension hierarchy and its relationship hEUUHio9to the XView hierarchy is shown in Figure 1. dRham  UUh&The SlingShot extension hierarchy *UU(In Figure 1, the two classes in the box on the left are part of XView. The remaining classes are part of the SlingShot 6UUvextensions. The Rectobj class (extension) provides the base functionality, such as support for common attributes, and BUUtprovides hooks for repainting, event handling, and geometry management. The remaining subclasses of the rectobj NUUuse the rectobj infrastructure and define additional functionality. Also note that the Canvas_shell is actually y ZUU@acksubclassed from the XView Canvas but shares some functionality implemented by the Rectobj. eskUU`f  sHdҀU  obectO!x$beN  errch_/W2Bv y UUji_/Wih XView Classeswd HH gSHH  ig` tA Sample Program hUU arTo illustrate the features of the SlingShot extensions, lets look at a simple program. (This example is included in the (UU@fuhsource distribution as example1.c. Additional examples are also included with the source distribution.) g,9UUhnd r(lUUh reA sample program h>kUU(The example program in Figure 2 creates four SlingShot objects and the running program is shown in Figure 3. The _KjUUy first SlingShot object, shell, is the window that the other objects will appear in. Its type is CANVAS_SHELL, a esXiUUf subclass of the XView CANVAS that knows about the other SlingShot objects that appear within it. In fact, all other iehUUaswSlingShot objects are windowless and are only visible when inside a CANVAS_SHELL. You can create a SlingShot rgUU@^CANVAS_SHELL whereever you would ordinarily create or use a XView CANVAS. dleHH d HHibasUU ioThe second object that is created, rectobj1, is a BAG. This is an invisible object that serves as a place to put other ThUUinobjects. The BAG is a class that shrinks or expands to fit the dimensions of other objects. In this example, the BAG hUU@ndobject is used to hold two objects, drawrect1 and drawtext1, which appear as a rectangle and text. /UU abvLike other XView objects, SlingShot objects are organized into hierarchies. Each object has an owner and can have ;UUreseveral children. In the example, rectobj1 is a subtree or child of shell, drawtext1 and drawrect1 are children of GUU@rectobj1. The parent-child relationship is usually established by the first argument to xv_create(). bXUUhUU o UUht $Execution of the sample program a 6UU hiThe position and sizes of SlingShot objects are controlled with the XV_X, XV_Y, XV_WIDTH and XV_HEIGHT lasBUU oattributes. The positions are relative to the objects owner. In the example, rectobj1 is positioned at (100, 0) of the s NUUbjshell; drawtext1 is positioned at (10, 60) of rectobj1; drawrect1 is positioned at (0, 16) of rectobj1. The width and ZUUctheight of drawrect1 are set to 200. Note that the width and height of drawtext1 do not need to be set, because it is efUU@j1 h`p.#include f`th#include '`ng#include ex2`to =` Vmain(argc, argv) fH`f intargc; S`chchar*argv[]; es^`op{ i` Frameframe; tit`bjCanvas_shellshell; `e Rectobjrectobj1; n `ilDrawrect drawrect1; ` TDrawtextdrawtext1; `s  `ll4xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL); wh`or `do)frame = (Frame) xv_create(NULL, FRAME, e`icFRAME_LABEL, argv[0], `DO NULL); ` b `>shell = (Canvas_shell) xv_create(frame, CANVAS_SHELL, NULL); ` `,rectobj1 = (Rectobj) xv_create(shell, BAG, <`XV_X, 100, `ca NULL); $`th i/`ob7drawrect1 = (Drawrect) xv_create(rectobj1, DRAWRECT, ex:`to XV_Y, 16, E`c,XV_WIDTH, 200, P`gcXV_HEIGHT, 200, ch[`es NULL); f` q`fr7drawtext1 = (Drawtext) xv_create(rectobj1, DRAWTEXT, |`to#DRAWTEXT_STRING, Hello World, D`1; XV_X, 60, `t XV_Y, 10, `  NULL); ` (X N` &axv_main_loop(frame); ` } ` ( m;cuH H( bUTUT There is a built in debugging tool that lets you view the boundaries of all the objects in a canvas_shell. Invoke this by holding down (shURUT@Kthe keyboard control and shift buttons and clicking the left mouse button. thdt1e(HH HH!!c,V_UT UT`Handling Events V_-UU rIn contrast to the XView Canvas, the SlingShot extensions provide higher level events. The low level event stream 9UU{from the window serveris processed into higher level abstractions such as single click, double click, and drag and , EUU@ drop. a` Help and Menus vUU _luEach SlingShot object can have help information assigned to it, and can share help with its children. An application UUtassociates help information with an object by setting the XV_HELP_DATA attribute (as described in the XView leUUunwProgramming Manual.) When the help button is pressed, the SlingShot extensions find the help information, and then ntrUUnsdisplay it with xv_help_show(). The SlingShot extensions find the help data by exploiting the hierarchial relationships UU~between objects. If there is no XV_HELP_DATA attached to the object that the help event occurred on, then the UUovzobjects owners are searched in turn until help data is found or until the canvas_shell is reached. This makes it easy to UU@ti1specify help information for a group of objects. dϪUU tEach SlingShot object can also have a menu assigned to it, and can share the menu with its children. An application io۪UUan|first creates a menu, then associates the menu with an object by setting the RECTOBJ_MENU attribute. When the right g 窜UUTAmouse button is pressed, the SlingShot extensions find the menu and display it with XViews menu_show(). Menus ensUU iuare searched for among the objects owners using the object hierarchy, in the same manner that help data is searched eUU@lpfor. yUU(%erIn Figure 4, a menu called my_menu is attached to rectobj1 using RECTOBJ_MENU, and help data is associated using cUU@%n MXV_HELP_DATA. It is assumed that my_menu was previously created. i-UUhhe _ժUUhTh*Assigning help and menus to an object `tiSingle Click, Double Click ϪUU EavSingle click and double click callbacks are provided by the SlingShot extensions. When a user clicks on a object such UUfias the drawtext1 object in Figure 2, it becomes highlighted. When the user releases the mouse button, the single click mo UUse{callback function is called. If the user clicks on the object again within a certain time limit, the double click callback UU-UU@chfunction is called. ow?UU(*ecdFigure 5 shows how these callbacks are specified with RECTOBJ_SINGLE_CLICK_PROC and %LUU*wRECTOBJ_DOUBLE_CLICK_PROC. On the first click, my_single_click_proc() will be called. On the double click, tedYUU*UUvmy_double_click_proc() will be called. The arguments to the callback provide context for the click operation: The fUU*paint_window and canvas_shell are the windows that event occurred on, and click_object is the SlingShot object that arsUU@*Sl&the users mouse was positioned over. dfiHH beHH&&elthUUhDe  cQUUhEUU>Setting up single and double click callbacks on an object nIh`()Low Level Event Handling lUU UUtAs mentioned, all the SlingShot extensions except the Canvas_shell are windowless. Because X and XView send h UU@_C]events to windows only, the windowless SlingShot objects have to cooperate to handle events. UU SrozEvents that have a location, such as a mouse click event, need to be associated with the object at that location. UUS pBecause objects can overlap, this needs to be done carefully. An event is mapped to a single object if the x and y eveUUSd plocation of the event is within the bounds of the SlingShot object. Because some objects are non-rectangular, a ne UU@S\callback function (RECTOBJ_MAP_EVENT_PROC) actually implements the bounds checking.  UU QvOnce the event is mapped to an object, a callback function for that object (RECTOBJ_EVENT_PROC) is invoked.  UUQwAs you might imagine, the RECTOBJ_EVENT_PROC is a low level interface so most SlingShot classes set up default exc UUQllsevent handlers to transform events into higher level callbacks, such as the single and double click callbacks. The gSh UU@Q cGprebuilt event handlers available for application use are: tioUU`I crectobj_selection_event_proc() ate%UU MeclThis function supports selectable objects and invokes callbacks for selections, single click, double click, nt2UU@Mand start drag. oIUU`J yrectobj_button_event_proc() ti[UU N wfThis function makes the object act like a button: the object is highlighted while the mouse button is hUUNctNpressed over the object, and unhighlighted in normal conditions. It calls the uUU@NARECTOBJ_SINGLE_CLICK_PROC when the user releases the button. tdHH HH ve(rfUU`Khorectobj_toggle_event_proc() UU`OevTThis function toggles an object between two states, highlighted and normal. ou/UU`Ls. rectobj_background_event_proc() uiAUU`erSSupports rubberbanding and selection of objects that fit in the rubberbanded area. on_XUU GAll the event handlers support callbacks for handling Drag & Drop drop events, and XView help and menus are MeUU@Gagdisplayed autonomously. rewUU '_pvMany of the objects use rectobj_selection_event_proc() by default because it supports the most general set of UU'vfeatures. The application is free to set any of these functions for their RECTOBJ_EVENT_PROC depending on the UU@'Cbehavior that is desired. UU HwThere are alternatives if none of these event functions fit your needs. One option is to write your own event proc and UUHxassign it with RECTOBJ_EVENT_PROC. The advantage of this callback is that it only gets called when events occur UUHnoon the object. The other option is to use notify_interpose_event_func() to catch events before they arrive at the event obʪUU@Hthrproc of the canvas_shells paint windows. This option could require more work, but may get the effect you desire. `opSelections XViUU numThe SlingShot extensions provide for highlighting and unhighlighting of an object when the user clicks on or e UUenrubberbands around the object. The list of selected objects is accessible by calling rectobj_get_selected_list(). This is UUonrin itself not enough to interact with other desktop applications. The application has to do a little more work to #UUe rinteroperate with the XView selection interface. This can only be done by the application because the application 0UU@as1knows about what the selected objects represent. aBUU k lTo use the XView selection interface, the application should create an XView Selection_owner object and set e OUUsetappropriate attributes, such as the conversion and done functions. It may wish to create a Selection_item also. The ai\UUptsSlingShot extensions will make use of a Selection_owner object if it is informed of its existence. This is done by iUUt jsetting RECTOBJ_SELECTION_OWNER. Once a Selection_owner is specified for an object, the SlingShot vUUndextensions can automatically set the SEL_OWN, and SEL_TIME attributes to acquire the primary selection when the UUUUf vuser highlights an object. The SlingShot extensions will also handle the loss of a selection and will unhighlight the UU w|object. (It does not use the SEL_LOSE_PROC for this, so you dont have to worry about it overriding the application s UU@ec callback.) eprUU UUjRECTOBJ_SELECTION_OWNER may be set on each object that you want to have highlighted, or on a group of UUvobjects. The rectobj hierarchy is searched upward until a selection owner is found. Only one primary selection can be ɪUU@oowned at a time, so if every object has a different owner, simultaneous selected objects will not be possible. Thi۪UU`iThere is an example of interacting with selections in the examples directory of the source distribution. t`Initiating Drag and Drop s UU  soTo initiate drag and drop operations, the application should have set up the selection interface by creating a UUhtvDRAGDROP and associated objects. To get notification of when to begin processing the drag and drop operation, set 'UUdouan objects RECTOBJ_START_DRAG_PROC. This callback is invoked when a user clicks on an object and drags it a 4UUbaqfew pixels. Within this callback, the drag and drop operation can be started by calling dnd_send_drop(). eAUU@f ERECTOBJ_DRAGGABLE should be set to true to enable this callback. ^`owReceiving Drag and Drops asUU e oSeveral attributes control how drag preview and drop events are processed. CANVAS_SHELL_AUTO_DROP_SITE ll UUhi{tells the canvas_shell to create and maintain a DROP_SITE_ITEM. The drop site area is the size of the paint window . t\@rarUUW p  =FrameImage #%vYjxC@ZJptE^a:ǯgO77OgƷ@xB?????????????????????????VϠptE^lA/G_wϷoW?'rL&[-rL&[-V?????????????????????????TӋtE^zI'?Wo׿w_G/嶬·T?????????????????????????                    $    c;Ehc<Ehc<Ehc<Ehc<Ehchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch  =EndInset d  HH  HH**%UUvand one is created for every paint window. When RECTOBJ_ACCEPTS_DROP is TRUE, the SlingShot object is UUtnotified of drag events (inside its dimensions) and of drop events by the RECTOBJ_DROP_PROC. This callback UUoshould look at the id of the event for ACTION_DRAG_PREVIEW, ACTION_DRAG_COPY, etc., and do the -UU@Zappropriate action, such as highlighting the object or calling dnd_decode_drop(). ?UU oExamples of handling drag and drop with the SlingShot extensions can be found in the examples directory of the LUU@source distribution. i`Lists ~UU 7nDoubly linked lists are used in the SlingShot extensions for several purposes. For example, the children of a UU7SlingShot object are linked up using a linked list and the function rectobj_get_selected_list() returns a linked list of UU@7iSlingShot objects that are selected. In some cases, applications will need to use these list functions. nUU(W{The example in Figure 6 illustrates iterating through a list of objects. Some of the list operations used here are calUUWUUmacros, as implemented in . This example uses the list_for() macro to interate through the list of pĪUU@WsuHchildren of another SlingShot object, a_parent_rectobj. ֪UUhTpl aUUhUop2Iterating through a list of SlingShot objects `ofColor ԪUU xTo use color with the SlingShot extensions, the application needs to create an XView cms and assign the WIN_CMS te᪛UU pyattribute of the window (Canvas_shell or Frame). Each object can refer to the cms colors with the RECTOBJ_FG and nUUgexRECTOBJ_BG attributes. These attributes are indexes into the cms for the window that they are in. The default color apUU@ed'is set by setting the attribute to -1. UU UU  plThe default colors for all objects in a canvas_shell can be set by setting the RECTOBJ_FG and RECTOBJ_BG on the WUU@ mpJcanvas_shell. By default these are the last and first entries of the cms. 7` t%Where to get information and sources LUU chpThe first thing to do when you have a problem or question is to peruse the examples directory. This handbook is UYUUg wadmittedly brief, and the examples should prove to be illustrative in areas that are not covered in detail here. (Also ensfUUiornote the brief descriptions of the example programs in Appendix E.) A second place for information is Usenet. The sUUUUaUsenet newsgroups comp.windows.open-look and alt.toolkits.xview have a number of readers who are BUU@s.8knowledgeable about XView and the SlingShot extensions. thKx̰!apOۃ"#is$"#! 1.$rs ll`as e`et `GMenumy_menu; J_'`Rectobjrectobj1; as2` t e=`fi ... H`  S`! gxv_set(rectobj1, ^`"UURECTOBJ_MENU,my_menu, i`&a .XV_HELP_DATA,sample_program:filebutton, t`#bo NULL); `$ad tm$H#"!d rovd$ a%%ilHH%$ ioHH leamUU A As of this writing, the latest major release is available via ftp on ftp.x.org as /contrib/SlingShot2.1.tar.Z. This ftp umUU aserver is mirrored to various sites around the world, so check your local ftp server first. Previously, an automated mail UU@Carchive server was set up, but this service has been discontinued. O[QķJ `?Ijxv_set(drawtext1, `@7RECTOBJ_SINGLE_CLICK_PROC,my_single_click_proc, `A1RECTOBJ_DBL_CLICK_PROC,my_dbl_click_proc, c`B+ NULL); `Cin , n22n(')&')eve n22n)(&_s'(N!ƪ*.v+, k_UU+,*S ,+* c `P `fRectobj_list*my_list; d`XRectobjchild_rectobj; i'`Yw, i2`ZGmy_list = (Rectobj_list*) xv_get(a_parent_rectobj, RECTOBJ_CHILDREN); =`[e H`\je(/* iterate through all the children */ S`]r list_for(my_list) { _^`^ng+/* get the child out of the list node */ `<i`_0child_rectobj = RECTOBJ_LIST_HANDLE(my_list); t``_s/* do something with it */ @`aINxv_set(child_rectobj, le`bRECTOBJ_FG, orange, OBJ`c NULL); `d} +`e AduLeftdvn2Rightd Referenced,Coverk_d,Coverd dddPdd ddtodd$ =}C.@= `\Body$$f>t_ ildclass-description/ class-end_f?A` HaINl_s(cecbjbECBJ rae,Dprose`( f@P chapter Single LineprosefAA  class-endfBP  subsectionproseo( fDP  class-name Single Line class-descriptionfEAHlclscpts-d_ Dattr-endfF  CellHeadingfGf CellBodyfHT   TableTitleT:Table : fI Body@J   HeaderfKA Hl Dattr-endsc$$fLq l attr-default Default: attr-procs$$fMp fattr-description attr-argumentCefNA HlTaeTe +> fDattr-end@O  FooterfPQ  Hl Dhlisting( fQPf chapter Single LineprosefRAHlf-dcr Dtrattr-end$$fSA lTa attr-usageUsage:attr-endfTA OHl   FoDattr-end@U  Footer@V   FooterfWPs  attr-nameattr-description( fXP  chapter Single Linedprose$@YFootnotefZA Hl D prose$$f[q l attr-argument Argument: attr-defaulterf\P  sectionproseH$f]Q  ,lHlat-n-dcr fDlist with bullet$$f^qd l@ attr-procsProcs: attr-usage@_ZFootnoteH$f`Q  ,l Hoslf Dlist with bulletfaQr  Hl ioDoshlistingffbA -nHlcrfst buetDattr-endfcP  ttrsectionproseusafdP  subsectionprose65" fgA  H lf Dlist descriptionfhA H l DprosefiQ  $Hl-ncr fDsthbuetcode65" fjA  Hseiolsaf Dlist descriptionfkQ  $Hl   Dfhcode @le Figure Figure : Hprose @me Figure Figure : prosei# zV -n Times-12-i zV   egYf    Courier-10 _   zV zVk zV hl Times-10-i egYegY  Times-10-izVTimes-16 Times-12Times-24  Courier-9  Helvetica-12zVzV   h ;co  h h-10 egY h Times-10-i _ _ Courier-10zV _ Courier-10  Z; Z Z Z ZeujeThinfMediumgDoublehThicki@i Very Thin eeeeeeeeegHHFGFHFGFHFGFHFGFHFGFFormat A efeeeeefHHFGFHFGFHFGFHFGFHFGFFormat B-=-s-.CommentCourierTimes Helvetica_ Regular Regular BoldRegularItalicxc0 x1L4Q(a`DWܪu,!P×k-;m?bO^rcd$SJdϞ_剼s<2M fҨGEgxTKt 9lٰ>5؊y9\??u(cL#| pV2ޏ Yg`0`p ȮMF,9o[K퀒