[BACK]Return to dir_design.ps CVS log [TXT][DIR] Up to [Development] / xfs-website / design_docs / xfsdocs93_ps

File: [Development] / xfs-website / design_docs / xfsdocs93_ps / dir_design.ps (download)

Revision 1.1, Wed Mar 29 22:55:48 2000 UTC (17 years, 7 months ago) by cattelan
Branch: MAIN
CVS Tags: HEAD

Add files with -kb flag

%!PS-Adobe-3.0
%%BoundingBox: (atend)
%%Pages: (atend)
%%PageOrder: (atend)
%%DocumentFonts: (atend)
%%Creator: Frame 4.0
%%DocumentData: Clean7Bit
%%EndComments
%%BeginProlog
%
% Frame ps_prolog 4.0, for use with Frame 4.0 products
% This ps_prolog file is Copyright (c) 1986-1993 Frame Technology
% Corporation.  All rights reserved.  This ps_prolog file may be
% freely copied and distributed in conjunction with documents created
% using FrameMaker, FrameBuilder and FrameViewer as long as this 
% copyright notice is preserved.
%
% Frame products normally print colors as their true color on a color printer
% or as shades of gray, based on luminance, on a black-and white printer. The
% following flag, if set to True, forces all non-white colors to print as pure
% black. This has no effect on bitmap images.
/FMPrintAllColorsAsBlack             false def
%
% Frame products can either set their own line screens or use a printer's 
% default settings. Three flags below control this separately for no 
% separations, spot separations and process separations. If a flag
% is true, then the default printer settings will not be changed. If it is
% false, Frame products will use their own settings from a table based on
% the printer's resolution.
/FMUseDefaultNoSeparationScreen      true  def
/FMUseDefaultSpotSeparationScreen    true  def
/FMUseDefaultProcessSeparationScreen false def
%
% For any given PostScript printer resolution, Frame products have two sets of 
% screen angles and frequencies for printing process separations, which are 
% recomended by Adobe. The following variable chooses the higher frequencies
% when set to true or the lower frequencies when set to false. This is only
% effective if the appropriate FMUseDefault...SeparationScreen flag is false.
/FMUseHighFrequencyScreens true def
%
% PostScript Level 2 printers contain an "Accurate Screens" feature which can
% improve process separation rendering at the expense of compute time. This 
% flag is ignored by PostScript Level 1 printers.
/FMUseAcccurateScreens true def
%
% The following PostScript procedure defines the spot function that Frame
% products will use for process separations. You may un-comment-out one of
% the alternative functions below, or use your own.
%
% Dot function
/FMSpotFunction {abs exch abs 2 copy add 1 gt 
		{1 sub dup mul exch 1 sub dup mul add 1 sub }
		{dup mul exch dup mul add 1 exch sub }ifelse } def
%
% Line function
% /FMSpotFunction { pop } def
%
% Elipse function
% /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add 
%		sqrt 1 exch sub } def
%
%
/FMversion (4.0) def 
/FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def
/FMPColor
	FMLevel1 {
		false
		/colorimage where {pop pop true} if
	} {
		true
	} ifelse
def
/FrameDict 400 dict def 
systemdict /errordict known not {/errordict 10 dict def
		errordict /rangecheck {stop} put} if
% The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk
FrameDict /tmprangecheck errordict /rangecheck get put 
errordict /rangecheck {FrameDict /bug true put} put 
FrameDict /bug false put 
mark 
% Some PS machines read past the CR, so keep the following 3 lines together!
currentfile 5 string readline
00
0000000000
cleartomark 
errordict /rangecheck FrameDict /tmprangecheck get put 
FrameDict /bug get { 
	/readline {
		/gstring exch def
		/gfile exch def
		/gindex 0 def
		{
			gfile read pop 
			dup 10 eq {exit} if 
			dup 13 eq {exit} if 
			gstring exch gindex exch put 
			/gindex gindex 1 add def 
		} loop
		pop 
		gstring 0 gindex getinterval true 
		} bind def
	} if
/FMshowpage /showpage load def
/FMquit /quit load def
/FMFAILURE { 
	dup = flush 
	FMshowpage 
	/Helvetica findfont 12 scalefont setfont
	72 200 moveto
	show FMshowpage 
	FMquit 
	} def 
/FMVERSION {
	FMversion ne {
		(Frame product version does not match ps_prolog!) FMFAILURE
		} if
	} def 
/FMBADEPSF { 
	(PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X              )
	dup dup (X) search pop exch pop exch pop length 
	4 -1 roll 
	putinterval 
	FMFAILURE
	} def
/FMLOCAL {
	FrameDict begin
	0 def 
	end 
	} def 
/concatprocs
	{
	/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
	newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx
}def
FrameDict begin 
/FMnone 0 def
/FMcyan 1 def
/FMmagenta 2 def
/FMyellow 3 def
/FMblack 4 def
/FMcustom 5 def
/FrameNegative false def 
/FrameSepIs FMnone def 
/FrameSepBlack 0 def
/FrameSepYellow 0 def
/FrameSepMagenta 0 def
/FrameSepCyan 0 def
/FrameSepRed 1 def
/FrameSepGreen 1 def
/FrameSepBlue 1 def
/FrameCurGray 1 def
/FrameCurPat null def
/FrameCurColors [ 0 0 0 1 0 0 0 ] def 
/FrameColorEpsilon .001 def	
/eqepsilon {		
	sub dup 0 lt {neg} if
	FrameColorEpsilon le
} bind def
/FrameCmpColorsCMYK { 
	2 copy 0 get exch 0 get eqepsilon {
		2 copy 1 get exch 1 get eqepsilon {
			2 copy 2 get exch 2 get eqepsilon {
				3 get exch 3 get eqepsilon
			} {pop pop false} ifelse
		}{pop pop false} ifelse
	} {pop pop false} ifelse
} bind def
/FrameCmpColorsRGB { 
	2 copy 4 get exch 0 get eqepsilon {
		2 copy 5 get exch 1 get eqepsilon {
			6 get exch 2 get eqepsilon
		}{pop pop false} ifelse
	} {pop pop false} ifelse
} bind def
/RGBtoCMYK { 
	1 exch sub 
	3 1 roll 
	1 exch sub 
	3 1 roll 
	1 exch sub 
	3 1 roll 
	3 copy 
	2 copy 
	le { pop } { exch pop } ifelse 
	2 copy 
	le { pop } { exch pop } ifelse 
	dup dup dup 
	6 1 roll 
	4 1 roll 
	7 1 roll 
	sub 
	6 1 roll 
	sub 
	5 1 roll 
	sub 
	4 1 roll 
} bind def
/CMYKtoRGB { 
	dup dup 4 -1 roll add 						  
	5 1 roll 3 -1 roll add 						  
	4 1 roll add 								  
	1 exch sub dup 0 lt {pop 0} if 3 1 roll 	  
	1 exch sub dup 0 lt {pop 0} if exch 	      
	1 exch sub dup 0 lt {pop 0} if exch	  		  
} bind def
/FrameSepInit {
	1.0 RealSetgray
} bind def
/FrameSetSepColor { 
	/FrameSepBlue exch def
	/FrameSepGreen exch def
	/FrameSepRed exch def
	/FrameSepBlack exch def
	/FrameSepYellow exch def
	/FrameSepMagenta exch def
	/FrameSepCyan exch def
	/FrameSepIs FMcustom def
	setCurrentScreen	
} bind def
/FrameSetCyan {
	/FrameSepBlue 1.0 def
	/FrameSepGreen 1.0 def
	/FrameSepRed 0.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 1.0 def
	/FrameSepIs FMcyan def
	setCurrentScreen	
} bind def
 
/FrameSetMagenta {
	/FrameSepBlue 1.0 def
	/FrameSepGreen 0.0 def
	/FrameSepRed 1.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 1.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMmagenta def
	setCurrentScreen
} bind def
 
/FrameSetYellow {
	/FrameSepBlue 0.0 def
	/FrameSepGreen 1.0 def
	/FrameSepRed 1.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 1.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMyellow def
	setCurrentScreen
} bind def
 
/FrameSetBlack {
	/FrameSepBlue 0.0 def
	/FrameSepGreen 0.0 def
	/FrameSepRed 0.0 def
	/FrameSepBlack 1.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMblack def
	setCurrentScreen
} bind def
 
/FrameNoSep { 
	/FrameSepIs FMnone def
	setCurrentScreen
} bind def
/FrameSetSepColors { 
	FrameDict begin
	[ exch 1 add 1 roll ]
	/FrameSepColors  
	exch def end
	} bind def
/FrameColorInSepListCMYK { 
	FrameSepColors {  
       		exch dup 3 -1 roll 
       		FrameCmpColorsCMYK 
       		{ pop true exit } if
    	} forall 
	dup true ne {pop false} if
	} bind def
/FrameColorInSepListRGB { 
	FrameSepColors {  
       		exch dup 3 -1 roll 
       		FrameCmpColorsRGB 
       		{ pop true exit } if
    	} forall 
	dup true ne {pop false} if
	} bind def
