§
    Ÿjëu  ã                   ó  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dl m!Z! d dl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)  G d„ de¦  «        Z*dS )é    N)Ú	lru_cache)Úchain)Úsettings)ÚDatabaseErrorÚNotSupportedError)ÚBaseDatabaseOperations)Úsplit_tzname_deltaÚstrip_quotesÚtruncate_name)Ú	AutoFieldÚCompositePrimaryKeyÚExistsÚExpressionWrapperÚLookup)ÚRawSQL)Ú	WhereNode)Útimezone)Úforce_bytesÚ	force_str)Úcached_property)Ú_lazy_re_compileé   )ÚDatabase)ÚBulkInsertMapperÚ	InsertVarÚOracle_datetimec            
       ó  ‡ — e Zd Zddddddddddœ	Zi ej        ¥ddi¥Zd	Zd
ZdddedœZd„ Z	 e
d¦  «        Zd„ ZdId„Z e
d¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdId„Zˆ fd„Zd„ Zd„ Zd „ Zd!„ Zd"„ Zd#„ Zd$„ Zed%„ ¦   «         Z ed&„ ¦   «         Z!d'„ Z"d(„ Z#d)„ Z$d*„ Z%d+„ Z&d,„ Z'dId-„Z(d.„ Z)d/„ Z*d0„ Z+d1„ Z,d2„ Z-d3„ Z.d4„ Z/d5„ Z0d6„ Z1e2d7„ ¦   «         Z3d8d8d9œd:„Z4d;„ Z5d<„ Z6d=„ Z7dJd>„Z8d?„ Z9d@„ Z:dA„ Z;ˆ fdB„Z<dC„ Z=dD„ Z>dE„ Z?ˆ fdF„Z@dG„ ZAdH„ ZBˆ xZCS )KÚDatabaseOperations)lýÿÿÿÿgí] ì   ÿgí] )lûÿÿÿÿÏ9V ì   ÿÏ9V )r   r    )r   r   )iayþÿiŸ† )	ÚSmallIntegerFieldÚIntegerFieldÚBigIntegerFieldÚPositiveBigIntegerFieldÚPositiveSmallIntegerFieldÚPositiveIntegerFieldÚSmallAutoFieldr   ÚBigAutoFieldÚ
differenceÚMINUSaï  
DECLARE
    table_value integer;
    seq_value integer;
    seq_name user_tab_identity_cols.sequence_name%%TYPE;
BEGIN
    BEGIN
        SELECT sequence_name INTO seq_name FROM user_tab_identity_cols
        WHERE  table_name = '%(table_name)s' AND
               column_name = '%(column_name)s';
        EXCEPTION WHEN NO_DATA_FOUND THEN
            seq_name := '%(no_autofield_sequence_name)s';
    END;

    SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s;
    SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences
           WHERE sequence_name = seq_name;
    WHILE table_value > seq_value LOOP
        EXECUTE IMMEDIATE 'SELECT "'||seq_name||'".nextval%(suffix)s'
        INTO seq_value;
    END LOOP;
END;
/zNVARCHAR2(2000)z
NUMBER(11)z
NUMBER(19)z	NUMBER(5))r   r(   r'   Ú	TextFieldc                 ó>   — |                       d¦  «        }d|› d|› d�S )NÚ	cache_keyzSELECT z FROM %s ORDER BY z( OFFSET %%s ROWS FETCH FIRST 1 ROWS ONLY©Ú
quote_name)Úselfr-   s     úq/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/db/backends/oracle/operations.pyÚcache_key_culling_sqlz(DatabaseOperations.cache_key_culling_sqlO   sA   € Ø—O’O KÑ0Ô0ˆ	ðL�ið Lð Là!ðLð Lð Lð	
ó    z[A-Z_]+c                 ó   — d|› d�}d }|dk    rd}nu|dk    r	d|› d�}d}nf|dk    rd}n]|d	k    rd
}nT|dk    rd}nK|                      ¦   «         }| j                             |¦  «        st          d|›�¦  «        ‚d|› d|› d�|fS |g |¢|‘R fS )NzTO_CHAR(ú, %s)Úweek_dayÚDÚiso_week_dayz	 - 1, %s)ÚweekÚIWÚquarterÚQÚiso_yearÚIYYYzInvalid loookup type: zEXTRACT(z FROM ú))ÚupperÚ_extract_format_reÚ	fullmatchÚ
ValueError)r0   Úlookup_typeÚsqlÚparamsÚextract_sqlÚextract_params         r1   Údate_extract_sqlz#DatabaseOperations.date_extract_sqlZ   sú   € Ø+ Ð+Ð+Ð+ˆØˆØ˜*Ò$Ð$àˆMˆMØ˜NÒ*Ð*Ø3 SÐ3Ð3Ð3ˆKØˆMˆMØ˜FÒ"Ð"à ˆMˆMØ˜IÒ%Ð%ØˆMˆMØ˜JÒ&Ð&Ø"ˆMˆMà%×+Ò+Ñ-Ô-ˆKØÔ*×4Ò4°[ÑAÔAð KÝ Ð!I¸+Ð!IÐ!IÑJÔJÐJà7˜kÐ7Ð7°Ð7Ð7Ð7¸Ð?Ð?ØÐ4˜fÐ4 mÐ4Ð4Ð4Ð4r3   Nc                 óº   — |                       |||¦  «        \  }}d }|dv r|                     ¦   «         }n|dk    rd}n|dk    rd}nd|› d�|fS d|› d�g |¢|‘R fS )	N©ÚyearÚmonthr;   r<   r9   r:   úTRUNC(r?   r5   ©Ú_convert_sql_to_tzr@   ©r0   rD   rE   rF   ÚtznameÚtrunc_params         r1   Údate_trunc_sqlz!DatabaseOperations.date_trunc_sqlr   sœ   € Ø×-Ò-¨c°6¸6ÑBÔB‰ˆˆVàˆØÐ+Ð+Ð+Ø%×+Ò+Ñ-Ô-ˆKˆKØ˜IÒ%Ð%ØˆKˆKØ˜FÒ"Ð"ØˆKˆKà"˜C�?�?�? FÐ*Ð*Ø"˜Ð"Ð"Ð"Ð$: fÐ$:¨kÐ$:Ð$:Ð:Ð:r3   z^[\w/:+-]+$c                 ó<   — t          |¦  «        \  }}}|r|› |› �n|S ©N)r	   )r0   rR   ÚsignÚoffsets       r1   Ú_prepare_tzname_deltaz(DatabaseOperations._prepare_tzname_delta†   s1   € Ý1°&Ñ9Ô9Ñˆ��fØ$*Ð6�$Ð ˜Ð Ð Ð °Ð6r3   c                 ó  — t           j        r|s||fS | j                             |¦  «        st	          d|z  ¦  «        ‚| j        j        |k    r/| j        j        }|                      |¦  «        }d|› d|› d|› d�|fS ||fS )NzInvalid time zone name: %szCAST((FROM_TZ(z, 'z') AT TIME ZONE 'z') AS TIMESTAMP))r   ÚUSE_TZÚ
_tzname_reÚmatchrC   Ú
connectionÚtimezone_namerY   )r0   rE   rF   rR   Úfrom_timezone_nameÚto_timezone_names         r1   rP   z%DatabaseOperations._convert_sql_to_tzŠ   sÄ   € Ý”ð 	 Fð 	Ø˜�;ÐØŒ×$Ò$ VÑ,Ô,ð 	DÝÐ9¸FÑBÑCÔCÐCð Œ?Ô(¨FÒ2Ð2Ø!%¤Ô!>ÐØ#×9Ò9¸&ÑAÔAÐð7 ð 7ð 7Ð);ð 7ð 7Ø$ð7ð 7ð 7àðð ð
 �Fˆ{Ðr3   c                 óF   — |                       |||¦  «        \  }}d|› d�|fS )NrN   r?   ©rP   )r0   rE   rF   rR   s       r1   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqlœ   s0   € Ø×-Ò-¨c°6¸6ÑBÔB‰ˆˆVØ˜ˆˆˆ Ð&Ð&r3   c                 ób   — |                       |||¦  «        \  }}d|› d�}d|› d|› d�g |¢|¢R fS )Nz+TO_TIMESTAMP(CONCAT('1900-01-01 ', TO_CHAR(z0, 'HH24:MI:SS.FF')), 'YYYY-MM-DD HH24:MI:SS.FF')z
