
    g             
       N   S r SrSSKrSSKJrJrJr  SSKJr  SSK	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJr  SSK 7  SS	K!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  SS
K-J.r.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  SSSSSSSSSS.	r8SSSSSSSSSS.	r9Sr:S\:-
  r; " S S\55      r< " S S\/5      r=SPS jr>S r? " S  S!\15      r@S" rAS# rBSQS% jrCSRS& jrDS' rES( rFS) rG\R                  " \G5      rGS* rISPS+ jrJS, rK\R                  " \K5      rKS- rLSPS. jrMS/ rN " S0 S1\O5      rP " S2 S3\@5      rQ " S4 S5\Q5      rRSS6KSJTrTJUrUJVrVJWrW   " S7 S8\/5      rX " S9 S:5      rYS; rZ\R                  " \Z5      rZ\U" S<5      r[ " S= S>\Q5      r\S? r]S@ r^SA r_SB r`SC raSD rbSE rcSF rdSG reSH rfSI rg\hSJ:X  ap   SSKiriSSKKjJkrk  \iR                  S$S =(       d    SL/rl\l HE  rm\mR                  SM5      (       a  \mOSN\m-  ro\p" 5       \o   " 5       rq\kR                  " \qSO\o-  5        MG     gg)Sz3.3.0z|Basic Pie Chart class.

This permits you to customize and pop out individual wedges;
supports elliptical and circular pies.
    N)sincospi)colors)isNumberisListOfNumbersOrNoneisListOfNumbersisColorOrNoneisStringisListOfStringsOrNoneOneOf	isBooleanisListOfColorsisNumberOrNoneisNoneOrListOfNoneOrStringsisTextAnchorisNoneOrListOfNoneOrNumbersisBoxAnchorisStringOrNoneNoneOrEitherOrisNumberInRange
isCallable)uSymbol2SymbolisSymbol)*)GroupDrawingEllipseWedgeStringSTATE_DEFAULTSArcPathPolygonRectPolyLineLine)TypedPropertyCollection
PropHolder)PlotArea)_objStr)Labelcmpwswsseenennw)	r   -   Z              i;  gHz>     v@c                        \ rS rSrS rS rSrg)
WedgeLabel+   c                     g N selfbas     k/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/reportlab/graphics/charts/piecharts.py	_checkDXYWedgeLabel._checkDXY,   s        c                 j   U R                   nUS;   a  [        U R                  S-  S-  5      S-  S-  nUS-  (       d:  U R                  U-
  S-  n[        U5      S:  a  X#S:  =(       a    S=(       d    S-  n[	        U S	S 5      =(       a    [
        =(       d    [        U   nU R                  U5        U$ )
N)autoxautoyh  g     F@r7   r8      r   r=   _anti)	boxAnchorint_pmvabsgetattr_ANGLE2RBOXANCHOR_ANGLE2BOXANCHORrI   )rF   rG   nadas       rH   _getBoxAnchorWedgeLabel._getBoxAnchor.   s    ^^""tyy}c)*2-s2BGii"n+r719a4;B-#.B$wt,B1BVFVXZ[BNN2	rK   rD   N)__name__
__module____qualname____firstlineno__rI   r[   __static_attributes__rD   rK   rH   r@   r@   +   s    
rK   r@   c                   N   \ rS rSrSr\" Sg0 S\" \SS9_S\" \SS9_S\" \S	S9_S
\" \	SS9_S\" \
" SSS5      SS9_S\" \
" SSS5      SS9_S\" \SS9_S\" \SS9_S\" \SS9_S\" \SS9_S\" \SS9_S\" \SS9_S\" \S S9_S!\" \S"S9_S#\" \S$S9_S%\" \S&S9_S'\" \S(S9_S)\" \S*S9_S+\" \S,S9_S-\" \S.S9_S/\" \S0S9_S1\" \S2S9_S3\" \S4S9_S5\" \S6S9_S7\" \S8S9_S9\" \S:S9_S;\" \S<S9_S=\" \S>S9_S?\" \S@5      _SA\" \SB5      _SC\" \SD5      _SE\" \SF5      _SG\" \SH5      _SI\" \SJS9_SK\" \SLS9_SM\" \SNS9_SO\" \SPS9_SQ\" \SRS9_SS\" \" \5      STSSU9_SV\" \SW5      _SX\" \SYS9_SZ\" \S[S9_S\\" \
" S]S^5      S_S9_S`\" \
" SaSbSc5      SdS9_6rSe rSfrga)hWedgeProperties:     This holds descriptive information about the wedges in a pie chart.

It is not to be confused with the 'wedge itself'; this just holds
a recipe for how to format one, and does not allow you to hack the
angles.  It can format a genuine Wedge object for you with its
format method.
strokeWidthzWidth of the wedge borderdesc	fillColorzFilling color of the wedgestrokeColorzColor of the wedge borderstrokeDashArrayzZStyle of the wedge border, expressed as a list of lengths of alternating dashes and blanksstrokeLineCapr         z#Line cap 0=butt, 1=round & 2=squarestrokeLineJoinz$Line join 0=miter, 1=round & 2=bevelstrokeMiterLimitz$Miter limit control miter line joinspopoutz How far of centre a wedge to popfontNamez"Name of the font of the label textfontSizez,Size of the font of the label text in points	fontColorz#Color of the font of the label textlabelRadiuszpDistance between the center of the label box and the center of the pie, expressed in times the radius of the pielabel_dxzX Offset of the labellabel_dyzY Offset of the labellabel_anglezQAngle of the label, default (0) is horizontal, 90 is vertical, 180 is upside downlabel_boxAnchorzAnchoring point of the labellabel_boxStrokeColorzBorder color for the label boxlabel_boxStrokeWidthzBorder width for the label boxlabel_boxFillColorzFilling color of the label boxlabel_strokeColorzBorder color for the label textlabel_strokeWidthzBorder width for the label text
label_textzText of the labellabel_leading label_widthzWidth of the labellabel_maxWidthz#Maximum width the label can grow tolabel_heightzHeight of the labellabel_textAnchorz$Maximum height the label can grow tolabel_visible True if the label is to be drawnlabel_topPaddingzPadding at top of boxlabel_leftPaddingzPadding at left of boxlabel_rightPaddingzPadding at right of boxlabel_bottomPaddingzPadding at bottom of boxlabel_simple_pointerzSet to True for simple pointerslabel_pointer_strokeColorzColor of indicator linelabel_pointer_strokeWidthzStrokeWidth of indicator linelabel_pointer_elbowLengthz&Length of final indicator line segmentlabel_pointer_edgePadz!pad between pointer label and boxlabel_pointer_piePadz!pad between pointer label and pieswatchMarkerz!None or makeMarker('Diamond') ...rh   advancedUsagevisiblezSet to false to skip displayingshadingAmountz"amount by which to shade fillColorshadingAnglez6shading changes at multiple of this angle (in degrees)shadingDirectionnormalantiz2Whether shading is at start or end of wedge/sectorshadingKindNlightendarkenzuse colors.Whiter or Blackerc                    SU l         S U l        [        S   U l        [        S   U l        SU l        SU l        SU l        SU l        [        S   U l	        [        S   U l
        [        S   U l        SU l        S=U l        =U l        U l        S U l        S=U l        =U l        =U l        U l        S	U l        S U l        S
U l        S U l        S U l        SU l        S =U l        =U l        =U l        U l        SU l        SU l         SU l!        [D        RF                  U l$        S
U l%        SU l&        SU l'        SU l(        SU l)        S U l*        S
U l+        SU l,        SU l-        g )Nr   rj   rk   rm   rr   rs   ri   333333?rM         ?皙?start   rn   g@߾ @r   ).rf   ri   r"   rj   rk   ro   rl   rp   rq   rr   rs   rt   ru   rv   rw   rx   r   r   r   r   r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   blackr   r   r   r   r   r   r   r   r   r   rF   s    rH   __init__WedgeProperties.__init__q   sp   )-8-.?@ !&z2&z2'4;<<<(8nooo 6o9PSWSk&$(!$'!"&!%!$]aaa 0a43FIZ '$%!)/&),&)*&%&"$%! " (rK   )+ri   rt   rr   rs   ru   rx   r   ry   r|   rz   r{   rv   rw   r   r   r   r   r   r   r   r   r   r   r   r}   r~   r   r   r   r   r   rq   r   r   r   r   rj   rk   rl   ro   rp   rf   r   rD   )r]   r^   r_   r`   __doc__AttrMapAttrMapValuer   r
   r   r   r   r   r   r   r   r   r   r   _attrMapr   ra   rD   rK   rH   rc   rc   :   s     -
