
    =wg_                         d dl mZ  G d dej                        Z G d de      Z G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z	y)    )mcorec                   R     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )	BiMatcherzZBase class for matchers that combine the results of two sub-matchers in
    some way.
    c                 F    t         t        |           || _        || _        y N)superr   __init__abselfr
   r   	__class__s      M/var/www/horilla/myenv/lib/python3.12/site-packages/whoosh/matching/binary.pyr	   zBiMatcher.__init__$   s    i')    c                 l    | j                   j                          | j                  j                          y r   )r
   resetr   r   s    r   r   zBiMatcher.reset)   s    r   c                 h    | j                   j                  d| j                  d| j                  dS )N(z, ))r   __name__r
   r   r   s    r   __repr__zBiMatcher.__repr__-   s!    #~~66GGr   c                 2    | j                   | j                  gS r   )r
   r   r   s    r   childrenzBiMatcher.children0   s    r   c                     | j                  | j                  j                         | j                  j                               S r   )r   r
   copyr   r   s    r   r   zBiMatcher.copy3   s'    ~~dffkkmTVV[[];;r   c                     dt        | j                  j                         | j                  j                               z   S )N   )maxr
   depthr   r   s    r   r    zBiMatcher.depth6   s(    3tvv||~tvv||~666r   c                     | j                         st        j                  | j                  j	                  |      }| j
                  j	                  |      }|xs |S r   )	is_activer   