CASE WHEN z IS NOT NULL THEN z ELSE NULL ENDrc   )r0   rE   rF   rR   Úconvert_datetime_sqls        r1   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sql    sn   € ð ×-Ò-¨c°6¸6ÑBÔB‰ˆˆVð+¸#ð +ð +ð +ð 	ð
 U˜ÐTÐTÐ0DÐTÐTÐTØˆfÐ�vÐÐð
ð 	
r3   c                 ó€   — |                       |||¦  «        \  }}|dk    rd|› d�|fS |                      |||¦  «        S ©NÚsecondzFLOOR(EXTRACT(SECOND FROM z)))rP   rI   )r0   rD   rE   rF   rR   s        r1   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sql­   sV   € Ø×-Ò-¨c°6¸6ÑBÔB‰ˆˆVØ˜(Ò"Ð"à7°Ð7Ð7Ð7¸Ð?Ð?Ø×$Ò$ [°#°vÑ>Ô>Ð>r3   c                 óú   — |                       |||¦  «        \  }}d }|dv r|                     ¦   «         }n:|dk    rd}n1|dk    rd}n(|dk    rd}n|dk    rd	}n|d
k    rd|› d�|fS d|› d�|fS d|› d�g |¢|‘R fS )NrK   r;   r<   r9   r:   ÚhourÚHH24ÚminuteÚMIÚdayrN   r?   úCAST(ú	 AS DATE)r5   rO   rQ   s         r1   Údatetime_trunc_sqlz%DatabaseOperations.datetime_trunc_sql´   sã   € Ø×-Ò-¨c°6¸6ÑBÔB‰ˆˆVàˆØÐ+Ð+Ð+Ø%×+Ò+Ñ-Ô-ˆKˆKØ˜IÒ%Ð%ØˆKˆKØ˜FÒ"Ð"ØˆKˆKØ˜FÒ"Ð"Ø ˆKˆKØ˜HÒ$Ð$ØˆKˆKØ˜EÒ!Ð!Ø"˜C�?�?�? FÐ*Ð*ð *˜3Ð)Ð)Ð)¨6Ð1Ð1Ø"˜Ð"Ð"Ð"Ð$: fÐ$:¨kÐ$:Ð$:Ð:Ð:r3   c                 óL   — |dk    rd|› d�|fS |                       |||¦  «        S ri   )rI   )r0   rD   rE   rF   s       r1   Útime_extract_sqlz#DatabaseOperations.time_extract_sqlÉ   s;   € Ø˜(Ò"Ð"à7°Ð7Ð7Ð7¸Ð?Ð?Ø×$Ò$ [°#°vÑ>Ô>Ð>r3   c                 ó”   — |                       |||¦  «        \  }}d }|dk    rd}n|dk    rd}n|dk    rd|› d�|fS d|› d	�g |¢|‘R fS )
Nrm   rn   ro   rp   rj   rr   rs   rN   r5   rc   rQ   s         r1   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sqlÏ   s�   € ð ×-Ò-¨c°6¸6ÑBÔB‰ˆˆVØˆØ˜&Ò Ð Ø ˆKˆKØ˜HÒ$Ð$ØˆKˆKØ˜HÒ$Ð$à)˜3Ð)Ð)Ð)¨6Ð1Ð1Ø"˜Ð"Ð"Ð"Ð$: fÐ$:¨kÐ$:Ð$:Ð:Ð:r3   c                 óÂ  •— t          ¦   «                              |¦  «        }|j                             ¦   «         }|dv r|                     | j        ¦  «         nÑ|dk    r|                     | j        ¦  «         n°|dk    r|                     | j        ¦  «         n�|dk    r't          j	        r|                     | j
        ¦  «         nb|dk    r|                     | j        ¦  «         nA|dk    r|                     | j        ¦  «         n |dk    r|                     | j        ¦  «         |j        j        r'|                     |dk    r| j        n| j        ¦  «         |S )N)Ú	JSONFieldr+   ÚBinaryFieldÚBooleanFieldÚDateTimeFieldÚ	DateFieldÚ	TimeFieldÚ	UUIDField)ÚsuperÚget_db_convertersÚoutput_fieldÚget_internal_typeÚappendÚconvert_textfield_valueÚconvert_binaryfield_valueÚconvert_booleanfield_valuer   r[   Úconvert_datetimefield_valueÚconvert_datefield_valueÚconvert_timefield_valueÚconvert_uuidfield_valueÚempty_strings_allowedÚconvert_empty_bytesÚconvert_empty_string)r0   Ú