"81LM-
 4PQ-
 #=6QR-
 ''<  C_  `	-

 %U1Qq\7\]-
 &eAal8^_-
 (6\]-
 h,NO-
  .RS-
  .\]-
 !4YZ-
 #8  2d  e-
  .EF-
  .EF-
 #8  2E  F-
  '{8VW!-
"  ,M?_`#-
$  ,H:Z[%-
& *-=]^'-
( )<]^)-
* )7XY+-
, ".6IJ--
. %^</-
0 #>7KL1-
2 &n:_`3-
4 $N8MN5-
6 (:`a7-
8 %Y4VW9-
: (1HI;-
< )2JK=-
> *(3LM?-
@ +84NOA-
B  ,I6WXC-
D %1D]$^E-
F %1?^$_G-
H %1?g$hI-
J !-X;^ _K-
L  ,H:]^M-
N $F8$4;^mnoO-
P y)JKQ-
R %^9]^S-
T $H2jkU-
V (hv(>DxyW-
X #5i#AGefY-
H^#)rK   rc   c                    U R                   (       an  [        X4U5      nU R                  (       d  SUl        O:[	        U5      S:  d  US:  a  US:  d  SUs=:  a  S:  a  O  OSUl        OSUl        X'l        S	Ul        GO8Uc  [        U S
[        5      nU" 5       nX'l        X7l	        XGl
        UR                  Ul        U R                  (       d#  UR                  Ul        UR                  Ul        OUR"                  c  U R"                  S-  nOUR"                  S-  nUR                  c  Xl        OUR                  U-   Ul        [	        U5      S:  d  US:  a  US:  d  SUs=:  a  S:  a  O  OSUl        OSUl        UR$                  Ul        UR(                  Ul        UR,                  Ul        UR0                  Ul        UR4                  Ul        UR8                  Ul        UR<                  n	U	c  Un	Xl        UR@                  Ul!        URD                  Ul#        URH                  Ul%        URL                  Ul'        URP                  Ul        URR                  Ul*        URV                  Ul,        URZ                  Ul.        UR^                  Ul0        URb                  Ul2        URf                  Ul        UR"                  Ul        URh                  Ul4        URj                  Ul6        U$ )Nmiddler8   r<     >r   endr   
labelClassg      @r/   r3   )7simpleLabelsr!   
sideLabels
textAnchorrU   rT   _simple_pointerrV   r@   xyrv   dxrw   dyry   rR   rs   rx   anglerz   boxStrokeColorr{   boxStrokeWidthr|   boxFillColorr}   rj   r~   rf   r   _textr   leadingr   widthr   maxWidthr   heightr   r   r   r   
topPaddingr   leftPaddingr   rightPaddingr   bottomPaddingr   rr   rt   ri   )
rF   textr   labelXlabelY
wedgeStyler   theLabelsideLabels_dyr   s
             rH   _addWedgeLabelr      st   &$/"*HE
ReSjU3YD%DUQUDU&-#&+##$  l:>J<

 ))$--HK!+!;!;H""* $ 3 * 3 3c 9""*+(11MAE
ReSjU3YD%DUQUDU%("%("#//","A"A","A"A * = =);;);;%%=$%%33#//&55$11(99%33(99);; * = =!+!?!?#-#B#B "++H"++H#--HOrK   c                 h    U c  S/U-  n U $ U[        U 5      -
  nUS:  a  [        U 5      S/U-  -   n U $ )Nr   r   )lenlist)labelsr5   is      rH   
