
    xiP                     8    d dl mZmZmZ ddlmZ  G d d      Zy)    )CallableListOptional   )c_astc            	       	   e Zd ZU dZeed<   eed<   djdeddfdZdefdZ	de
j                  defd	Zdee
j                     defd
Zde
j                  defdZde
j"                  defdZde
j&                  defdZde
j*                  defdZde
j.                  defdZde
j2                  defdZde
j6                  defd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%d&d'd&d(d)d*d)d+d,d-d,d.d,iZde
j<                  defd/Zde
j@                  defd0Z!de
jD                  defd1Z#de
j                  defd2Z$djde
jJ                  d3edefd4Z&de
jN                  defd5Z(de
jR                  defd6Z*de
jV                  defd7Z,de
jZ                  defd8Z.de
j^                  defd9Z0de
jb                  defd:Z2de
jf                  defd;Z4de
jj                  defd<Z6de
jn                  defd=Z8de
jr                  defd>Z:de
jv                  defd?Z<de
jz                  defd@Z>de
j~                  defdAZ@de
j                  defdBZBde
j                  defdCZDde
j                  defdDZFde
j                  defdEZHde
j                  defdFZJde
j                  defdGZLde
j                  defdHZNde
j                  defdIZPde
j                  defdJZRde
j                  defdKZTde
j                  defdLZVde
j                  defdMZXde
j                  defdNZZde
j                  defdOZ\de
j                  defdPZ^de
j                  defdQZ`de
j                  defdRZbde
j                  defdSZdde
j                  defdTZfde
j                  defdUZhde
j                  defdVZjde
j                  defdWZlde
j                  defdXZnde
j                  defdYZpde
j                  e
j                  z  e
jb                  z  dZedefd[Zqd\ere
j                     defd]Zsd\ere
jj                     defd^Ztdjde
j                  d_edefd`Zude
jJ                  defdaZvg dbfde
j                  dcere
j                     ddedefdeZwde
j                  dfexe
j                  gef   defdgZyde
j                  defdhZzde
j                  defdiZ{y)k
CGeneratorzUses the same visitor pattern as c_ast.NodeVisitor, but modified to
    return a value from each visit method, using string accumulation in
    generic_visit.
    indent_levelreduce_parenthesesreturnNc                      d| _         || _        y)zConstructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        r   N)r
   r   )selfr   s     a/var/www/html/chatbot/card-advisor-bot/venv/lib/python3.12/site-packages/pycparser/c_generator.py__init__zCGenerator.__init__   s     "4    c                      d| j                   z  S N )r
   )r   s    r   _make_indentzCGenerator._make_indent"   s    T&&&&r   nodec                 n    d|j                   j                  z   } t        | || j                        |      S )Nvisit_)	__class____name__getattrgeneric_visit)r   r   methods      r   visitzCGenerator.visit%   s2    DNN3338wtVT%7%78>>r   c                 Z     |ydj                   fd|j                         D              S )N c              3   F   K   | ]  \  }}j                  |        y wNr   ).0c_namecr   s      r   	<genexpr>z+CGenerator.generic_visit.<locals>.<genexpr>-   s     JYVQ4::a=Js   !)joinchildren)r   r   s   ` r   r   zCGenerator.generic_visit)   s&    <77J$--/JJJr   nc                     |j                   S r"   )valuer   r*   s     r   visit_ConstantzCGenerator.visit_Constant/   s    wwr   c                     |j                   S r"   namer-   s     r   visit_IDzCGenerator.visit_ID2   s    vvr   c                 F    d}|j                   r|d|j                   z   z  }|S )Nz#pragmar   )string)r   r*   rets      r   visit_PragmazCGenerator.visit_Pragma5   s%    883>!C