expressionÚ
convertersÚinternal_typeÚ	__class__s       €r1   r‚   z$DatabaseOperations.get_db_convertersÞ   s„  ø€ Ý‘W”W×.Ò.¨zÑ:Ô:ˆ
Ø"Ô/×AÒAÑCÔCˆØÐ6Ð6Ð6Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜mÒ+Ð+Ø×Ò˜dÔ<Ñ=Ô=Ð=Ð=Ø˜nÒ,Ð,Ø×Ò˜dÔ=Ñ>Ô>Ð>Ð>Ø˜oÒ-Ð-ÝŒð DØ×!Ò! $Ô"BÑCÔCÐCøØ˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;ð Ô"Ô8ð 	Ø×Òà  MÒ1Ð1ð Ô(Ð(àÔ.ñô ð ð
 Ðr3   c                 ób   — t          |t          j        ¦  «        r|                     ¦   «         }|S rV   )Ú
isinstancer   ÚLOBÚread©r0   Úvaluer�   r^   s       r1   r†   z*DatabaseOperations.convert_textfield_valueû   s(   € Ý�e�Xœ\Ñ*Ô*ð 	!Ø—J’J‘L”LˆEØˆr3   c                 ó|   — t          |t          j        ¦  «        r!t          |                     ¦   «         ¦  «        }|S rV   )r•   r   r–   r   r—   r˜   s       r1   r‡   z,DatabaseOperations.convert_binaryfield_value   s0   € Ý�e�Xœ\Ñ*Ô*ð 	.Ý §
¢
¡¤Ñ-Ô-ˆEØˆr3   c                 ó,   — |dv rt          |¦  «        }|S )N)r   r   )Úboolr˜   s       r1   rˆ   z-DatabaseOperations.convert_booleanfield_value  s   € Ø�Fˆ?ˆ?Ý˜‘K”KˆEØˆr3   c                 óH   — |�t          j        || j        j         ¦  «        }|S rV   )r   Ú
make_awarer^   r˜   s       r1   r‰   z.DatabaseOperations.convert_datetimefield_value  s$   € ØÐÝÔ'¨¨t¬Ô/GÑHÔHˆEØˆr3   c                 ób   — t          |t          j        ¦  «        r|                     ¦   «         }|S rV   )r•   ÚdatetimeÚdater˜   s       r1   rŠ   z*DatabaseOperations.convert_datefield_value  ó)   € Ý�e�XÔ.Ñ/Ô/ð 	!Ø—J’J‘L”LˆEØˆr3   c                 ób   — t          |t          j        ¦  «        r|                     ¦   «         }|S rV   )r•   r    Útimer˜   s       r1   r‹   z*DatabaseOperations.convert_timefield_value  r¢   r3   c                 ó2   — |�t          j        |¦  «        }|S rV   )ÚuuidÚUUIDr˜   s       r1   rŒ   z*DatabaseOperations.convert_uuidfield_value  s   € ØÐÝ”I˜eÑ$Ô$ˆEØˆr3   c                 ó   — | €dn| S ©NÚ © ©r™   r�   r^   s      r1   r�   z'DatabaseOperations.convert_empty_string"  s   € à�]ˆrˆr¨Ð-r3   c                 ó   — | €dn| S )Nr3   r«   r¬   s      r1   rŽ   z&DatabaseOperations.convert_empty_bytes&  s   € à�mˆsˆs¨Ð.r3   c                 ó   — dS )Nz DEFERRABLE INITIALLY DEFERREDr«   ©r0   s    r1   Údeferrable_sqlz!DatabaseOperations.deferrable_sql*  s   € Ø/Ð/r3   c                 ó¶   — g }|D ]F}|                      ¦   «         }|g k    rt          d¦  «        ‚|                     |d         ¦  «         ŒGt          |¦  «        S )Nz¾The database did not return a new row id. Probably "ORA-1403: no data found" was raised internally but was hidden by the Oracle OCI library (see https://code.djangoproject.com/ticket/28859).r   )Ú	get_valuer   r…   Útuple)r0   ÚcursorÚreturning_paramsÚcolumnsÚparamr™   s         r1   Úfetch_returned_insert_columnsz0DatabaseOperations.fetch_returned_insert_columns-  so   € ØˆØ%ð 	%ð 	%ˆEØ—O’OÑ%Ô%ˆEð ˜Š{ˆ{Ý#ðDñô ð ð �NŠN˜5 œ8Ñ$Ô$Ð$Ð$Ý�W‰~Œ~Ðr3   c                 ó   — d S rV   r«   r¯   s    r1   Úno_limit_valuez!DatabaseOperations.no_limit_value=  ó   € Øˆtr3   c                 ó’   — |                       ||¦  «        \  }}d                     d„ |rd|z  nd |rd|z  nd fD ¦   «         ¦  «        S )Nú c              3   ó   K  — | ]}|¯|V — Œ	d S rV   r«   )Ú.0rE   s     r1   ú	<genexpr>z6DatabaseOperations.limit_offset_sql.<locals>.<genexpr>B  s>   è è € ð 
ð 
àð ð
Øð
ð 
ð 
ð 
ð 
ð 
r3   zOFFSET %d ROWSzFETCH FIRST %d ROWS ONLY)Ú_get_limit_offset_paramsÚjoin)r0   Úlow_markÚ	high_markÚfetchrX   s        r1   Úlimit_offset_sqlz#DatabaseOperations.limit_offset_sql@  sw   € Ø×5Ò5°hÀ	ÑJÔJ‰ˆˆvØ�xŠxð 
ð 
ð 06Ð?Ð! FÑ*Ð*¸4Ø8=ÐGÐ+¨eÑ3Ð3À4ðð
ñ 
ô 
ñ 
ô 
ð 	
r3   c                 ó¨  — |j         }|rÈ|rÆt          |t          t          f¦  «        r2d„ t	          t
                               |¦  «        ¦  «        D ¦   «         }n3t          |t
          ¦  «        rd„ |                     ¦   «         D ¦   «         }t          |t          d¬¦  «        D ]-}| 
                    |t          ||         d¬¦  «        ¦  «        }Œ.|S )Nc                 ó    — i | ]\  }}d |› �|“ŒS )z:argr«   )r¿   Úir·   s      r1   ú