_fixLabelsr      sG    ~ M c&kMQ3frd1f,MrK   c                   $    \ rS rSrS rSS jrSrg)AbstractPieChart   c                    U R                   nU[        U5      -  nXg   n[        US[        USS 5      5      n	[        US[        USS 5      5      n
[        US[        USS 5      5      n[        US[        USS 5      5      n[        US[        USS 5      5      nU(       a  [        XUS-  -   X5S-  -   U
5      $ [	        X#XEXXS9$ )Nrj   ri   rk   rf   r          @)rf   rj   rk   ri   )slicesr   rV   r   r%   )rF   rowNor   r   r   r   	baseStylestyleIdxstylerj   ri   rk   rf   r   s                 rH   makeSwatchSample!AbstractPieChart.makeSwatchSample   s    KK	3y>)#e]GImTX4YZE;	+d0ST	!%):GIN_`d<efe]GI}UY4Z[ungiX\6]^!,rz!2I+iPPA$3I 	IrK   Nc                      [        U R                  U   5      nU R                  (       d  [        U R                  U   SS5      nUb  UnU$ !   Un N8= f)zreturn series name i or defaultr   r   )r+   r   r   rV   r   )rF   r   defaultr   r   s        rH   getSeriesNameAbstractPieChart.getSeriesName   sU    	4;;q>*D   DKKN<;E $	Ds   A ArD   rC   )r]   r^   r_   r`   r   r   ra   rD   rK   rH   r   r      s    I	rK   r   c                     U S   US   S-
  :  =(       dJ    US   U S   S-
  :  =(       d5    U S   SUS   US   -   -  S-
  :  =(       d    US   SU S   U S   -   -  S-
  :  (       + $ )Nr   rn   g{Gz?rm   r   r   rD   )PQs     rH   boundsOverlapr      s    tAaDI~m1ad4im1Q4ad1Q4i$8N3NmRSTURVX[]^_`]abcdebf]fXgimWmRmnnrK   c                    [        U 5      nU/n US   nUS-   U-  nXT;   d  [        X   X   5      (       d  OUR                  U5        M;   US   nUS-
  U-  nXT;   d  [        X   X   5      (       d   U$ UR                  SU5        M>  )z find overlap run containing B[i]rm   r   )r   r   appendinsert)Br   wrapr5   Rjs         rH   _findOverlapRunr      s    AA	
A
bEqS!G6qtAD115		 
 aDqS!G6qtAD115H 	
1	 rK   rm   c                     [        U 5      nUS:  a4  [        US-
  5       H"  n[        XU5      n[        U5      S:  d  M   Us  $    g)z>determine a set of overlaps in bounding boxes B or return Nonerm   N)r   ranger   )r   r   r5   r   r   s        rH   findOverlapRunr   
  sD    AAsqsAD)A1vax  rK   c           
         [        U 5      nUS:  a  g U  Vs/ s H  oDR                  S   PM     nnSn/ nSn[        US-   5      nUn	U(       Gd  US:  Ga  [        U5      n
U
(       d  g [        U
5      nX:X  a  g U Vs/ s H  oU
;   d  M
  UPM     sn(       d  Un	SnU
S   nU
S   nX^   n[	        X   R
                  5      =nnU
SS   HB  nX\   n[        U[        US   US   -
  US   US   -
  5      5      nUnUX   R
                  -  nMD     U[        U5      -  n[        X   R
                  U-
  5      n[	        U5      nXUS-
  -  U-  -  nU
 H  nX   nUR                  n[	        UR
                  U[	        UR
                  5      U-
  -  -   5      =nUl        U[        -  nUS   US   [        U5      -  -   Ul        US	   US
   [        U5      -  -   Ul        UR                  5       X\'   M     U
nU	S-  n	US-  nUS:  a  GM  g g US:  Ga/  [        U5      n
U
(       d  g [        U
5      nX:X  a  g U S   nUR                  nUS   n[        U
5       H  u  nnX   nUR                  nUS   nSnSnUUS-
  :X  a  M*  UU:X  d  US   US   :  a  US   US   :  a  US   US   -
  nUS   US   :  a  US   US   :  a  US   US   -
  nUU:  a"  U=R                  SUS   US   -
  -  -  sl        O'UU:  a!  U=R                  SUS   US   -
  -  -  sl        UR                  5       X\'   M     US-  nUS:  a  GM.  g g s  snf s  snf )Nrn   boundsrm   r      r   cxrxcyryg?r   r   )r   	_origdatafloatr   _360rT   maxminrU   _180_pir   r   r   r   	getBounds	enumerate) Lr   mult0nLlr   OKRPitermultr   nRrrZ   r0rLbitaaaabutaantaaorigr   radl1orig1bounds1r   r   diff1diff2s                                    rH   fixLabelOverlapsr    s   	QB	!tV()*1X	A*	
B	BD%!)ED2gq!AeQBvu!,r!!VAr,B1B2BBAEJJ''C"qrUDC!RU
2a51:67adii	 
 E"IBquzz#~&D:D1+d""BD{{!%affRaffb-A&A!BBGm4j4:c#h#664j4:c#h#66{{}  BDLDAIDA 2ggF 2gq!AeQBx2BLLEHoG |!D{{hBqDy!W,!!9WQZ/GAJvay4H$*1Igaj$8E"1:fQi/F1Igaj4H$+AJvay$8E 5=CC#wqz'!*'<"==C"e^CC3
71:(=#>>C;;=AD! $" AID3 2ggW 	+ -s   M>	MMc                     [        [        U 5      [        U5      5      [        [        U 5      [        U5      5      p2X#:  a  g X#4$ rC   )r   r   )Ar   r   r   s       rH   intervalIntersectionr   \  s5    
c!fSV
SQA/atD3JrK   c                 ~   U S-  n SU s=::  a  S:  a'  O  O$US:X  a  SSU 4SSSU -   S44nOfSU S4S	SS
SU -   44nOWU S:  =(       a    S=(       d    SnUS:X  a  SUS-
  U 4SUS-
  US-
  4SSU -   US-
  44nOSXS-   4SUS-   US-   4SUS-   SU -   44n[        U Vs/ s H  o"S   US   :  d  M  UPM     sn5      $ s  snf )NrO   r8   r<   	clockwiser   )rm   r8   ir#  )rm   r<   r   r   rm   rn   )tuple)sa	directionaoffss       rH   _makeSideArcDefsr)  a  s    #IB	2zczk!2b	*aR_4A2c
;#c"f~5A3w3#!k!472$s(473QtBwtCx4HHA22g$r'$s(3QtCxB4GGAQ,QA$qt)!Q,--,s   B:-B:c                 >    [        US   US   -
  U S   U S   -
  5      $ )Nrm   r   r-   )r   r   s     rH   _keyFLAr+  p  s'    qtAaDy1ad##rK   c                     U  Vs/ s H  o"S   U:X  d  M  US   c  M  US   PM     snnU(       d  g [        U5      S:  a  UR                  [        S9  US   $ s  snf )Nr   rm   key)r   sortr+  )xArcssider'  s      rH   _findLargestArcr2  t  sX    @u!!d
qt1u@AT
1vaxG$Q4K 	As   AA	Ac                    U R                   nUc;  US   nUS   nUc  SnUnO)Uc  SnUnO!US   US   -
  US   US   -
  :  a  SnUnOSnUnUS   nUS   nU(       d  SU l        X-   U l        US   nOSU l        X-
  U-
  U l        US   nUS   US   -   S-  =oS	'   [        U	[        -  5      US
'   [        U	[        -  5      US'   X#S'   X'4$ )Nlirirm   r   r   edgePadr:   r   midsmidcmidr1  )r   rT   r   r   r  r   )
r  r   r1  datar4  r5  r   r/   r6  r7  s
             rH   _fPLSider;  z  s   ;;D|$Z$Z:DAZDAU2a5[Ar!u$DADAWA9oGiJi'!J1adC'Cu+s7{#DLs7{#DLL6MrK   c                 N    [        UR                  S   U R                  S   5      $ )Nr8  )r.   r   r'  r  s     rH   _fPLCFr>    s!    q{{6"1;;v#677rK   c                     U S   $ )Nrm   rD   )r'  s    rH   _arcCFr@    s    Q4KrK   c                    / / 4nSS/nU H4  n	[        XU5      u  pXz   R                  U	5        [        XU
   5      X'   M6     SnU S /-  nSnUS-  nX?-   n[        U5      nS GHu  n
Xz   nU(       Gac  / nUR                  n/ nUR                  nUR                  [        S9  SnX5-   nU H  n	U	R
                  nX,UUS   -
  -  -   nU	=R                  U-  sl        XUS   '   UUS   U-  -   nUS	   nUS
   US   -
  S-  nUU-   U:  a  UU-
  nUU-
  U:  a  UU-   nUS   UU-
  US   UU-   4=US	'   nU" U5        UU	l        U" [        SUU-
  U-
  5      5        UU-
  n[        UUS   US   -   5      n[        U[        US   UUS   -   -  5      U-
  5      nM     U" UU-
  5        Sn[        U5      nUS:  Ga  [        USS9n U (       d  GO[        U 5      n!U!U:X  a  OU S   n"U S   n#U#S-   n$[        US U"S-    5      n%U%[        UU$S  5      -   n&[        UU"U$  Vs/ s H  nUS
   US   -
  PM     sn5      U$-   U"-
  UU"   S
   UU#   S   -
  -
  n'U'U&:  a  OwUU"   S
   U%U'-  U&-  -   nU  HW  n(UU(   n	U	R
                  nUS	   nUS
   US   -
  S-  nUS-  nUU-
  =nU	l        US   UU-
  US   U4=UU('   US	'   UU-
  S-
  nMY     US:  a  GM  UU-   X'   SnGMx     XS   US   U4$ s  snf )Nr   rm   r   )r   rm   r-  r   indexr8  r   r   rn   r6  piePadelbowLengthr   )r   r   )r;  r   r   r/  r>  r   r   r   rU   r   r   sum))r5   r  r   r   r   r   r1  LRmlrr  r   r/   mulGmelhhyhhmTr   aBSaSpyhr:  inclyr  b2r
  nTr   r  j0j1jlsAbovesFreesNeedr  s)                                            rH   _fixPointerLabelsr^    s   	BBQ%Cqt$
QQ1v  C	4&A
C	B
$CCAEABABFFvFAB{{QtG}_--s
#$$w- fb(Nd1Q4i_b58"R%Rb572B&'d2b51be%<<X13qBr?#U$y/$x.89#c$v,43F0F"GHKL! " r!tHDQBr'"1!,%Vr65qTrUTQu1Xs1RS6{*"R91QqT!A$Y9:2=b@!B%(1R5QR8BST;rU1XfUl500A!A;;DXAA$qt)SB#IB!"u$B-.qT"R%!R,@@AaD4>b3B  r', qSCFm n !fc!fc!! :s   K(
c                    S[         -  [        U 5      -  nU  Vs/ s H  o3U-  PM	     nnSn/ nU H  nUR                  XWS-  -   5        XW-  nM     [        U 5      S-  nSn	[         S-  n
[	        S5       HL  nX-  n[        U Vs/ s H  n[        [        X|-   5      5      PM     sn5      nX:  d  M>  US:X  a  U* n	OUn	UnMN     U	S-  [         -  $ s  snf s  snf )	Nrn   r   r   g    .Ag      B@$   r"  r:   )r   rE  r   r   r   rU   r   )r:  r&  facdradsr  hradsr  vstarrstardeltar   r'  vs                 rH   theta0ri    s    R4T
C 4acE4D 	
BER#X
  IcMEEtGE2YG.1SX./9K'bE  9R<) ! /s   C C
c                       \ rS rSrSrS rSrg)	AngleDatai  z/use this to carry the data along with the anglec                 <    [         R                  X5      nX#l        U$ rC   )r   __new___data)clsr   r:  rF   s       rH   rm  AngleData.__new__  s    }}S'
rK   )rn  N)r]   r^   r_   r`   r   rm  ra   rD   rK   rH   rk  rk    s
    9rK   rk  c                      \ rS rSr\" S:0 S\_S\" \SS9_S\" \SS9_S\" \	S	S9_S
\" \
" SS5      SS9_S\" SSS9_S\" \SS9_S\" \	SSS9_S\" \" \" SS5      \45      SSS9_S\" \
" SSS5      SSS9_S\" \SSS9_S \" \
" S!S"5      SS#9_S$\" \S%S9_S&\" \S'S9_S(\" \S)S9_S*\" SS+SS9_S,\" \S-S9_S.\" \	S/S9_S0\" \" \5      S1S9_6rSrS2 rS3 rS4 rS;S5 jrS6 rS7 rS8 rS9rg)<Piei	  BASEr:  z7List of numbers defining wedge sizes; need not sum to 1rg   r   z2Optional list of labels to use for each data point
startAnglez#Angle of first slice; 0 is due Eastr&  r"  anticlockwisez'clockwise' or 'anticlockwise'r   Nz&Collection of wedge descriptor objectsr   zIf true(default) use a simple String not an advanced WedgeLabel. A WedgeLabel is customisable using the properties prefixed label_ in the collection slices.other_thresholdz.A value for doing threshholding, not used yet.rm   r   checkLabelOverlapg?zFIf true check and attempt to fix
 standard label overlaps(default off)pointerLabelMode	LeftRightLeftAndRightr   	sameRadiiz,If true make x/y radii the same(default off)	orderModefixed	alternate)r   xradiuszX direction RadiusyradiuszY direction RadiusinnerRadiusFractionz$fraction of radii to start wedges atwedgeRecordzcallable(wedge,*args,**kwds)r   zDIf true attempt to make piechart with labels along side and pointerssideLabelsOffsetzWThe fraction of the pie width that the labels are situated at from the edges of the pier   z,A class factory to use for non simple labelsc                 4   [         R                  " U 5        SU l        SU l        SU l        SU l        / SQU l        S U l        SU l        SU l	        SU l
        SU l        S U l        SU l        SU l        S =U l        =U l        U l        SU l        S	U l        [)        [*        5      U l        [.        R0                  U R,                  S   l        [.        R4                  U R,                  S   l        [.        R6                  U R,                  S
   l        [.        R8                  U R,                  S   l        [.        R:                  U R,                  S   l        [.        R<                  U R,                  S   l        [.        R>                  U R,                  S   l        g )Nr   d   )rm   gffffff@g333333?g@r8   r"  rm   Fr}  r   rn   r      rP      ) r*   r   r   r   r   r   r:  r   rt  r&  r   rw  rx  r{  r|  r  r  r  r   r  r(   rc   r   r   darkcyanri   
bluevioletbluecyanpinkmagentayellow)rF   kwds     rH   r   Pie.__init__   s-   $
#	$!" $ AEEEt|d&> #-o>#)??A #)#4#4A #);;A #);;A #);;A #)>>A #)==A rK   c                    [        SS5      n[        5       nSUl        SUl        SUl        SUl        / SQUl        / SQUl        SUR                  l	        SUR                  S	   l
        S
UR                  S	   l	        S
S
/UR                  S	   l        SUR                  S	   l        [        R                  UR                  S	   l        [        R                   UR                  S   l        [        R$                  UR                  S   l        [        R&                  UR                  S
   l        [        R(                  UR                  S	   l        [        R*                  UR                  S   l        [        R,                  UR                  S   l        [        R.                  UR                  S   l        UR1                  U5        U$ N   r  2   
   P   r     r   (   r  <   r'  r  crb  r3   fr   r   rn         ?r   rm   r  rP   r  )r   rr  r   r   r   r   r:  r   r   rf   rq   rk   ru   r   redrt   r  ri   r  r  r  
aquamarine	cadetblue
lightcoraladdrF   rb  pcs      rH   demoPie.demo<  sG   CU	%-	!		 		!#$		! ()!u		!$#'		! !'		!!'		!!'!2!2		!!'		!!'		!!'!2!2		!!'!1!1		!!'!2!2		!	b	rK   c                 :    " S S5      nU R                   S-
  nU R                  nS=n=n=n=p[        U R                  5      n/ nUR                  n[        U R                  U R                  5      nU GH  u  nnUS   c  M  U R                  US5      nU(       d  M*  U R                  X-     nUR                  (       a  UR                  (       d  M_  US-  n[        U USXEU5      nU" U5        UR                  5       nUS   US   -
  nUS   US   -
  nU Vs/ s H  nUS   [        UUS   US   45      4PM     nn[        US5      n[        US5      nU(       af  U(       a_  US	:X  a  US   US   -
  US   US   -
  :  a  S nO>S nO;US   US   -
  S
US   US   -
  -  :  a  S nOUS   US   -
  S
-  US   US   -
  :  a  S nU(       a  US-  nU(       a  US-  n[        UUUUUUUR                   UR"                  UR$                  S9	Ul        [)        UU	5      n	U
US-   -  n
GM     U(       d  U R                   S-  nU R                  S-  nU R*                  U-   nU R,                  U-   nU R.                  (       a  U R.                  nU R0                  (       a  U R0                  nU R2                  (       a  [5        UU5      =nnU" UUUU/ 5      $ Xv:H  nXR                  :  a  U(       d  X:X  a  [7        U5      nOS n[9        [        U5      XR*                  U R,                  U R                   U R                  US9u  n n!n"n#US	:X  a  [)        U!U"5      =n!n"U R*                  U!-   n$U R*                  U R                   -   U"-
  n%U%U$-
  S-  nU R                  S-  U#-
  nU$U-   nU R,                  U-   U#-   nU R.                  (       a  U R.                  nU R0                  (       a  U R0                  nU R2                  (       a  [5        UU5      =nnU" UUUUU U!U"5      $ s  snf )Nc                       \ rS rSrSS jrSrg)!Pie.makePointerLabels.<locals>.PLiY  c                 X    Xl         X l        X0l        X@l        XPl        X`l        Xpl        g rC   )centerxcenteryr  r  r:  luru)rF   r  r  r  r  r:  r  r  s           rH   r   *Pie.makePointerLabels.<locals>.PL.__init__Z  s%    &&&& 	rK   )r  r  r:  r  r  r  r  N)r   r   )r]   r^   r_   r`   r   ra   rD   rK   rH   PLr  Y  s    rK   r  rn   r   rm   r   r:   r   rz  g{Gz?)	r   r   r   r4  r5  rB  r6  rC  rD  r   )r1  )r   r   r   r   r   r)  rt  r&  r   r   r   r   r  r   r2  dictr   r   r   r   r   r   r   r  r  r{  r   rS   r^  )&rF   anglesplModer  r   r   r5   nrnlmaxWsumH
styleCountr  L_addrefArcsr   r  snr   r  r  r/   hr'  r5  r4  r  r  r  r  aonRr1  rI  r  r  rJ  x0x1s&                                         rH   makePointerLabelsPie.makePointerLabelsX  s   	 	 A$%%%B%%d%

"4??4>>BDAqt|X##Ab)BxKK-E&&emmXFAT"Su=A!HA!QqT	A!QqT	AFMNg1Q4,Q!QqT{;<gBN A&B A&Bb>)!uRU{2a5A;.!!!uRU{4Ar!u#55!Q%1+t+BqE"Q%K7!272272aaqB"1UZUpUpx}  yS  yS  `e  `  `  @AKq;DAaCKD= @ jjnGkk#oGffWnGffWnG||t||W||t||W~~s77/CCwwggggb99uTDD'FAffTVVDJJt{{`de"R>!"Rj BVVBYVVDJJr!b5#+++c/#%W*&&.$<<4<<<<4<<>>3ww+??77''''!Br::_ Os   #Pc                     [        [        [        U R                  5      5      n[	        [        U5      5      =o0l        US:w  a  SU-  OSnU(       a  U Vs/ s H  n[        XE-  U5      PM     sn$ U Vs/ s H  oTU-  PM	     sn$ s  snf s  snf )Nr   r>   rm   )r   maprU   r:  r   rE  _sumrk  )rF   keepDatar:  r1   r  r   s         rH   normalizeDataPie.normalizeData  s{    CDII&'c$i((IdDF.23dIac!$d33!%&AaC&& 4&s   B5Bc                 X   [        U SS 5      nU R                  (       a2  [        U R                  U R                  5      nSU R
                  l        OU R                  S-  nU R                  S:H  =(       a    S=(       d    Sn[        U R                  US95       Vs/ s H  oDPM     nnU R                  S:X  a  U R                  (       d  U Vs/ s H  n[        US   5      S:  d  M  UPM     nnUR                  [        S	9  / / /nS
nU(       aR  US:  a  UR                  S
5      nOUR                  S5      nXxS-     R                  U5        US-  nUS-  nU(       a  MR  US   R!                  5         US
   US   -   U Vs/ s H  n[        US   5      S:  d  M  UPM     sn-   n/ n	U	R                  nU H`  u  pX*U-  -   n[        U
5      ["        :  a  X+:  a  X4nOX+4nOUS 4nU(       a  [%        US
   U
R&                  5      US   4nUnU" X45        Mb     U	$ s  snf s  snf s  snf )Nr  rm   rO   r"  r   )r  r~  gh㈵>r-  r   rn   r  )rV   r   ri  r:  r&  r   r   rt  r  r  r|  rU   r/  r@  popr   reverse_ANGLELOrk  rn  )rF   wrrt  whichWayr'  DWrN  r   r  r   endAngler  s                rH   
makeAnglesPie.makeAngles  s   T--??		4>>:J()DKK%3.J>>[07R<1!$"4"4b"4"ABCB1QBC>>;&t1AqQqTDAA1FFvFBAAQ3aAb	AA#a QQ ! aDLLN!QqT	<1S1Yt^Q<<AHHHA"h&67H5z8#)!,B#,B%1ekk22a59!JqfI  ? D1 =s   HH"'H"H'H'c                   ^  T R                  5       n/ nU H&  u  nu  pEUc  UnOSXT-   -  nUR                  U5        M(     T R                  n[        U5      n[	        T R
                  U5      n	[        T SS 5      n
UT l        [        T R                  5      nT R                  nU(       a  S nU(       aS  SnT R                  X5      nUR                  nUR                  nUR                  nUR                  nUR                  nS nOT R                   S-  nT R"                  S-  nT R$                  U-   nT R&                  U-   nT R                  (       a  T R                  nT R                  (       a  T R                  nT R(                  (       a  [+        UU5      =nnT R,                  nU 4S jn[/        5       nUR0                  n/ nUR                  nT R2                  nU GHV  u  nu  pEUc  M  T R                  X;-     nUR4                  (       d  M2  [7        XT-
  5      nUUnnU" U5      nUR8                  nU(       d  U(       aG  XE-   S-  n U [:        -  n![=        U!5      n"[?        U!5      n#U(       a  U[@        :  a  UUU"-  -   nUUU#-  -   nU(       a  [C        UUXUUUU-  UU-  S9n$O&U[@        :  a  [E        UUUU5      n$O[C        UUXUUS9n$URF                  U$l#        URH                  U$l$        URJ                  U$l%        URL                  U$l&        URN                  U$l'        URP                  U$l(        URR                  U$l)        URT                  n%U%(       Ga?  U[W        URX                  5      -  n&U&S	:  Ga   U%S
:X  a  [Z        R\                  O[Z        R^                  n%S	[a        U&5      -   n&S	URb                  -
  n'URd                  S:X  a  S	U'-
  [W        U&S	-
  5      -  n(U'n)OU'S	-
  [W        U&S	-
  5      -  n(S	n)XT-
  [W        U&5      -  n*URF                  n+S U$l#        [g        U&5       Hn  n,UU,U*-  -   n-UU,S	-   U*-  -   n.U%" U+U)U(U,-  -   5      n/U(       a  [C        UUUU-U.UUU-  UU-  S9n0O[C        UUUU-U.US9n0U/U0l#        S U0l$        SU0l%        U" U05        Mp     U" U$5        U
(       a  U
" U$URh                  US9  URj                  (       d  GM  U(       GdS  U(       a  URl                  n1UU1-  n2UU1-  n3UU2W"-  -   n4UU3W#-  -   n5[o        T UW U4U5U5      n6U" U65        U(       d+  U6Rp                  (       a  UUU"-  -   U6l9        UUU#-  -   U6l:        U(       a#  U4U5U U2U3UUU6Rw                  5       XE4S.	U6l<        GM  GM  U(       a  W(       a  UU   n6U6(       a  U6Rx                  n7U7S   n8U7S   n9UUU9-  -   n:UUU8-  -   n;URz                  n<U:U<U9-  -   n=U;U<U8-  -   n>U" [}        U:U;U=U>U6R$                  U6R&                  4UR~                  UR                  S95        U" U65        GM@  GMC  GMF  GMI  U(       d  GMS  T R                  R8                  n?Sn@U H  u  nnAT R                  U   RF                  (       a  W@S	-  n@M+  UW@-  nBT R                  UB   RF                  T R                  U   l#        T R                  UB   R8                  T R                  U   l        M     [g        SW@S	-
  5       H;  nCT R                  UC   R8                  U?:  d  M"  T R                  WC   R8                  n?M=     URl                  n1UU1-  n3[7        W 5      S:  d  U S:  a  U S:  d  SU s=:  a  S:  a2  O  O/S	T R                  -   T R                   -  T R$                  -   U?-   n4Sn2O+T R$                  T R                  T R                   -  -
  U?-
  n4Sn2UU3W#-  -   n5[o        T UU U4U5U5      n6U" U65        U(       d  UUW"-  -   U6l9        UUU#-  -   U6l:        U(       a  U4U5U U2U3UUU6Rw                  5       S.U6l<        U6Rw                  5       u  nDnEnFnGGMY     U(       a  U(       a
  [        UX}S9  U H  n6U" U65        M     U(       Gd  U GH|  n6U6Rp                  (       aY  U(       dR  U" [        U6R$                  U6R&                  U6Rr                  U6Rt                  WR~                  UR                  S95        Mn  U(       d  Mw  U6Rw                  5       u  nDnEnFnGU6R$                  S	T R                  -   T R                   -  T R$                  -   :X  a  U" [        U6Rr                  U6Rt                  SU6Rr                  U6R$                  -   -  U6R&                  SWGWE-
  -  -   WR~                  UR                  S95        U" [        SU6Rr                  U6R$                  -   -  U6R&                  SUGUE-
  -  -   U6R$                  U6R&                  SUGUE-
  -  -   UR~                  UR                  S95        GM  U" [        U6Rr                  U6Rt                  SU6Rr                  U6R$                  -   -  U6R&                  SWGWE-
  -  -   WR~                  UR                  S95        U" [        SU6Rr                  U6R$                  -   -  U6R&                  SUGUE-
  -  -   U6R$                  U6R&                  SUGUE-
  -  -   UR~                  UR                  S95        GM     U$ )Nr   r  Fc                     gNr   rD   )r   s    rH   <lambda> Pie.makeWedges.<locals>.<lambda>  s    BrK   c                 (   > TR                  U S5      $ r  )r   )r   rF   s    rH   r  r     s    D..q4rK   r   )r  radius1yradius1)r  rm   r   r   r   )valuelabel)	r   r   r   r   r   r   r   r   r  r8  r9  )rf   rj   r8   r<   r   r   r   r   r   r   r   r   r   r   r   )r  g      ?)Dr  r   r   r   r   r   rV   _seriesCountr   rx  r  r  r  r  r  r:  r   r   r   r   r{  r   rw  r   r  r  r   rU   rq   r  r   r   _ANGLEHIr    r   ri   rj   rf   ro   rl   rp   rk   r   r   r   r   WhiterBlackerrS   r   r   r   rn  r   ru   r   r   _aax_aayr  r   r   r&   r   r   r  r  r'   )HrF   r  
halfAnglesr   a1a2	halfAngler   r5   r   r  r  r  rw  r  r  r  r  r  PL_datagSNgg_addr  r  r  r   r  r   r   r   rq   averageAngleaveAngleRadianscosAAsinAAtheWedgeshadernshadesr   dshshf1shdashscishsha1sha2shcshWedgeru   r   r   r   r   r  r:  sinMcosMlXlYlpellXilYislices_popoutrM  r   r  r   r  y1x2y2sH   `                                                                       rH   
makeWedgesPie.makeWedges  s)
   "
IAgrz	K	i(   __
KDKK*T--%
&&F %%%f4BjjGjjGjjGjjGggGCjjnGkk#oGffw&Gffw&G||t||W||t||W~~s77/CCww $ 6 64CG"66  IAgrz8 Q\2J%%xRUB gBq6D&&Fv "s{".w"6O,O,bk 6%</B 6%</B" Rb' '(; ;WM`E`b x<&r2w@H$RW"gNH ",!5!5H#-#9#9H #-#9#9H &0&?&?H#%/%=%=H"(2(C(CH%'1'A'AH$++FuZ%<%<==Q;.4i.?V]]V^^FGnG$%j&>&>$>M!22H< gai0@@,,Qgai0@@ E5>1D%//D)-H&$W~!CH}!SUDL0$T$S.9.&+BGT4QX,34G,GQXYlQl'nG ',BGT4QX&YG,/).2+./+g  . (O8"((6'''!&0&<&<$[0$[0!#bh!#bh*4\&PZ[a%!*;*;%'%5AF%'%5AF,17Vl242BR67kkmrg+.AK -
  G#AJ#$;;D#'<D#'<D!#gdl!2B!#gdl!2B#-#G#GD"$tDy.C"$tDy.C!(Br#c!##acc+B0:0T0T0:0T0T#V W "!H  %,  t(,(:(:(.HAu#{{1~77 !Q$%aC;?;;q>;S;SA 88<A8M8MA 5 )/ "'q1A#{{1~44}D04A0E0E ". '1&<&<$[0-2s9J|]`O`fj ,g3.2g3&'(=(=&=tzz%IDFF%RUb%bF!"B%)VVt/D/Ddjj.P%PS`%`F!"B!#bh*4\&PZ[a%%'%5AF%'%5AF,17Vl242BR67kkm+.AK '(kkm2bY  \ Q
DAE!H$$Z$qss133qvvaff$.$H$H$.$H$HJ K  Z"#++-KBr"Rssq!6!66

BTVVKKd166!&&affQSSj1A!##tRPRU|BT(2(L(L(2(L(LN O d3qss
#3ACCr"u4Fqss133PTVXY[V[P\K](2(L(L(2(L(LN O d166!&&affQSSj1A!##tRPRU|BT(2(L(L(2(L(LN O d3qss
#3ACCr"u4Fqss133PTVXY[V[P\K](2(L(L(2(L(LN O' . rK   c                 j    U R                  5       nU R                  5       nU(       a  [        X5      $ U$ rC   )makeBackgroundr  r   )rF   rI  r/   s      rH   drawPie.draw  s-    !OOU1ZrK   )r  r  rw  r:  r&  r   r  r   r|  rx  r{  r   r  r   r   rt  r   r   r  r   r  rD   )F)r]   r^   r_   r`   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rv  r   r  r  r  r  r  r  ra   rD   rK   rH   rr  rr  	  s    
, 
O2kl
3:no
 "(1VW
 !{O!DKkl	

 d)QR
 $I  5S  T
 'x6fuvw
 )?43J92U)V  ^g  vw  x
 (d;~(NUWfgh
 !1_nop
 !w{!;!L
 ~4HI
 ~4HI
 +>@fg
 #4.L[\]
  ")2xy!
" (  8Q  R#
$  z 29gh%
H( O188M;^''R[zrK   rr  c                       \ rS rSrSr\" \\" \SS9\" SSS9\" SSS9\" \	SS9\" \
S	S9\" \S
S9\" \SS9\" \	SS9\" \	SS9\" \	SS9\" \	SS9S9rS rS rS rSS jrSrg)LegendedPiei  zUPie with a two part legend (one editable with swatches, one hidden without swatches).z#If true then create and draw legendrg   NzHandle to legend for piez;Formatting routine for number on right hand side of legend.z:Horizontal space between legend and numbers on r/hand sidez&Colours used for both swatches and piezNames used in legend (or None)z/Numbers used on r/hand side of legend (or None)zPadding on left of drawingzPadding on right of drawingzPadding at top of drawingzPadding at bottom of drawing)rs  
drawLegendlegend1legendNumberFormatlegendNumberOffsetpieAndLegend_colorslegend_nameslegend_datar   r   r   r   c                    [         R                  U 5        SU l        SU l        SU l        SU l        / SQU l        S U l        SU l        [        R                  [        R                  p!U" SSSSSS9U" SS	SS
SS9U" SSSSSSS9U" SS	SS
SSS9U" SSSSSSS9U" SS	SS
SSS9/U l        U R                  S   U R                  S   l        U R                  S   U R                  S   l        U R                  S   U R                  S   l        U R                  S   U R                  S   l        U R                  S   U R                  S   l        U R                  S   U R                  S   l        SU R                  l        X R                  l        SnSU l        SU l        U R                  U l        SSKJn  U" 5       U l        U R
                  U-   U R,                  l        U R                  U R,                  l        SU R,                  l        SU R,                  l        SU R,                  l        SU R,                  l        SU R,                  l        SU R,                  l        SU R,                  l        / SQU l        [?        [A        U R                  5      5       HD  nU R,                  RB                  RE                  U R                  U   U R<                  U   45        MF     SU R,                  l#        S U R,                  l$        X R,                  l        S!U R,                  l        U" 5       U l%        SU RJ                  l        SU RJ                  l        SU RJ                  l        S"U RJ                  l#        S U RJ                  l$        U R,                  R                   U RJ                  l        SU l&        SU l'        SU l(        SU l)        SU l*        g )#Nr   r  )g333333C@g333334@gfffff2@g.@gffffff@r"     H   zPANTONE 458 CV)spotNameA   r   zPANTONE 288 CVK   )r  densityr  rm   rn   r   r  rP   g      ?   3   z%.1f%%)LegendgGz@gףp=
W,@gHz&@   right)zAAA:zAA:zA:zBBB:zNR:zHelvetica-Boldr  r   zHelvetica-Oblique)+rr  r   r   r   r   r   r:  r   r&  r   
PCMYKColorr   r  r   ri   rf   rj   r  r  r  !reportlab.graphics.charts.legendsr   r  deltaxdeltaydxTextSpacer   r   columnMaximum	alignmentr  r   r   colorNamePairsr   rr   rs   _legend2r   r   r   r   r  )rF   r#  r   legendOffsetr   r  s         rH   r   LegendedPie.__init__  s-   T
1	$"--v||E$.r"RCS$T$.s2aDT$U$.r"RCS\^$_$.s2aDT]_$`$.r"RCS\^$_$.s2aDT]_$`$b  "&!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A "&"'"$"*99 	=xL0"##( %&"!(<s499~&ALL''..0H0H0KTM^M^_`Ma/bc ' 0 !#( #& $%!")!4!"$(LL$<$<!rK   c           	         U R                   (       a"  / U R                  l        / U R                  l        [	        [        U R                  5      5       GH}  nU R                  S :X  aV  U R                  U   U R                  U   l
        U R                  R                  R                  U R                  U   S 45        Oc U R                  U   U R                  U   l
        U R                  R                  R                  U R                  U   U R                  U   45        U R                  S :w  d  M  U R                  U   nU R                  nUb  Uc  OU[        U[         5      (       a  X2-  nO;[#        US5      (       a	  U" U5      nO![%        S['        U R                  5      -  5      eU R                  R                  R                  S U45        GM     [(        R+                  U 5      nU R                   (       Ga!  UR-                  U R                  5        U R                  R.                  U R0                  -   U R                  l        U R                  R2                  U R                  l        U R                  R4                  U R                  l        U R                  R6                  U R                  l        U R                  R8                  U R                  l        U R                  R:                  U R                  l        UR-                  U R                  5        UR=                  U R>                  U R@                  5        U$ ! [         a    U R                  U[        U R                  5      -     U R                  U   l
        U R                  R                  R                  U R                  U[        U R                  5      -     U R                  U   45         GNf = f)N__call__z6Unknown formatter type %s, expected string or function)!r  r  r*  r+  r   r   r:  r  r  r   ri   r   
IndexErrorr  r  
isinstancestrhasattr
ValueErrorasciirr  r  r  r   r  r   r%  r&  r   r(  shiftr   r   )rF   r  ldflNFrR  s        rH   r  LegendedPie.draw  s   ??*,DLL'+-DMM(s499~&A  D(+/+C+CA+FA(++22D4L4LQ4OQU3VWJ/3/G/G/JDKKN,LL//668P8PQR8SUYUfUfghUi7jk 4'&&q)--;#+C(()CS,,c(C$%]`efjf}f}`~%~,,33T#J?- '. HHTN???EE$,,"llnnT-D-DDDMMO"llnnDMMO#'<<#6#6DMM #'<<#6#6DMM #||DMM*.,,*D*DDMM'EE$-- 	  $"4"457 " J/3/G/G#dNfNfJgHg/hDKKN,LL//668P8PQRSVW[WoWoSpQp8qsw  tE  tE  FG  tH  8I  JJs   =A"MBO O c                 :   U R                   nU R                  (       aV  XR                  R                  U R                  -   -  nXR
                  R                  U R
                  R                  5      -  nU R                  U R                  -   U R                  -   nX4$ rC   )r   r  r  r   r  r+  _calculateMaxWidthr*  r   r   r   )rF   txtys      rH   _getDrawingDimensions!LegendedPie._getDrawingDimensions9  st    ??,,..!8!888B--224==3O3OPPB+DOO;wrK   c                     U(       d  U R                  5       u  p#[        X#5      nUR                  U R                  5       5        U$ rC   )r>  r   r  r  )rF   drawingr<  r=  s       rH   r  LegendedPie.demoA  s5    ..0EBboGDIIK rK   )r+  r   r:  r&  r  r   r   r   r  r  r  r  r  r  r   r   r   r   r   rC   )r]   r^   r_   r`   r   r   rr  r   r   r   r   r   r   r   r   r  r>  r  ra   rD   rK   rH   r  r    s    _C!)2WXt*DE)$5rs)(9uv*>@hi#$?Ffg"#>Evw"82NO#H3PQ!(1LM$X4RS
HAF'RrK   r  )
_getShaded_2radr   r  c            
       b   \ rS rSrSr\" S10 S\" \SS9_S\" \SS9_S\" \SS9_S\" \SS9_S	\" \	SS9_S
\" \	SS9_S\" \	S5      _S\" \
SS9_S\" \SS9_S\" \SS9_S\" \	SS9_S\" \	SS9_S\" \	SS9_S\" \SS9_S\" \SS9_S\" \	S5      _S\" \SS9_S\" \	S5      _S\" \S5      _S\" \SS9_S\" \	SS9_S\" \SS9_S\" \SS9_S \" \	S!5      _S"\" \S#S9_S$\" \SS9_S%\" \	SS9_S&\" \	SS9_S'\" \	SS9_S(\" \SS9_S)\" \SS9_S*\" \SS9_S+\" \	SS9_S,\" \S-5      _6rS. rS/rg0)2Wedge3dPropertiesiI  re   ri   r   rg   fillColorShadedrt   rr   rs   rx   r   zpadding at bottom of boxry   r|   rz   r{   rv   rw   r   r   r   zpadding at left of boxr   r   zpadding at right of boxr   zset to True for simple pointersr}   r~   r   r   r   zpadding at top of boxr   r   r   ru   rq   shadingrj   strokeColorShadedrk   rf   r   zset to false to skip displayingc                 &   SU l         SU l        SU l        S =U l        =U l        U l        [        S   U l        [        S   U l        SU l	        [        S   U l
        [        S   U l        [        S   U l        S	U l        S=U l        =U l        U l        S U l        S=U l        =U l        =U l        U l        S
U l        S U l        SU l        S U l        S U l        SU l        S =U l        =U l        =U l        U l        SU l         SU l!        SU l"        g )Nr   g333333?rm   rj   rk   rr   rs   ri   r   rM   r   r   r   )#rf   rH  r   rI  rG  ri   r"   rj   rk   rq   rr   rs   rt   ru   rv   rw   rx   r   r   r   r   r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   s    rH   r   Wedge3dProperties.__init__v  s#   IMMM!5)-8-.?@&z2&z2'4;<<<(8nooo 6o9PSWSk&$(!$'!"&!%!$]aaa 0a43FIZ '$%!rK   )"ri   rG  rt   rr   rs   ru   rx   r   ry   r|   rz   r{   rv   rw   r   r   r   r   r   r   r}   r~   r   r   r   r   r   rq   rH  rj   rI  rk   rf   r   NrD   )r]   r^   r_   r`   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   ra   rD   rK   rH   rF  rF  I  se     #
 B7#
&}"=#
 !B7#
  b1	#

  b1#
 #84#
 +84NO#
 '{;#
 *-R@#
  ,MrB#
  ,H"=#
  b1#
  b1#
 $N;#
 %^<#
  )2JK!#
" &n"=##
$ *(3LM%#
&  ,I6WX'#
( )B?)#
* )r:+#
, ".b9-#
. ("=/#
0 (1HI1#
2 %Y4VW3#
4 #>r:5#
6 #847#
8 hB/9#
: xR0;#
< #=b9=#
> )B??#
@ ''<"EA#
B #84C#
D y)JKE#
HJ&rK   rF  c                        \ rS rSrS rS rSrg)_SL3Di  c                     US:  a
  US-  nUS-  nXl         X l        X-   S-  U l        [        X!-
  5      [        :  U l        g )Nr   rO   r   )lohir7  rU   r  not360)rF   rO  rP  s      rH   r   _SL3D.__init__  sD    a4#IB#IBE3;"%j8+rK   c                 8    SU R                   U R                  4-  $ )Nz_SL3D(%.2f,%.2f))rO  rP  r   s    rH   __str___SL3D.__str__  s    !TWWTWW$555rK   )rP  rO  r7  rQ  N)r]   r^   r_   r`   r   rT  ra   rD   rK   rH   rM  rM    s    ,6rK   rM  c                 (    [        U S   US   5      * $ Nr   r-   r=  s     rH   _keyS3DrX    s    !QqTN?rK   r<   c            
           \ rS rSr\" \\" \SS9\" \SS9\" \SS9S9rSr	Sr
S	rS
 rS rS rS rS rS rS rS rS rS rSrg)Pie3di  zA flattening parameter.rg   zdepth of the pie.zThe view angle.)rs  perspectivedepth_3dangle_3dF      r:   c                     U R                   U   R                  =(       a    U R                  U   R                  =(       d    S$ rW  )_sl3drQ  r   rq   )rF   r   s     rH   _popoutPie3d._popout  s.    zz!}##=A(=(=BBrK   c                     U R                   U=(       a    U R                  =(       d    S-   U R                  U5      [        [	        U R
                  U   R                  5      5      -  -   $ rW  )_cx
_xdepth_3drb  r   rD  ra  r7  rF   r   rb  s      rH   CXPie3d.CX  J    xx.t3!4T\\!_StzzZ[}O`O`IaEb5bbbrK   c                     U R                   U=(       a    U R                  =(       d    S-   U R                  U5      [        [	        U R
                  U   R                  5      5      -  -   $ rW  )_cy
_ydepth_3drb  r   rD  ra  r7  rg  s      rH   CYPie3d.CY  rj  rK   c                 h    U R                  X5      U R                  [        [        U5      5      -  -   $ rC   )rh  _radiusxr   rD  rF   r   orb  s       rH   OXPie3d.OX  &    wwq|DMM#eAh-777rK   c                 h    U R                  X5      U R                  [        [        U5      5      -  -   $ rC   )rn  _radiusyr   rD  rr  s       rH   OYPie3d.OY  rv  rK   c                 d    U R                   n[        [        X-
  5      [        X-
  S-   5      5      $ )NrO   )_3dvar   rU   )rF   r'  r|  s      rH   rad_distPie3d.rad_dist  s)    

3qw<AGCK 011rK   c                 |   [         R                  U 5        [        [        5      U l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        [
        R                  U R                  S   l        S =U l        U l        SU l        S	U l        / S
QU l        g )Nr   rm   rn   r   r  rP   r  i,  r  )g      )@g4@r   g      6@g      @g      2@g      *@)rr  r   r(   rF  r   r   r  ri   r  r  r  azurecrimson
darkvioletr  r  r   r   r:  r   s    rH   r   Pie3d.__init__  s    T-.?@#)??A #)#4#4A #);;A #);;A #)<<A #)>>A #)#4#4A &**t|
=	rK   c                    U R                  U5      nXpR                  U R                  U   R                  5      :  a  U R                  US5      U R	                  US5      U R                  US5      U R	                  US5      U R                  X#S5      U R                  X#S5      U R                  X#S5      U R                  X#S5      /nUR                  U[        XXeSS945        g g )Nr   rm   rj   ri   rf   ro   )	r}  ra  r7  rh  rn  rt  ry  r   r$   )	rF   r  r   r   rj   rf   ri   rdrR  s	            rH   	_fillSidePie3d._fillSide  s    ]]5!mmDJJqM--..1dggal!TWWQq\"47711#5"47711#57A HHbyxyz{| /rK   c                   ^  T R                   nT R                  n[        US-   5      =nT l        [	        U5      nT R
                  n[        U5      U-  T l        [        U5      U-  T l	        T R                  T R                  S-  -   T l        T R                  T R                  T R                  -
  S-  -   T l        T R                  T R                  -
  =pgT R                   (       a  T R                   nT R"                  (       a  T R"                  nUT l        ST R&                  S-  -
  U-  =T l        nT R+                  5       nT R,                  n	T R.                  n
T R0                  nT R2                  nT R4                  nT R6                  nT R8                  n[;        U5      =T l        n/ =nT l        [A        5       n[        T RB                  5      nT RD                  S:H  =(       a    S=(       d    SnU H6  nUU-  nUUU-   nnUnUS:  a  UUnnURG                  [I        UU5      5        M8     [K        T RL                  U5      nUnUS	-   n/ n/ n/ n " U 4S
 jS[N        5      nT RP                  n[S        U5       GH\  nUU   nURT                  (       d  M  UU   n U RV                  =n!nU RX                  =n"n[[        U"U!-
  5      n#U#[\        :  a  MW  [_        UR`                  URb                  URd                  5      n$[_        URf                  URh                  URd                  5      =(       d    U$n%URj                  n&U
" US5      n'U" US5      n(U
" US5      n)U" US5      n*U(       Ga  URm                  [o        U)U*UU!U"UU%U&U$SS9
5        U!Us=:  a  U":  a  O  OUnU!Us=:  a  U":  a  O  OUn[q        U%U$U&SS9n+U+Rs                  U)U*UUUUSS9  U+Ru                  U" UUS5      U" UUS5      5        U+Rs                  U'U(UUUUSS9  U+Rw                  5         UU::  a	  UU:  a  Sn,O[y        U" U5      U" U5      5      n,URG                  U,U+45        U" UUU!U%U&U$5        U" UUU"U%U&U$5        UR`                  n$URf                  =(       d    U$n%URG                  [o        U'U(UU!U"UU%U&U$SS9
5        U#[z        :  a  [}        U'U(XgU%U&U$SS9n-O[o        U'U(UU!U"UU%U&U$SS9
n-URG                  U-5        UU   n.UR~                  (       d  GM  U.(       d  GM  UR                  n/T =R$                  U/-  sl        T =R(                  U/-  sl        U R                  n0U" UU0S5      n1U" UU0S5      n2[        T U.U0U1U2UUS9n3URG                  U35        U(       a@  U1U2U0T R$                  T R(                  U
" US5      U" US5      U3R                  5       S.U3lD        UT l        UT l        GM_     UR                  [        S9  U(       a  U(       a  [        UT R                  5        U V4s/ s H  n4U4S   PM
     sn4U-   U-    H  n5URm                  U55        M     U$ s  sn4f )Nr8   r         ?g      Y@r"  r   rm   r   r:   c                   6   > \ rS rSr Y R                  rS rSrg) Pie3d.draw.<locals>.WedgeLabel3di  c                     US   S:X  aC  [        U S5      (       d1  U R                  U l        U R                  * U R                  -   U l        g g g )Nr   r5   _ody)r3  r   r  rm  rE   s     rH   rI   *Pie3d.draw.<locals>.WedgeLabel3d._checkDXY  sE    a5#:"4//$(GG	#'99*t"> 0 rK   )r  r   N)r]   r^   r_   r`   rm  rI   ra   r   s   rH   WedgeLabel3dr    s    J?rK   r  )r  rj   rf   ri   ro   r  )r  moveTo)r  r  )rj   rf   ri   ro   )r   r  r-  )Ir   r]  r   r|  rD  r\  r   rf  r   rm  r   r   re  r   r   rl  r  r  rq  r[  rx  r  r  rh  rn  rt  ry  r}  r  r   r  ra  r   rt  r&  r   rM  r   r   r@   rw  r   r   rO  rP  rU   r  rC  ri   rG  rH  rj   rI  rf   r  r    r#   addArclineTo	closePathr   r  r   r   ru   r7  r   r  r   r/  rX  r  r   )6rF   r   	_3d_angler|  a0r\  radiusxradiusyr:  rE  rh  rn  rt  ry  r}  r  r5   ra  r  lastrh  angle1angle0r   r  rN  rP  r  r  rw  r   r   slrO  rP  r  ri   rj   rf   cx0cy0cx1cy1rR  r  r  r   ratr7  r   r   r  r1   r   s6   `                                                     rH   r  
Pie3d.draw  s   MM	!)B,//
5\==b'(*b'(*66$**S.(664;;8#== HHTVVO+<<4<<<<4<<#&)9)9%)?#?"HH!!#iiWWWWWWWW==NN	 #D	)A
GDOO$^^[(/R41AGA!1T6FFD!tffVVLLvf-.  DKK*s]	?: 	? !22qA1IE==(qB%%B%%BRUB({H"5??53H3HWI$U%6%6u7N7Nu}}]jajK++KQq'CQq'CQq'CQq'CeCGRG,7KZc/02 3 <R<"<R<"yU`pqrSwaPAfQ1VA7SwqQ5=VU]BXf-hv.>?B"Q !Ab[C!Ab[C I++8yKHHU3s72b(3V_opr s8|"3W(3V_opr !SBw(3V_oprHHX!9D"""tt''$$ffAc!Ac! d3vfUl[$)/Vc*.--dmmRTUVWXRY`bcdef`g./kkm#&AK !( 'C F 	
7Qt/!"#A1Q4#A%a'AEE!H ( $s   Yc                 ^   [        SS5      n[        5       nSUl        SUl        SUl        SUl        / SQUl        / SQUl        SUR                  l	        SUR                  S	   l
        S
UR                  S	   l	        S
S
/UR                  S	   l        SUR                  S	   l        [        R                  UR                  S	   l        [        R                   UR                  S   l        [        R$                  UR                  S   l        [        R&                  UR                  S
   l        [        R(                  UR                  S	   l        [        R*                  UR                  S   l        [        R,                  UR                  S   l        [        R.                  UR                  S   l        SU R                  S   l        SU R                  S	   l        SU R                  S   l        SU R                  S   l        SU R                  S   l        UR3                  U5        U$ r  )r   rr  r   r   r   r   r:  r   r   rf   rq   rk   ru   r   r  rt   r  ri   r  r  r  r  r  r  r   r  r  s      rH   r  
Pie3d.demoS  s   CU	%-	!		 		!#$		! ()!u		!$#'		! !'		!!'		!!'!2!2		!!'		!!'		!!'!2!2		!!'!1!1		!!'!2!2		!!"A!"A!"A!"A!"A	b	rK   )r|  re  rl  rq  rx  r  ra  rf  rm  r:  r   r   r   r  r  N)r]   r^   r_   r`   r   rr  r   r   r   r[  r\  r]  rb  rh  rn  rt  ry  r}  r   r  r  r  ra   rD   rK   rH   rZ  rZ    sx    C"82KL/BC/@A
H
 KHHCcc882>}}~rK   rZ  c                      [        SS5      n [        5       nSUl        SUl        S/Ul        S/Ul        SUR                  l        U R                  U5        U $ )1Make a degenerated pie chart with only one slice.  r     r  r  r'  rm   )	r   rr  r   r   r:  r   r   rf   r  rb  r  s     rH   sample0ar  u  sS     	SA	BBDBDdBGBIBIIEE"IHrK   c                      [        SS5      n [        5       nSUl        SUl        SUl        SUl        S/Ul        S/Ul        S	UR                  l	        U R                  U5        U $ )
r  r  r  r  r  x   r  r  r'  rm   )r   rr  r   r   r   r   r:  r   r   rf   r  r  s     rH   sample0br    sa     	SA	BBDBDBHBIdBGBIBIIEE"IHrK   c                     [        SS5      n [        5       nSUl        SUl        / SQUl        / SQUl        SUR                  l        SUR                  S	   l        S
UR                  S	   l        S
S
/UR                  S	   l	        SUR                  S	   l
        [        R                  UR                  S	   l        U R                  U5        U $ )zFMake a typical pie chart with with one slice treated in a special way.r  r  r  r  r  r  rm   r  r   rn   r  )r   rr  r   r   r:  r   r   rf   rq   rk   ru   r   r  rt   r  r  s     rH   sample1r    s     	SA	BBDBD&BG.BIBIIBIIaL BIIaL$%a5BIIaL #BIIaL#ZZBIIaLEE"IHrK   c                  6   [        SS5      n [        5       nSUl        SUl        / SQUl        / SQUl        SUl        SUl        SUR                  l	        [        R                  UR                  S	   l        [        R                  UR                  S   l        [        R                  UR                  S
   l        [        R                  UR                  S   l        [        R                   UR                  S   l        [        R"                  UR                  S   l        [        R$                  UR                  S   l        [        R&                  UR                  S   l        [        R(                  UR                  S   l        U R+                  U5        U $ )z"Make a pie chart with nine slices.r  r  }   r_  )	gףp=
?gl?gS㥻?g~jt?gL7A`?gQ?g~jt?gT㥛 ?g333333?)	12345678Xr  rm   r   rn   r   r  rP   r  r!     )r   rr  r   r   r:  r   r   r   r   rf   r   	steelblueri   thistle
cornflowerlightsteelbluer  r  r  tandarkseagreenr  r  s     rH   sample2r    s#    	SA	BBDBD#BG >BIBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaL#..BIIaL#ZZBIIaL#00BIIaLEE"IHrK   c                     [        SS5      n [        5       nSUl        SUl        / SQUl        SUl        SUl        SUR                  l        [        R                  UR                  S   l        [        R                  UR                  S   l        [        R                  UR                  S	   l        U R                  U5        U $ )
z(Make a pie chart with a very slim slice.r  r  r  r_  )J   rm   r_  r  rm   r   rn   )r   rr  r   r   r:  r   r   r   rf   r   r  ri   r  r  r  r  s     rH   sample3r    s     	SA	BBDBDBGBHBIBII#--BIIaL#^^BIIaL#..BIIaLEE"IHrK   c                  X   [        SS5      n [        5       nSUl        SUl        / SQUl        SUl        SUl        SUR                  l        [        R                  UR                  S   l        [        R                  UR                  S   l        [        R                  UR                  S	   l        [        R                  UR                  S
   l        [        R                  UR                  S   l        [        R                   UR                  S   l        U R#                  U5        U $ )z/Make a pie chart with several very slim slices.r  r  r  r_  r  rm   rm   rm   rm      r  rm   r   rn   r   r  rP   )r   rr  r   r   r:  r   r   r   rf   r   r  ri   r  r  r  r  r  r  r  s     rH   sample4r    s     	SA	BBDBD"BGBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrK   c                  x   [        SS5      n [        5       nSUl        SUl        / SQUl        / SQUl        SUl        SUl        SUl        SUR                  l
        [        R                  UR                  S	   l        [        R                  UR                  S   l        [        R                  UR                  S
   l        [        R                   UR                  S   l        [        R"                  UR                  S   l        [        R$                  UR                  S   l        U R'                  U5        U $ )zMake a pie with side labels.r  r  r  r_  )r!  rm   rm   rm   rm   rn   example1example2example3example4example5example6rm   r  r   rn   r   r  rP   )r   rr  r   r   r:  r   r   r   r   r   rf   r   r  ri   r  r  r  r  r  r  r  s     rH   sample5r     s     	SA	BBDBD BGXBIBMBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrK   c                     [        SS5      n [        5       n SUl        SUl        / SQUl        / SQUl        SUl        SUl        SUl        SUR                  l
        [        R                  UR                  S   l        [        R                  UR                  S   l        [        R                  UR                  S	   l        [        R                   UR                  S
   l        [        R"                  UR                  S   l        [        R$                  UR                  S   l        ['        SSSS5      nU R)                  U5        U R)                  U5        U $ )z=Illustrates the pie moving to leave space for the left labelsr  r  r   r_  r  r  rm   r  rn   r   r  rP   )r   rr  r   r   r:  r   r   r   r   r   rf   r   r  ri   r  r  r  r  r  r'   r  )rb  r  r  s      rH   sample6r    s    	SA	B'BDBD"BGXBIBMBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLQq3AEE"IEE!HHrK   c                     [        SS5      n [        5       nSUl        SUl        SUl        SUl        / SQUl        / SQUl        SUl        SUl	        S	Ul
        SUR                  l        [        R                  UR                  S	   l        [        R                   UR                  S   l        [        R"                  UR                  S
   l        [        R$                  UR                  S   l        [        R&                  UR                  S   l        [        R(                  UR                  S   l        U R+                  U5        U $ )zCase with overlapping pointersr  r  r  r  r  )rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   )r  r  r  r  r  r  example7example8example9	example10	example11	example12	example13	example14	example15	example16	example17	example18	example19	example20	example21	example22	example23	example24	example25	example26	example27	example28rm   r   rn   r   r  rP   )r   rr  r   r   r   r   r:  r   r   rw  r   r   rf   r   r  ri   r  r  r  r  r  r  r  s     rH   sample7r  ;  s     	SA	BBDBDBHBIbBGkBI BMBBO BII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrK   c                      [        SS5      n [        5       nSUl        SUl        SUl        SUl        / SQUl        / SQUl        SUl        SUl	        SUR                  l        [        R                  UR                  S	   l        [        R                  UR                  S   l        [        R                   UR                  S
   l        [        R"                  UR                  S   l        [        R$                  UR                  S   l        [        R&                  UR                  S   l        U R)                  U5        U $ )Case with overlapping labelsr  r  r  r  r  )rm   rm   rm   rm   rm   r   r  rm   rm   rm   rm   rm   rm   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   r   rn   r   r  rP   )r   rr  r   r   r   r   r:  r   r   rw  r   rf   r   r  ri   r  r  r  r  r  r  r  s     rH   sample8r  ]  s     eSA	BBDBDBHBIABG*BI BMBBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrK   c                      [        SS5      n [        5       nSUl        SUl        / SQUl        / SQUl        SUl        SUl        SUl        SUl	        SUR                  l        [        R                  UR                  S	   l        [        R                  UR                  S   l        [        R                   UR                  S
   l        [        R"                  UR                  S   l        [        R$                  UR                  S   l        [        R&                  UR                  S   l        U R)                  U5        U $ )r  r  r  r  r  ))   r  r     r  r   r  r  r_  #   r_  r  r   r  r  r   r  rm   r  r   rn   r   r  rP   )r   rr  r   r   r:  r   r   rw  r   r   r   rf   r   r  ri   r  r  r  r  r  r  r  s     rH   sample9r  }  s     _SA	BBDBDNBG*BI BMBBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrK   __main__)	renderPDFr  samplezsample%sz%s.pdfrC   )rm   )Fr  )s__version__r   	functoolsmathr   r   r   reportlab.libr   reportlab.lib.validatorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   "reportlab.graphics.widgets.markersr   r   reportlab.lib.attrmapreportlab.graphics.shapesr   r   r   r    r!   r"   r#   r$   r%   r&   r'   reportlab.graphics.widgetbaser(   r)   reportlab.graphics.charts.areasr*   r$  r+   $reportlab.graphics.charts.textlabelsr,   	reportlabr.   rX   rW   r  r  r@   rc   r   r   r   r   r   r   r  r   r)  r+  
cmp_to_keyr2  r;  r>  r@  r^  ri  r   rk  rr  r  !reportlab.graphics.charts.utils3drC  rD  r   r  rF  rM  rX  _270rrZ  r  r  r  r  r  r  r  r  r  r  r  r]   sysreportlab.graphicsr  argvr'  
startswithnameglobalsrA  
drawToFilerD   rK   rH   <module>r     s   	     @ @ @ @ @ @ H # E  E  E  E M 4 5 6 DSd3UY`de Tct$CVZaef h Z)j Z)x<|x 6o GR
.$


w
'D8			f	%D"L2 q
 qfJ# JX O NE&
 E&N6 6


w
'c
PC Pf"&.@.26@ D@@ Z
 ,88AB< C5DLL**q
Q)D/#Who6  rK   