a
    é´«jtc  ã                   @   sp  d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZ ej dddg¡ej dg d¢¡d	d
„ ƒƒZej de	eje
eg¡dd„ ƒZejjej de	eje
eg¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z d d!„ Z!d"d#„ Z"d$d%„ Z#d&d'„ Z$ej dg d¢¡d(d)„ ƒZ%d*d+„ Z&d,d-„ Z'd.d/„ Z(ej d0e)dƒe)d ƒg¡d1d2„ ƒZ*d3d4„ Z+d5d6„ Z,d7d8„ Z-d9d:„ Z.d;d<„ Z/d=d>„ Z0ej dg d?¢¡d@dA„ ƒZ1ej dBej2dCg¡dDdE„ ƒZ3ej dBej2dFg¡dGdH„ ƒZ4ej dIdJgdJgfdJdJgdJgfdKdJgdKdJgfg¡dLdM„ ƒZ5ej dNdOdddgfdOdPgddgfdOdQgddgfdRdSdTgddgfdRdQdPgddgfdUg dV¢ddgfdRdPdSgdPdgfdRdSdQgddQgfdRdPdQgdPdQgfdRddQgddQgfg
¡dWdX„ ƒZ6dYdZ„ Z7d[d\„ Z8d]d^„ Z9d_d`„ Z:ej dadbdcg¡ej ddddeg¡dfdg„ ƒƒZ;ej dBdhdig¡djdk„ ƒZ<ej dldmej2g¡dndo„ ƒZ=ej >dp¡dqdr„ ƒZ?dsdt„ Z@dudv„ ZAej dwg dV¢d dxggg dy¢dxggg dz¢g d{¢gg dz¢g d|¢gd}d~gfg¡dd€„ ƒZBej dPejCdPdQgdPdQgd��dPdQgg¡ej dQejCdPdQgdQdPgd‚dƒ�ejCdPdQgdQdPgd��g¡d„d…„ ƒƒZDej dBej2dCg¡d†d‡„ ƒZEdˆd‰„ ZFdS )Šé    N)ÚCategoricalIndexÚ	DataFrameÚIndexÚIntervalIndexÚ
MultiIndexÚSeries)Úis_float_dtypeÚis_unsigned_integer_dtypeÚcaseg      à?ZxxxÚmethod)ÚintersectionÚunionÚ
differenceÚsymmetric_differencec                 C   sH   d}t jt|d��" t| |ƒ||d� W d   ƒ n1 s:0    Y  d S )Nz!Input must be Index or array-like©Úmatch©Úsort)ÚpytestÚraisesÚ	TypeErrorÚgetattr)Úidxr
   r   r   Úmsg© r   úe/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/pandas/tests/indexes/multi/test_setops.pyÚtest_set_ops_error_cases   s    r   Úklassc                 C   s¤   | dd d… }| d d… }|t ur,||jƒ}|j||d�}|d u rL| ¡ }n|}t ||¡ d}tjt|d��" |jg d¢|d� W d   ƒ n1 s–0    Y  d S )Né   éÿÿÿÿé   r   ú.other must be a MultiIndex or a list of tuplesr   ©é   r   é   )	r   Úvaluesr   Úsort_valuesÚtmÚassert_index_equalr   r   r   )r   r   r   ÚfirstÚsecondZ	intersectÚexpectedr   r   r   r   Útest_intersection_base   s    

r,   c                 C   s¤   | d d d… }| d d… }|t ur,||jƒ}|j||d�}|d u rL| ¡ }n|}t ||¡ d}tjt|d��" |jg d¢|d� W d   ƒ n1 s–0    Y  d S )Nr   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   Útest_union_base3   s    

r-   c                    sÖ   | dd … ‰ | d d… }| j ˆ |d�}|d u r6| ¡ }| |¡sDJ ‚t ||¡ ‡ fdd„tjttfD ƒ}|D ]}| j ||d�}t ||¡ qnd}t	j
t|d��" | j g d¢|d� W d   ƒ n1 sÈ0    Y  d S )Né   r   c                    s   g | ]}|ˆ j ƒ‘qS r   ©r%   ©Ú.0r   ©r*   r   r   Ú
<listcomp>T   ó    z(test_difference_base.<locals>.<listcomp>r!   r   r"   )r   r&   Úequalsr'   r(   ÚnpÚarrayr   Úlistr   r   r   )r   r   ÚanswerÚresultÚcasesr
   r   r   r2   r   Útest_difference_baseH   s    r<   c                    sÔ   | dd … }| d d… ‰ | ddg }|j ˆ |d�}|d u rB| ¡ }t ||¡ ‡ fdd„tjttfD ƒ}|D ]}|j ||d�}t ||¡ qld}tj	t
|d��" |j g d	¢|d� W d   ƒ n1 sÆ0    Y  d S )
Nr#   r   r   r   c                    s   g | ]}|ˆ j ƒ‘qS r   r/   r0   r2   r   r   r3   j   r4   z-test_symmetric_difference.<locals>.<listcomp>r!   r   r"   )r   r&   r'   r(   r6   r7   r   r8   r   r   r   )r   r   r)   r9   r:   r;   r
   r   r   r2   r   Útest_symmetric_difference^   s    r=   c                  C   sj   t jddgddggddgd�} |  | ¡}|j| jks8J ‚|  ¡  ddg¡}|  |¡}|jd d gksfJ ‚d S )NÚaÚbÚAÚB©Únames)r   Úfrom_productr   rC   ÚcopyÚrename)r   r:   Úidx2r   r   r   Ú$test_multiindex_symmetric_differencet   s    

rH   c                 C   s    | j r
J ‚| d d… j sJ ‚d S )Nr   )Úempty©r   r   r   r   Ú
test_empty   s    
rK   c                 C   sv  | }|j | dd … |d�}| d d… j}|d u r8t|ƒ}tj|d| jd�}t|tƒsXJ ‚| |¡sfJ ‚|j| jksvJ ‚t 	||¡ | j | |d�}| d d… }| |¡sªJ ‚|j| jksºJ ‚| dd … j | |d�}| d d… }| |¡sêJ ‚|j| jksúJ ‚| d d… j | |d�}| d d… }| |¡�s,J ‚|j| jk�s>J ‚| dd … }ddg|_|j ||d�}|jdk�srJ ‚| j |  
d¡d |d�}t|ƒdk�sœJ ‚|j |j|d�}| |d d… ¡�sÄJ ‚|j g |d�}| |¡�sâJ ‚|j|jk�sôJ ‚|j d	g|d�}t g d
¢¡}|j|_|j|jk�s,J ‚d}tjt|d��" |j g d¢|d� W d   ƒ n1 �sh0    Y  d S )Néýÿÿÿr   r   )Z	sortorderrC   ÚfooÚbaz©NNr#   ©rM   Úone))ÚbarrQ   )rN   Útwo)rM   rS   )ÚquxrQ   )rT   rS   r!   r   )r#   r   r$   r.   r    )r   r%   Úsortedr   Úfrom_tuplesrC   Ú
isinstancer5   r'   r(   Z	sortlevelÚlenr   r   r   )r   r   r)   r:   Úvalsr+   Zchunkletr   r   r   r   Útest_difference…   sT    
ÿrZ   c                  C   s0   t  ddgddgg¡} |  g ¡}t || ¡ d S )Nr#   r   r>   r?   ©r   rD   r   r'   r(   ©r   r:   r   r   r   Útest_difference_sort_specialÆ   s    
r]   c                  C   sJ   t  ddgddgg¡} | jg dd�}t  ddgddgg¡}t ||¡ d S ©Nr#   r   r>   r?   Tr   r[   )r   r:   r+   r   r   r   Ú!test_difference_sort_special_trueÎ   s    r_   c                  C   s¢   t  dt d¡dgddgg¡} t  dt d¡dgdd	gg¡}d
}tjt|d�� |  |¡}W d   ƒ n1 sn0    Y  t || ¡ | j|dd�}t || ¡ d S )Nr#   Ú2000r   r>   r?   r$   r.   ÚcÚdz0sort order is undefined for incomparable objectsr   Fr   )	r   rD   ÚpdÚ	Timestampr'   Úassert_produces_warningÚRuntimeWarningr   r(   )r   Úotherr   r:   r   r   r   Ú!test_difference_sort_incomparableÕ   s    (rh   c                  C   s€   t  dt d¡dgddgg¡} t  dt d¡dgdd	gg¡}d
}tjt|d�� | j|dd� W d   ƒ n1 sr0    Y  d S )Nr#   r`   r   r>   r?   r$   r.   ra   rb   zH'values' is not ordered, please explicitly specify the categories order r   Tr   )r   rD   rc   rd   r   r   r   r   )r   rg   r   r   r   r   Ú&test_difference_sort_incomparable_trueå   s
    ri   c                 C   sê   | d d… d d d… }| dd … }|j ||d�}|dv rNt | ¡ |  ¡ ¡ nt || ¡ | j | |d�}t || ¡ | j | d d… |d�}t || ¡ | j}| d d… j |dd … |d�}|d u rØt | ¡ |  ¡ ¡ n| | ¡sæJ ‚d S )Nr    r   r$   r   )NFr   r.   )r   r'   r(   r&   r%   r5   )r   r   Úpiece1Úpiece2Z	the_unionÚtuplesr:   r   r   r   Ú
