o
    b                     @   s  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlT dZe	eeeeeeee
eiZdZedd	 Zd
ZeeeeeeeedZg dZdd Z dddZ!G dd de"Z#G dd dee#Z$dd Z%dd Z&G dd dee#Z'i dddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d	d9i d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z(ddefdd3e	fd5dDefd_d`efdFdTe	fdVdZefdadae	fdbdbe
fdcddefdedfe	fdgdhe	fdidjefgZ)i Z*e)D ]\Z+Z,Z-e.e+e,d D ]Z/e-e*e/< q?q3[+[,[-[/e0dkZ1i Z2e1e13  D ]Z4d#e2e4< qY[4[1i Z5e0dlD ]Z4de5e4< qie0dd#e0dmd#e0dnd#iZ6e0d0de0d\de0dde0dode0dpde0d]diZ7e8dqj9Z:drds Z;efdtduZ<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDG dd dee#ZEG dd dee#ZFG dd dee#ZGG dd dee#ZHG dd deZIdS )z$
Module for formatting information.
    )print_functionN)unpack   )FDTFGEFNUFTXFUNXL_CELL_DATEXL_CELL_NUMBERXL_CELL_TEXT	XL_FORMAT
XL_FORMAT2
BaseObject	XLRDErrorfprintfunpack_stringunpack_unicodeupkbitsupkbitsL)*)8r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      r   r   r   r!   r   r   r   r!   r!   r!   r   r!   r   r!   r   r!   r!      r(   r(   r!   r!   r!      r+   r   r+   3   f   r   r      r0   r   r   r.   r   r.   r   r!   r!   r   r.   r0   r0   r0   r   r#   r   r   r   r%   r    r&   r   r   r0   r   r1   r0   r   r0   r   r   r+   r+   r0   r   r   r+   r0   r0   r+   r   )   r<   r<   r-   r.   r   r-   r0   r0   r+   r0   r   r   r0   r   r   r+   r   r   r.   r   r.   r.   r+      rE   rE   r   r-   r.   r-   r+   r.   r   r-   r   r-   r-   r   r+   r-   r   r,   r-   r-   r+   r-   r-   r-      )8r   r   r   r   r   r   r   r   r    r"   r#   r$   r%   r&   r'   r)   r*   r,   r/   r1   r2   r3   r4   r5   r#   r   r   r   r%   r    r&   r   r6   r1   r7   r8   r9   r:   r;   )r   r0   r+   r=   r>   r?   r@   rA   rB   rC   rD   rF   rG   rH   rI   rJ   r,   rK   rL   )P   F   2   -   (            )
NormalZ	RowLevel_Z	ColLevel_ZCommaZCurrencyZPercentz	Comma [0]zCurrency [0]Z	HyperlinkzFollowed Hyperlinkc                 C   s   i | _ i | _| jsd S tdD ]	}t| | j |< qt| j }t|}t|D ]}|| | j |d < q&d | j |d < d | j |d d < d | j d< d | j d< d S )N   r   Q     )
colour_mapcolour_indexes_usedformatting_infoxrangeexcel_default_palette_b8default_palettebiff_versionlen)bookiZdpalZndpal rd   N/var/www/secure340b-portal/env/lib/python3.10/site-packages/xlrd/formatting.pyinitialise_colour_mapi   s   

rf   c           
      C   sr   d}d}|   D ]-\}}|du rqd}t||D ]\}}	|||	 ||	  7 }q||k r5|}|}|dkr5 nq	 |S )z
    General purpose function. Uses Euclidean distance.
    So far used only for pre-BIFF8 ``WINDOW2`` record.
    Doesn't have to be fast.
    Doesn't have to be fancy.
    i   r   N)itemszipprint)
rZ   rgbdebugZbest_metricZbest_colourxZcolourxZcand_rgbZmetricv1v2rd   rd   re   nearest_colour_index   s    rn   c                   @   s    e Zd ZdZdd Zdd ZdS )	EqNeAttrsz
    This mixin class exists solely so that :class:`Format`, :class:`Font`, and
    :class:`XF` objects can be compared by value of their attributes.
    c                 C   s   | j |j kS N__dict__selfotherrd   rd   re   __eq__      zEqNeAttrs.__eq__c                 C   s   | j |j kS rp   rq   rs   rd   rd   re   __ne__   rw   zEqNeAttrs.__ne__N)__name__