<dictcomp>z:DatabaseOperations.last_executed_query.<locals>.<dictcomp>T  s1   € ð ð ð Ù*2¨!¨U�J˜1�J�J ðð ð r3   c                 ó    — i | ]\  }}d |› �|“ŒS )ú:r«   )r¿   ÚkeyÚvals      r1   rÊ   z:DatabaseOperations.last_executed_query.<locals>.<dictcomp>X  s$   € ÐJÐJÐJ©Z¨c°3˜)˜c˜)˜) SÐJÐJÐJr3   T)rÍ   ÚreverseÚreplace)Úerrors)Ú	statementr•   r³   ÚlistÚ	enumerateÚdictÚfromkeysÚitemsÚsortedÚlenrÐ   r   )r0   r´   rE   rF   rÒ   rÍ   s         r1   Úlast_executed_queryz&DatabaseOperations.last_executed_queryK  së   € ð Ô$ˆ	ð ð 
	˜ð 
	Ý˜&¥5­$ -Ñ0Ô0ð Kðð Ý6?ÅÇÂÈfÑ@UÔ@UÑ6VÔ6Vðñ ô ��õ ˜F¥DÑ)Ô)ð KØJÐJ¸6¿<º<¹>¼>ÐJÑJÔJ�Ý˜f­#°tÐ<Ñ<Ô<ð ð �Ø%×-Ò-Ø� 6¨#¤;°yÐAÑAÔAñô �	�	ð Ðr3   c                 ó®   — |                       |t          |¦  «        |¦  «        }|                     d|z  ¦  «         |                     ¦   «         d         S )Nz"%s".currvalr   )Ú_get_sequence_namer
   ÚexecuteÚfetchone)r0   r´   Ú
table_nameÚpk_nameÚsq_names        r1   Úlast_insert_idz!DatabaseOperations.last_insert_id_  sM   € Ø×)Ò)¨&µ,¸zÑ2JÔ2JÈGÑTÔTˆØ�Š�~¨Ñ/Ñ0Ô0Ð0Ø�ŠÑ Ô  Ô#Ð#r3   c                 ó*   — |dv rdS |dk    r|dv rdS dS )N)ÚiexactÚ	icontainsÚistartswithÚ	iendswithz	UPPER(%s)Úisnull)r{   r+   zDBMS_LOB.SUBSTR(%s)ú%sr«   )r0   rD   r’   s      r1   Úlookup_castzDatabaseOperations.lookup_castd  s<   € ØÐMÐMÐMØ�;Ø˜(Ò"Ð" }ð 9
ð (
ð (
ð )Ð(Øˆtr3   c                 ó   — dS )Niè  r«   r¯   s    r1   Úmax_in_list_sizez#DatabaseOperations.max_in_list_sizen  r»   r3   c                 ó   — dS )Né   r«   r¯   s    r1   Úmax_name_lengthz"DatabaseOperations.max_name_lengthq  ó   € Øˆrr3   c                 ó   — dS )NÚNULLr«   r¯   s    r1   Úpk_default_valuez#DatabaseOperations.pk_default_valuet  s   € Øˆvr3   c                 ó   — |S rV   r«   )r0   Úxs     r1   Úprep_for_iexact_queryz(DatabaseOperations.prep_for_iexact_queryw  s   € Øˆr3   c                 ó2   — |€dS |                      ¦   «         S r©   )r—   ©r0   r™   s     r1   Úprocess_clobzDatabaseOperations.process_clobz  s   € Øˆ=Ø�2Ø�zŠz‰|Œ|Ðr3   c                 óô   — |                      d¦  «        s:|                     d¦  «        s%dt          ||                      ¦   «         ¦  «        z  }|                     dd¦  «        }|                     ¦   «         S )Nú"z"%s"ú%ú%%)Ú
startswithÚendswithr   rï   rÐ   r@   )r0   Únames     r1   r/   zDatabaseOperations.quote_name  sp   € ð
 �Š˜sÑ#Ô#ð 	H¨D¯MªM¸#Ñ,>Ô,>ð 	HØ�M¨$°×0DÒ0DÑ0FÔ0FÑGÔGÑGˆDð �|Š|˜C Ñ&Ô&ˆØ�zŠz‰|Œ|Ðr3   c                 ó"   — |dk    rd}nd}d|z  S )NÚregexz'c'z'i'zREGEXP_LIKE(%%s, %%s, %s)r«   )r0   rD   Úmatch_options      r1   Úregex_lookupzDatabaseOperations.regex_lookupŒ  s$   € Ø˜'Ò!Ð!Ø ˆLˆLà ˆLØ*¨\Ñ9Ð9r3   c           	      ó¤  — |sdS g }g }|D ]x}|                      |                      |j        j        j        ¦  «        ›d|                      |j        ¦  «        ›�¦  «         |                      t          |¦  «        ¦  «         Œydd                     |¦  «        ›dd                     dgt          |¦  «        z  ¦  «        ›�t          |¦  «        fS )N)rª   r«   ú.z