ReadTooFarr
   skip_tor   r   idrarbs       r   r$   zBiMatcher.skip_to9   sE    ~~"""VV^^BVV^^BxRr   c                 n    | j                   j                         xr | j                  j                         S r   )r
   supports_block_qualityr   r   s    r   r*   z BiMatcher.supports_block_quality@   s,    --/ 4FF113	5r   c                 r    | j                   j                  |      xr | j                  j                  |      S r   )r
   supportsr   r   astypes     r   r,   zBiMatcher.supportsD   s'    vvv&B466??6+BBr   )r   
__module____qualname____doc__r	   r   r   r   r   r    r$   r*   r,   __classcell__r   s   @r   r   r      s7    
H <75Cr   r   c                   L    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y)AdditiveBiMatcherz`Base class for binary matchers where the scores of the sub-matchers are
    added together.
    c                     d}| j                   j                         r|| j                   j                         z  }| j                  j                         r|| j                  j                         z  }|S N        )r
   r"   max_qualityr   )r   qs     r   r9   zAdditiveBiMatcher.max_qualityM   sZ    66##%%A66##%%Ar   c                     d}| j                   j                         r|| j                   j                         z  }| j                  j                         r|| j                  j                         z  }|S r7   )r
   r"   block_qualityr   )r   bqs     r   r<   zAdditiveBiMatcher.block_qualityU   sZ    66$&&&&((B66$&&&&((B	r   c                 l    | j                   j                         | j                  j                         z   S r   )r
   weightr   r   s    r   r?   zAdditiveBiMatcher.weight]   s!    $&&--/12r   c                 l    | j                   j                         | j                  j                         z   S r   )r
   scorer   r   s    r   rA   zAdditiveBiMatcher.score`   s!    /0r   c                 0    | j                   t        |      u S r   )r   typer   others     r   __eq__zAdditiveBiMatcher.__eq__c   s    ~~e,,r   c                 0    t        |      | j                  u S r   )rC   r   rD   s     r   __lt__zAdditiveBiMatcher.__lt__f   s    E{dnn,,r   c                 &    | j                  |       S r   )rF   rD   s     r   __ne__zAdditiveBiMatcher.__ne__i   s    ;;u%%%r   c                 L    | j                  |      xs | j                  |       S r   )rH   rF   rD   s     r   __gt__zAdditiveBiMatcher.__gt__l   s"    KK&<$++e*<==r   c                 J    | j                  |      xs | j                  |      S r   )rF   rH   rD   s     r   __le__zAdditiveBiMatcher.__le__o       {{5!7T[[%77r   c                 J    | j                  |      xs | j                  |      S r   )rF   rL   rD   s     r   __ge__zAdditiveBiMatcher.__ge__r   rO   r   N)r   r/   r0   r1   r9   r<   r?   rA   rF   rH   rJ   rL   rN   rQ    r   r   r5   r5   H   s9    31--&>88r   r5   c                   L    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)UnionMatcherzDMatches the union (OR) of the postings in the two sub-matchers.
    Nc                    | j                   }| j                  }|j                         }|j                         }|rk|ri|rg|j                         }|j                         }||k  r ||k  rt	        ||      j                  |      S ||k  rt        ||      S ||k  rt        ||      S |s|st        j                         S |s|j                  |      S |s|j                  |      S |j                  |r||j                         z
  nd      }|j                  |r||j                         z
  nd      }|| j                   us|| j                  ur| j                  ||      S d | _
        | S Nr   )r
   r   r"   r9   IntersectionMatcherreplaceAndMaybeMatcherr   NullMatcherr   _idr   
minqualityr
   r   a_activeb_activea_maxb_maxs           r   rX   zUnionMatcher.replace|   s@   FFFF;;=;;= (xMMOEMMOEz!ej&8*1a088DD#&q!,,#&q!,, H$$&&99Z((99Z((IIjj1==?2aHIIjj1==?2aHDFF?atvvo>>!Q''DHKr   c                 n    | j                   j                         xs | j                  j                         S r   r
   r"   r   r   s    r   r"   zUnionMatcher.is_active   s'    vv!7TVV%5%5%77r   c                     d | _         dx}}| j                  j                         r| j                  j                  |      }| j                  j                         r| j                  j                  |      }|xs |S NF)r[   r
   r"   r$   r   r%   s       r   r$   zUnionMatcher.skip_to   s_    R66#B66#BxRr   c                 8   | j                   }||S | j                  }| j                  }|j                         s|j	                         }nI|j                         s|j	                         }n(t        |j	                         |j	                               }|| _         |S r   )r[   r
   r   r"   r&   min)r   r[   r
   r   s       r   r&   zUnionMatcher.id   ss    hh?JFFFF{{}$$&C$$&Caddfaddf%C
r   c                    d | _         | j                  }| j                  }|j                         }|j                         }|s|st        j
                  |s|j                         S |s|j                         S |j                         }|j                         }d x}}||k  r|j                         }||k  r|j                         }|xs |S r   )r[   r
   r   r"   r   r#   nextr&   )	r   r
   r   r^   r_   a_idb_idarbrs	            r   ri   zUnionMatcher.next   s    FFFF;;=;;= H"""668O668OttvttvR 4<B4<BxRr   c                 V   | j                   j                         s| j                  j                         S | j                  j                         s| j                   j                         S | j                   j	                         }| j                  j	                         }||k  r| j                   j                         S ||k  r| j                  j                         S t        t        | j                   j                               t        | j                  j                               z        S r   )r
   r"   r   spansr&   sortedset)r   id_aid_bs      r   ro   zUnionMatcher.spans   s    vv!66<<>!vv!66<<>!vvyy{vvyy{$;66<<>!D[66<<>!#dfflln-DFFLLN0CCDDr   c                    | j                   }| j                  }|j                         s|j                         S |j                         s|j                         S |j	                         }|j	                         }||k  r|j                         S ||k  r|j                         S |j                         |j                         z   S r   )r
   r   r"   r?   r&   r   r
   r   rr   rs   s        r   r?   zUnionMatcher.weight   s    FFFF{{}88:{{}88:ttvttv$;88:D[88:HHJ+,r   c                    | j                   }| j                  }|j                         s|j                         S |j                         s|j                         S |j	                         }|j	                         }||k  r|j                         S ||k  r|j                         S |j                         |j                         z   S r   )r
   r   r"   rA   r&   ru   s        r   rA   zUnionMatcher.score   s    FFFF{{}779{{}779ttvttv$;779D[779GGI	)*r   c                    d | _         | j                  }| j                  }|j                         s |j                         st        j
                  |j                         s|j                  |      S |j                         s|j                  |      S d}|j                         }|j                         }|j                         r|j                         r||z   |k  r}||k  r(||j                  ||z
        z  }|j                         }n'||j                  ||z
        z  }|j                         }|j                         r|j                         r	||z   |k  r}|S rV   )r[   r
   r   r"   r   r#   skip_to_qualityr<   r   r]   r
   r   skippedaqr=   s          r   rx   zUnionMatcher.skip_to_quality  s   FFFF""" {{}$$Z00$$Z00____kkm"r'Z2GBw1,,Z"_==__&1,,Z"_==__& kkm"r'Z2G r   r   )r   r/   r0   r1   r[   rX   r"   r$   r&   ri   ro   r?   rA   rx   rR   r   r   rT   rT   v   s=     C!F8	*6E-$+$r   rT   c                   J     e Zd ZdZd	 fd	Zd Zd
dZd Zd Zd Z	d Z
 xZS )DisjunctionMaxMatcherzMatches the union (OR) of two sub-matchers. Where both sub-matchers
    match the same posting, returns the weight/score of the higher-scoring
    posting.
    c                 <    t         t        |   ||       || _        y r   )r   r~   r	   tiebreak)r   r
   r   r   r   s       r   r	   zDisjunctionMaxMatcher.__init__7  s    #T3Aq9 r   c                     | j                  | j                  j                         | j                  j                         | j                        S )N)r   )r   r
   r   r   r   r   s    r   r   zDisjunctionMaxMatcher.copy;  s7    ~~dffkkmTVV[[]'+}}  6 	6r   c                    | j                   }| j                  }|j                         }|j                         }|rn|rl|rj|j                         }|j                         }||k  r||k  rt	        j
                         S ||k  r|j                  |      S ||k  r|j                  |      S |s|st	        j
                         S |s|j                  |      S |s|j                  |      S |j                  |      }|j                  |      }|j                         }|j                         }|r|st	        j
                         S |s|S |s|S || j                   us|| j                  ur| j                  ||      S | S r   )r
   r   r"   r9   r   rZ   rX   r   r\   s           r   rX   zDisjunctionMaxMatcher.replace?  sT   FFFF;;=;;= (xMMOEMMOEz!ej&8 ((**#yy,,#yy,,H$$&&99Z((99Z(( IIj!IIj!;;=;;= X$$&&HHdff_>>!Q''Kr   c                 J   | j                   j                         s| j                  j                         S | j                  j                         s| j                   j                         S t	        | j                   j                         | j                  j                               S r   )r
   r"   r   rA   r   r   s    r   rA   zDisjunctionMaxMatcher.scorer  sc    vv!66<<>!!!#66<<>!tvv||~tvv||~66r   c                 z    t        | j                  j                         | j                  j                               S r   )r   r
   r9   r   r   s    r   r9   z!DisjunctionMaxMatcher.max_qualityz  s)    466%%'););)=>>r   c                 z    t        | j                  j                         | j                  j                               S r   )r   r
   r<   r   r   s    r   r<   z#DisjunctionMaxMatcher.block_quality}  s)    466'')466+?+?+ABBr   c                 d   | j                   }| j                  }|j                         s|j                  |      }|S |j                         s|j                  |      S d}|j	                         }|j	                         }|j                         r|j                         rt        ||      |k  r||k  r$||j                  |      z  }|j	                         }||k  r$||j                  |      z  }|j	                         }|j                         r |j                         rt        ||      |k  r|S rV   )r
   r   r"   rx   r<   r   )r   r]   r
   r   skrz   r{   r=   s           r   rx   z%DisjunctionMaxMatcher.skip_to_quality  s   FFFF {{}"":.BI$$Z00____kkm#b"+2KZ1,,Z88__&Z1,,Z88__& kkm#b"+2K r   )r8   r|   )r   r/   r0   r1   r	   r   rX   rA   r9   r<   rx   r2   r3   s   @r   r~   r~   ,  s-    !61f7?Cr   r~   c                   f     e Zd ZdZ fdZd Zd ZddZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z xZS )rW   zLMatches the intersection (AND) of the postings in the two sub-matchers.
    c                 N    t         t        |   ||       | j                          y r   )r   rW   r	   _find_firstr   s      r   r	   zIntersectionMatcher.__init__  s!    !41!Q7r   c                     | j                   j                          | j                  j                          | j                          y r   r
   r   r   r   r   s    r   r   zIntersectionMatcher.reset  (    r   c                     | j                   j                         rb| j                  j                         rG| j                   j                         | j                  j                         k7  r| j	                          y y y y r   r
   r"   r   r&   
_find_nextr   s    r   r   zIntersectionMatcher._find_first  W    FF  "		tvvyy{*OO + # r   c                 `   | j                   }| j                  }|j                         }|j                         }|r|st        j                         S |rG|j                         }|j                         }||z   |k  rt        j                         S ||z
  }||z
  }	ndx}}	|j                  |      }|j                  |	      }|j                         }|j                         }|s|st        j                         S |s|S |s|S || j                   us|| j                  ur| j                  ||      S | S rV   )r
   r   r"   r   rZ   r9   rX   r   )
r   r]   r
   r   r^   r_   r`   ra   a_minb_mins
             r   rX   zIntersectionMatcher.replace  s   FFFF;;=;;=X$$&&MMOEMMOEu}z) ((** &E&EEEIIeIIe;;=;;=H$$&&HHdff_>>!Q''Kr   c                 n    | j                   j                         xr | j                  j                         S r   rc   r   s    r   r"   zIntersectionMatcher.is_active  s'    vv!8dff&6&6&88r   c                 
   | j                   }| j                  }|j                         }|j                         }||k7  sJ d}|j                         r|j                         r||k7  r||k  r9|j	                  |      }|j                         sy |xs |}|j                         }n8|j	                  |      }|j                         sy |xs |}|j                         }|j                         r|j                         r||k7  r|S re   )r
   r   r&   r"   r$   )r   r
   r   rj   rk   rr'   r(   s           r   r   zIntersectionMatcher._find_next  s    FFFFttvttvt||kkm$$,d{YYt_{{}GttvYYt_{{}Gttv kkm$$, r   c                 6    | j                   j                         S r   r
   r&   r   s    r   r&   zIntersectionMatcher.id      vvyy{r   c           	          t        t        t        | j                  j	                               t        | j
                  j	                               z              S r   )iterrp   rq   r
   all_idsr   r   s    r   r   zIntersectionMatcher.all_ids  s7    F3tvv~~/03tvv~~7G3HHIJJr   c                 r   | j                         st        j                  | j                  j	                  |      }| j
                  j	                  |      }| j                         rQd}| j                  j                         | j
                  j                         k7  r| j                         }|xs |xs |S y re   )r"   r   r#   r
   r$   r   r&   r   )r   r&   r'   r(   rns        r   r$   zIntersectionMatcher.skip_to  s    ~~"""VV^^BVV^^B>>Bvvyy{dffiik)__&>>r!	 r   c                    | j                   }| j                  }|}d}|j                         }|j                         }|j                         r4|j                         r#||z   |k  r||k  r<|j	                  ||z
        }||z  }|s\|j                         rL|j                          n;|j	                  ||z
        }||z  }|s |j                         r|j                          |j                         r|j                         s	 |S |j                         |j                         k7  r| j                          |j                         }|j                         }|j                         r|j                         r