test_unionð   s    rm   c                 C   sº   t g d¢ƒ}| | ¡}d|v s"J ‚d|v s.J ‚|rltjtdd�� |  |¡ W d   ƒ q¶1 s`0    Y  nJd}tjt|d�� |  |¡}W d   ƒ n1 sž0    Y  | |¡r¶J ‚d S )N)r@   rA   ÚCrP   rA   zCan only unionr   z'The values in the array are unorderable)	r   r   r   r   ÚNotImplementedErrorr'   re   rf   r5   )r   Zusing_infer_stringrg   r:   r   Zresult2r   r   r   Útest_union_with_regular_index
  s    
*(rp   c           	      C   sÚ   | d d… d d d… }| dd … }|j ||d�}|dv rNt || dd… ¡ nt | ¡ | dd… ¡ | j | |d�}t || ¡ | d d… j | dd … |d�}| d d… }| |¡s¸J ‚| j}|   |¡}| | ¡sÖJ ‚d S )Nr    r   r$   r   )NTr   r   )r   r'   r(   r&   r5   r%   )	r   r   rj   rk   Zthe_intrI   r+   rl   r:   r   r   r   Útest_intersection  s    
rq   c                 C   sš   |   ¡  d¡}d g| j }t| |ƒ||d�}t| |ƒ| |d� |¡}t ||¡ t| |ƒ|d d… |d�}t| |ƒ| d d… |d� |¡}t ||¡ d S )NÚcategoryr   r    )Zto_flat_indexÚastypeÚnlevelsr   rF   r'   r(   )r   r   r   rg   Z	res_namesr:   r+   r   r   r   Útest_setop_with_categorical6  s     ru   c                 C   sÖ   t tdƒdd�}| j||d�}t| jg g| j d d�}tj||dd� | jt 	|¡d d… |d�}t| jg g| j | j
d�}tj||dd� d	}tjt|d
��$ | jt 	|¡|d� W d   ƒ n1 sÈ0    Y  d S )Nr$   rM   )Únamer   ©ÚlevelsÚcodesrC   T)Úexactr   r!   r   )r   Úranger   r   rx   rt   r'   r(   r6   ZasarrayrC   r   r   r   )r   r   rg   r:   r+   r   r   r   r   Útest_intersection_non_objectF  s    r|   c                  C   sF   t  ddgddgg¡} t | j| dd�| ¡ t | j| d d�| ¡ d S ©Nr#   r   r>   r?   Fr   )r   rD   r'   r(   r   rJ   r   r   r   Útest_intersect_equal_sortX  s    r~   c                  C   sJ   t  ddgddgg¡} t  ddgddgg¡}| j| dd�}t ||¡ d S r^   )r   rD   r   r'   r(   )r   r+   r:   r   r   r   Útest_intersect_equal_sort_true_  s    r   Úslice_c                 C   s\   t  ddgddgg¡}||  }t | |¡|¡ t | |¡|¡ t |j|dd�|¡ d S r}   )r   rD   r'   r(   r   )r€   r   rg   r   r   r   Útest_union_sort_other_emptyf  s
    r�   c                  C   sV   t  ddgddgg¡} | d d… }| j|dd�}t  ddgddgg¡}t ||¡ d S r^   )r   rD   r   r'   r(   )r   rg   r:   r+   r   r   r   Ú test_union_sort_other_empty_sortt  s
    r‚   c                  C   sŠ   t  dt d¡gddgg¡} t t¡�" |  | d d… ¡}W d   ƒ n1 sN0    Y  t || ¡ | j| d d… dd�}t || ¡ d S )Nr#   r`   r>   r?   Fr   )	r   rD   rc   rd   r'   re   rf   r   r(   r\   r   r   r   Ú"test_union_sort_other_incomparable|  s    0rƒ   c                  C   sh   t  dt d¡gddgg¡} d}tjt|d��& | j| d d… dd� W d   ƒ n1 sZ0    Y  d S )	Nr#   r`   r>   r?   z<'<' not supported between instances of 'Timestamp' and 'int'r   Tr   )r   rD   rc   rd   r   r   r   r   )r   r   r   r   r   Ú'test_union_sort_other_incomparable_sortŠ  s    r„   c                  C   s`   t  ddgddgg¡} | jd }d}tjt|d�� |  |¡ W d   ƒ n1 sR0    Y  d S )Nr>   r?   r#   r   z<Can only union MultiIndex with MultiIndex or Index of tuplesr   )r   rD   rx   r   r   ro   r   )Úmir   r   r   r   r   Ú"test_union_non_object_dtype_raises‘  s
    