RETURNING ú, z INTO ré   )
r…   r/   ÚmodelÚ_metaÚdb_tableÚcolumnr   rÂ   rÙ   r³   )r0   ÚfieldsÚfield_namesrF   Úfields        r1   Úreturn_insert_columnsz(DatabaseOperations.return_insert_columns“  sì   € Øð 	Ø�6ØˆØˆØð 	,ð 	,ˆEØ×Òð —O’O E¤KÔ$5Ô$>Ñ?Ô?Ð?Ð?Ø—O’O E¤LÑ1Ô1Ð1ðñô ð ð �MŠM�) EÑ*Ô*Ñ+Ô+Ð+Ð+ð	,ð �IŠI�kÑ"Ô"Ð"Ð"Ø�IŠI�t�f�s 6™{œ{Ñ*Ñ+Ô+Ð+ð
õ �‰=Œ=ðð 	r3   c                 óô   — | j                              ¦   «         5 }|r|                     d||f¦  «         n|                     d|f¦  «         |                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NaÒ  
                    SELECT
                        user_tables.table_name, rcons.constraint_name
                    FROM
                        user_tables
                    JOIN
                        user_constraints cons
                        ON (user_tables.table_name = cons.table_name
                        AND cons.constraint_type = ANY('P', 'U'))
                    LEFT JOIN
                        user_constraints rcons
                        ON (user_tables.table_name = rcons.table_name
                        AND rcons.constraint_type = 'R')
                    START WITH user_tables.table_name = UPPER(%s)
                    CONNECT BY
                        NOCYCLE PRIOR cons.constraint_name = rcons.r_constraint_name
                    GROUP BY
                        user_tables.table_name, rcons.constraint_name
                    HAVING user_tables.table_name != UPPER(%s)
                    ORDER BY MAX(level) DESC
                    a:  
                    SELECT
                        cons.table_name, cons.constraint_name
                    FROM
                        user_constraints cons
                    WHERE
                        cons.constraint_type = 'R'
                        AND cons.table_name = UPPER(%s)
                    )r^   r´   rÝ   Úfetchall)r0   rß   Ú	recursiver´   s       r1   Ú__foreign_key_constraintsz,DatabaseOperations.__foreign_key_constraints¦  sÝ   € ØŒ_×#Ò#Ñ%Ô%ð '	%¨Øð %Ø—’ðð*   Ð,ñ-ô ð ð ð2 —’ðð  �Mñô ð ð —?’?Ñ$Ô$ðO'	%ð '	%ð '	%ð '	%ñ '	%ô '	%ð '	%ð '	%ð '	%ð '	%ð '	%ð '	%øøøð '	%ð '	%ð '	%ð '	%ð '	%ð '	%s   šAA-Á-A1Á4A1c                 ó>   —  t          d¬¦  «        | j        ¦  «        S )Ni   )Úmaxsize)r   Ú,_DatabaseOperations__foreign_key_constraintsr¯   s    r1   Ú_foreign_key_constraintsz+DatabaseOperations._foreign_key_constraintsÐ  s"   € ð &�y Ð%Ñ%Ô% dÔ&DÑEÔEÐEr3   F)Úreset_sequencesÚallow_cascadec                óð  ‡ ‡‡— |sg S d„ |D ¦   «         Št          ¦   «         }|D ]M}‰                      ||¬¦  «        D ]3\  }}|r‰                     |¦  «         |                     ||f¦  «         Œ4ŒNˆ ˆfd„|D ¦   «         ˆ ˆfd„‰D ¦   «         z   ˆ ˆfd„|D ¦   «         z   }	|rSˆfd„‰ j        j                             ¦   «         D ¦   «         }