r   c                     | j                  |j                        }|dz   | j                  |j                        z   dz   S )N[])_parenthesize_unless_simpler1   r   	subscript)r   r*   arrrefs      r   visit_ArrayRefzCGenerator.visit_ArrayRef;   s7    11!&&9|djj55;;r   c                     | j                  |j                        }||j                  z   | j                  |j                        z   S r"   )r:   r1   typer   field)r   r*   srefs      r   visit_StructRefzCGenerator.visit_StructRef?   s6    //7aff}tzz!''222r   c                     | j                  |j                        }|j                  | j                  |j                        nd}|dz   |z   dz   S )Nr    ())r:   r1   argsr   )r   r*   frefrF   s       r   visit_FuncCallzCGenerator.visit_FuncCallC   sG    //7%&VV%7tzz!&&!RczD 3&&r   c                 N   |j                   xdk(  r  d| j                  |j                         dS xdk(  r! | j                  |j                        }| dS dk(  r | j                  |j                        }| dS 	 | j                  |j                        }|j                    | S )Nsizeofzsizeof(rE   zp++z++zp--z--)opr   exprr:   )r   r*   operands      r   visit_UnaryOpzCGenerator.visit_UnaryOpH   s    dd !AFF!3 4A66::166B!"~%::166B!"~%::166B$$y))r   z||r   z&&r   |   ^   &   z==   z!=>   z>=<z<=z>>   z<<+   -*	   /%c                       j                  j                   fd      } j                  j                   fd      }| dj                   d| S )Nc                     j                  |       xs] j                  xrO t        | t        j                        xr3 j
                  | j                     j
                  j                     k\   S r"   _is_simple_noder   
isinstancer   BinaryOpprecedence_maprK   dr*   r   s    r   <lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>|   sg    $$Q' K** Kq%..1K''-1D1DQTT1JJ	 r   c                     j                  |       xs] j                  xrO t        | t        j                        xr3 j
                  | j                     j
                  j                     kD   S r"   rc   rh   s    r   rj   z+CGenerator.visit_BinaryOp.<locals>.<lambda>   sg    $$Q' J** Jq%..1J''-0C0CADD0II	 r   r   )_parenthesize_ifleftrightrK   )r   r*   lval_strrval_strs   ``  r   visit_BinaryOpzCGenerator.visit_BinaryOpp   s\     ((FF
  ((GG
 1QTTF!H:..r   c                     | j                  |j                  d       }| j                  |j                         d|j                   d| S )Nc                 6    t        | t        j                        S r"   )re   r   
Assignment)r*   s    r   rj   z-CGenerator.visit_Assignment.<locals>.<lambda>   s    
1e.>.> ? r   r   )rl   rvaluer   lvaluerK   )r   r*   rp   s      r   visit_AssignmentzCGenerator.visit_Assignment   sG    ((HH?
 **QXX&'qaz::r   c                 8    dj                  |j                        S r   )r(   namesr-   s     r   visit_IdentifierTypezCGenerator.visit_IdentifierType   s    xx  r   c                    |xt         j                  d x\    d| j                  |      z   dz   S  xt         j                  d x\   n xt         j                  d x\   n  n d| j                  |      z   dz   S 	 | j                  |      S )N {}rD   rE   )r   InitListr   ExprListCompoundr-   s     r   _visit_exprzCGenerator._visit_expr   sr    !!TZZ]*S00 "!!$4ENN$44TZZ]*S00zz!}$r   no_typec                     |r|j                   n| j                  |      }|j                  r!|d| j                  |j                        z   z  }|j                  r!|d| j                  |j                        z   z  }|S )Nz :  = )r1   _generate_declbitsizer   initr   )r   r*   r   ss       r   
visit_DeclzCGenerator.visit_Decl   si     AFF4#6#6q#999AII...A66))!&&111Ar   c                       j                  |j                  d         }t        |j                        dkD  r-|ddj                   fd|j                  dd  D              z   z  }|S )Nr   r   , c              3   D   K   | ]  }j                  |d         yw)T)r   N)r   r$   declr   s     r   r'   z,CGenerator.visit_DeclList.<locals>.<genexpr>   s#      "8<d3"s    )r   declslenr(   r   r*   r   s   `  r   visit_DeclListzCGenerator.visit_DeclList   sc    JJqwwqz"qww<!		 "@A"   A r   c                     d}|j                   r!|dj                  |j                         dz   z  }|| j                  |j                        z  }|S )Nr    r   )storager(   _generate_typer?   r   s      r   visit_TypedefzCGenerator.visit_Typedef   sH    99!))$s**A	T  ((r   c                     d| j                  |j                  d      z   dz   }|dz   | j                  |j                        z   S )NrD   Femit_declnamerE   r   )r   to_typer:   rL   r   s      r   
visit_CastzCGenerator.visit_Cast   sC    $%%aiiu%EEK3w99!&&AAAr   c                     g }|j                   D ]"  }|j                  | j                  |             $ dj                  |      S Nr   exprsappendr   r(   r   r*   visited_subexprsrL   s       r   visit_ExprListzCGenerator.visit_ExprList   D    GG 	<D##D$4$4T$:;	<yy)**r   c                     g }|j                   D ]"  }|j                  | j                  |             $ dj                  |      S r   r   r   s       r   visit_InitListzCGenerator.visit_InitList   r   r   c                 (    | j                  |d      S )Nenumr0   _generate_struct_union_enumr-   s     r   
visit_EnumzCGenerator.visit_Enum   s    ///??r   c                 V    dj                  | j                  |j                              S )Nz_Alignas({}))formatr   	alignmentr-   s     r   visit_AlignaszCGenerator.visit_Alignas   s     $$TZZ%<==r   c                     |j                   s+dj                  | j                         |j                        S dj                  | j                         |j                  | j	                  |j                               S )Nz{indent}{name},
)indentr1   z{indent}{name} = {value},
)r   r1   r,   )r,   r   r   r1   r   r-   s     r   visit_EnumeratorzCGenerator.visit_Enumerator   sq    ww&--((*VV .  
 177((*VVjj) 8  r   c                      j                  |j                        }d _         j                  |j                        }|j                  r5dj                   fd|j                  D              }|dz   |z   dz   |z   dz   S |dz   |z   dz   S )Nr   ;