__module____qualname____doc__rv   rx   rd   rd   rd   re   ro      s    ro   c                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dZ
dZedZdZdZdZdZdZdZdS )Fontz
    An Excel "font" contains the details of not only what is normally
    considered a font, but also several other display attributes.
    Items correspond to those in the Excel UI's Format -> Cells -> Font tab.

    .. versionadded:: 0.6.1
    r      N)ry   rz   r{   r|   boldcharacter_setcolour_index
escapementfamily
font_indexheightitalicUNICODE_LITERALname
struck_outunderline_type
underlinedweightoutlineshadowrd   rd   rd   re   r}      s"    	r}   c                 C   s$   | j sd S td|d | jd _d S )N<Hr   )r\   r   	font_listr   )rb   datard   rd   re   handle_efont  s   r   c              	   C   s  | j sd S | js|   tp| jdk}| j}t| j}|dkr4t }t	d|_
||_| j| |d7 }t }||_| j| |dkrtd|dd \|_}|_|_|_|_|_|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_|d@ d? |_|d@ d? |_|dkrt|ddd|_
nt|d| jdd|_
n|dkrtd|dd \|_}|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_|d@ d? |_|d@ d? |_t|d| jdd|_
ddg|j |_d|_|j|_d|_d|_nNtd|dd \|_}d|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_d|_d|_t|d| jdd|_
ddg|j |_d|_|j|_d|_d|_|rU|j| jd|j dd d S d S )N      z
Dummy Fontr   rP   z	<HHHHHBBBr      rW      rM          rN      ZlenlenrS   z<HHH   r   i  z<HHrY   z--- handle_font: font[%d] ---z-------------------headerfooter)r\   encodingderive_encodingDEBUG	verbosityr`   ra   r   r}   r   r   r   appendr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   dumplogfile)rb   r   blahbvkfZoption_flagsrd   rd   re   handle_font  s   





r   c                   @   s(   e Zd ZdZdZeZedZdd Z	dS )Formatz\
    "Number format" information from a ``FORMAT`` record.

    .. versionadded:: 0.6.1
    r   r~   c                 C   s   || _ || _|| _d S rp   )
format_keytype
format_str)rt   r   tyr   rd   rd   re   __init__g  s   
zFormat.__init__N)
ry   rz   r{   r|   r   r	   r   r   r   r   rd   rd   rd   re   r   O  s    r   ZGeneral0r   z0.00r   z#,##0r   z#,##0.00r   z$#,##0_);($#,##0)r   z$#,##0_);[Red]($#,##0)   z$#,##0.00_);($#,##0.00)rW   z$#,##0.00_);[Red]($#,##0.00)	   z0%
   z0.00%   z0.00E+00   z# ?/?r   z# ??/??r   zm/d/yy   zd-mmm-yyzd-mmm   zmmm-yy   z
h:mm AM/PM   zh:mm:ss AM/PMrU   zh:mmrT   zh:mm:ss   zm/d/yy h:mm%   z#,##0_);(#,##0)&   z#,##0_);[Red](#,##0)'   z#,##0.00_);(#,##0.00)rR   z#,##0.00_);[Red](#,##0.00))   z'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)*   z*_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)+   z/_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_),   z2_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)rQ   zmm:ss.   z	[h]:mm:ss/   zmm:ss.0z##0.0E+0@)0   1      $   r   r   rP   :   ;   >   C   rO   G   rX   Zymdhsz$-+/(): #?ZGENERALZgeneralz	\[[^]]*\]c           	      C   s|  d}d}|D ]C}|dkr(|t dkrd}n&|t dv rd}n|tv r#n||7 }n|dkr5|t dkr4d}n|dkr;d}d|  krFdksIJ  J q| jdkrZtdt| | jd	 td|}|tv red
S d}d}d}d }}|D ]}|tv r~|t| 7 }qq|t	v r|t	| 7 }qq||krd}qq|r|sdS |r|sd
S |r| jrt
| jd||| ||kS |s| jrt
| jd| ||kS )Nr   r~   "r   z\_*r   r   z+is_date_format_string: reduced format is %sfileF;Tz7WARNING *** is_date_format: ambiguous d=%d n=%d fmt=%r
z/WARNING *** format %r produces constant result
)r   skip_char_dictr   ri   ZREPRr   fmt_bracketed_subnon_date_formatsdate_char_dictnum_char_dictr   )	rb   fmtstatesc	separatorZgot_sepZ
date_countZ	num_countrd   rd   re   is_date_format_string  sj   



r   c                 C   s  d}| j }|tkrt|d}| js|   d}|dkr'td|dd d }n	| j}|dkr0d}|  jd7  _|dkrAt|d}n	t||| jdd}|pP| j	d	k}|r^t
| jd
| j||| | |}	ttg|	 }
|dks|dk st|t}|tk}| j	rd|  k rdk rn n||	A rd}t
| jd|| |dkrt
| jd|
||	| t||
|}|r|j| jd| jd f d || j|< | j| d S )Nr   rS   r   rP   r   r   rN   r   r   z)FORMAT: count=%d fmtkey=0x%04x (%d) s=%r
   zHWARNING *** Conflict between std format key %d and its format string %r
z2ty: %d; is_date_c: %r; is_date_s: %r; fmt_strg: %rz--- handle_format [%d] ---)r   )r`   r   minr   r   r   Zactualfmtcountr   r   r   r   r   r   r   r   std_format_code_typesgetr	   r   r   
format_mapformat_listr   )rt   r   Zrectyper   r   ZstrposZfmtkeyZunistrgr   Z	is_date_sr   Zstd_tyZ	is_date_cfmtobjrd   rd   re   handle_format  sZ   