|	                     ‰                      ‰|
¦  «        ¦  «         |	S )Nc                 ó6   — h | ]}|                      ¦   «         ’ŒS r«   ©r@   )r¿   Útables     r1   ú	<setcomp>z/DatabaseOperations.sql_flush.<locals>.<setcomp>Ú  s    € Ð>Ð>Ð>¨e˜EŸKšK™MœMÐ>Ð>Ð>r3   )r  c                 óÆ  •— g | ]Ý\  }}‰                      d ¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d‰                      d¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d‰                      d¦  «        ›d‰                      d¦  «        ›d�‘ŒÞS )ÚALTERr½   ÚTABLEÚDISABLEÚ
CONSTRAINTÚKEEPÚINDEXú;©ÚSQL_KEYWORDÚ	SQL_FIELDr/   ©r¿   r  Ú
constraintr0   Ústyles      €€r1   ú
<listcomp>z0DatabaseOperations.sql_flush.<locals>.<listcomp>è  sý   ø€ ð ð ð ñ &�E˜:ð ×%Ò% gÑ.Ô.Ð.Ð.Ø×%Ò% gÑ.Ô.Ð.Ð.Ø—O’O D§O¢O°EÑ$:Ô$:Ñ;Ô;Ð;Ð;Ø×%Ò% iÑ0Ô0Ð0Ð0Ø×%Ò% lÑ3Ô3Ð3Ð3Ø—O’O D§O¢O°JÑ$?Ô$?Ñ@Ô@Ð@Ð@Ø×%Ò% fÑ-Ô-Ð-Ð-Ø×%Ò% gÑ.Ô.Ð.Ð.ð
ðð ð r3   c                 ó¾   •— g | ]Y}‰                      d ¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d�‘ŒZS )ÚTRUNCATEr½   r!  r&  r'  )r¿   r  r0   r,  s     €€r1   r-  z0DatabaseOperations.sql_flush.<locals>.<listcomp>ö  s|   ø€ ð ð ð ð ð	 ×%Ò% jÑ1Ô1Ð1Ð1Ø×%Ò% gÑ.Ô.Ð.Ð.Ø—O’O D§O¢O°EÑ$:Ô$:Ñ;Ô;Ð;Ð;ð	ðð ð r3   c                 ón  •— g | ]±\  }}‰                      d ¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d‰                      d¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d�‘Œ²S )r   r½   r!  ÚENABLEr#  r&  r'  r*  s      €€r1   r-  z0DatabaseOperations.sql_flush.<locals>.<listcomp>ÿ  sÏ   ø€ ð ð ð ñ &�E˜:ð ×%Ò% gÑ.Ô.Ð.Ð.Ø×%Ò% gÑ.Ô.Ð.Ð.Ø—O’O D§O¢O°EÑ$:Ô$:Ñ;Ô;Ð;Ð;Ø×%Ò% hÑ/Ô/Ð/Ð/Ø×%Ò% lÑ3Ô3Ð3Ð3Ø—O’O D§O¢O°JÑ$?Ô$?Ñ@Ô@Ð@Ð@ððð ð r3   c                 óL   •— g | ] }|d                                ¦   «         ‰v ¯|‘Œ!S )r  r  )r¿   ÚsequenceÚtruncated_tabless     €r1   r-  z0DatabaseOperations.sql_flush.<locals>.<listcomp>  s@   ø€ ð ð ð àØ˜GÔ$×*Ò*Ñ,Ô,Ð0@Ð@Ð@ð à@Ð@Ð@r3   )Úsetr  Úaddr^   ÚintrospectionÚsequence_listÚextendÚsequence_reset_by_name_sql)r0   r,  Útablesr  r  Úconstraintsr  Úforeign_tabler+  rE   Ú	sequencesr4  s   ``         @r1   Ú	sql_flushzDatabaseOperations.sql_flushÖ  s°  øøø€ Øð 	ØˆIà>Ð>°vÐ>Ñ>Ô>ÐÝ‘e”eˆð
 ð 	=ð 	=ˆEØ-1×-JÒ-JØ ð .Kñ .ô .ð =ð =Ñ)�˜zð !ð 8Ø$×(Ò(¨Ñ7Ô7Ð7Ø—’ °
Ð ;Ñ<Ô<Ð<Ð<ð=ðð ð ð ð ð *5ðñ ô ðð ð ð ð ð .ðñ ô ñð.ð ð ð ð ð *5ðñ ô ñ/"ð 	ðJ ð 	Jðð ð ð à $¤Ô =× KÒ KÑ MÔ Mðñ ô ˆIð �JŠJ�t×6Ò6°u¸iÑHÔHÑIÔIÐIØˆ
r3   c           	      óX  — g }|D ]¤}|                       |d         ¦  «        }|                      |d         ¦  «        }|                      |d         pd¦  «        }| j        |||t          |¦  «        t          |¦  «        | j        j        j        dœz  }|                     |¦  «         Œ¥|S )Nr  r  Úid©Úno_autofield_sequence_namer  r  rß   Úcolumn_nameÚsuffix)Ú_get_no_autofield_sequence_namer/   Ú_sequence_reset_sqlr
   r^   ÚfeaturesÚbare_select_suffixr…   )	r0   r,  r>  rE   Úsequence_inforC  r  r  Úquerys	            r1   r:  z-DatabaseOperations.sequence_reset_by_name_sql  sÄ   € ØˆØ&ð 	ð 	ˆMØ)-×)MÒ)MØ˜gÔ&ñ*ô *Ð&ð —O’O M°'Ô$:Ñ;Ô;ˆEØ—_’_ ]°8Ô%<Ð%DÀÑEÔEˆFØÔ,Ø.HØØ Ý*¨5Ñ1Ô1Ý+¨FÑ3Ô3Øœ/Ô2ÔEð0ð 0ñ ˆEð �JŠJ�uÑÔÐÐØˆ
r3   c                 ó®  — g }| j         }|D ]È}|j        j        D ]¹}t          |t          ¦  «        r¢|                      |j        j        ¦  «        }|                      |j        j        ¦  «        }|                      |j        ¦  «        }	| 	                    ||||	t          |¦  «        t          |	¦  «        | j        j        j        dœz  ¦  «          nŒºŒÉ|S )NrB  )rG  r	  Úlocal_fieldsr•   r   rF  r
  r/   r  r…   r
   r^   rH  rI  )