r†   c                  C   sZ   t  g g¡} t jddgddggddgd�}|  |¡}t  ddgddgg¡}t ||¡ d S )Nr#   r   r$   r.   r>   r?   rB   ©r   Úfrom_arraysr   r'   r(   )r…   Úmi2r:   r+   r   r   r   Ú%test_union_empty_self_different_namesœ  s
    
rŠ   c                  C   s`   t jddgddggddgd�} t d¡}|  |¡}tj| |d	d
� | | ¡}tj| |d	d
� d S )Nr#   r   r$   r.   r>   r?   rB   r   F)Zcheck_names)r   rˆ   rc   Z
RangeIndexr   r'   r(   )r…   ÚriZresult_leftZresult_rightr   r   r   Ú&test_union_multiindex_empty_rangeindex¥  s    


rŒ   )r   r   r   r   c                 C   s‚   t  ddgddgg¡}t  ddgddgg¡}tjtdd��" t|| ƒ|dd� W d   ƒ n1 sb0    Y  t|| ƒ|d	d� d S )
Nr>   r?   r#   r   ra   zThe 'sort' keyword only takesr   r   T)r   rD   r   r   Ú
ValueErrorr   )r   Zidx1rG   r   r   r   Útest_setops_sort_validation±  s
    0rŽ   Úvaléd   c                 C   sÀ   t jtddg| d�ddggdd gd�}t  tdd|g| d�g d¢g¡}| |¡}t  tdg| d�dgg¡}t ||¡ | |jdd�¡}t jtg | d�tg tjd�gdd gd�}t ||¡ d S )	Nr#   r   ©Údtyper>   rB   ©r#   r#   r$   F)Z	ascending)	r   rˆ   r   r   r'   r(   r&   r6   Úint64©Úany_numeric_ea_dtyper�   ÚmidxÚmidx2r:   r+   r   r   r   Útest_difference_keep_ea_dtypes¿  s    ÿÿ
þr™   r    c                 C   s€   t jtddg| d�ddggdd gd�}t  tdd|g| d�g d¢g¡}| |¡}t  tdd|g| d�g d¢g¡}t ||¡ d S )Nr#   r   r‘   r>   rB   r“   r"   )r   rˆ   r   r   r'   r(   r•   r   r   r   Ú*test_symmetric_difference_keeping_ea_dtypeÔ  s    ÿÿ
ÿrš   )rl   Ú
exp_tuples©Zval1Ztest1©Zval2Ztest2c                 C   sT   t j| ddgd�}t jg d¢ddgd�}| |¡}t j|ddgd�}t ||¡ d S )Nr)   r*   rB   )rœ   rœ   r�   )r   rV   r   r'   r(   )rl   r›   ÚleftÚrightr:   r+   r   r   r   Útest_intersect_with_duplicatesä  s    þ
r    zdata, names, expected©r#   r>   r?   )r#   r   ra   rb   r"   )r>   r?   ra   c                 C   s<   t jg ddgd�}t j| g|d�}| |¡}||ks8J ‚d S )Nr>   r?   rB   )r   rV   Z_maybe_match_names)ÚdatarC   r+   r…   r‰   r:   r   r   r   Útest_maybe_match_namesû  s    
r£   c                  C   st   t jddgddggddgd�} t jddgddggddgd�}|  |¡}t jddgddggd dgd�}t ||¡ d S )	Nr#   r   r$   r.   ra   r?   rB   r>   ©r   rˆ   r   r'   r(   )Úmi1r‰   r:   r+   r   r   r   Ú'test_intersection_equal_different_names  s
    
r¦   c                  C   sF   t jdgdggddgd�} t  dgdgg¡}|  |¡}t ||¡ d S )Nr#   r$   ra   r?   rB   r¤   )r…   r‰   r:   r   r   r   Ú!test_intersection_different_names  s    
r§   c                 C   sb   t  d| d| gg d¢g¡}t  d| dgg d¢g¡}| |¡}t  d| gddgg¡}t ||¡ d S )Nr$   r.   )r#   r   r.   r   ©r#   r   r.   r#   r   r¤   ©Znulls_fixturer¥   r‰   r:   r+   r   r   r   Ú3test_intersection_with_missing_values_on_both_sides$  s
    
rª   c                 C   sN   t  d| gg¡}t  d| dgg¡}| |¡}t  dd| gg¡}t ||¡ d S )Nr#   r$   r‡   r©   r   r   r   Ú,test_union_with_missing_values_on_both_sides-  s
    
r«   r’   Zfloat64ZFloat64r   Fc                 C   s–   t  tjdtjg| d�ddgg¡}t  tjdtjdg| d�g d¢g¡}|j||d�}|d u r‚t  tjddtjg| d�g d¢g¡}n|}t ||¡ d S )	Nç      ð?r‘   r   r$   g      @)r   r$   r.   r   )r   r.   r$   )	r   rˆ   rc   r7   r6   Únanr   r'   r(   )r’   r   r¥   r‰   r:   r+   r   r   r   Útest_union_nan_got_duplicated6  s    "$ÿr®   r.   r#   c                 C   s¬   t |dg| d�}t ddg| d�}tj|ddggdd gd�}t |ddgg¡}| |¡}|dkr~t t g d¢| d�g d¢g¡}nt t ddg| d�ddgg¡}t ||¡ d S )	Nr   r‘   r#   r>   rB   r.   r¨   )r#   r   r#   ©r   r   rˆ   r   r'   r(   )r–   r�   Úarr1Úarr2r—   r˜   r:   r+   r   r   r   Útest_union_keep_ea_dtypeF  s    
ÿÿr²   Údupe_valr$   c                 C   sœ   t  td| dg|d�td| dg|d�g¡}t  td| | g|d�td| | g|d�g¡}| |¡}t  tdd| | g|d�tdd| | g|d�g¡}t ||¡ d S )Nr#   r   r‘   )r   rˆ   r   r   r'   r(   )r³   r–   r¥   r‰   r:   r+   r   r   r   Ú(test_union_with_duplicates_keep_ea_dtypeZ  s"    þÿþÿ
þÿr´   z3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc                 C   s"  | j st| ttfƒr*t dt| ƒj› �¡ |  ¡ j	 
¡ }t |dgt|ƒ g¡}t |d g| dgt|ƒd  g¡}| |¡}| ¡ }t ||¡ t|jd ƒrØ| d¡dk  ¡ rØ| |jd  tj¡|jd g¡}n0t|jd ƒ�r| |jd  t¡|jd g¡}| |¡}t ||¡ d S )NzNo duplicates in an empty r#   r   l            )rI   rW   r   r   r   ÚskipÚtypeÚ__name__Úuniquer%   Útolistr   rˆ   rX   r   r&   r'   r(   r	   rx   Zget_level_valuesÚallZ
set_levelsrs   r6   r”   r   Úfloat)ÚindexÚrequestr%   r¥   r‰   r:   r+   r   r   r   Útest_union_duplicatess  s*    &
ÿþÿÿ
r¾   c                 C   s”   t g d¢| d�}t ddg| d�}tj|g d¢gdd gd�}tj|ddggdd gd�}| |¡}tjt g d	¢| d�g d
¢gdd gd�}t ||¡ d S )N)r.   r#   r#   r‘   r#   r.   )r   r#   r#   r>   rB   r   )r#   r#   r.   )r#   r#   r   r¯   )Zany_real_numeric_dtyper°   r±   r—   r˜   r:   r+   r   r   r   Útest_union_keep_dtype_precision–  s    
þr¿   c                 C   s�   t dtjg| d�}t dtjg| d�}tj|ddggdd gd�}t |ddgg¡}| |¡}t t ddtjtjg| d�g d¢g¡}t ||¡ d S )Nr.   r‘   r#   r   r>   rB   )r#   r   r#   r   )r   rc   ÚNAr   rˆ   r   r'   r(   )r–   r°   r±   r—   r˜   r:   r+   r   r   r   Ú test_union_keep_ea_dtype_with_na¥  s    
ÿrÁ   z'levels1, levels2, codes1, codes2, namesÚ )ra   rb   r?   )r   r#   r   )r#   r#   r#   )r   r   r   Zname1Zname2c                 C   s8   t | ||d�}t |||d�}| |¡}|jdks4J ‚d S )Nrw   r   )r   r   Z_lexsort_depth)Zlevels1Zlevels2Zcodes1Zcodes2rC   r¥   r‰   Zmi_intr   r   r   Útest_intersection_lexsort_depth²  s    
rÃ   )Ú
categoriesT)rÄ   Zorderedc           
      C   sî   ddg}t | |dœƒ}t ||dœƒ}tj| |gddgd�}t |¡ t | ddg¡¡¡}t |¡ t |¡¡}t | ddg¡¡ t |¡¡}t | ddg¡¡ t | ddg¡¡¡}	t ||¡ t ||¡ t ||¡ t |	|¡ d S )NÚ1Ú2)ÚxÚyrÇ   rÈ   rB   )r   r   rˆ   Z
from_framer   r&   r'   r(   )
r>   r?   rg   Zdf1Zdf2r+   Zres1Zres2Zres3Zres4r   r   r   Ú0test_intersection_with_non_lex_sorted_categoriesÆ  s$    
ÿÿÿrÉ   c                 C   sz   t jtddg|d�ddggdd gd�}t  tdd| g|d�g d¢g¡}| |¡}t  tdg|d�dgg¡}t ||¡ d S )Nr#   r   r‘   r>   rB   r“   )r   rˆ   r   r   r'   r(   )r�   r–   r—   r˜   r:   r+   r   r   r   Ú test_intersection_keep_ea_dtypesë  s    ÿÿ
rÊ   c               	   C   sz   t dt t d gdd�t d gdd�g¡d�} t dt d¡d�}t| |gƒ}ttjtjfddgd	tjd
giƒ}t ||¡ d S )Nr¡   Ústrr‘   )r¼   )é
   é   )rO   ©r>   r?   r¬   g      $@rÎ   g      4@)	r   r   rˆ   rV   r   r6   r­   r'   Zassert_frame_equal)Zseries1Zseries2r:   r+   r   r   r   Ú.test_union_with_na_when_constructing_dataframeù  s    ÿþ"rÏ   )GÚnumpyr6   r   Zpandasrc   r   r   r   r   r   r   Zpandas._testingZ_testingr'   Zpandas.api.typesr   r	   ÚmarkZparametrizer   r7   r8   r,   Zarm_slowr-   r<   r=   rH   rK   rZ   r]   r_   rh   ri   rm   rp   rq   ru   r|   r~   r   Úslicer�   r‚   rƒ   r„   r†   rŠ   rŒ   rŽ   rÀ   r™   rš   r    r£   r¦   r§   rª   r«   r®   r²   r´   Úfilterwarningsr¾   r¿   rÁ   rÃ   ZCategoricalrÉ   rÊ   rÏ   r   r   r   r   Ú<module>   sæ    ÿ
Aÿ

	ÿ



þýþ
öþ

		



"ûÿþ
þþþ