&
r   c                 C   sn  | j sd S tp| jdk}td|d d \}d| jdk }ts$| jdkr1||kr1t| jd|| n	|r:t| jd| d| }d	| d }t|}d	}||  krV|| ks_n td
||f t||d | }	| j	g ksoJ t
|D ]A}
|	|
 }|d@ }|d? d@ }|d? d@ }| jd|
  }|||f}| j	| || jd|
 < |r||krtd|
||f | jd qsd S )Nr   r   )rM   8   rP   r   z9NOTE *** Expected %d colours in PALETTE record, found %d
zPALETTE record with %d colours
z<xx%dir   z0PALETTE record: expected size %d, actual size %dr   rW   rM   z%2d: %r -> %rr   )r\   r   r   r   r`   r   r   ra   r   Zpalette_recordr]   rZ   r   ri   )rb   r   r   Z	n_coloursZexpected_n_coloursr   Zexpected_sizeZactual_sizeZ	toleranceZcoloursrc   r   redgreenblueZold_rgbZnew_rgbrd   rd   re   handle_paletteA  sH   
r   c                 C   s   | j D ]4}|jdkrq|j}|dkrq|| jv rd| j|< q| jr7tdt| j| jd t	| jd|j|j
| q| jdkrOt| j }td| | jd d S d S )Nr   rY   r   zSize of colour table:r   z2*** Font #%d (%r): colour index 0x%04x is unknown
z
Colour indexes used:
%r
)r   r   r   rZ   r[   r   ri   ra   r   r   r   sortedkeys)rb   fontZcxusedrd   rd   re   palette_epiloguee  s$   




r   c           
   	   C   sj  | j sd S tp| jdk}| j}td|d d \}}}|d@ }|dkr3d| jvr3d}d}d}d}	d	}nj|d
@ rRd}t| }	d|  krGdkrQn nT|	t|d 7 }	nKd}d}d}|dkrz	t|ddd}	W n, t	y   t
d||||f | jd t
dt|dd  | jd  w t|d| jdd}	|r|	st
d| jd ||f| j|	< |rt| jd|||||	 d S d S )Nr   z<HBBr     s       rV   r   r   r   i   rN   r   z6STYLE: built_in=%d xf_index=%d built_in_id=%d level=%dr   z
raw bytes:z7WARNING *** A user-defined style has a zero-length namez?STYLE: built_in=%d xf_index=%d built_in_id=%d level=%d name=%r
)r\   r   r   r`   r   Zstyle_name_mapbuilt_in_style_namesstrr   UnicodeDecodeErrorri   r   reprr   r   r   )
rb   r   r   r   Zflag_and_xfxZbuilt_in_idlevelxf_indexZbuilt_inr   rd   rd   re   handle_styley  sT   