/RealSetgray /setgray load def
/RealSetrgbcolor /setrgbcolor load def
/RealSethsbcolor /sethsbcolor load def
end 
/setgray { 
	FrameDict begin
	FrameSepIs FMnone eq
		{ RealSetgray } 
		{ 
		FrameSepIs FMblack eq 
			{ RealSetgray } 
			{ FrameSepIs FMcustom eq 
			  FrameSepRed 0 eq and
			  FrameSepGreen 0 eq and
			  FrameSepBlue 0 eq and {
			  	RealSetgray
			  } {
				1 RealSetgray pop 
			  } ifelse
			} ifelse
		} ifelse
	end
} bind def
/setrgbcolor { 
	FrameDict begin
	FrameSepIs FMnone eq
	{  RealSetrgbcolor }
	{
		3 copy [ 4 1 roll ] 
		FrameColorInSepListRGB
		{
				FrameSepBlue eq exch 
			 	FrameSepGreen eq and exch 
			 	FrameSepRed eq and
			 	{ 0 } { 1 } ifelse
		}
		{
			FMPColor {
				RealSetrgbcolor
				currentcmykcolor
			} {
				RGBtoCMYK
			} ifelse
			FrameSepIs FMblack eq
			{1.0 exch sub 4 1 roll pop pop pop} {
			FrameSepIs FMyellow eq
			{pop 1.0 exch sub 3 1 roll pop pop} {
			FrameSepIs FMmagenta eq
			{pop pop 1.0 exch sub exch pop } {
			FrameSepIs FMcyan eq
			{pop pop pop 1.0 exch sub } 
			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
		} ifelse
		RealSetgray
	} 
	ifelse
	end
} bind def
/sethsbcolor {
	FrameDict begin
	FrameSepIs FMnone eq 
	{ RealSethsbcolor } 
	{
		RealSethsbcolor 
		currentrgbcolor  
		setrgbcolor 
	} 
	ifelse
	end
} bind def
FrameDict begin
/setcmykcolor where {
	pop /RealSetcmykcolor /setcmykcolor load def
} {
	/RealSetcmykcolor {
		4 1 roll
		3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat 
		setrgbcolor pop
	} bind def
} ifelse
userdict /setcmykcolor { 
		FrameDict begin
		FrameSepIs FMnone eq
		{ RealSetcmykcolor } 
		{
			4 copy [ 5 1 roll ]
			FrameColorInSepListCMYK
			{
				FrameSepBlack eq exch 
				FrameSepYellow eq and exch 
				FrameSepMagenta eq and exch 
				FrameSepCyan eq and 
				{ 0 } { 1 } ifelse
			}
			{
				FrameSepIs FMblack eq
				{1.0 exch sub 4 1 roll pop pop pop} {
				FrameSepIs FMyellow eq
				{pop 1.0 exch sub 3 1 roll pop pop} {
				FrameSepIs FMmagenta eq
				{pop pop 1.0 exch sub exch pop } {
				FrameSepIs FMcyan eq
				{pop pop pop 1.0 exch sub } 
				{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
			} ifelse
			RealSetgray
		}
		ifelse
		end
	} bind put
FMLevel1 not { 
	
	/patProcDict 5 dict dup begin
		<0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 
											4 -4 moveto 12 4 lineto stroke
											-4 4 moveto 4 12 lineto stroke} bind def
		<0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke 
											-4 4 moveto 4 -4 lineto stroke
											4 12 moveto 12 4 lineto stroke} bind def
		<8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke
											-1 -1 moveto 9 9 lineto stroke } bind def
		<03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 
											4 -4 moveto 12 4 lineto stroke
											-4 4 moveto 4 12 lineto stroke} bind def
		<8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke 
											-4 4 moveto 4 -4 lineto stroke
											4 12 moveto 12 4 lineto stroke} bind def
	end def
	/patDict 15 dict dup begin
		/PatternType 1 def		
		/PaintType 2 def		
		/TilingType 3 def		
		/BBox [ 0 0 8 8 ] def 	
		/XStep 8 def			
		/YStep 8 def			
		/PaintProc {
			begin
			patProcDict bstring known {
				patProcDict bstring get exec
			} {
				8 8 true [1 0 0 -1 0 8] bstring imagemask
			} ifelse
			end
		} bind def
	end def
} if
/combineColor {
    FrameSepIs FMnone eq
	{
		graymode FMLevel1 or not {
			
			[/Pattern [/DeviceCMYK]] setcolorspace
			FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor
		} {
			FrameCurColors 3 get 1.0 ge {
				FrameCurGray RealSetgray
			} {
				FMPColor graymode and {
					0 1 3 { 
						FrameCurColors exch get
						1 FrameCurGray sub mul
					} for
					RealSetcmykcolor
				} {
					4 1 6 {
						FrameCurColors exch get
						graymode {
							1 exch sub 1 FrameCurGray sub mul 1 exch sub
						} {
							1.0 lt {FrameCurGray} {1} ifelse
						} ifelse
					} for
					RealSetrgbcolor
				} ifelse
			} ifelse
		} ifelse
	} { 
		FrameCurColors 0 4 getinterval aload
		FrameColorInSepListCMYK {
			FrameSepBlack eq exch 
			FrameSepYellow eq and exch 
			FrameSepMagenta eq and exch 
			FrameSepCyan eq and
			FrameSepIs FMcustom eq and
			{ FrameCurGray } { 1 } ifelse
		} {
			FrameSepIs FMblack eq
			{FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} {
			FrameSepIs FMyellow eq
			{pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} {
			FrameSepIs FMmagenta eq
			{pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } {
			FrameSepIs FMcyan eq
			{pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } 
			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
		} ifelse
		graymode FMLevel1 or not {
			
			[/Pattern [/DeviceGray]] setcolorspace
			FrameCurPat setcolor
		} { 
			graymode not FMLevel1 and {
				
				dup 1 lt {pop FrameCurGray} if
			} if
			RealSetgray
		} ifelse
	} ifelse
} bind def
/savematrix {
	orgmatrix currentmatrix pop
	} bind def
/restorematrix {
	orgmatrix setmatrix
	} bind def
/dmatrix matrix def
/dpi    72 0 dmatrix defaultmatrix dtransform
    dup mul exch   dup mul add   sqrt def
	
/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def
/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
/dpiranges   [  2540    2400    1693     1270    1200     635      600      0      ] def
/CMLowFreqs  [ 100.402  94.8683 89.2289 100.402  94.8683  66.9349  63.2456 47.4342 ] def
/YLowFreqs   [  95.25   90.0    84.65    95.25   90.0     70.5556  66.6667 50.0    ] def
/KLowFreqs   [  89.8026 84.8528 79.8088  89.8026 84.8528  74.8355  70.7107 53.033  ] def
/CLowAngles  [  71.5651 71.5651 71.5651 71.5651  71.5651  71.5651  71.5651 71.5651 ] def
/MLowAngles  [  18.4349 18.4349 18.4349 18.4349  18.4349  18.4349  18.4349 18.4349 ] def
/YLowTDot    [  true    true    false    true    true     false    false   false   ] def
/CMHighFreqs [ 133.87  126.491 133.843  108.503 102.523  100.402   94.8683 63.2456 ] def
/YHighFreqs  [ 127.0   120.0   126.975  115.455 109.091   95.25    90.0    60.0    ] def
/KHighFreqs  [ 119.737 113.137 119.713  128.289 121.218   89.8026  84.8528 63.6395 ] def
/CHighAngles [  71.5651 71.5651 71.5651  70.0169 70.0169  71.5651  71.5651 71.5651 ] def
/MHighAngles [  18.4349 18.4349 18.4349  19.9831 19.9831  18.4349  18.4349 18.4349 ] def
/YHighTDot   [  false   false   true     false   false    true     true    false   ] def
/PatFreq     [	10.5833 10.0     9.4055  10.5833 10.0	  10.5833  10.0	   9.375   ] def
/screenIndex {
	0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for
} bind def
/getCyanScreen {
	FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse
		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
} bind def
/getMagentaScreen {
	FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse
		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
} bind def
/getYellowScreen {
	FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse
		screenIndex dup 3 1 roll get 3 1 roll get { 3 div
			{2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat
			FMSpotFunction } } {/FMSpotFunction load } ifelse
			0.0 exch
} bind def
/getBlackScreen  {
	FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse
		screenIndex get 45.0 /FMSpotFunction load 
} bind def
/getSpotScreen {
	getBlackScreen
} bind def
/getCompositeScreen {
	getBlackScreen
} bind def
/FMSetScreen 
	FMLevel1 { /setscreen load 
	}{ {
		8 dict begin
		/HalftoneType 1 def
		/SpotFunction exch def
		/Angle exch def
		/Frequency exch def
		/AccurateScreens FMUseAcccurateScreens def
		currentdict end sethalftone
	} bind } ifelse
def
/setDefaultScreen {
	FMPColor {
		orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer
	}
	{
		orgxfer cvx settransfer
	} ifelse
	orgfreq organgle orgproc cvx setscreen
} bind def
/setCurrentScreen {
	FrameSepIs FMnone eq {
		FMUseDefaultNoSeparationScreen {
			setDefaultScreen
		} {
			getCompositeScreen FMSetScreen
		} ifelse
	} {
		FrameSepIs FMcustom eq {
			FMUseDefaultSpotSeparationScreen {
				setDefaultScreen
			} {
				getSpotScreen FMSetScreen
			} ifelse
		} {
			FMUseDefaultProcessSeparationScreen {
				setDefaultScreen
			} {
				FrameSepIs FMcyan eq {
					getCyanScreen FMSetScreen
				} {
					FrameSepIs FMmagenta eq {
						getMagentaScreen FMSetScreen
					} {
						FrameSepIs FMyellow eq {
							getYellowScreen FMSetScreen
						} {
							getBlackScreen FMSetScreen
						} ifelse
					} ifelse
				} ifelse
			} ifelse
		} ifelse
	} ifelse 
} bind def
end
	/gstring FMLOCAL
	/gfile FMLOCAL
	/gindex FMLOCAL
	/orgrxfer FMLOCAL
	/orggxfer FMLOCAL
	/orgbxfer FMLOCAL
	/orgxfer FMLOCAL
	/orgproc FMLOCAL
	/orgrproc FMLOCAL
	/orggproc FMLOCAL
	/orgbproc FMLOCAL
	/organgle FMLOCAL
	/orgrangle FMLOCAL
	/orggangle FMLOCAL
	/orgbangle FMLOCAL
	/orgfreq FMLOCAL
	/orgrfreq FMLOCAL
	/orggfreq FMLOCAL
	/orgbfreq FMLOCAL
	/yscale FMLOCAL
	/xscale FMLOCAL
	/edown FMLOCAL
	/manualfeed FMLOCAL
	/paperheight FMLOCAL
	/paperwidth FMLOCAL
/FMDOCUMENT { 
	array /FMfonts exch def 
	/#copies exch def
	FrameDict begin
	0 ne /manualfeed exch def
	/paperheight exch def
	/paperwidth exch def
	0 ne /FrameNegative exch def 
	0 ne /edown exch def 
	/yscale exch def
	/xscale exch def
	FMLevel1 {
		manualfeed {setmanualfeed} if
		/FMdicttop countdictstack 1 add def 
		/FMoptop count def 
		setpapername 
		manualfeed {true} {papersize} ifelse 
		{manualpapersize} {false} ifelse 
		{desperatepapersize} {false} ifelse 
		{ (Can't select requested paper size for Frame print job!) FMFAILURE } if
		count -1 FMoptop {pop pop} for
		countdictstack -1 FMdicttop {pop end} for 
		}
		{{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped
		{ (Can't select requested paper size for Frame print job!) FMFAILURE } if
		 {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop }
	ifelse 
	
	FMPColor {
		currentcolorscreen
			cvlit /orgproc exch def
				  /organgle exch def 
				  /orgfreq exch def
			cvlit /orgbproc exch def
				  /orgbangle exch def 
				  /orgbfreq exch def
			cvlit /orggproc exch def
				  /orggangle exch def 
				  /orggfreq exch def
			cvlit /orgrproc exch def
				  /orgrangle exch def 
				  /orgrfreq exch def
			currentcolortransfer 
			FrameNegative {
				1 1 4 { 
					pop { 1 exch sub } concatprocs 4 1 roll
				} for
				4 copy
				setcolortransfer
			} if
			cvlit /orgxfer exch def
			cvlit /orgbxfer exch def
			cvlit /orggxfer exch def
			cvlit /orgrxfer exch def
	} {
		currentscreen 
			cvlit /orgproc exch def
				  /organgle exch def 
				  /orgfreq exch def
				  
		currenttransfer 
		FrameNegative {
			{ 1 exch sub } concatprocs
			dup settransfer
		} if 
		cvlit /orgxfer exch def
	} ifelse
	end 
} def 
/pagesave FMLOCAL
/orgmatrix FMLOCAL
/landscape FMLOCAL
/pwid FMLOCAL
/FMBEGINPAGE { 
	FrameDict begin 
	/pagesave save def
	3.86 setmiterlimit
	/landscape exch 0 ne def
	landscape { 
		90 rotate 0 exch dup /pwid exch def neg translate pop 
	}{
		pop /pwid exch def
	} ifelse
	edown { [-1 0 0 1 pwid 0] concat } if
	0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 
	0 paperheight lineto 0 0 lineto 1 setgray fill
	xscale yscale scale
	/orgmatrix matrix def
	gsave 
} def 
/FMENDPAGE {
	grestore 
	pagesave restore
	end 
	showpage
	} def 
/FMFONTDEFINE { 
	FrameDict begin
	findfont 
	ReEncode 
	1 index exch 
	definefont 
	FMfonts 3 1 roll 
	put
	end 
	} def 
/FMFILLS {
	FrameDict begin dup
	array /fillvals exch def
	dict /patCache exch def
	end 
	} def 
/FMFILL {
	FrameDict begin
	 fillvals 3 1 roll put
	end 
	} def 
/FMNORMALIZEGRAPHICS { 
	newpath
	0.0 0.0 moveto
	1 setlinewidth
	0 setlinecap
	0 0 0 sethsbcolor
	0 setgray 
	} bind def
	/fx FMLOCAL
	/fy FMLOCAL
	/fh FMLOCAL
	/fw FMLOCAL
	/llx FMLOCAL
	/lly FMLOCAL
	/urx FMLOCAL
	/ury FMLOCAL
/FMBEGINEPSF { 
	end 
	/FMEPSF save def 
	/showpage {} def 
% See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714.
% "...the following operators MUST NOT be used in an EPS file:" (emphasis ours)
	/banddevice {(banddevice) FMBADEPSF} def
	/clear {(clear) FMBADEPSF} def
	/cleardictstack {(cleardictstack) FMBADEPSF} def 
	/copypage {(copypage) FMBADEPSF} def
	/erasepage {(erasepage) FMBADEPSF} def
	/exitserver {(exitserver) FMBADEPSF} def
	/framedevice {(framedevice) FMBADEPSF} def
	/grestoreall {(grestoreall) FMBADEPSF} def
	/initclip {(initclip) FMBADEPSF} def
	/initgraphics {(initgraphics) FMBADEPSF} def
	/initmatrix {(initmatrix) FMBADEPSF} def
	/quit {(quit) FMBADEPSF} def
	/renderbands {(renderbands) FMBADEPSF} def
	/setglobal {(setglobal) FMBADEPSF} def
	/setpagedevice {(setpagedevice) FMBADEPSF} def
	/setshared {(setshared) FMBADEPSF} def
	/startjob {(startjob) FMBADEPSF} def
	/lettertray {(lettertray) FMBADEPSF} def
	/letter {(letter) FMBADEPSF} def
	/lettersmall {(lettersmall) FMBADEPSF} def
	/11x17tray {(11x17tray) FMBADEPSF} def
	/11x17 {(11x17) FMBADEPSF} def
	/ledgertray {(ledgertray) FMBADEPSF} def
	/ledger {(ledger) FMBADEPSF} def
	/legaltray {(legaltray) FMBADEPSF} def
	/legal {(legal) FMBADEPSF} def
	/statementtray {(statementtray) FMBADEPSF} def
	/statement {(statement) FMBADEPSF} def
	/executivetray {(executivetray) FMBADEPSF} def
	/executive {(executive) FMBADEPSF} def
	/a3tray {(a3tray) FMBADEPSF} def
	/a3 {(a3) FMBADEPSF} def
	/a4tray {(a4tray) FMBADEPSF} def
	/a4 {(a4) FMBADEPSF} def
	/a4small {(a4small) FMBADEPSF} def
	/b4tray {(b4tray) FMBADEPSF} def
	/b4 {(b4) FMBADEPSF} def
	/b5tray {(b5tray) FMBADEPSF} def
	/b5 {(b5) FMBADEPSF} def
	FMNORMALIZEGRAPHICS 
	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
	fx fw 2 div add fy fh 2 div add  translate
	rotate
	fw 2 div neg fh 2 div neg translate
	fw urx llx sub div fh ury lly sub div scale 
	llx neg lly neg translate 
	/FMdicttop countdictstack 1 add def 
	/FMoptop count def 
	} bind def
/FMENDEPSF {
	count -1 FMoptop {pop pop} for 
	countdictstack -1 FMdicttop {pop end} for 
	FMEPSF restore
	FrameDict begin 
	} bind def
FrameDict begin 
/setmanualfeed {
%%BeginFeature *ManualFeed True
	 statusdict /manualfeed true put
%%EndFeature
	} bind def
/max {2 copy lt {exch} if pop} bind def
/min {2 copy gt {exch} if pop} bind def
/inch {72 mul} def
/pagedimen { 
	paperheight sub abs 16 lt exch 
	paperwidth sub abs 16 lt and
	{/papername exch def} {pop} ifelse
	} bind def
	/papersizedict FMLOCAL
/setpapername { 
	/papersizedict 14 dict def 
	papersizedict begin
	/papername /unknown def 
		/Letter 8.5 inch 11.0 inch pagedimen
		/LetterSmall 7.68 inch 10.16 inch pagedimen
		/Tabloid 11.0 inch 17.0 inch pagedimen
		/Ledger 17.0 inch 11.0 inch pagedimen
		/Legal 8.5 inch 14.0 inch pagedimen
		/Statement 5.5 inch 8.5 inch pagedimen
		/Executive 7.5 inch 10.0 inch pagedimen
		/A3 11.69 inch 16.5 inch pagedimen
		/A4 8.26 inch 11.69 inch pagedimen
		/A4Small 7.47 inch 10.85 inch pagedimen
		/B4 10.125 inch 14.33 inch pagedimen
		/B5 7.16 inch 10.125 inch pagedimen
	end
	} bind def
/papersize {
	papersizedict begin
		/Letter {lettertray letter} def
		/LetterSmall {lettertray lettersmall} def
		/Tabloid {11x17tray 11x17} def
		/Ledger {ledgertray ledger} def
		/Legal {legaltray legal} def
		/Statement {statementtray statement} def
		/Executive {executivetray executive} def
		/A3 {a3tray a3} def
		/A4 {a4tray a4} def
		/A4Small {a4tray a4small} def
		/B4 {b4tray b4} def
		/B5 {b5tray b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	statusdict begin stopped end 
	} bind def
/manualpapersize {
	papersizedict begin
		/Letter {letter} def
		/LetterSmall {lettersmall} def
		/Tabloid {11x17} def
		/Ledger {ledger} def
		/Legal {legal} def
		/Statement {statement} def
		/Executive {executive} def
		/A3 {a3} def
		/A4 {a4} def
		/A4Small {a4small} def
		/B4 {b4} def
		/B5 {b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	stopped 
	} bind def
/desperatepapersize {
	statusdict /setpageparams known
		{
		paperwidth paperheight 0 1 
		statusdict begin
		{setpageparams} stopped 
		end
		} {true} ifelse 
	} bind def
/DiacriticEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
/numbersign /dollar /percent /ampersand /quotesingle /parenleft
/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
/two /three /four /five /six /seven /eight /nine /colon /semicolon
/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
/udieresis /dagger /.notdef /cent /sterling /section /bullet
/paragraph /germandbls /registered /copyright /trademark /acute
/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
/periodcentered /quotesinglbase /quotedblbase /perthousand
/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
] def
/ReEncode { 
	dup 
	length 
	dict begin 
	{
	1 index /FID ne 
		{def} 
		{pop pop} ifelse 
	} forall 
	0 eq {/Encoding DiacriticEncoding def} if 
	currentdict 
	end 
	} bind def
FMPColor 
	
	{
	/BEGINBITMAPCOLOR { 
		BITMAPCOLOR} def
	/BEGINBITMAPCOLORc { 
		BITMAPCOLORc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUECOLOR } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUECOLORc } def
	}
	
	{
	/BEGINBITMAPCOLOR { 
		BITMAPGRAY} def
	/BEGINBITMAPCOLORc { 
		BITMAPGRAYc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUEGRAY } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUEGRAYc } def
	}
ifelse
/K { 
	FMPrintAllColorsAsBlack {
		dup 1 eq 2 index 1 eq and 3 index 1 eq and not
			{7 {pop} repeat 0 0 0 1 0 0 0} if
	} if 
	FrameCurColors astore 
	pop combineColor
} bind def
/graymode true def
	/bwidth FMLOCAL
	/bpside FMLOCAL
	/bstring FMLOCAL
	/onbits FMLOCAL
	/offbits FMLOCAL
	/xindex FMLOCAL
	/yindex FMLOCAL
	/x FMLOCAL
	/y FMLOCAL
/setPatternMode {
	FMLevel1 {
		/bwidth  exch def
		/bpside  exch def
		/bstring exch def
		/onbits 0 def  /offbits 0 def
		freq sangle landscape {90 add} if 
			{/y exch def
			 /x exch def
			 /xindex x 1 add 2 div bpside mul cvi def
			 /yindex y 1 add 2 div bpside mul cvi def
			 bstring yindex bwidth mul xindex 8 idiv add get
			 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if
			 {/onbits  onbits  1 add def 1}
			 {/offbits offbits 1 add def 0}
			 ifelse
			}
			setscreen
		offbits offbits onbits add div FrameNegative {1.0 exch sub} if
		/FrameCurGray exch def
	} { 
		pop pop
		dup patCache exch known {
			patCache exch get
		} { 
			dup
			patDict /bstring 3 -1 roll put
			patDict 
			9 PatFreq screenIndex get div dup matrix scale
			makepattern
			dup 
			patCache 4 -1 roll 3 -1 roll put
		} ifelse
		/FrameCurGray 0 def
		/FrameCurPat exch def
	} ifelse
	/graymode false def
	combineColor
} bind def
/setGrayScaleMode {
	graymode not {
		/graymode true def
		FMLevel1 {
			setCurrentScreen
		} if
	} if
	/FrameCurGray exch def
	combineColor
} bind def
/normalize {
	transform round exch round exch itransform
	} bind def
/dnormalize {
	dtransform round exch round exch idtransform
	} bind def
/lnormalize { 
	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
	} bind def
/H { 
	lnormalize setlinewidth
	} bind def
/Z {
	setlinecap
	} bind def
	
/PFill {
	graymode FMLevel1 or not {
		gsave 1 setgray eofill grestore
	} if
} bind def
/PStroke {
	graymode FMLevel1 or not {
		gsave 1 setgray stroke grestore
	} if
	stroke
} bind def
	/fillvals FMLOCAL
/X { 
	fillvals exch get
	dup type /stringtype eq
	{8 1 setPatternMode} 
	{setGrayScaleMode}
	ifelse
	} bind def
/V { 
	PFill gsave eofill grestore
	} bind def
/Vclip {
	clip
	} bind def
/Vstrk {
	currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/N { 
	PStroke
	} bind def
/Nclip {
	strokepath clip newpath
	} bind def
/Nstrk {
	currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/M {newpath moveto} bind def
/E {lineto} bind def
/D {curveto} bind def
/O {closepath} bind def
	/n FMLOCAL
/L { 
 	/n exch def
	newpath
	normalize
	moveto 
	2 1 n {pop normalize lineto} for
	} bind def
/Y { 
	L 
	closepath
	} bind def
	/x1 FMLOCAL
	/x2 FMLOCAL
	/y1 FMLOCAL
	/y2 FMLOCAL
/R { 
	/y2 exch def
	/x2 exch def
	/y1 exch def
	/x1 exch def
	x1 y1
	x2 y1
	x2 y2
	x1 y2
	4 Y 
	} bind def
	/rad FMLOCAL
/rarc 
	{rad 
	 arcto
	} bind def
/RR { 
	/rad exch def
	normalize
	/y2 exch def
	/x2 exch def
	normalize
	/y1 exch def
	/x1 exch def
	mark
	newpath
	{
	x1 y1 rad add moveto
	x1 y2 x2 y2 rarc
	x2 y2 x2 y1 rarc
	x2 y1 x1 y1 rarc
	x1 y1 x1 y2 rarc
	closepath
	} stopped {x1 y1 x2 y2 R} if 
	cleartomark
	} bind def
/RRR { 
	/rad exch def
	normalize /y4 exch def /x4 exch def
	normalize /y3 exch def /x3 exch def
	normalize /y2 exch def /x2 exch def
	normalize /y1 exch def /x1 exch def
	newpath
	normalize moveto 
	mark
	{
	x2 y2 x3 y3 rarc
	x3 y3 x4 y4 rarc
	x4 y4 x1 y1 rarc
	x1 y1 x2 y2 rarc
	closepath
	} stopped
	 {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if
	cleartomark
	} bind def
/C { 
	grestore
	gsave
	R 
	clip
	setCurrentScreen
} bind def
/CP { 
	grestore
	gsave
	Y 
	clip
	setCurrentScreen
} bind def
	/FMpointsize FMLOCAL
/F { 
	FMfonts exch get
	FMpointsize scalefont
	setfont
	} bind def
/Q { 
	/FMpointsize exch def
	F 
	} bind def
/T { 
	moveto show
	} bind def
/RF { 
	rotate
	0 ne {-1 1 scale} if
	} bind def
/TF { 
	gsave
	moveto 
	RF
	show
	grestore
	} bind def
/P { 
	moveto
	0 32 3 2 roll widthshow
	} bind def
/PF { 
	gsave
	moveto 
	RF
	0 32 3 2 roll widthshow
	grestore
	} bind def
/S { 
	moveto
	0 exch ashow
	} bind def
/SF { 
	gsave
	moveto
	RF
	0 exch ashow
	grestore
	} bind def
/B { 
	moveto
	0 32 4 2 roll 0 exch awidthshow
	} bind def
/BF { 
	gsave
	moveto
	RF
	0 32 4 2 roll 0 exch awidthshow
	grestore
	} bind def
/G { 
	gsave
	newpath
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	PFill fill
	grestore
	} bind def
/Gstrk {
	savematrix
    newpath
    2 index 2 div add exch 3 index 2 div sub exch 
    normalize 2 index 2 div sub exch 3 index 2 div add exch 
    translate
    scale 
    0.0 0.0 1.0 5 3 roll arc 
    restorematrix
    currentlinewidth exch setlinewidth PStroke setlinewidth
    } bind def
/Gclip { 
	newpath
	savematrix
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	clip newpath
	restorematrix
	} bind def
/GG { 
	gsave
	newpath
	normalize translate 0.0 0.0 moveto 
	rotate 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath
	PFill
	fill
	grestore
	} bind def
/GGclip { 
	savematrix
	newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath
	clip newpath
	restorematrix
	} bind def
/GGstrk { 
	savematrix
    newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath 
	restorematrix
    currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/A { 
	gsave
	savematrix
	newpath
	2 index 2 div add exch 3 index 2 div sub exch 
	normalize 2 index 2 div sub exch 3 index 2 div add exch 
	translate 
	scale 
	0.0 0.0 1.0 5 3 roll arc 
	restorematrix
	PStroke
	grestore
	} bind def
/Aclip {
	newpath
	savematrix
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	strokepath clip newpath
	restorematrix
} bind def
/Astrk {
	Gstrk
} bind def
/AA { 
	gsave
	savematrix
	newpath
	
	3 index 2 div add exch 4 index 2 div sub exch 
	
	normalize 3 index 2 div sub exch 4 index 2 div add exch
	translate 
	rotate 
	scale 
	0.0 0.0 1.0 5 3 roll arc 
	restorematrix
	PStroke
	grestore
	} bind def
/AAclip {
	savematrix
	newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath
	strokepath clip newpath
	restorematrix
} bind def
/AAstrk {
	GGstrk
} bind def
	/x FMLOCAL
	/y FMLOCAL
	/w FMLOCAL
	/h FMLOCAL
	/xx FMLOCAL
	/yy FMLOCAL
	/ww FMLOCAL
	/hh FMLOCAL
	/FMsaveobject FMLOCAL
	/FMoptop FMLOCAL
	/FMdicttop FMLOCAL
/BEGINPRINTCODE { 
	/FMdicttop countdictstack 1 add def 
	/FMoptop count 7 sub def 
	/FMsaveobject save def
	userdict begin 
	/showpage {} def 
	FMNORMALIZEGRAPHICS 
	3 index neg 3 index neg translate
	} bind def
/ENDPRINTCODE {
	count -1 FMoptop {pop pop} for 
	countdictstack -1 FMdicttop {pop end} for 
	FMsaveobject restore 
	} bind def
/gn { 
	0 
	{	46 mul 
		cf read pop 
		32 sub 
		dup 46 lt {exit} if 
		46 sub add 
		} loop
	add 
	} bind def
	/str FMLOCAL
/cfs { 
	/str sl string def 
	0 1 sl 1 sub {str exch val put} for 
	str def 
	} bind def
/ic [ 
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0
	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
	] def
	/sl FMLOCAL
	/val FMLOCAL
	/ws FMLOCAL
	/im FMLOCAL
	/bs FMLOCAL
	/cs FMLOCAL
	/len FMLOCAL
	/pos FMLOCAL
/ms { 
	/sl exch def 
	/val 255 def 
	/ws cfs 
	/im cfs 
	/val 0 def 
	/bs cfs 
	/cs cfs 
	} bind def
400 ms 
/ip { 
	is 
	0 
	cf cs readline pop 
	{	ic exch get exec 
		add 
		} forall 
	pop 
	
	} bind def
/rip { 
	   
	  
	  bis ris copy pop 
      is
      0
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop 
	  ris gis copy pop 
	  dup is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop
	  gis bis copy pop 
	  dup add is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
      pop 
      
      } bind def
/wh { 
	/len exch def 
	/pos exch def 
	ws 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/bl { 
	/len exch def 
	/pos exch def 
	bs 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/s1 1 string def
/fl { 
	/len exch def 
	/pos exch def 
	/val cf s1 readhexstring pop 0 get def
	pos 1 pos len add 1 sub {im exch val put} for
	pos len 
	} bind def
/hx { 
	3 copy getinterval 
	cf exch readhexstring pop pop 
	} bind def
	/h FMLOCAL
	/w FMLOCAL
	/d FMLOCAL
	/lb FMLOCAL
	/bitmapsave FMLOCAL
	/is FMLOCAL
	/cf FMLOCAL
/wbytes { 
      dup dup
      24 eq { pop pop 3 mul }
      { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse
	} bind def
/BEGINBITMAPBWc { 
	1 {} COMMONBITMAPc
	} bind def
/BEGINBITMAPGRAYc { 
	8 {} COMMONBITMAPc
	} bind def
/BEGINBITMAP2BITc { 
	2 {} COMMONBITMAPc
	} bind def
/COMMONBITMAPc { 
		 
	/r exch def
	/d exch def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	r                    
	/is im 0 lb getinterval def 
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{ip} image 
	bitmapsave restore 
	grestore
	} bind def
/BEGINBITMAPBW { 
	1 {} COMMONBITMAP
	} bind def
/BEGINBITMAPGRAY { 
	8 {} COMMONBITMAP
	} bind def
/BEGINBITMAP2BIT { 
	2 {} COMMONBITMAP
	} bind def
/COMMONBITMAP { 
	/r exch def
	/d exch def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/bitmapsave save def 
	r                    
	/is w d wbytes string def
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{cf is readhexstring pop} image
	bitmapsave restore 
	grestore
	} bind def
/ngrayt 256 array def
/nredt 256 array def
/nbluet 256 array def
/ngreent 256 array def
	/gryt FMLOCAL
	/blut FMLOCAL
	/grnt FMLOCAL
	/redt FMLOCAL
	/indx FMLOCAL
	/cynu FMLOCAL
	/magu FMLOCAL
	/yelu FMLOCAL
	/k FMLOCAL
	/u FMLOCAL
FMLevel1 {
/colorsetup {
	currentcolortransfer
	/gryt exch def
	/blut exch def
	/grnt exch def
	/redt exch def
	0 1 255 {
		/indx exch def
		/cynu 1 red indx get 255 div sub def
		/magu 1 green indx get 255 div sub def
		/yelu 1 blue indx get 255 div sub def
		/k cynu magu min yelu min def
		/u k currentundercolorremoval exec def
%		/u 0 def
		nredt indx 1 0 cynu u sub max sub redt exec put
		ngreent indx 1 0 magu u sub max sub grnt exec put
		nbluet indx 1 0 yelu u sub max sub blut exec put
		ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
	} for
	{255 mul cvi nredt exch get}
	{255 mul cvi ngreent exch get}
	{255 mul cvi nbluet exch get}
	{255 mul cvi ngrayt exch get}
	setcolortransfer
	{pop 0} setundercolorremoval
	{} setblackgeneration
	} bind def
}
{
/colorSetup2 {
	[ /Indexed /DeviceRGB 255 
		{dup red exch get 255 div 
		 exch dup green exch get 255 div 
		 exch blue exch get 255 div}
	] setcolorspace
} bind def
} ifelse
	/tran FMLOCAL
/fakecolorsetup {
	/tran 256 string def
	0 1 255 {/indx exch def 
		tran indx
		red indx get 77 mul
		green indx get 151 mul
		blue indx get 28 mul
		add add 256 idiv put} for
	currenttransfer
	{255 mul cvi tran exch get 255.0 div}
	exch concatprocs settransfer
} bind def
/BITMAPCOLOR { 
	/d 8 def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/bitmapsave save def
	FMLevel1 {	
		colorsetup
		/is w d wbytes string def
		/cf currentfile def 
		w h d [w 0 0 h neg 0 h] 
		{cf is readhexstring pop} {is} {is} true 3 colorimage 
	} {
		colorSetup2
		/is w d wbytes string def
		/cf currentfile def 
		7 dict dup begin
			/ImageType 1 def
			/Width w def
			/Height h def
			/ImageMatrix [w 0 0 h neg 0 h] def
			/DataSource {cf is readhexstring pop} bind def
			/BitsPerComponent d def
			/Decode [0 255] def
		end image	
	} ifelse
	bitmapsave restore 
	grestore
	} bind def
/BITMAPCOLORc { 
	/d 8 def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	FMLevel1 {	
		colorsetup
		/is im 0 lb getinterval def 
		ws 0 lb getinterval is copy pop 
		/cf currentfile def 
		w h d [w 0 0 h neg 0 h] 
		{ip} {is} {is} true 3 colorimage
	} {
		colorSetup2
		/is im 0 lb getinterval def 
		ws 0 lb getinterval is copy pop 
		/cf currentfile def 
		7 dict dup begin
			/ImageType 1 def
			/Width w def
			/Height h def
			/ImageMatrix [w 0 0 h neg 0 h] def
			/DataSource {ip} bind def
			/BitsPerComponent d def
			/Decode [0 255] def
		end image	
	} ifelse
	bitmapsave restore 
	grestore
	} bind def
/BITMAPTRUECOLORc { 
	/d 24 def
        gsave
 	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
        /bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/ris im 0 w getinterval def	
	/gis im w w getinterval def	
	/bis im w 2 mul w getinterval def 
        
        ws 0 lb getinterval is copy pop 
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        {w rip pop ris} {gis} {bis} true 3 colorimage
        bitmapsave restore 
        grestore
        } bind def
/BITMAPTRUECOLOR { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/h exch def /w exch def
        /bitmapsave save def 
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        { cf is readhexstring pop } 
        { cf gis readhexstring pop } 
        { cf bis readhexstring pop } 
        true 3 colorimage 
        bitmapsave restore 
        grestore
        } bind def
/BITMAPTRUEGRAYc { 
	/d 24 def
        gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
        /bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/ris im 0 w getinterval def	
	/gis im w w getinterval def	
	/bis im w 2 mul w getinterval def 
        ws 0 lb getinterval is copy pop 
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        {w rip pop ris gis bis w gray} image
        bitmapsave restore 
        grestore
        } bind def
/ww FMLOCAL
/r FMLOCAL
/g FMLOCAL
/b FMLOCAL
/i FMLOCAL
/gray { 
        /ww exch def
        /b exch def
        /g exch def
        /r exch def
        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
        r
        } bind def
/BITMAPTRUEGRAY { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/h exch def /w exch def
        /bitmapsave save def 
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        { cf is readhexstring pop 
          cf gis readhexstring pop 
          cf bis readhexstring pop w gray}  image
        bitmapsave restore 
        grestore
        } bind def
/BITMAPGRAY { 
	8 {fakecolorsetup} COMMONBITMAP
	} bind def
/BITMAPGRAYc { 
	8 {fakecolorsetup} COMMONBITMAPc
	} bind def
/ENDBITMAP {
	} bind def
end 
	/ALDsave FMLOCAL
	/ALDmatrix matrix def ALDmatrix currentmatrix pop
/StartALD {
	/ALDsave save def
	 savematrix
	 ALDmatrix setmatrix
	} bind def
/InALD {
	 restorematrix
	} bind def
/DoneALD {
	 ALDsave restore
	} bind def
/I { setdash } bind def
/J { [] 0 setdash } bind def
%%EndProlog
%%BeginSetup
(4.0) FMVERSION
1 1 0 0 612 792 0 1 6 FMDOCUMENT
0 0 /Times-Roman FMFONTDEFINE
1 0 /Times-Bold FMFONTDEFINE
2 0 /Courier-Bold FMFONTDEFINE
3 0 /Courier FMFONTDEFINE
32 FMFILLS
0 0 FMFILL
1 0.1 FMFILL
2 0.3 FMFILL
3 0.5 FMFILL
4 0.7 FMFILL
5 0.9 FMFILL
6 0.97 FMFILL
7 1 FMFILL
8 <0f1e3c78f0e1c387> FMFILL
9 <0f87c3e1f0783c1e> FMFILL
10 <cccccccccccccccc> FMFILL
11 <ffff0000ffff0000> FMFILL
12 <8142241818244281> FMFILL
13 <03060c183060c081> FMFILL
14 <8040201008040201> FMFILL
16 1 FMFILL
17 0.9 FMFILL
18 0.7 FMFILL
19 0.5 FMFILL
20 0.3 FMFILL
21 0.1 FMFILL
22 0.03 FMFILL
23 0 FMFILL
24 <f0e1c3870f1e3c78> FMFILL
25 <f0783c1e0f87c3e1> FMFILL
26 <3333333333333333> FMFILL
27 <0000ffff0000ffff> FMFILL
28 <7ebddbe7e7dbbd7e> FMFILL
29 <fcf9f3e7cf9f3f7e> FMFILL
30 <7fbfdfeff7fbfdfe> FMFILL
%%EndSetup
%%Page: "1" 1
%%BeginPaperSize: Letter
%%EndPaperSize
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
J
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 1 of 12) 649.62 224.67 T
232.99 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(1.0  In-Inode Format) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Dir) 85.75 665.33 T
(ectories stor) 108.56 665.33 T
(ed inside an inode have this structur) 191.35 665.33 T
(e:) 438.19 665.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 503.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Packed tight on byte boundaries.) 85.75 503.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 479.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Inode size gr) 85.75 479.33 T
(ows/shrinks to exactly r) 172.56 479.33 T
(equir) 333.6 479.33 T
(ed size.) 369.76 479.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 455.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(When it won\325t \336t in the inode any mor) 85.75 455.33 T
(e, transition to a single leaf node.) 346.8 455.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 431.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(No ordering of names, linear sear) 85.75 431.33 T
(ch.) 313.87 431.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 407.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Par) 85.75 407.33 T
(ent inode number is explicit, self r) 110.34 407.33 T
(efer) 341.6 407.33 T
(ence \050eg: \322.\323\051 is implicit.) 367.95 407.33 T
72 252 720 702 C
72 522 720 660 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
80.15 534 710.15 651 R
7 X
0 0 0 1 0 0 0 K
V
0.5 H
2 Z
0 X
N
89.15 606 341.15 642 R
7 X
V
2.5 H
0 X
N
98.15 615 242.15 633 R
7 X
V
0 16 Q
0 X
(parent inode number) 98.15 622.33 T
260.15 615 332.15 633 R
7 X
V
0 X
-0.43 (entry count) 260.15 622.33 P
341.15 606 692.15 642 R
7 X
V
0 X
N
350.15 615 467.15 633 R
7 X
V
0 X
(inode number) 350.15 622.33 T
494.15 615 548.15 633 R
7 X
V
0 X
(length) 494.15 622.33 T
566.15 615 683.15 633 R
7 X
V
0 X
(text of \336le name) 566.15 622.33 T
485.15 642 485.15 606 2 L
0.5 H
N
251.15 642 251.15 606 2 L
N
557.15 642 557.15 606 2 L
N
89.15 552 440.15 588 R
7 X
V
2.5 H
0 X
N
98.15 561 215.15 579 R
7 X
V
0 X
(inode number) 98.15 568.33 T
242.15 561 296.15 579 R
7 X
V
0 X
(length) 242.15 568.33 T
314.15 561 431.15 579 R
7 X
V
0 X
(text of \336le name) 314.15 568.33 T
233.15 588 233.15 552 2 L
0.5 H
N
305.15 588 305.15 552 2 L
N
90 450 2.81 2.81 482.34 563.81 G
90 450 2.81 2.81 482.34 563.81 A
90 450 2.81 2.81 509.34 563.81 G
90 450 2.81 2.81 509.34 563.81 A
90 450 2.81 2.81 536.34 563.81 G
90 450 2.81 2.81 536.34 563.81 A
72 252 720 702 C
0 -208 1000 792 C
FMENDPAGE
%%EndPage: "1" 1
%%Page: "2" 2
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 2 of 12) 649.62 224.67 T
194 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(2.0  Leaf Blocks) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Leaf nodes have this structur) 85.75 665.33 T
(e:) 284.56 665.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 335.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Part of a doubly linked list at each level in the tr) 85.75 335.33 T
(ee \050forw) 413.9 335.33 T
(, back\051) 468.54 335.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 311.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Manages fr) 85.75 311.33 T
(ee/used space in the block via limited-size, run-length coded, map \050base*, size*\051) 163.22 311.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 287.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(T) 85.75 287.33 T
(racks if ther) 95.23 287.33 T
(e is fr) 178.48 287.33 T
(ee space not r) 216.4 287.33 T
(ecorded in fr) 308.98 287.33 T
(eemap \0501stused, nameB, holes\051) 396.67 287.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 263.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Packed array of hash values gives offset within block of the r) 85.75 263.33 T
(est of the information.) 499.22 263.33 T
72 252 720 702 C
79.31 354 712.69 660 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
106.31 369 682.31 648 R
7 X
0 0 0 1 0 0 0 K
V
2.5 H
2 Z
0 X
N
106.31 576 682.31 576 2 L
N
106.31 612 682.31 612 2 L
1.5 H
N
178.31 648 178.31 612 2 L
1 H
N
394.31 648 394.31 612 2 L
N
538.31 648 538.31 612 2 L
N
250.31 648 250.31 612 2 L
N
322.31 648 322.31 612 2 L
N
466.31 648 466.31 612 2 L
N
610.31 648 610.31 612 2 L
N
178.31 612 178.31 576 2 L
N
394.31 612 394.31 576 2 L
1.5 H
N
538.31 612 538.31 576 2 L
N
250.31 612 250.31 576 2 L
N
322.31 612 322.31 576 2 L
1 H
N
466.31 612 466.31 576 2 L
N
610.31 612 610.31 576 2 L
N
115.31 621 169.31 639 R
7 X
V
0 16 Q
0 X
(magic) 115.31 628.33 T
187.31 621 241.31 639 R
7 X
V
0 X
(forw) 187.31 628.33 T
259.31 585 313.31 603 R
7 X
V
0 X
(base 1) 259.31 592.33 T
331.31 585 385.31 603 R
7 X
V
0 X
(size 1) 331.31 592.33 T
259.31 621 313.31 639 R
7 X
V
0 X
(back) 259.31 628.33 T
331.31 621 385.31 639 R
7 X
V
0 X
(count) 331.31 628.33 T
403.31 585 457.31 603 R
7 X
V
0 X
(base 2) 403.31 592.33 T
403.31 621 457.31 639 R
7 X
V
0 X
(1stused) 403.31 628.33 T
475.31 585 529.31 603 R
7 X
V
0 X
(size 2) 475.31 592.33 T
475.31 621 529.31 639 R
7 X
V
0 X
(nameB) 475.31 628.33 T
547.31 585 601.31 603 R
7 X
V
0 X
(base 3) 547.31 592.33 T
547.31 621 601.31 639 R
7 X
V
0 X
(holes) 547.31 628.33 T
619.31 585 673.31 603 R
7 X
V
0 X
(size 3) 619.31 592.33 T
115.31 585 169.31 603 R
7 X
V
0 X
(base 0) 115.31 592.33 T
187.31 585 241.31 603 R
7 X
V
0 X
(size 0) 187.31 592.33 T
106.31 504 682.31 504 2 L
2.5 H
N
106.31 540 682.31 540 2 L
1.5 H
N
394.31 576 394.31 540 2 L
N
394.31 540 394.31 504 2 L
N
250.31 576 250.31 540 2 L
1 H
N
322.31 576 322.31 540 2 L
N
610.31 540 610.31 504 2 L
N
538.31 540 538.31 504 2 L
N
610.31 576 610.31 540 2 L
N
538.31 576 538.31 540 2 L
N
250.31 540 250.31 504 2 L
N
322.31 540 322.31 504 2 L
N
115.31 549 241.31 567 R
7 X
V
0 X
(hash value) 115.31 556.33 T
403.31 513 529.31 531 R
7 X
V
0 X
(hash value) 403.31 520.33 T
403.31 549 529.31 567 R
7 X
V
0 X
(hash value) 403.31 556.33 T
115.31 513 241.31 531 R
7 X
V
0 X
(hash value) 115.31 520.33 T
259.31 549 313.31 567 R
7 X
V
0 X
(index) 259.31 556.33 T
547.31 513 601.31 531 R
7 X
V
0 X
(index) 547.31 520.33 T
547.31 549 601.31 567 R
7 X
V
0 X
(index) 547.31 556.33 T
259.31 513 313.31 531 R
7 X
V
0 X
(index) 259.31 520.33 T
502.31 378 673.31 450 R
7 X
V
1.5 H
0 X
N
502.31 414 673.31 414 2 L
N
129.36 458.65 115.31 450.01 122.65 464.79 126 461.72 4 Y
V
300.22 560.25 M
 309.25 532.45 221.76 499.57 194.77 490.62 D
 168.01 481.83 141.25 473.03 126.01 461.71 D
N
516.68 458.05 502.3 450.01 510.24 464.45 513.46 461.25 4 Y
V
596.97 558 M
 601.31 540.95 583.31 506.84 565.31 489.79 D
 554.55 479.7 529.12 471.85 513.5 461.23 D
N
115.31 378 286.31 450 R
7 X
V
0 X
N
115.31 414 286.31 414 2 L
N
331.31 378 502.31 450 R
7 X
V
0 X
N
331.31 414 502.31 414 2 L
N
341.37 460.45 328.61 450 333.9 465.63 337.64 463.04 4 Y
V
297.56 522.75 M
 336.03 511.19 346.12 483.48 337.65 463.02 D
N
116.7 510.01 106.31 504.01 111.94 514.61 114.32 512.31 4 Y
3 X
V
160.31 594 M
 152.24 561.69 136.91 536.63 114.33 512.32 D
0.5 H
N
294.51 458.77 286.31 450 288.62 461.78 291.56 460.27 4 Y
V
304.31 594 M
 312.44 554.41 306.95 495.03 291.58 460.26 D
N
340.31 423 493.31 441 R
7 X
V
0 X
(inode number) 340.31 430.33 T
340.31 387 367.31 405 R
7 X
V
0 X
(len) 340.31 394.33 T
511.31 387 538.31 405 R
7 X
V
0 X
(len) 511.31 394.33 T
376.31 387 493.31 405 R
7 X
V
0 X
(text of \336lename) 376.31 394.33 T
547.31 387 664.31 405 R
7 X
V
0 X
(text of \336lename) 547.31 394.33 T
511.31 423 664.31 441 R
7 X
V
0 X
(inode number) 511.31 430.33 T
367.31 414 367.31 378 2 L
1 H
N
538.31 414 538.31 378 2 L
N
124.31 423 277.31 441 R
7 X
V
0 X
(inode number) 124.31 430.33 T
124.31 387 151.31 405 R
7 X
V
0 X
(len) 124.31 394.33 T
151.31 414 151.31 378 2 L
N
160.31 387 277.31 405 R
7 X
V
0 X
(text of \336lename) 160.31 394.33 T
110.67 501.51 M
 120.27 501.29 115.79 494.83 117.07 489.52 D
 118.14 485.08 114.94 477.97 125.07 477.75 D
1.5 H
3 X
N
109.67 453.25 M
 119.27 453.47 114.79 459.93 116.07 465.24 D
 117.14 469.68 113.94 476.79 124.07 477.01 D
N
140.97 477.97 124.5 477 137.96 486.55 139.46 482.26 4 Y
V
232.5 592.5 M
 225.2 541.26 187.34 501.51 139.48 482.25 D
N
290.12 444.92 M
 290.29 454.53 295.11 450.05 299.07 451.33 D
 302.38 452.4 307.68 449.19 307.85 459.33 D
N
326.12 443.92 M
 325.95 453.53 321.14 449.05 317.18 450.33 D
 313.86 451.39 308.56 448.19 308.4 458.33 D
N
316.37 476.77 309 462 307.42 478.42 311.89 477.6 4 Y
V
372.75 595.5 M
 375 553.5 358.5 540 348.75 526.5 D
 339.29 513.52 319.39 497.69 311.92 477.59 D
N
72 252 720 702 C
0 180 792 792 C
FMENDPAGE
%%EndPage: "2" 2
%%Page: "3" 3
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 3 of 12) 649.62 224.67 T
227.99 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(3.0  Non-Leaf Nodes) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Intermediate nodes have this structur) 85.75 665.33 T
(e:) 342.32 665.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 458.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Part of a doubly linked list at each level in the tr) 85.75 458.33 T
(ee \050forw) 413.9 458.33 T
(, back\051) 468.54 458.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 434.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Manages fr) 85.75 434.33 T
(ee/used space in the block via a simple count of packed entries \050count\051) 163.22 434.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 410.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
-0.32 (Manages fr) 85.75 410.33 P
-0.32 (ee space in the \322\336le\323 via a linked list of chunks \050fr) 162.89 410.33 P
-0.32 (eechain, fr) 497.28 410.33 P
-0.32 (eecount\051 [not \336nished]) 568.65 410.33 P
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 386.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(T) 85.75 386.33 T
(racks if the next level down is a leaf node \050leafnext\051) 95.23 386.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 362.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Array of hash values gives block number r) 85.75 362.33 T
(efer) 375.68 362.33 T
(encing all keys <= hashval.) 402.03 362.33 T
72 252 720 702 C
79.31 477 712.69 660 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
106.31 498 682.31 651 R
7 X
0 0 0 1 0 0 0 K
V
2.5 H
2 Z
0 X
N
178.31 651 178.31 615 2 L
0.5 H
N
394.31 651 394.31 615 2 L
N
538.31 651 538.31 615 2 L
N
250.31 651 250.31 615 2 L
N
322.31 651 322.31 615 2 L
N
466.31 651 466.31 615 2 L
N
610.31 651 610.31 615 2 L
N
394.31 615 394.31 579 2 L
1.5 H
N
538.31 615 538.31 579 2 L
0.5 H
N
250.31 615 250.31 579 2 L
N
322.31 615 322.31 579 2 L
N
610.31 615 610.31 579 2 L
N
115.31 624 169.31 642 R
7 X
V
0 16 Q
0 X
(magic) 115.31 631.33 T
187.31 624 241.31 642 R
7 X
V
0 X
(forw) 187.31 631.33 T
259.31 588 313.31 606 R
7 X
V
0 X
(blkno) 259.31 595.33 T
259.31 624 313.31 642 R
7 X
V
0 X
(back) 259.31 631.33 T
331.31 624 385.31 642 R
7 X
V
0 X
(count) 331.31 631.33 T
403.31 588 529.31 606 R
7 X
V
0 X
(hash value) 403.31 595.33 T
403.31 624 457.31 642 R
7 X
V
0 X
(freechn) 403.31 631.33 T
475.31 624 529.31 642 R
7 X
V
0 X
(freecnt) 475.31 631.33 T
547.31 588 601.31 606 R
7 X
V
0 X
(base 3) 547.31 595.33 T
547.31 624 601.31 642 R
7 X
V
0 X
(leafnext) 547.31 631.33 T
115.31 588 241.31 606 R
7 X
V
0 X
(hash value) 115.31 595.33 T
106.31 615 682.31 615 2 L
1.5 H
N
106.31 579 682.31 579 2 L
N
403.31 552 529.31 570 R
7 X
V
0 X
(hash value) 403.31 559.33 T
115.31 552 241.31 570 R
7 X
V
0 X
(hash value) 115.31 559.33 T
547.31 552 601.31 570 R
7 X
V
0 X
(blkno) 547.31 559.33 T
259.31 552 313.31 570 R
7 X
V
0 X
(blkno) 259.31 559.33 T
546.31 589 600.31 607 R
7 X
V
0 X
(blkno) 546.31 596.33 T
250.31 579 250.31 543 2 L
0.5 H
N
322.31 579 322.31 543 2 L
N
394.31 579 394.31 543 2 L
1.5 H
N
610.31 579 610.31 543 2 L
0.5 H
N
106.31 543 682.31 543 2 L
1.5 H
N
538.31 579 538.31 543 2 L
0.5 H
N
90 450 2.81 2.81 274.5 518.81 G
90 450 2.81 2.81 274.5 518.81 A
90 450 2.81 2.81 310.5 518.81 G
90 450 2.81 2.81 310.5 518.81 A
90 450 2.81 2.81 346.5 518.81 G
90 450 2.81 2.81 346.5 518.81 A
72 252 720 702 C
0 180 792 792 C
FMENDPAGE
%%EndPage: "3" 3
%%Page: "4" 4
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 4 of 12) 649.62 224.67 T
121.5 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(4.0  W) 72 690 T
283.5 688.22 120.51 688.22 2 L
V
N
(orking Data Structur) 120.51 690 T
298.17 688.22 283.18 688.22 2 L
V
N
(es) 283.18 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(The arguments for a given operation:) 85.75 665.33 T
3 14 Q
(struct xfs_dir_name {) 72 648.67 T
(char) 108 634.67 T
(*name;) 180 634.67 T
(/* string \050maybe not NULL terminated\051 */) 342 634.67 T
(int) 108 620.67 T
(namelen;) 180 620.67 T
(/* length of string \050maybe no NULL\051 */) 342 620.67 T
(uint) 108 606.67 T
(hashval;) 180 606.67 T
(/* hash value of name */) 342 606.67 T
(xinum_t) 108 592.67 T
(inumber;) 180 592.67 T
(/* input/output inode number */) 342 592.67 T
(};) 72 578.67 T
(typedef long long xinum_t) 72 550.67 T
(/* inode number */) 342 550.67 T
(typedef unsigned short xblkno_t) 72 536.67 T
(/* logical block number within directory */) 342 536.67 T
FMENDPAGE
%%EndPage: "4" 4
%%Page: "5" 5
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 5 of 12) 649.62 224.67 T
121.5 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(4.0  W) 72 690 T
283.5 688.22 120.51 688.22 2 L
V
N
(orking Data Structur) 120.51 690 T
390.67 688.22 283.18 688.22 2 L
V
N
(es \050continued\051) 283.18 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Everything you\325d want to know about a given block in the Btr) 85.75 665.33 T
(ee:) 508.16 665.33 T
3 14 Q
(struct xfs_dir_state_blk {) 72 648.67 T
(buf_t) 108 634.67 T
(*bp;) 180 634.67 T
(/* buffer containing block */) 342 634.67 T
(xblkno) 108 620.67 T
(blkno;) 180 620.67 T
(/* blkno of buffer */) 342 620.67 T
(int) 108 606.67 T
(index;) 180 606.67 T
(/* relevant index into block */) 342 606.67 T
(uint) 108 592.67 T
(hashval;) 180 592.67 T
(/* last hash value in block */) 342 592.67 T
(int) 108 578.67 T
(leafblk;) 180 578.67 T
(/* 1->blk is a leaf, 0->blk is a node */) 342 578.67 T
(};) 72 564.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 543.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(The path back to the r) 85.75 543.33 T
(oot that got you her) 237.9 543.33 T
(e:) 371.82 543.33 T
3 14 Q
(struct xfs_dir_state_path {) 72 526.67 T
(int) 108 512.67 T
(active;) 180 512.67 T
(/* number of active levels */) 342 512.67 T
(struct xfs_dir_state_blk blk[XFS_DIR_NODE_MAXDEPTH];) 108 498.67 T
(};) 72 484.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 463.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(The complete working context for a given dir) 85.75 463.33 T
(ectory operation:) 393.42 463.33 T
3 14 Q
(struct xfs_dir_state {) 72 446.67 T
(struct xfs_dir_name) 108 432.67 T
(*args;) 342 432.67 T
(/* f) 432 432.67 T
(ilename arguments */) 465.6 432.67 T
(trans_t) 108 418.67 T
(trans;) 342 418.67 T
(/* transaction context */) 432 418.67 T
(int) 108 404.67 T
(inleaf;) 342 404.67 T
(/* insert into 1->lf, 0->splf */) 432 404.67 T
(struct xfs_dir_state_path) 108 390.67 T
(path;) 342 390.67 T
(/* search/split paths */) 432 390.67 T
(struct xfs_dir_state_path) 108 376.67 T
(altpath;) 342 376.67 T
(/* alternate path for join */) 432 376.67 T
(};) 72 362.67 T
FMENDPAGE
%%EndPage: "5" 5
%%Page: "6" 6
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 6 of 12) 649.62 224.67 T
260.5 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(5.0  Leaf Add Algorithm) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If ther) 85.75 665.33 T
(e is space in the fr) 129.44 665.33 T
(eemap, insert the entry:) 251.36 665.33 T
3 14 Q
(Find enough space in the freemap entry.) 72 648.67 T
(Force open space in the hashval array for the new entry.) 72 634.67 T
(Fill in a new entry in the hashval array.) 72 620.67 T
(Set up a name structure in the space from the freemap.) 72 606.67 T
-0.6 (Copy the inode number, f) 72 592.67 P
-0.6 (ilename text, and text length into the name structure.) 271.2 592.67 P
(Update control info \050f) 72 578.67 T
(irstused, namebytes, count, freemap, etc\051.) 256.8 578.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 557.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If we can\325t \336nd r) 85.75 557.33 T
(oom but ther) 200.11 557.33 T
(e ar) 288.7 557.33 T
(e \322holes\323 in the block, compact the block:) 314.62 557.33 T
3 14 Q
(Kmem_alloc\050\051 a block sized chunk of RAM.) 72 540.67 T
(Make it look like an empty leaf node.) 72 526.67 T
(Copy all existing entries into the new leaf.) 72 512.67 T
(Copy the whole block back to the real leaf node.) 72 498.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 477.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If we compacted the block, try again looking for space in the fr) 85.75 477.33 T
(eemap.) 513.42 477.33 T
3 14 Q
(Use the same algorithm as above.) 72 460.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 439.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
-0.41 (Since the fr) 85.75 439.33 P
-0.41 (eemap is \336xed size, the \322holes\323 \336eld tells us whether we have \322lost\323 space fr) 162.85 439.33 P
-0.41 (om the) 670.16 439.33 P
(fr) 85.75 421.33 T
(eemap.  \322Holes\323 and the total of the map sizes tells us when to do garbage collection) 97.89 421.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 397.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
-0.38 (When allocating space fr) 85.75 397.33 P
-0.38 (om the fr) 253.63 397.33 P
-0.38 (eemap, pr) 315.66 397.33 P
-0.38 (efer) 383.42 397.33 P
-0.38 (ence is given to high addr) 409.77 397.33 P
-0.38 (esses so as to r) 581.35 397.33 P
-0.38 (educe) 677.28 397.33 P
(contention for the space immediately above the hashval array) 85.75 379.33 T
(.) 504.38 379.33 T
FMENDPAGE
%%EndPage: "6" 6
%%Page: "7" 7
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 7 of 12) 649.62 224.67 T
289.46 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(6.0  Leaf Remove Algorithm) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Look thr) 85.75 665.33 T
(ough fr) 146.35 665.33 T
(eemap for r) 196.29 665.33 T
(elevant facts:) 275.97 665.33 T
3 14 Q
(If dying entry is adjacent to a freemap entry, remember this fact.) 72 648.67 T
(If map entry is adjacent to the end of the hashval table, add hashval to map.) 72 634.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 613.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If any adjacencies found with the dying entry) 85.75 613.33 T
(, \336x up the fr) 393.76 613.33 T
(eemap:) 481.92 613.33 T
3 14 Q
(Including \322before\323, \322after\323, and \322both\323 cases.) 72 596.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 575.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(else, overwrite the smallest size entry in the map if it is smaller that our newly fr) 85.75 575.33 T
(ee space:) 631.58 575.33 T
3 14 Q
(Induces \322holes\323 by dropping free space, requiring garbage collection later.) 72 558.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 537.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Update the contr) 85.75 537.33 T
(ol info for the leaf.) 200.99 537.33 T
3 14 Q
(Compress the dying entry out of the hashval array.) 72 520.67 T
(Fixup \322f) 72 506.67 T
(irstused\323 if dying entry had the lowest address in the block.) 139.2 506.67 T
(Decrement \322namebytes\323 to account for the dying f) 72 492.67 T
(ilename.) 475.2 492.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 471.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Occasional garbage collection is better than complete management of the fr) 85.75 471.33 T
(ee space in a leaf.) 599.15 471.33 T
FMENDPAGE
%%EndPage: "7" 7
%%Page: "8" 8
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 8 of 12) 649.62 224.67 T
129.49 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(7.0  Btr) 72 690 T
270.16 688.22 129.17 688.22 2 L
V
N
(ee Split Algorithm) 129.17 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(T) 85.75 665.33 T
(ry to r) 95.23 665.33 T
(ebalance with an adjacent leaf befor) 138.48 665.33 T
(e doing a split [futur) 384.83 665.33 T
(e].) 524.11 665.33 T
3 14 Q
(Delays the work of splitting and increases storage eff) 72 648.67 T
(iciency.) 525.6 648.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 627.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Split the leaf node:) 85.75 627.33 T
3 14 Q
(Get the lowest numbered block off the \322freechain\323 or grow the inode.) 72 610.67 T
(Fill in the new block as an empty leaf.) 72 596.67 T
(Balance the entries between the two blocks:) 72 582.67 T
-0.11 (Figure optimal balance of byte usage between blocks, given new name size.) 108 568.67 P
(Compact destination block if it doesn\325t have enough linear space.) 108 554.67 T
(Move entries between blocks as needed to get into balance.) 108 540.67 T
(Link the new block into the linked list at this level.) 72 526.67 T
(Add the new entry to the correct leaf block \050using \322leaf add\323 algorithm\051.) 72 512.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 491.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(W) 85.75 491.33 T
(alk back up the path to the r) 100.86 491.33 T
(oot, splitting nodes as r) 294.82 491.33 T
(equir) 452.32 491.33 T
(ed:) 488.48 491.33 T
3 14 Q
(If we don\325t have to split the node, just add the new entry and return.) 72 474.67 T
(Get the lowest numbered block off the \322freechain\323 or grow the inode.) 72 460.67 T
(Fill in the new block as an empty node.) 72 446.67 T
(Balance the entries between the two blocks:) 72 432.67 T
(Simply total up the number of entries in both, half goes to each block.) 108 418.67 T
(Force open a hole in the destination block if required.) 108 404.67 T
(Link the new block into the linked list at that level.) 72 390.67 T
(Insert the new entry into the correct node.) 72 376.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 355.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(As we walk up the path, \336xup changed hashvals to the r) 85.75 355.33 T
(oot fr) 465.06 355.33 T
(om each level:) 502.53 355.33 T
3 14 Q
-0.51 (A new entry could change the last hashval in the block \050which is known above\051.) 72 338.67 P
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 317.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If we split the r) 85.75 317.33 T
(oot node, cr) 189.44 317.33 T
(eate a new r) 269.58 317.33 T
(oot:) 351.49 317.33 T
3 14 Q
(Get the lowest numbered block off the \322freechain\323 or grow the inode.) 72 300.67 T
(Copy the existing root into the new block.) 72 286.67 T
(Create an empty node at block 0.) 72 272.67 T
-0.48 (Point to the relocated old root, and the node we just split from the old root.) 72 258.67 P
FMENDPAGE
%%EndPage: "8" 8
%%Page: "9" 9
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 9 of 12) 649.62 224.67 T
129.49 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(8.0  Btr) 72 690 T
267.16 688.22 129.17 688.22 2 L
V
N
(ee Join Algorithm) 129.17 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Join when leaf can be combined with a neighbor with 25% fr) 85.75 665.33 T
(ee space left in the block.) 501.02 665.33 T
0 1 1 0 1 0 0 K
2 F
0 1 1 0 1 0 0 K
(\245) 72 641.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Always keep lower) 85.75 641.33 T
(ed number) 213.44 641.33 T
(ed blocks when joining any two blocks:) 287.38 641.33 T
3 14 Q
(This will shrink the directory over time.) 72 624.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 603.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Join the leaf node:) 85.75 603.33 T
3 14 Q
-0.6 (Pick the lower numbered neighbor that will accommodate the names in this leaf.) 72 586.67 P
(Find the path from the root to our neighbor leaf.) 72 572.67 T
(Make the path from the dying block to the root our current path.) 72 558.67 T
(Unbalance the entries between the two blocks:) 72 544.67 T
(If destination leaf has no holes, move all entries to destination leaf.) 108 530.67 T
(If destination leaf has holes:) 108 516.67 T
-0.55 (Kmem_alloc\050\051 a buffer, make it look like an empty leaf, copy both) 180 502.67 P
(leaves into the buffer, then copy the buffer back over the) 180 488.67 T
(destination leaf.) 180 474.67 T
(Unlink the dying block from its neighbors on this level.) 72 460.67 T
FMENDPAGE
%%EndPage: "9" 9
%%Page: "10" 10
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 10 of 12) 642.62 224.67 T
129.49 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(8.0  Btr) 72 690 T
359.66 688.22 129.17 688.22 2 L
V
N
(ee Join Algorithm \050continued\051) 129.17 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(W) 85.75 665.33 T
(alk back up the curr) 100.86 665.33 T
(ent path to the r) 240.15 665.33 T
(oot, joining nodes as r) 350.06 665.33 T
(equir) 499.57 665.33 T
(ed:) 535.73 665.33 T
3 14 Q
(Remove the reference to the dying block from this node.) 72 648.67 T
(If this node and a neighbor will f) 72 634.67 T
(it with 25% to spare:) 357.6 634.67 T
(Pick the lower numbered neighbor that will accommodate all the entries.) 108 620.67 T
(Find the path from the root to our neighbor node.) 108 606.67 T
(Make the path from the neighbor node to the root our current path.) 108 592.67 T
(Unbalance the entries between the two blocks:) 72 578.67 T
(Force a hole in the destination node if required.) 108 564.67 T
(Move all entries from the dying node to the destination node.) 108 550.67 T
(Unlink the new block from its neighbors at this level.) 72 536.67 T
(Insert the new entry into the correct node.) 72 522.67 T
(Fix hashvals in each block all the way to the root:) 72 508.67 T
-0.09 (A join could change the last hashval in the block \050which is known above\051.) 108 494.67 P
(Do this at every join so that we don\325t have to deal with multiple f) 108 480.67 T
(ixes.) 670.8 480.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 459.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If the r) 85.75 459.33 T
(oot node only has one entry in it, delete the r) 133.44 459.33 T
(oot:) 435.81 459.33 T
3 14 Q
(If the next level down is a leaf:) 72 442.67 T
(Copy the leaf node to block 0.) 108 428.67 T
(Reduce the inode size to one logical block.) 108 414.67 T
(If the next level down is not a leaf:) 72 400.67 T
(Copy the freechain info from the old root to the only child of the root.) 108 386.67 T
(Copy the only child of the root to block 0 \050becoming the new root\051.) 108 372.67 T
(Put the old child\325s block number onto the freelist.) 108 358.67 T
FMENDPAGE
%%EndPage: "10" 10
%%Page: "11" 11
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 1) 643.14 224.67 T
(1 of 12) 680.34 224.67 T
161.5 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(9.0  Overall) 72 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Use multir) 85.75 665.33 T
(eader lock on the inode to pr) 157.89 665.33 T
(otect against simultaneous modi\336cations.) 353.15 665.33 T
3 14 Q
(Multiple readers in the directory at once, but still single threaded on the) 72 648.67 T
(root node of the Btree.) 72 634.67 T
(Only during lookups, blocks are released as soon as possible.) 72 620.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 599.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(If fr) 85.75 599.33 T
(eechain shows fr) 113.44 599.33 T
(ee blocks at the end of the inode, shrink inode [futur) 226.03 599.33 T
(e].) 581.76 599.33 T
FMENDPAGE
%%EndPage: "11" 11
%%Page: "12" 12
612 792 1 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
72 711 378 738 R
7 X
0 0 0 1 0 0 0 K
V
0 14 Q
0 X
(XFS Detailed Design - Directory Structures) 72 728.67 T
72 225 243 243 R
7 X
V
0 X
(April 13, 1994) 72 233.67 T
621 216 720 234 R
7 X
V
0 X
(Page 12 of 12) 642.62 224.67 T
265.48 688.22 72 688.22 2 L
V
1.71 H
0 Z
N
1 18 Q
(10.0  Attributes [all futur) 72 690 T
279.14 688.22 265.16 688.22 2 L
V
N
(e]) 265.16 690 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 665.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Use same data structur) 85.75 665.33 T
(es and code as dir) 243.2 665.33 T
(ectory support.) 363.81 665.33 T
3 14 Q
(Too much in common to not make them the same.) 72 648.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 627.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Dir) 85.75 627.33 T
(ectory code and data structur) 108.56 627.33 T
(es will have to gr) 310.02 627.33 T
(ow some to accommodate attribute r) 424.38 627.33 T
(eq\325) 673.36 627.33 T
(s.) 694.1 627.33 T
3 14 Q
(Will need some extra f) 72 610.67 T
(ields and semantics.) 256.8 610.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 589.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Small attribute values will be stor) 85.75 589.33 T
(ed in leaf nodes adjacent to attribute name.) 315.23 589.33 T
3 14 Q
(Just add more stuff after the text of the name.) 72 572.67 T
0 1 1 0 1 0 0 K
2 16 Q
0 1 1 0 1 0 0 K
(\245) 72 551.33 T
0 0 0 1 0 0 0 K
1 F
0 0 0 1 0 0 0 K
(Large attribute values will be stor) 85.75 551.33 T
(ed in dedicated block\050s\051 that the leaf entry will point to.) 316.99 551.33 T
3 14 Q
(The entry in the leaf node will contain the starting block number of the) 72 534.67 T
(value, and the length of the value in bytes.) 72 520.67 T
FMENDPAGE
%%EndPage: "12" 12
%%Trailer
%%BoundingBox: 0 0 612 792
%%PageOrder: Ascend
%%Pages: 12
%%DocumentFonts: Times-Roman
%%+ Times-Bold
%%+ Courier-Bold
%%+ Courier
%%EOF