r0   r,  Ú
model_listÚoutputrK  r  ÚfrC  r  r  s
             r1   Úsequence_reset_sqlz%DatabaseOperations.sequence_reset_sql*  só   € ØˆØÔ(ˆØð 	ð 	ˆEØ”[Ô-ð ð �Ý˜a¥Ñ+Ô+ð Ø15×1UÒ1UØœÔ,ñ2ô 2Ð.ð !ŸOšO¨E¬KÔ,@ÑAÔA�EØ!Ÿ_š_¨Q¬XÑ6Ô6�FØ—M’MØà:TØ%*Ø&,Ý*6°uÑ*=Ô*=Ý+7¸Ñ+?Ô+?Ø&*¤oÔ&>Ô&Qðð ññ
ô 
ð 
ð �Eð'øð( ˆr3   c                 ó   — dS r©   r«   r¯   s    r1   Ústart_transaction_sqlz(DatabaseOperations.start_transaction_sqlE  rð   r3   c                 óf   — |rd|                       |¦  «        z  S d|                       |¦  «        z  S )NzUSING INDEX TABLESPACE %szTABLESPACE %sr.   )r0   Ú
tablespaceÚinlines      r1   Útablespace_sqlz!DatabaseOperations.tablespace_sqlH  s9   € Øð 	AØ.°·²ÀÑ1LÔ1LÑLÐLà" T§_¢_°ZÑ%@Ô%@Ñ@Ð@r3   c                 ó   — |S )zô
        Transform a date value to an object compatible with what is expected
        by the backend driver for date columns.
        The default implementation transforms the date to text, but that is not
        necessary for Oracle.
        r«   rø   s     r1   Úadapt_datefield_valuez(DatabaseOperations.adapt_datefield_valueN  s	   € ð ˆr3   c                 óÐ   — |€dS t          j        |¦  «        r;t          j        r t          j        || j        j         ¦  «        }nt          d¦  «        ‚t          j        |¦  «        S )aE  
        Transform a datetime value to an object compatible with what is expected
        by the backend driver for datetime columns.

        If naive datetime is passed assumes that is in UTC. Normally Django
        models.DateTimeField makes sure that if USE_TZ is True passed datetime
        is timezone aware.
        NzNOracle backend does not support timezone-aware datetimes when USE_TZ is False.)	r   Úis_awarer   r[   Ú
make_naiver^   rC   r   Úfrom_datetimerø   s     r1   Úadapt_datetimefield_valuez,DatabaseOperations.adapt_datetimefield_valueW  sp   € ð ˆ=Ø�4õ Ô˜UÑ#Ô#ð 	ÝŒð Ý Ô+¨E°4´?Ô3KÑLÔL��å ð'ñô ð õ
 Ô,¨UÑ3Ô3Ð3r3   c           	      ó  — |€d S t          |t          ¦  «        r t          j                             |d¦  «        S t	          j        |¦  «        rt          d¦  «        ‚t          ddd|j        |j	        |j
        |j        ¦  «        S )Nz%H:%M:%Sz5Oracle backend does not support timezone-aware times.il  r   )r•   Ústrr    Ústrptimer   r[  rC   r   rm   ro   rj   Úmicrosecondrø   s     r1   Úadapt_timefield_valuez(DatabaseOperations.adapt_timefield_valuep  s‡   € Øˆ=Ø�4å�e�SÑ!Ô!ð 	AÝÔ$×-Ò-¨e°ZÑ@Ô@Ð@õ Ô˜UÑ#Ô#ð 	VÝÐTÑUÔUÐUåØ�!�Q˜œ
 E¤L°%´,ÀÔ@Qñ
ô 
ð 	
r3   c                 ó„  •— |\  }}|dk    rdd                      |¦  «        z  S |dk    rdd                      |¦  «        z  S |dk    rd||dœz  S |d	k    rd
||dœz  S |dk    rd||dœz  S |dk    rdd                      |¦  «        z  S |dk    rt          d¦  «        ‚t          ¦   «                              ||¦  «        S )Nrý   zMOD(%s)ú,ú&z
BITAND(%s)ú|z"BITAND(-%(lhs)s-1,%(rhs)s)+%(lhs)s)ÚlhsÚrhsz<<z(%(lhs)s * POWER(2, %(rhs)s))z>>z"FLOOR(%(lhs)s / POWER(2, %(rhs)s))ú^z	POWER(%s)ú#z'Bitwise XOR is not supported in Oracle.)rÂ   r   r�   Úcombine_expression)r0   Ú	connectorÚsub_expressionsrh  ri  r“   s        €r1   rl  z%DatabaseOperations.combine_expression  s   ø€ Ø"‰ˆˆSØ˜ÒÐØ˜sŸxšx¨Ñ8Ô8Ñ8Ð8Ø˜#ÒÐØ #§(¢(¨?Ñ";Ô";Ñ;Ð;Ø˜#ÒÐØ7À#ÈcÐ:RÐ:RÑRÐRØ˜$ÒÐØ2¸SÈÐ5MÐ5MÑMÐMØ˜$ÒÐØ7À#ÈcÐ:RÐ:RÑRÐRØ˜#ÒÐØ §¢¨/Ñ!:Ô!:Ñ:Ð:Ø˜#ÒÐÝ#Ð$MÑNÔNÐNÝ‰wŒw×)Ò)¨)°_ÑEÔEÐEr3   c                 ó”   — |                       ¦   «         dz
  }dt          t          |¦  «        |¦  «                             ¦   «         z  S )z‹
        Manually created sequence name to keep backward compatibility for
        AutoFields that aren't Oracle identity columns.
        é   z%s_SQ)rï   r   r
   r@   )r0   r  Úname_lengths      r1   rF  z2DatabaseOperations._get_no_autofield_sequence_name‘  sC   € ð
 ×*Ò*Ñ,Ô,¨qÑ0ˆØ�¥|°EÑ':Ô':¸KÑHÔH×NÒNÑPÔPÑPÐPr3   c                 ó˜   — |                      d||g¦  «         |                     ¦   «         }|€|                      |¦  «        n|d         S )Nzš
            SELECT sequence_name
            FROM user_tab_identity_cols
            WHERE table_name = UPPER(%s)
            AND column_name = UPPER(%s)r   )rÝ   rÞ   rF  )r0   r´   r  rà   Úrows        r1   rÜ   z%DatabaseOperations._get_sequence_name™  sZ   € Ø�Šð+ð
 �GÐñ	