r   c                 C   s~   t |j }|D ]3\}}t|drt| || q	|ddkr<|| jv r+d| j|< q	|jj	}t
d||||f | jd q	d S )Nr   r   r   r   z&*** xf #%d : %s.%s =  0x%04x (unknown)r   )r   rr   rg   hasattrcheck_colour_indexes_in_objfindrZ   r[   	__class__ry   ri   r   )rb   objZ
orig_indexalistattrZnobjZonamerd   rd   re   r     s    



r   c                 C   sD   t  D ]}|| jvrt | }t|}t|||}|| j|< qd S rp   )r   r   r   std_format_stringsr   r   )rb   xr   Zfmt_strr   rd   rd   re   fill_in_standard_formats  s   


r  c           "      C   s  t p| jdk}| j}t }t |_d|j_d|j_d|j_t	 |_
d|j
_d|j
_d|j
_d|j
_t |_t |_|dkrD| jsDt|  |dkrd}t||dd \
|_|_}}|j_}}	}
}}t|j|d t||d t|j|d	 t|j|d
 |	d? }g d}|D ]}d| d }t|||d@  |dL }qt|j
|
d t|j
|d t|j|d t|j|d n|dkr(d}t||dd \|_|_}}}}
}t|j|d t||d t|j|d	 |d@ }g d| |j_|d? }g d}|D ]}d| d }t|||d@  |dL }qt|j|
d t|j
|
d t|j
|d nZ|dkrd}t||dd \|_|_}}}	}}t|j|d t||d t|j|d |d@ d? }g d| |j_|	d? }g d}|D ]}d| d }t|||d@  |dL }qmt|j|d  t|j
|d! n|d"krd#}t||dd \|_|_}}	}}}t|j|d t||d$ t|j|d% t||d& |	d? }g d}|D ]}d| d }t|||d@  |dL }qt|j|d  t|j
|d! d|j_d|j_n|d'kr|td(|\|_}}|d)@ |_t|j|d* t|j|d+ d,D ]%\}}||@ r-d-\}}nd.\}}t|j
|d/ | t|j
|d0 | q|j}|d1@ rQd2|_nd|_d3|_d4|_d|_ d|j_d|j_g d}|D ]}d| d }t||d qknt!d5| t"| j#|_$| j#%| |  jd7  _|r|j&| j'd6|j$ d7d8 z| j(|j }t)|j* } W n t+y   t,} Y nw | | j-|j$< | j.r| jr|j/r|j d9krd:}!t0| j'|!|j$|j  t1| ||j$ |j| j(vrd;}!| jrt0| j'|!|j$|j|j d|_d S d S )<Nr   r   rP   rN   z<HHHBBBBIiHrU   ))r   r   cell_locked)r   r   formula_hidden)r   r   is_styler   rW   Zlotus_123_prefixr   i  parent_style_index)r   r   	hor_alignr   rW   text_wrapped)r   p   
vert_align))r   r   indent_level)r   rM   shrink_to_fit)r   r(   text_directionr   )formatr   	alignmentborder
background
protection__flagr   ))r   r   left_line_style)r      right_line_style)rW   i   top_line_style)r   i   bottom_line_stylerM   i   left_colour_index   i  ?right_colour_index)rS   i   @	diag_down)   l        diag_up))r      top_colour_index)r   ?  bottom_colour_index)r   i  diag_colour_index)rT   i  diag_line_style))   l      x fill_pattern)r   r*  pattern_colour_indexr   r,  background_colour_indexz<HHHBBIirM   )r   r   Z      )r2  r4  )rM   i  ? r1  ))r   i  r!  )   l      | r-  )r   r   r   )r   r   r  )r   i  r  )r   i   r+  r"  r$  rR   z<BBHBBHIr   )r  r  )r   r   r  r(   r   ))r   ?   r1  )r   i  r3  )r      r5  )r9  )r      r+  )rW   i   r  )r   r;  r#  )rM   i   r!  )r   i   r-  )   i   r  )r   l      p r&  rS   z<BBBBHHI)r  r
  )r  r  )r  rT   z<BxBBr:  ))r   @   r  )r   r!   r  )r  ))rW   left)rM   right)r   top)r>  bottom)rW   r   )r   r   Z_colour_indexZ_line_styler!   r   r   rW   zprogrammer stuff-up: bv=%dz--- handle_xf: xf[%d] --- r   r   zNWARNING *** XF[%d] is a style XF but parent_style_index is 0x%04x, not 0x0fff