||z   |k  r|S rV   )r
   r   r<   r"   rx   ri   r&   r   )r   r]   r
   r   rz   r{   r=   r   s           r   rx   z#IntersectionMatcher.skip_to_quality  s=   FFFF
____kkm"r'Z2GBw &&zB72akkm FFH &&zB72akkmFFH;;=  ttv ! "B"B9 kkm"r'Z2G: r   c                     | j                         st        j                  | j                  j	                         }| j                         r| j                         }|xs |S y r   )r"   r   r#   r
   ri   r   r   rl   nrs      r   ri   zIntersectionMatcher.next&  sM    ~~""" VV[[]>>"B8O r   c                     t        t        | j                  j                               t        | j                  j                               z        S r   )rp   rq   r
   ro   r   r   s    r   ro   zIntersectionMatcher.spans1  s0    c$&&,,.)C,??@@r   r|   )r   r/   r0   r1   r	   r   r   rX   r"   r   r&   r   r$   rx   ri   ro   r2   r3   s   @r   rW   rW     sH    
%N9.
K	"%N	Ar   rW   c                        e Zd ZdZ fdZd Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )AndNotMatcherzfMatches the postings in the first sub-matcher that are NOT present in
    the second sub-matcher.
    c                 N    t         t        |   ||       | j                          y r   )r   r   r	   r   r   s      r   r	   zAndNotMatcher.__init__:  s     mT+Aq1r   c                     | j                   j                          | j                  j                          | j                          y r   r   r   s    r   r   zAndNotMatcher.reset>  r   r   c                     | j                   j                         rb| j                  j                         rG| j                   j                         | j                  j                         k(  r| j	                          y y y y r   r   r   s    r   r   zAndNotMatcher._find_firstC  r   r   c                 6    | j                   j                         S r   r
   r"   r   s    r   r"   zAndNotMatcher.is_activeI      vv!!r   c                 &   | j                   }| j                  }|j                         sy |j                         }d}|j                         |k  r|j	                  |       |j                         r|j                         r||j                         k(  r~|j                         }|j                         s	 |S |xs |}|j                         }|j	                  |       |j                         r$|j                         r||j                         k(  r~|S re   )r
   r   r"   r&   r$   ri   )r   posnegpos_idr   r   s         r   r   zAndNotMatcher._find_nextL  s    ffff}}668fKKmmo#--/f6HB==? 	 RAVVXFKK mmo#--/f6H r   c                 6    | j                   j                         S r   )r
   r*   r   s    r   r*   z$AndNotMatcher.supports_block_qualityb  s    vv,,..r   c                    | j                   j                         st        j                         S |r1| j                   j	                         |k  rt        j                         S | j
                  j                         s| j                   j                  |      S | j                   j                  |      }| j
                  j                         }|| j                   us|| j
                  ur| j                  ||      S | S r   )r
   r"   r   rZ   r9   r   rX   r   )r   r]   r
   r   s       r   rX   zAndNotMatcher.replacee  s    vv! $$&&&&$$&3 $$&&!!# 66>>*--FFNN:&FFNNDFF?atvvo>>!Q''Kr   c                 6    | j                   j                         S r   )r
   r9   r   s    r   r9   zAndNotMatcher.max_quality|  s    vv!!##r   c                 6    | j                   j                         S r   )r
   r<   r   s    r   r<   zAndNotMatcher.block_quality  s    vv##%%r   c                 \    | j                   j                  |      }| j                          |S r   )r
   rx   r   )r   r]   rz   s      r   rx   zAndNotMatcher.skip_to_quality  s%    &&((4r   c                 6    | j                   j                         S r   r   r   s    r   r&   zAndNotMatcher.id  r   r   c                 "   | j                   j                         st        j                  | j                   j	                         }d}| j                   j                         r*| j
                  j                         r| j                         }|xs |S re   )r
   r"   r   r#   ri   r   r   r   s      r   ri   zAndNotMatcher.next  sf    vv!"""VV[[]66$&&"2"2"4"BxRr   c                 V   | j                   j                         st        j                  || j                   j	                         k  ry | j                   j                  |       | j                  j                         r,| j                  j                  |       | j                          y y r   )r
   r"   r   r#   r&   r$   r   r   )r   r&   s     r   r$   zAndNotMatcher.skip_to  sr    vv!"""		r66FFNN2OO r   c                 6    | j                   j                         S r   )r
   r?   r   s    r   r?   zAndNotMatcher.weight  s    vv}}r   c                 6    | j                   j                         S r   )r
   rA   r   s    r   rA   zAndNotMatcher.score      vv||~r   c                 8    | j                   j                  |      S r   r
   r,   r-   s     r   r,   zAndNotMatcher.supports      vvv&&r   c                 6    | j                   j                         S r   r
   valuer   s    r   r   zAndNotMatcher.value  r   r   c                 8    | j                   j                  |      S r   r
   value_asr-   s     r   r   zAndNotMatcher.value_as  r   r   r|   )r   r/   r0   r1   r	   r   r   r"   r   r*   rX   r9   r<   rx   r&   ri   r$   r?   rA   r,   r   r   r2   r3   s   @r   r   r   5  sb    