ô 	
ð 	
ð �oŠoÑÔˆØ>A¸kˆt×3Ò3°EÑ:Ô:Ð:ÈsÐSTÌvÐUr3   c                 óf  — d„ |D ¦   «         }g }|D ]‰}g }t          |¦  «        D ]6\  }}||         r||         |z  }|s|›d|›�}|                     |¦  «         Œ7| j        j        j        }	|                     d|	› �d                     |¦  «        z  ¦  «         ŒŠdd                     |¦  «        z  S )Nc           	      ó”   — g | ]E}|¯t           j                             t          |d |¦  «                             ¦   «         d¦  «        ‘ŒFS )Útarget_fieldré   )r   ÚtypesÚgetÚgetattrr„   ©r¿   r  s     r1   r-  z6DatabaseOperations.bulk_insert_sql.<locals>.<listcomp>¦  s`   € ð 
ð 
ð 
ð Øð
ÝÔ"×&Ò&Ý˜˜~¨uÑ5Ô5×GÒGÑIÔIÈ4ñô ð
ð 
ð 
r3   z col_z	SELECT %sr  zSELECT * FROM (%s)z UNION ALL )rÔ   r…   r^   rH  rI  rÂ   )
r0   r  Úplaceholder_rowsÚfield_placeholdersrK  rs  ÚselectrÉ   ÚplaceholderrE  s
             r1   Úbulk_insert_sqlz"DatabaseOperations.bulk_insert_sql¥  sü   € ð
ð 
ð  ð	
ñ 
ô 
Ðð ˆØ#ð 	Cð 	CˆCØˆFÝ"+¨C¡.¤.ð 	+ð 	+‘��;à˜!”9ð FØ"4°QÔ"7¸+Ñ"E�Kð ð AØ1<°°¸a¸aÐ"@�KØ—’˜kÑ*Ô*Ð*Ð*Ø”_Ô-Ô@ˆFØ�LŠLÐ- VÐ-Ð-°·	²	¸&Ñ0AÔ0AÑAÑBÔBÐBÐBð $ m×&8Ò&8¸Ñ&?Ô&?Ñ?Ð?r3   c                 óŽ   •— |dk    r|\  }}|\  }}g |¢|¢R }d|›d|›d�|fS t          ¦   «                              |||¦  «        S )Nr~   zNUMTODSINTERVAL(TO_NUMBER(z - z	), 'DAY'))r�   Úsubtract_temporals)
r0   r’   rh  ri  Úlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsrF   r“   s
            €r1   r�  z%DatabaseOperations.subtract_temporalsÁ  sq   ø€ Ø˜KÒ'Ð'Ø"%ÑˆG�ZØ"%ÑˆG�ZØ/�zÐ/ JÐ/Ð/ˆFˆFà@GÀÀÈÈÈÐQØðð õ ‰wŒw×)Ò)¨-¸¸cÑBÔBÐBr3   c                 ó¼   — t          t          j        d„ |D ¦   «         ¦  «        ¦  «        }|r!| j        j        j        t          |¦  «        z  S t          |¦  «        S )z5Oracle restricts the number of parameters in a query.c              3   óT   K  — | ]#}t          |t          ¦  «        r|j        n|gV — Œ$d S rV   )r•   r   r  rz  s     r1   rÀ   z5DatabaseOperations.bulk_batch_size.<locals>.<genexpr>Ï  sN   è è € ð  ð  àõ !+¨5Õ2EÑ FÔ FÐS�”�ÈUÈGð ð  ð  ð  ð  ð  r3   )rÓ   r   Úfrom_iterabler^   rH  Úmax_query_paramsrÙ   )r0   r  Úobjss      r1   Úbulk_batch_sizez"DatabaseOperations.bulk_batch_sizeÌ  sm   € åÝÔð  ð  à#ð ñ  ô  ñ ô ñ
ô 
ˆð ð 	LØ”?Ô+Ô<ÅÀFÁÄÑKÐKÝ�4‰yŒyÐr3   c                 óö   — t          |t          t          t          f¦  «        rdS t          |t          ¦  «        r!|j        r|                      |j        ¦  «        S t          |t          ¦  «        r	|j        rdS dS )z}
        Oracle supports only EXISTS(...) or filters in the WHERE clause, others
        must be compared with True.
        TF)	r•   r   r   r   r   ÚconditionalÚ0conditional_expression_supported_in_where_clauser�   r   )r0   r�   s     r1   rŽ  zCDatabaseOperations.conditional_expression_supported_in_where_clauseØ  s…   € õ
 �j¥6­6µ9Ð"=Ñ>Ô>ð 	Ø�4Ý�jÕ"3Ñ4Ô4ð 	¸Ô9Oð 	Ø×HÒHØÔ%ñô ð õ �j¥&Ñ)Ô)ð 	¨jÔ.Dð 	Ø�4Øˆur3   rV   )F)DÚ__name__Ú
__module__Ú__qualname__Úinteger_field_rangesr   Úset_operatorsrG  Ú"cast_char_field_without_max_lengthÚcast_data_typesr2   r   rA   rI   rT   r\   rY   rP   rd   rg   rk   rt   rv   rx   r‚   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   Ústaticmethodr�   rŽ   r°   r¸   rº   rÆ   rÚ   râ   rê   rì   rï   ró   rö   rù   r/   r  r  r  r   r  r?  r:  rQ  rS  rW  rY  r^  rc  rl  rF  rÜ   r  r�  r‹  rŽ  Ú__classcell__)r“   s   @r1   r   r      sP  ø€ € € € € ð
 9Ø3ØFØ#;Ø%5Ø 0Ø)Ø0ØCð
ð 
Ðð TÐ-Ô;ÐS¸\È7ÐSÐS€MðÐð2 *;Ð&à!Ø$Ø%Ø7ð	ð €Oð
ð 
ð 
ð *Ð)¨*Ñ5Ô5Ðð5ð 5ð 5ð0;ð ;ð ;ð ;ð$ "Ð! .Ñ1Ô1€Jð7ð 7ð 7ðð ð ð$'ð 'ð 'ð
ð 
ð 
ð?ð ?ð ?ð;ð ;ð ;ð*?ð ?ð ?ð;ð ;ð ;ð ;ðð ð ð ð ð:ð ð ð
ð ð ð
ð ð ðð ð ð
ð ð ð
ð ð ð
ð ð ð
 ð.ð .ñ „\ð.ð ð/ð /ñ „\ð/ð0ð 0ð 0ðð ð ð ð ð ð	
ð 	
ð 	
ðð ð ð($ð $ð $ð
ð ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð
ð ð ð:ð :ð :ðð ð ð&(%ð (%ð (%ðT ðFð Fñ „_ðFð
 ;@Èuð ?ð ?ð ?ð ?ð ?ðBð ð ð&ð ð ð6ð ð ðAð Að Að Aðð ð ð4ð 4ð 4ð2
ð 
ð 
ðFð Fð Fð Fð Fð$Qð Qð Qð
Vð 
Vð 
Vð@ð @ð @ð8	Cð 	Cð 	Cð 	Cð 	Cð
ð 
ð 
ðð ð ð ð ð ð r3   r   )+r    r¦   Ú	functoolsr   Ú	itertoolsr   Údjango.confr   Ú	django.dbr   r   Ú"django.db.backends.base.operationsr   Údjango.db.backends.utilsr	   r
   r   Údjango.db.modelsr   r   r   r   r   Údjango.db.models.expressionsr   Údjango.db.models.sql.wherer   Údjango.utilsr   Údjango.utils.encodingr   r   Údjango.utils.functionalr   Údjango.utils.regex_helperr   Úbaser   Úutilsr   r   r   r   r«   r3   r1   ú<module>r§     s¾  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø EÐ EÐ EÐ EÐ EÐ EØ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tðð ð ð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø !Ð !Ð !Ð !Ð !Ð !Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6à Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðIð Ið Ið Ið IÐ/ñ Iô Ið Ið Ið Ir3   