z9WARNING *** XF[%d] unknown (raw) format key (%d, 0x%04x)
)2r   r   r`   XFXFAlignmentr  r  r  r  XFBorderr  r)  r'  r.  r/  XFBackgroundr  XFProtectionr  Zxfcountr  r   r   r   rotationr   setattrr   r  r1  r5  r3  r  r   ra   xf_listr   r   r   r   r   _cellty_from_fmttyr   KeyErrorr   _xf_index_to_xl_type_mapr\   r	  r   r   )"rt   r   r   r   xfZ
unpack_fmtZpkd_type_parZ
pkd_align1Z
pkd_align2Zpkd_usedZpkd_brdbkg1Zpkd_brdbkg2Zpkd_brdbkg3regZ
attr_stemsZ	attr_stemr  Zpkd_orient_usedZorientationZpkd_align_orientZ
pkd_bkg_34Z
pkd_brd_34Zpkd_type_protZpkd_align_parZ
format_etcZ
halign_etcmaskZsider   Z
line_stylebgr   celltymsgrd   rd   re   	handle_xf  s4  



















rU  c           
      C   s~  d| _ t| j}tp| jdk}tp| jdk}|rt| jd dd }t|D ]}| j| }z| j|j	 }t
|j }W n tyF   t}Y nw || j|j< | jsQq&|jrUq&d|j  kr`|k srn |rot| jd|j|j|j d|_| jdkr<|r|j|jkrt| jd	|j|j n| j|j jst| jd
|j|j |r|j|jkrt| jd|j|j | j|j }	|js|	js|r|| ||	d |js|	js|r|| ||	d |js|	js|r|| ||	d |js|	js|r|| ||	d |js|	js|r|j	|	j	krt| jd|j|j	|	j|	j	| j|j	 j| j|	j	 j |js<|	js<|r<|j|	jkr<t| jd|j|j|	j|	j q&d S )Nr   r   zxf_epilogue called ...
c                 S   s2   t ||t ||krt| jd|j|j| d S d S )Nz(NOTE !!! XF[%d] parent[%d] %s different
)getattrr   r   r   )Zbook_argZxf_argZ
parent_argr  rd   rd   re   
check_same  s   
zxf_epilogue.<locals>.check_samer   z:WARNING *** XF[%d]: is_style=%d but parent_style_index=%d
rS   z/NOTE !!! XF[%d]: parent_style_index is also %d
z>NOTE !!! XF[%d]: parent_style_index is %d; style flag not set
z9NOTE !!! XF[%d]: parent_style_index is %d; out of order?
r  r  r  r  z4NOTE !!! XF[%d] fmtk=%d, parent[%d] fmtk=%r
%r / %r
z.NOTE !!! XF[%d] fontx=%d, parent[%d] fontx=%r
)_xf_epilogue_donera   rK  r   r   r   r   r]   r   r   rL  r   rM  r   rN  r   r\   r	  r  r`   _alignment_flag_background_flag_border_flag_protection_flag_format_flagr   
_font_flagr   )
rt   Znum_xfsr   Zblah1rW  ZxfxrO  r   rS  parentrd   rd   re   xf_epilogue  s   

r`  c              	   C   sB   t |  d| _tttttttt	t
f	}|D ]
}t| j|j| qd S )Nr   )rf   rX  r   r   r   r   r   r   r   rU  r`  rJ  r   ry   )rb   methodsmethodrd   rd   re   initialise_bookA  s   rc  c                   @   s@   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdS )rF  ao  
    A collection of the border-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Border tab.

    An explanations of "colour index" is given in :ref:`palette`.

    There are five line style attributes; possible values and the
    associated meanings are::

      0 = No line,
      1 = Thin,
      2 = Medium,
      3 = Dashed,
      4 = Dotted,
      5 = Thick,
      6 = Double,
      7 = Hair,
      8 = Medium dashed,
      9 = Thin dash-dotted,
      10 = Medium dash-dotted,
      11 = Thin dash-dot-dotted,
      12 = Medium dash-dot-dotted,
      13 = Slanted medium dash-dotted.

    The line styles 8 to 13 appear in BIFF8 files (Excel 97 and later) only.
    For pictures of the line styles, refer to OOo docs s3.10 (p22)
    "Line Styles for Cell Borders (BIFF3-BIFF8)".</p>

    .. versionadded:: 0.6.1
    r   N)ry   rz   r{   r|   r+  r-  r#  r&  r.  r   r!  r  r  r/  r'  r)  rd   rd   rd   re   rF  R  s     rF  c                   @   s   e Zd ZdZdZdZdZdS )rG  a  
    A collection of the background-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Patterns tab.

    An explanations of "colour index" is given in :ref:`palette`.

    .. versionadded:: 0.6.1
    r   N)ry   rz   r{   r|   r1  r5  r3  rd   rd   rd   re   rG    s
    
rG  c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
dS )rE  z
    A collection of the alignment and similar attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Alignment tab.

    .. versionadded:: 0.6.1
    r   N)ry   rz   r{   r|   r  r  rI  r  r  r  r  rd   rd   rd   re   rE    s    rE  c                   @   s   e Zd ZdZdZdZdS )rH  ad  
    A collection of the protection-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Protection tab.
    Note the OOo docs include the "cell or style" bit in this bundle of
    attributes. This is incorrect; the bit is used in determining which bundles
    to use.

    .. versionadded:: 0.6.1
    r   N)ry   rz   r{   r|   r  r  rd   rd   rd   re   rH    s    rH  c                   @   sL   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdS )rD  a  
    eXtended Formatting information for cells, rows, columns and styles.

    Each of the 6 flags below describes the validity of
    a specific group of attributes.

    In cell XFs:

    - ``flag==0`` means the attributes of the parent style ``XF`` are
      used, (but only if the attributes are valid there);

    - ``flag==1`` means the attributes of this ``XF`` are used.

    In style XFs:

    - ``flag==0`` means the attribute setting is valid;
    - ``flag==1`` means the attribute should be ignored.

    .. note::
      the API provides both "raw" XFs and "computed" XFs. In the latter case,
      cell XFs have had the above inheritance mechanism applied.

    .. versionadded:: 0.6.1
    r   N)ry   rz   r{   r|   r	  r  r]  r^  rY  r[  rZ  r\  r   r   r   r  r  r  r  rd   rd   rd   re   rD    s"    rD  )r   )Jr|   
__future__r   restructr   Zbiffhr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Ztimemachiner   rL  Zexcel_default_palette_b5Zexcel_default_palette_b2r^   r_   r   rf   rn   objectro   r}   r   r   r   r  Zfmt_code_rangesr   lohir   r]   r  r   Z
date_charsr   upperZ_cr   r   r   compilesubr   r   r   r   r   r   r   r  rU  r`  rc  rF  rG  rE  rH  rD  rd   rd   rd   re   <module>   sB  L
[I	
 !"#$%&-	?4$+  >IC"