c              3   @   K   | ]  }j                  |        y wr"   r#   )r$   pr   s     r   r'   z+CGenerator.visit_FuncDef.<locals>.<genexpr>   s     !GA$**Q-!G   
)r   r   r
   bodyparam_declsr(   )r   r*   r   r   knrdeclss   `    r   visit_FuncDefzCGenerator.visit_FuncDef   s    zz!&&!zz!&&!==zz!G!GGH$;)E1D84??$;%,,r   c                    d}|j                   D ]v  }|xt        j                  d x\    || j                  |      z  }0 t        j                  d x\   || j                  |      dz   z  }^ 	 || j                  |      dz   z  }x |S )Nr    r|   r   r   )extr   FuncDefr   Pragma)r   r*   r   r   s       r   visit_FileASTzCGenerator.visit_FileAST   s    55 	1C$U]]_C(A %\\^C4//A $C500A	1 r   c                      j                         dz   } xj                  dz  c_        |j                  r'|dj                   fd|j                  D              z  } xj                  dz  c_        | j                         dz   z  }|S )N{
rP   r    c              3   @   K   | ]  }j                  |        y wr"   _generate_stmt)r$   stmtr   s     r   r'   z,CGenerator.visit_Compound.<locals>.<genexpr>   s     Mt,,T2Mr   z}
)r   r
   block_itemsr(   r   s   `  r   visit_CompoundzCGenerator.visit_Compound   sy    %'Q==Mq}}MMMAQ	T 5((r   c                     d| j                  |j                        z   dz   | j                  |j                        z   dz   S )NrD   z){r~   )r   r?   r   r-   s     r   visit_CompoundLiteralz CGenerator.visit_CompoundLiteral  s6    TZZ''$.AFF1CCcIIr   c                      y)N;r|   r-   s     r   visit_EmptyStatementzCGenerator.visit_EmptyStatement  s    r   c                 L     dj                   fd|j                  D              S )Nr   c              3   @   K   | ]  }j                  |        y wr"   r#   )r$   paramr   s     r   r'   z-CGenerator.visit_ParamList.<locals>.<genexpr>
  s     AuE*Ar   )r(   paramsr-   s   ` r   visit_ParamListzCGenerator.visit_ParamList	  s    yyAAAAr   c                 j    d}|j                   r!|d| j                  |j                         z   z  }|dz   S )Nr   r   r   )rL   r   r   s      r   visit_ReturnzCGenerator.visit_Return  s3    66tzz!&&)))A3wr   c                      y)Nzbreak;r|   r-   s     r   visit_BreakzCGenerator.visit_Break  s    r   c                      y)Nz	continue;r|   r-   s     r   visit_ContinuezCGenerator.visit_Continue  s    r   c                     d| j                  |j                        z   dz   }|d| j                  |j                        z   dz   z  }|d| j                  |j                        z   dz   z  }|S )NrD   z) ? z) : rE   )r   condiftrueiffalser   s      r   visit_TernaryOpzCGenerator.visit_TernaryOp  sk    $""166**V3	S4##AHH--66	S4##AII..44r   c                 ,   d}|j                   r|| j                  |j                         z  }|dz  }|| j                  |j                  d      z  }|j                  r6|| j                         dz   z  }|| j                  |j                  d      z  }|S )Nzif ()
T
add_indentzelse
)r   r   r   r   r   r   r   s      r   visit_IfzCGenerator.visit_If  s    66AFF##A	U
	T  d ;;99""$x//A$$QYY4$@@Ar   c                 p   d}|j                   r|| j                  |j                         z  }|dz  }|j                  r!|d| j                  |j                        z   z  }|dz  }|j                  r!|d| j                  |j                        z   z  }|dz  }|| j	                  |j
                  d      z  }|S )Nzfor (r   r   r   Tr   )r   r   r   nextr   r   r   s      r   	visit_ForzCGenerator.visit_For)  s    66AFF##A	S66tzz!&&)))A	S66tzz!&&)))A	U
	T  D 99r   c                     d}|j                   r|| j                  |j                         z  }|dz  }|| j                  |j                  d      z  }|S )Nwhile (r   Tr   )r   r   r   r   r   s      r   visit_WhilezCGenerator.visit_While7  sQ    66AFF##A	U
	T  D 99r   c                     d}|| j                  |j                  d      z  }|| j                         dz   z  }|j                  r|| j	                  |j                        z  }|dz  }|S )Nzdo
Tr   r   z);)r   r   r   r   r   r   s      r   visit_DoWhilezCGenerator.visit_DoWhile?  si    	T  D 99	T 9,,66AFF##A	T	r   c                     d}|| j                  |j                        z  }|j                  r#|dz  }|| j                  |j                        z  }|dz  }|S )Nz_Static_assert(,rE   )r   r   messager   s      r   visit_StaticAssertzCGenerator.visit_StaticAssertH  sS    	TZZ99HAAII&&A	Sr   c                     d| j                  |j                        z   dz   }|| j                  |j                  d      z  }|S )Nzswitch (r   Tr   )r   r   r   r   r   s      r   visit_SwitchzCGenerator.visit_SwitchQ  sA    AFF++e3	T  D 99r   c                     d| j                  |j                        z   dz   }|j                  D ]  }|| j                  |d      z  } |S )Nzcase :
Tr   )r   rL   stmtsr   r   r*   r   r   s       r   
visit_CasezCGenerator.visit_CaseV  sP    djj((50GG 	<D$$Td$;;A	<r   c                 X    d}|j                   D ]  }|| j                  |d      z  } |S )Nz	default:
Tr   )r   r   r   s       r   visit_DefaultzCGenerator.visit_Default\  s9    GG 	<D$$Td$;;A	<r   c                 X    |j                   dz   | j                  |j                        z   S )Nr   )r1   r   r   r-   s     r   visit_LabelzCGenerator.visit_Labelb  s$    vv~ 3 3AFF ;;;r   c                 &    d|j                   z   dz   S )Nzgoto r   r0   r-   s     r   
visit_GotozCGenerator.visit_Gotoe  s    #%%r   c                      y)Nz...r|   r-   s     r   visit_EllipsisParamzCGenerator.visit_EllipsisParamh  s    r   c                 &    | j                  |d      S )Nstructr   r-   s     r   visit_StructzCGenerator.visit_Structk  s    //8<<r   c                 8    | j                  |j                        S r"   )r   r?   r-   s     r   visit_TypenamezCGenerator.visit_Typenamen  s    ""166**r   c                 &    | j                  |d      S )Nunionr   r-   s     r   visit_UnionzCGenerator.visit_Unionq  s    //7;;r   c                     d}|j                   D ]I  }t        |t        j                        r|d|j                   z   z  }0|d| j	                  |      z   dz   z  }K |d| j                  |j                        z   z  }|S )Nr    .r8   r9   r   )r1   re   r   IDr   r   rL   )r   r*   r   r1   s       r   visit_NamedInitializerz!CGenerator.visit_NamedInitializert  s|    FF 	2D$)S499_$S4::d++c11		2
 	
UT%%aff---r   c                 $    | j                  |      S r"   r   r-   s     r   visit_FuncDeclzCGenerator.visit_FuncDecl~  s    ""1%%r   c                 (    | j                  |d      S NFr   r  r-   s     r   visit_ArrayDeclzCGenerator.visit_ArrayDecl      ""1E"::r   c                 (    | j                  |d      S r  r  r-   s     r   visit_TypeDeclzCGenerator.visit_TypeDecl  r  r   c                 (    | j                  |d      S r  r  r-   s     r   visit_PtrDeclzCGenerator.visit_PtrDecl  r  r   r1   c                 >   |dv rEt        |t        j                  t        j                  f      sJ |j                  }| j
                  }nS|dk(  sJ t        |t        j                        sJ |j                  dn|j                  j                  }| j                  }|dz   |j                  xs dz   }|h|dz  }|| j                         z  }| xj                  dz  c_        |dz  }| ||      z  }| xj                  dz  c_        || j                         d	z   z  }|S )
zlGenerates code for structs, unions, and enums. name should be
        'struct', 'union', or 'enum'.
        )r  r  r   Nr   r    r   rP   r   r~   )re   r   StructUnionr   _generate_struct_union_bodyEnumvaluesenumerators_generate_enum_bodyr1   r   r
   )r   r*   r1   membersbody_functionr   s         r   r   z&CGenerator._generate_struct_union_enum  s    &&a%,,!<===ggG <<M6>!>a,,,hh.dAHH4H4HG 44M3J!&&,B' IA""$$A"JAw''A"""$s**Ar   r  c                 8     dj                   fd|D              S )Nr    c              3   @   K   | ]  }j                  |        y wr"   r   r   s     r   r'   z9CGenerator._generate_struct_union_body.<locals>.<genexpr>  s     ETt**40Er   r(   r   r  s   ` r   r  z&CGenerator._generate_struct_union_body  s    wwEWEEEr   c                 D     dj                   fd|D              d d dz   S )Nr    c              3   @   K   | ]  }j                  |        y wr"   r#   )r$   r,   r   s     r   r'   z1CGenerator._generate_enum_body.<locals>.<genexpr>  s     >Utzz%(>r   r   r#  r$  s   ` r   r  zCGenerator._generate_enum_body  s$    ww>g>>sCdJJr   r   c                    |r| xj                   dz  c_         | j                         }|r| xj                   dz  c_         |xxt        j                  d x\   n$ xt        j                  d x\   n xt        j
                  d x\   n xt        j                  d x\   n xt        j                  d x\   n xt        j                  d x\   n xt        j                  d x\   n xt        j                  d x\   n{ xt        j                  d x\   nc xt        j                  d x\   nK xt        j                  d x\   n3 xt        j                  d x\   n xt        j                  d x\   n  n  || j!                  |      z   dz   S xt        j"                  d x\    | j!                  |      S  t        j$                  d x\   || j!                  |      z   S  	 || j!                  |      z   dz   S )zGeneration from a statement node. This method exists as a wrapper
        for individual visit_* methods to handle different treatment of
        some statements in this context.
        rP   r|   r   r   )r
   r   r   Declrt   CastUnaryOprf   	TernaryOpFuncCallArrayRef	StructRefConstantr
  Typedefr   r   r   If)r   r*   r   r   s       r   r   zCGenerator._generate_stmt  s]   
 """$"#

$%""$$%**,!%--/"%.."#%//#"%..""%.."#%//#"%.."%((*!%--/"%.."#" 

1-55!!
 zz!}$ " 

1-- 

1-44r   c                 T   d}|j                   rdj                  |j                         dz   }|j                  r!|dj                  |j                        dz   z  }|j                  r$|| j	                  |j                  d         dz   z  }|| j                  |j                        z  }|S )zGeneration from a Decl node.r    r   r   )funcspecr(   r   alignr   r   r?   r   s      r   r   zCGenerator._generate_decl  s    ::$s*A99!))$s**A77AGGAJ'#--A	T  ((r   T	modifiersr   c                 v   |xt         j                  d x\    d}|j                  r!|dj                  |j                        dz   z  }|| j	                  |j
                        z  }|j                  r|r|j                  nd}t        |      D ]  \  }}|xt         j                  d x\    |dk7  r(t        ||dz
     t         j                        rd|z   dz   }|dz  }|j                  r!|dj                  |j                        dz   z  }|j                  || j	                  |j                        z  }|d	z  } xt         j                  d xf\    |dk7  r(t        ||dz
     t         j                        rd|z   dz   }|j                  | j	                  |j                        nd}|d|z   dz   z  }) t         j                  d xB\   |j                  r-dj                  |j                        }	|rd| nd}
d
|	 |
 }xd|z   }  |r|d|z   z  }|S  xt         j                  d x\    | j!                  |j
                        S  xt         j"                  d x \    | j%                  |j
                  |      S  xt         j&                  d x!\    dj                  |j(                        dz   S  xt         j                  d x\   n3 xt         j                  d x\   n xt         j                  d x\   n  n# | j%                  |j
                  ||gz   |      S 	 | j	                  |      S )zRecursive generation from a type node. n is the type node.
        modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
        encountered on the way down to a TypeDecl, to allow proper
        generation from it.
        r|   r    r   r   r   rD   rE   r8   r9   z* r]   r   )r   TypeDeclqualsr(   r   r?   declname	enumerate	ArrayDeclre   PtrDecl	dim_qualsdimFuncDeclrF   r)  r   Typenamer   IdentifierTypery   )r   r*   r6  r   r   nstrimodifierrF   r9  suffixs              r   r   zCGenerator._generate_type  s    !!77!''*S00ATZZ''%&ZZMqzzr
 $-Y#7 2KAx".U__. Av*Yq1u5Eu}}*U'*TzC'7 CKD'11 $1C1C(Ds(J J'||7 $

8<<(@ @ CKD / .U^^- Av*Yq1u5Eu}}*U'*TzC'7 $,==#< !%

8== 9%' !
 !C$J$44D . #]]_'~~(+(@7;1TF)+E76(';'*Tz -)26 tOAQ "R **16622 !!**166*OO "'%%'xx(3.. (""_U]]_7Gu~~7GG**FFIO= +   zz!}$r   	conditionc                 H    | j                  |      } ||      rd|z   dz   S |S )zVisits 'n' and returns its string representation, parenthesized
        if the condition function applied to the node returns True.
        rD   rE   )r   )r   r*   rG  r   s       r   rl   zCGenerator._parenthesize_if&  s.     QQ<7S= Hr   c                 .      j                  | fd      S )z$Common use case for _parenthesize_ifc                 (    j                  |        S r"   )rd   )ri   r   s    r   rj   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>4  s    d6J6J16M2M r   )rl   r-   s   ` r   r:   z&CGenerator._parenthesize_unless_simple2  s    $$Q(MNNr   c                     t        |t        j                  t        j                  t        j                  t        j
                  t        j                  f      S )zyReturns True for nodes that are "simple" - i.e. nodes that always
        have higher precedence than operators.
        )re   r   r0  r
  r.  r/  r-  r-   s     r   rd   zCGenerator._is_simple_node6  s6     ^^UXXu~~uW
 	
r   )F)|r   
__module____qualname____doc__int__annotations__boolr   strr   r   Noder   r   r   r0  r.   r
  r2   r   r6   r.  r=   r/  rB   r-  rH   r+  rN   rg   rf   rq   rt   rw   rB  rz   r   r)  r   DeclListr   r1  r   r*  r   r   r   r   r   r  r   Alignasr   
Enumeratorr   r   r   FileASTr   r   r   CompoundLiteralr   EmptyStatementr   	ParamListr   Returnr   Breakr   Continuer   r,  r   r2  r   Forr   Whiler   DoWhiler   StaticAssertr   Switchr   Caser   Defaultr   Labelr   Gotor   EllipsisParamr   r  r  rA  r  r  r  NamedInitializerr  r@  r  r<  r  r8  r  r=  r  r   r   r  r  r   r   r   r   rl   r:   rd   r|   r   r   r	   r	      s%   
 	54 	5D 	5'c '?%** ? ?K(5::"6 K3 K 3 %(( s ell s < <3 <3 3S 3' '3 '
*u}} * *" 	a 	a	
 	Q 	Q 	Q 	a 	a 	Q 	a 	Q 	a 	a 	a  	Q!" 	Q#$ 	Q%& 	Q'( 	Q)N.#/ #/3 #/J;%"2"2 ;s ;!e&:&: !s !%UZZ %C %	EJJ 	 	# 	 3 u}}  BEJJ B3 B+ +3 ++ +3 +@EJJ @3 @>u}} > >%"2"2 s -u}} - -
u}} 
 
 3 Ju'<'< J Je&:&: s B BS Bell s U[[ S  3  S 	%(( 	s 	599  U[[ S u}}  E$6$6 3 ell s 
EJJ 3 u}}  <U[[ <S <&EJJ &3 &U%8%8 S =ell =s =+ +3 +<U[[ <S <(>(> 3 & &3 &; ;S ;; ;3 ;;u}} ; ;+ejj8@C	8F4

3C F FK40@0@+A Kc K(5

 (5 (5 (5T


 
s 
 ')"	A%::A% 

#A% 	A%
 
A%F

(0%**t1C(D
	
OUZZ OC O
 
 
r   r	   N)typingr   r   r   r    r   r	   r|   r   r   <module>rj     s    , + o
 o
r   