",/.$&
	''r   r   c                   f    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
dd	Zd
 Zd Zd Zd Zd Zd Zy)rY   z|Matches postings in the first sub-matcher, and if the same posting is
    in the second sub-matcher, adds their scores.
    c                 R    t         j                  | ||       | j                          y r   )r5   r	   _first_br   r
   r   s      r   r	   zAndMaybeMatcher.__init__  s    ""4A.r   c                     | j                   j                          | j                  j                          | j                          y r   )r
   r   r   r   r   s    r   r   zAndMaybeMatcher.reset  s%    r   c                     | j                   }| j                  }|j                         rS|j                         rB|j                         |j                         k7  r |j	                  |j                                y y y y r   )r
   r   r"   r&   r$   r   s      r   r   zAndMaybeMatcher._first_b  sT    FFFF;;=Q[[]qttv/?IIaddf 0@]=r   c                 6    | j                   j                         S r   r   r   s    r   r"   zAndMaybeMatcher.is_active  r   r   c                 6    | j                   j                         S r   r   r   s    r   r&   zAndMaybeMatcher.id  r   r   c                 h   | j                   j                         st        j                  | j                   j	                         }d}| j                   j                         rM| j
                  j                         r3| j
                  j                  | j                   j                               }|xs |S re   )r
   r"   r   r#   ri   r   r$   r&   )r   rl   rm   s      r   ri   zAndMaybeMatcher.next  sv    vv!"""VV[[]66$&&"2"2"4		,BxRr   c                 :   | j                   j                         st        j                  | j                   j	                  |      }d}| j                   j                         r5| j
                  j                         r| j
                  j	                  |      }|xs |S re   )r
   r"   r   r#   r$   r   r%   s       r   r$   zAndMaybeMatcher.skip_to  so    vv!"""VV^^B66$&&"2"2"4#BxRr   c                 b   | j                   }| j                  }|j                         }|j                         }|st        j                         S |rm|rk|j                         |j                         z   |k  rt        j                         S |j                         |k  r3t        | j                   | j                        S |s|j                  |      S |j                  ||j                         z
        }|j                  ||j                         z
        }||us||ur| j                  ||      S | S r   )	r
   r   r"   r   rZ   r9   rW   rX   r   )r   r]   r
   r   r^   r_   new_anew_bs           r   rX   zAndMaybeMatcher.replace  s    FFFF;;=;;=$$&&H}}0:= ((**:- +466466::99Z((		*q}}67		*q}}67>U!^>>%//Kr   c                 J   | j                   }| j                  }|}|j                         st        j                  |j                         s|j                  |      S d}|j                         }|j                         }|j                         r|j                         r||z   |k  r}||k  r(||j                  ||z
        z  }|j                         }n'||j                  ||z
        z  }|j                         }|j                         r|j                         r	||z   |k  r}|S rV   )r
   r   r"   r   r#   rx   r<   ry   s          r   rx   zAndMaybeMatcher.skip_to_quality  s    FFFF
{{}"""{{}$$Z00____kkm"r'Z2GBw1,,Z"_==__&1,,Z"_==__& kkm"r'Z2G r   c                 
   | j                   j                         | j                  j                         k(  r5| j                   j                         | j                  j                         z   S | j                   j                         S r   )r
   r&   r   r?   r   s    r   r?   zAndMaybeMatcher.weight  sM    6699;$&&))+%66==?TVV]]_4466==?"r   c                 >   | j                   j                         rj| j                  j                         | j                   j                         k(  r5| j                  j	                         | j                   j	                         z   S | j                  j	                         S r   )r   r"   r
   r&   rA   r   s    r   rA   zAndMaybeMatcher.score  s\    66$&&))+"<66<<>DFFLLN2266<<>!r   c                 8    | j                   j                  |      S r   r   r-   s     r   r,   zAndMaybeMatcher.supports  r   r   c                 6    | j                   j                         S r   r   r   s    r   r   zAndMaybeMatcher.value  r   r   c                 8    | j                   j                  |      S r   r   r-   s     r   r   zAndMaybeMatcher.value_as"  r   r   Nr|   )r   r/   r0   r1   r	   r   r   r"   r&   ri   r$   rX   rx   r?   rA   r,   r   r   rR   r   r   rY   rY     sM    
":.#"''r   rY   N)
whoosh.matchingr   Matcherr   r5   rT   r~   rW   r   rY   rR   r   r   <module>r      sy   8 "&C &CR+8	 +8\s$ sliL iXZA+ ZAzv'I v'ru'' u'r   