§
    ¤”jkR  ã                   ó  — d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZ d dlmZmZmZ  G d„ de¦  «        Z G d	„ d
e¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Zde_        d„ Zde_        d„ Zd„ Z G d„ d¦  «        ZdS )é    )ÚCounterÚdefaultdict)ÚpartialÚreduce)Úchain)Ú
attrgetterÚor_)ÚIntegrityErrorÚconnectionsÚmodelsÚtransaction)Úquery_utilsÚsignalsÚsqlc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚProtectedErrorc                 óZ   •— || _         t          ¦   «                              ||¦  «         d S ©N)Úprotected_objectsÚsuperÚ__init__)ÚselfÚmsgr   Ú	__class__s      €úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/db/models/deletion.pyr   zProtectedError.__init__   s,   ø€ Ø!2ˆÔÝ‰Œ×Ò˜Ð/Ñ0Ô0Ð0Ð0Ð0ó    ©Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__©r   s   @r   r   r   
   s8   ø€ € € € € ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚRestrictedErrorc                 óZ   •— || _         t          ¦   «                              ||¦  «         d S r   )Úrestricted_objectsr   r   )r   r   r&   r   s      €r   r   zRestrictedError.__init__   s,   ø€ Ø"4ˆÔÝ‰Œ×Ò˜Ð0Ñ1Ô1Ð1Ð1Ð1r   r   r"   s   @r   r$   r$      s8   ø€ € € € € ð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r   r$   c                 óÔ   — |                       ||j        j        |j        |j        d¬¦  «         |j        r0t
          |         j        j        s|                      |d |¦  «         d S d S d S )NF)ÚsourceÚsource_attrÚnullableÚfail_on_restricted)	ÚcollectÚremote_fieldÚmodelÚnameÚnullr   ÚfeaturesÚcan_defer_constraint_checksÚadd_field_update©Ú	collectorÚfieldÚsub_objsÚusings       r   ÚCASCADEr9      sˆ   € Ø×ÒØØÔ!Ô'Ø”JØ”Ø ð ñ ô ð ð „zð :�+ eÔ,Ô5ÔQð :Ø×"Ò" 5¨$°Ñ9Ô9Ð9Ð9Ð9ð:ð :ð :ð :r   c           	      ó~   — t          d|j        j        j        ›d|d         j        j        ›d|j        ›d�|¦  «        ‚)Nz'Cannot delete some instances of model 'z@' because they are referenced through a protected foreign key: 'r   ú.ú')r   r-   r.   r   r   r/   r4   s       r   ÚPROTECTr=   "   sP   € Ý
ˆ.ð ÔÔ$Ô-Ð-Ð-Ø�QŒKÔ!Ô*Ð*Ð*ØŒJˆJˆJð	
ð 	ñ	ô 	ð 	r   c                 ó|   — |                       ||¦  «         |                      |j        j        |j        ¦  «         d S r   )Úadd_restricted_objectsÚadd_dependencyr-   r.   r4   s       r   ÚRESTRICTrA   /   s<   € Ø×$Ò$ U¨HÑ5Ô5Ð5Ø×Ò˜UÔ/Ô5°u´{ÑCÔCÐCÐCÐCr   c                 ó^   ‡ — t          ‰ ¦  «        rˆ fd„}nˆ fd„}ˆ fd„|_        d|_        |S )Nc                 óF   •— |                       | ‰¦   «         |¦  «         d S r   ©r3   ©r5   r6   r7   r8   Úvalues       €r   Úset_on_deletezSET.<locals>.set_on_delete7   s'   ø€ Ø×&Ò& u¨e¨e©g¬g°xÑ@Ô@Ð@Ð@Ð@r   c                 ó6   •— |                       |‰|¦  «         d S r   rD   rE   s       €r   rG   zSET.<locals>.set_on_delete<   s!   ø€ Ø×&Ò& u¨e°XÑ>Ô>Ð>Ð>Ð>r   c                  ó   •— d‰ fi fS )Nzdjango.db.models.SET© )rF   s   €r   ú<lambda>zSET.<locals>.<lambda>?   s   ø€ Ð)?À%ÀÈ2Ð(N€ r   T)ÚcallableÚdeconstructÚlazy_sub_objs)rF   rG   s   ` r   ÚSETrO   4   sp   ø€ Ý��„ð ?ð	Að 	Að 	Að 	Að 	Að 	Að
	?ð 	?ð 	?ð 	?ð 	?ð !OÐ NÐ NÐ N€MÔØ"&€MÔØÐr   c                 ó4   — |                       |d |¦  «         d S r   rD   r4   s       r   ÚSET_NULLrQ   D   s    € Ø×Ò˜u d¨HÑ5Ô5Ð5Ð5Ð5r   Tc                 óX   — |                       ||                     ¦   «         |¦  «         d S r   )r3   Úget_defaultr4   s       r   ÚSET_DEFAULTrT   K   s,   € Ø×Ò˜u e×&7Ò&7Ñ&9Ô&9¸8ÑDÔDÐDÐDÐDr   c                 ó   — d S r   rJ   r4   s       r   Ú
DO_NOTHINGrV   R   s   € Ø€Dr   c                 óB   — d„ |                       d¬¦  «        D ¦   «         S )Nc              3   óR   K  — | ]"}|j         ¯	|j        °|j        s|j        ¯|V — Œ#d S r   )Úauto_createdÚconcreteÚ
one_to_oneÚone_to_many)Ú.0Úfs     r   ú	<genexpr>z4get_candidate_relations_to_delete.<locals>.<genexpr>Y   sd   è è € ð ð àØŒ>ðð #$¤*ðð 34´,ðð CDÄ-ðØ	ðð ð ð ð ð r   T)Úinclude_hidden)Ú
get_fields)Úoptss    r   Ú!get_candidate_relations_to_deleterc   V   s1   € ðð à—’°�Ñ5Ô5ðñ ô ð r   c                   ó€   — e Zd Zdd„Zdd„Zdd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
dd„Zd„ Z	 	 	 	 	 	 	 dd„Zd„ Zd„ Zd„ Zd„ ZdS )Ú	CollectorNc                 ó  — || _         || _        t          t          ¦  «        | _        t          t
          ¦  «        | _        t          t          t          t          ¦  «        ¦  «        | _        g | _	        t          t          ¦  «        | _
        d S r   )r8   Úoriginr   ÚsetÚdataÚlistÚfield_updatesr   r&   Úfast_deletesÚdependencies)r   r8   rg   s      r   r   zCollector.__init__a   sk   € ØˆŒ
àˆŒå¥Ñ$Ô$ˆŒ	å(­Ñ.Ô.ˆÔå"-­gµkÅ3Ñ.GÔ.GÑ"HÔ"HˆÔð ˆÔõ (­Ñ,Ô,ˆÔÐÐr   Fc                 óä   — |sg S g }|d         j         }| j        |         }|D ]}||vr|                     |¦  «         Œ|                     |¦  «         |�|s|                      |||¬¦  «         |S )a7  
        Add 'objs' to the collection of objects to be deleted.  If the call is
        the result of a cascade, 'source' should be the model that caused it,
        and 'nullable' should be set to True if the relation can be null.

        Return a list of all objects that were not already collected.
        r   N©Úreverse_dependency)r   ri   ÚappendÚupdater@   )	r   Úobjsr(   r*   rp   Únew_objsr.   Ú	instancesÚobjs	            r   ÚaddzCollector.addv   s�   € ð ð 	ØˆIØˆØ�Q”Ô!ˆØ”I˜eÔ$ˆ	Øð 	%ð 	%ˆCØ˜)Ð#Ð#Ø—’ Ñ$Ô$Ð$øØ×Ò˜Ñ"Ô"Ð"ð Ð hÐØ×Ò ¨ÐBTÐÑUÔUÐUØˆr   c                 óÞ   — |r||}}| j         |j        j                                      |j        j        ¦  «         | j                             || j                             ¦   «         ¦  «         d S r   )rm   Ú_metaÚconcrete_modelrw   ri   Ú
setdefaultÚdefault_factory)r   r.   Ú
dependencyrp   s       r   r@   zCollector.add_dependencyŽ   so   € Øð 	2Ø *¨E�:ˆEØÔ˜%œ+Ô4Ô5×9Ò9ØÔÔ+ñ	
ô 	
ð 	
ð 	Œ	×Ò˜Z¨¬×)BÒ)BÑ)DÔ)DÑEÔEÐEÐEÐEr   c                 óJ   — | j         ||f                              |¦  «         dS )z‰
        Schedule a field update. 'objs' must be a homogeneous iterable
        collection of model instances (e.g. a QuerySet).
        N)rk   rq   )r   r6   rF   rs   s       r   r3   zCollector.add_field_update–   s*   € ð
 	Ô˜5 %˜<Ô(×/Ò/°Ñ5Ô5Ð5Ð5Ð5r   c                 ót   — |r5|d         j         }| j        |         |                              |¦  «         d S d S )Nr   )r   r&   rr   )r   r6   rs   r.   s       r   r?   z Collector.add_restricted_objects�   sG   € Øð 	?Ø˜”GÔ%ˆEØÔ# EÔ*¨5Ô1×8Ò8¸Ñ>Ô>Ð>Ð>Ð>ð	?ð 	?r   c                 ó„   ‡— || j         v r5ˆfd„| j         |                              ¦   «         D ¦   «         | j         |<   d S d S )Nc                 ó"   •— i | ]\  }}||‰z
  “ŒS rJ   rJ   )r]   r6   Úitemsrs   s      €r   ú
<dictcomp>z?Collector.clear_restricted_objects_from_set.<locals>.<dictcomp>¤   s3   ø€ ð .ð .ð .á �E˜5ð �u˜t‘|ð.ð .ð .r   )r&   r‚   )r   r.   rs   s     `r   Ú!clear_restricted_objects_from_setz+Collector.clear_restricted_objects_from_set¢   sc   ø€ Ø�DÔ+Ð+Ð+ð.ð .ð .ð .à$(Ô$;¸EÔ$B×$HÒ$HÑ$JÔ$Jð.ñ .ô .ˆDÔ# EÑ*Ð*Ð*ð ,Ð+r   c                 óÜ   — || j         v rbt          |                     d„ | j         |                              ¦   «         D ¦   «         ¬¦  «        ¦  «        }|                      ||¦  «         d S d S )Nc                 ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS rJ   ©Úpk)r]   rs   rv   s      r   ú
<listcomp>zDCollector.clear_restricted_objects_from_queryset.<locals>.<listcomp>­   sA   € ð ð ð à Ø#'ðð ð  ð œðð ð ð r   )Úpk__in)r&   rh   ÚfilterÚvaluesr„   )r   r.   Úqsrs   s       r   Ú&clear_restricted_objects_from_querysetz0Collector.clear_restricted_objects_from_queryset©   s‹   € Ø�DÔ+Ð+Ð+ÝØ—	’	ðð à$(Ô$;¸EÔ$B×$IÒ$IÑ$KÔ$Kðñ ô ð ñ ô ñô ˆDð ×2Ò2°5¸$Ñ?Ô?Ð?Ð?Ð?ð ,Ð+r   c                 ó~   — t           j                             |¦  «        pt           j                             |¦  «        S r   )r   Ú
pre_deleteÚhas_listenersÚpost_delete)r   r.   s     r   Ú_has_signal_listenerszCollector._has_signal_listeners¶   s9   € ÝÔ!×/Ò/Øñ
ô 
ð 6åÔ ×.Ò.¨uÑ5Ô5ð	6r   c                 óþ  ‡— ‰r‰j         j        t          urdS t          |d¦  «        r|j        j        }n*t          |d¦  «        rt          |d¦  «        r|j        }ndS |                      |¦  «        rdS |j        }t          ˆfd„|j        j        j	         
                    ¦   «         D ¦   «         ¦  «        oDt          d„ t          |¦  «        D ¦   «         ¦  «        ot          d„ |j        D ¦   «         ¦  «         S )aÏ  
        Determine if the objects in the given queryset-like or single object
        can be fast-deleted. This can be done if there are no cascades, no
        parents and no signal listeners for the object class.

        The 'from_field' tells where we are coming from - we need this to
        determine if the objects are in fact to be deleted. Allow also
        skipping parent -> child -> parent chain preventing fast delete of
        the child.
        Fry   r.   Ú_raw_deletec              3   ó$   •K  — | ]
}|‰k    V — Œd S r   rJ   )r]   ÚlinkÚ
from_fields     €r   r_   z,Collector.can_fast_delete.<locals>.<genexpr>Ô   s<   øè è € ð ð àð ˜
Ò"ðð ð ð ð ð r   c              3   óF   K  — | ]}|j         j        j        t          u V — Œd S r   )r6   r-   Ú	on_deleterV   )r]   Úrelateds     r   r_   z,Collector.can_fast_delete.<locals>.<genexpr>Ú   sC   è è € ð ð àð ”Ô*Ô4½
ÐBðð ð ð ð ð r   c              3   ó6   K  — | ]}t          |d ¦  «        V — ŒdS )Úbulk_related_objectsN)Úhasattr©r]   r6   s     r   r_   z,Collector.can_fast_delete.<locals>.<genexpr>à   sA   è è € ð ð àõ ˜EÐ#9Ñ:Ô:ðð ð ð ð ð r   )r-   rš   r9   rž   ry   r.   r“   Úallrz   ÚparentsrŒ   rc   ÚanyÚprivate_fields)r   rs   r˜   r.   rb   s     `  r   Úcan_fast_deletezCollector.can_fast_delete»   sR  ø€ ð ð 	˜*Ô1Ô;Å7ÐJÐJØ�5Ý�4˜Ñ!Ô!ð 	Ø”JÔ$ˆEˆEÝ�T˜7Ñ#Ô#ð 	­°°mÑ(DÔ(Dð 	Ø”JˆEˆEà�5Ø×%Ò% eÑ,Ô,ð 	Ø�5ð Œ{ˆåð ð ð ð à Ô/Ô5Ô=×DÒDÑFÔFðñ ô ñ ô ð õ ð ð å@ÀÑFÔFðñ ô ñ ô ðõ ð ð à!%Ô!4ðñ ô ñ ô ð ð	
r   c                 ó  ‡‡— d„ |D ¦   «         }t          t          | j                 j                             |‰¦  «        d¦  «        Št          ‰¦  «        ‰k    r+ˆˆfd„t          dt          ‰¦  «        ‰¦  «        D ¦   «         S ‰gS )zT
        Return the objs in suitably sized batches for the used connection.
        c                 ó   — g | ]	}|j         ‘Œ
S rJ   ©r/   rŸ   s     r   r‰   z-Collector.get_del_batches.<locals>.<listcomp>ë   s   € Ð6Ð6Ð6 e�u”zÐ6Ð6Ð6r   é   c                 ó*   •— g | ]}‰||‰z   …         ‘ŒS rJ   rJ   )r]   ÚiÚconn_batch_sizers   s     €€r   r‰   z-Collector.get_del_batches.<locals>.<listcomp>ð   s8   ø€ ð ð ð àð �Q˜˜_Ñ,Ð,Ô-ðð ð r   r   )Úmaxr   r8   ÚopsÚbulk_batch_sizeÚlenÚrange)r   rs   ÚfieldsÚfield_namesr«   s    `  @r   Úget_del_batcheszCollector.get_del_batchesç   s¥   øø€ ð 7Ð6¨vÐ6Ñ6Ô6ˆÝÝ˜œ
Ô#Ô'×7Ò7¸ÀTÑJÔJÈAñ
ô 
ˆõ ˆt‰9Œ9�Ò&Ð&ðð ð ð ð å˜q¥# d¡)¤)¨_Ñ=Ô=ðñ ô ð ð
 �6ˆMr   Tc	           
      ó&
  ‡— |                       |¦  «        r| j                             |¦  «         dS |                      ||||¬¦  «        }	|	sdS |	d         j        }
|sb|
j        j        }|j        j                             ¦   «         D ]7Š‰r3ˆfd„|	D ¦   «         }|  	                    ||
‰j
        j        ddd¬¦  «         Œ8|sdS |r&t          |
j                             ¦   «         ¦  «        }t          t          ¦  «        }t          t          ¦  «        }t!          |
j        ¦  «        D �]}}|r
|j        |v rŒ|j        }|j
        j        }|t(          k    rŒ.|j        }|                       ||¬¦  «        r||                              |¦  «         Œh|                      |	|g¦  «        }|D ]û}|                      ||g|¦  «        }|j        j        si|                      |¦  «        sTt          t7          j        d	„ t!          |j        ¦  «        D ¦   «         ¦  «        ¦  «        } |j        t=          |¦  «        Ž }t?          |d
d¦  «        s|rY	  || ||| j         ¦  «         Œ·# tB          $ r7}d|j        j"        ›d|j#        ›d�}||xx         |j$        z  cc<   Y d}~Œód}~ww xY wŒü�Œ|r`tC          d|
j"        ›dd %                    |¦  «        ›d�t          t7          j        |                     ¦   «         ¦  «        ¦  «        ¦  «        ‚| &                    ¦   «         D ]Q\  }}|                      |	|¦  «        }|D ]3}|                      |||¦  «        }| j                             |¦  «         Œ4ŒR|
j        j'        D ]F}tQ          |d¦  «        r4| )                    |	| j         ¦  «        }|  	                    ||
dd¬¦  «         ŒG|�rG| j*         &                    ¦   «         D ]\  }}|  +                    ||¦  «         Œ| j        D ]}|  ,                    |j        |¦  «         Œ| j-                             ¦   «         rÖt          t          ¦  «        }| j-         &                    ¦   «         D ]D\  }}| &                    ¦   «         D ]*\  }}|r#d|j"        ›d|j#        ›d�}||xx         |z  cc<   Œ+ŒE|rdt]          d|
j"        ›dd %                    |¦  «        ›d�t          t7          j        |                     ¦   «         ¦  «        ¦  «        ¦  «        ‚dS dS dS )a¦  
        Add 'objs' to the collection of objects to be deleted as well as all
        parent instances.  'objs' must be a homogeneous iterable collection of
        model instances (e.g. a QuerySet).  If 'collect_related' is True,
        related objects will be handled by their respective on_delete handler.

        If the call is the result of a cascade, 'source' should be the model
        that caused it and 'nullable' should be set to True, if the relation
        can be null.

        If 'reverse_dependency' is True, 'source' will be deleted before the
        current model, rather than after. (Needed for cascading to parent
        models, the one case in which the cascade follows the forwards
        direction of an FK rather than the reverse direction.)

        If 'keep_parents' is True, data of parent model's will be not deleted.

        If 'fail_on_restricted' is False, error won't be raised even if it's
        prohibited to delete such objects due to RESTRICT, that defers
        restricted object checking in recursive calls where the top-level call
        may need to collect more objects to determine whether restricted ones
        can be deleted.
        Nro   r   c                 ó:   •— g | ]}t          |‰j        ¦  «        ‘ŒS rJ   )Úgetattrr/   )r]   rv   Úptrs     €r   r‰   z%Collector.collect.<locals>.<listcomp>*  s%   ø€ Ð"NÐ"NÐ"N¸c¥7¨3°´Ñ#9Ô#9Ð"NÐ"NÐ"Nr   FT)r(   r)   Úcollect_relatedrp   r+   )r˜   c              3   óB   K  — | ]}d „ |j         j        D ¦   «         V — ŒdS )c              3   ó$   K  — | ]}|j         V — Œd S r   )Úattname)r]   Úrfs     r   r_   z.Collector.collect.<locals>.<genexpr>.<genexpr>U  s$   è è € ÐSÐS¨B˜RœZÐSÐSÐSÐSÐSÐSr   N)r6   Úforeign_related_fields)r]   Úrels     r   r_   z$Collector.collect.<locals>.<genexpr>T  sJ   è è € ð ,ð ,à #ð TÐS°#´)Ô2RÐSÑSÔSð,ð ,ð ,ð ,ð ,ð ,r   rN   r<   r;   z&Cannot delete some instances of model z= because they are referenced through protected foreign keys: z, r�   )r(   r*   r+   z> because they are referenced through restricted foreign keys: )/r¤   rl   rq   rw   r   ry   rz   r¡   rŒ   r,   r-   Úrelated_namerh   Úget_parent_listr   rj   rc   r.   r6   rš   rV   Úrelated_modelr³   Úrelated_objectsÚqueryÚselect_relatedr“   r   Úfrom_iterableÚonlyÚtupler¶   r8   r   r   r/   r   Újoinr‚   r£   rž   r�   ri   r„   rŽ   r&   r$   ) r   rs   r(   r*   r¸   r)   rp   Úkeep_parentsr+   rt   r.   rz   Úparent_objsr¡   Úmodel_fast_deletesr   r›   r6   rš   rÁ   ÚbatchesÚbatchr7   Úreferenced_fieldsÚerrorÚkeyÚrelated_fieldsru   r�   r&   r±   r·   s                                   @r   r,   zCollector.collect÷   s\  ø€ ðD ×Ò Ñ%Ô%ð 	ØÔ×$Ò$ TÑ*Ô*Ð*ØˆFØ—8’8Ø�&˜(Ð7Ið ñ 
ô 
ˆð ð 	ØˆFà˜”Ô%ˆàð 	ð #œ[Ô7ˆNØ%Ô+Ô3×:Ò:Ñ<Ô<ð 
ð 
�Øð 	Ø"NÐ"NÐ"NÐ"NÀXÐ"NÑ"NÔ"N�KØ—L’LØ#Ø$Ø$'Ô$4Ô$AØ(-Ø+/Ø+0ð !ñ ô ð øð ð 	ØˆFàð 	9Ý˜%œ+×5Ò5Ñ7Ô7Ñ8Ô8ˆGÝ(­Ñ.Ô.ÐÝ'­Ñ-Ô-ÐÝ8¸¼ÑEÔEð '	Jñ '	JˆGàð  ¤°Ð 8Ð 8ØØ”MˆEØÔ*Ô4ˆIØ�JÒ&Ð&ØØ#Ô1ˆMØ×#Ò# M¸eÐ#ÑDÔDð Ø" =Ô1×8Ò8¸Ñ?Ô?Ð?ØØ×*Ò*¨8°e°WÑ=Ô=ˆGØ ð Jð J�Ø×/Ò/°À¸wÈÑNÔN�ð ”NÔ1ðHà×1Ò1°-Ñ@Ô@ðHõ ),ÝÔ+ð ,ð ,å'HØ -Ô 3ñ(ô (ð,ñ ,ô ,ñ ô ñ)ô )Ð%ð  -˜xœ}­eÐ4EÑ.FÔ.FÐG�HÝ˜9 o°uÑ=Ô=ð JÀð JðJØ!˜	 $¨¨x¸¼ÑDÔDÐDÐDøÝ)ð Jð Jð Jð JØ+0¬;Ô+?Ð+?Ð+?ÀÄÀÀÐL˜Ø)¨#Ð.Ð.Ô.°%Ô2IÑIÐ.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.øøøøðJøøøðJñ+Jð6 ð 		Ý �.ð ”N�N�NØ—I’IÐ/Ñ0Ô0Ð0Ð0ð	õ •EÔ'Ð(9×(@Ò(@Ñ(BÔ(BÑCÔCÑDÔDñô ð ð .@×-EÒ-EÑ-GÔ-Gð 	3ð 	3Ñ)ˆM˜>Ø×*Ò*¨8°^ÑDÔDˆGØ ð 3ð 3�Ø×/Ò/°¸~ÈuÑUÔU�ØÔ!×(Ò(¨Ñ2Ô2Ð2Ð2ð3ð ”[Ô/ð 	ð 	ˆEÝ�uÐ4Ñ5Ô5ð à ×5Ò5°hÀÄ
ÑKÔK�Ø—’Ø U°TÈeð ñ ô ð øð ñ 	ð -1¬I¯OªOÑ,=Ô,=ð Qð QÑ(�˜yØ×6Ò6°}ÀiÑPÔPÐPÐPØÔ'ð Jð J�Ø×;Ò;¸B¼HÀbÑIÔIÐIÐIØÔ&×-Ò-Ñ/Ô/ð Ý%0µÑ%6Ô%6Ð"Ø-1Ô-D×-JÒ-JÑ-LÔ-Lð <ð <Ñ)�M 6Ø'-§|¢|¡~¤~ð <ð <™˜˜tØð <ð <Ø/<Ô/EÐ/EÐ/EÀuÄzÀzÀzÐ"R˜CØ.¨sÐ3Ð3Ô3°tÑ;Ð3Ð3Ñ3øð<ð &ð 
Ý)˜/ð
 "œN˜N˜NØ ŸIšIÐ&8Ñ9Ô9Ð9Ð9ðõ �EÔ/Ð0B×0IÒ0IÑ0KÔ0KÑLÔLÑMÔMñ	ô 	ð 	ð	ð 	ðð ð
ð 
s   ÉI!É!
J"É+-JÊJ"c                 óà   ‡— t           j                             ˆfd„|D ¦   «         t           j        j        ¬¦  «        }|j                             | j        ¦  «                             |¦  «        S )zQ
        Get a QuerySet of the related model to objs via related fields.
        c                 ó(   •— g | ]}|j         › d �‰f‘ŒS )Ú__inr§   )r]   Úrelated_fieldrs   s     €r   r‰   z-Collector.related_objects.<locals>.<listcomp>˜  s*   ø€ ÐUÐUÐU°]�Ô#Ð)Ð)Ð)¨4Ð0ÐUÐUÐUr   )Ú	connector)r   ÚQÚcreateÚORÚ_base_managerr8   r‹   )r   rÁ   rÑ   rs   Ú	predicates      ` r   rÂ   zCollector.related_objects“  si   ø€ õ  ”M×(Ò(ØUÐUÐUÐUÀnÐUÑUÔUÝ!”mÔ&ð )ñ 
ô 
ˆ	ð Ô*×0Ò0°´Ñ<Ô<×CÒCÀIÑNÔNÐNr   c              #   ó^   K  — | j                              ¦   «         D ]\  }}|D ]}||fV — Œ	Œd S r   )ri   r‚   )r   r.   ru   rv   s       r   Úinstances_with_modelzCollector.instances_with_model�  sW   è è € Ø $¤	§¢Ñ 1Ô 1ð 	!ð 	!ÑˆE�9Ø ð !ð !�Ø˜S�jÐ Ð Ð Ð ð!ð	!ð 	!r   c                 óø  ‡ — g }t          ¦   «         }t          ‰ j        ¦  «        }t          |¦  «        t          |¦  «        k     r¡d}|D ]x}||v rŒ‰ j                             |j        j        ¦  «        }|r|                     |¦  «        s6| 	                    |¦  «         | 
                    |j        j        ¦  «         d}Œy|sd S t          |¦  «        t          |¦  «        k     °¡ˆ fd„|D ¦   «         ‰ _        d S )NFTc                 ó,   •— i | ]}|‰j         |         “ŒS rJ   )ri   )r]   r.   r   s     €r   rƒ   z"Collector.sort.<locals>.<dictcomp>²  s"   ø€ ÐHÐHÐH°�U˜DœI eÔ,ÐHÐHÐHr   )rh   rj   ri   r¯   rm   Úgetry   rz   Ú
differencerq   rw   )r   Úsorted_modelsÚconcrete_modelsr   Úfoundr.   rm   s   `      r   ÚsortzCollector.sort¢  s  ø€ ØˆÝ™%œ%ˆÝ�d”i‘”ˆÝ�-Ñ Ô ¥3 v¡;¤;Ò.Ð.ØˆEØð !ð !�Ø˜MÐ)Ð)ØØ#Ô0×4Ò4°U´[Ô5OÑPÔP�Ø$ð !¨×)@Ò)@ÀÑ)QÔ)Qð !Ø!×(Ò(¨Ñ/Ô/Ð/Ø#×'Ò'¨¬Ô(BÑCÔCÐCØ �EøØð Ø�õ �-Ñ Ô ¥3 v¡;¤;Ò.Ð.ð IÐHÐHÐH¸-ÐHÑHÔHˆŒ	ˆ	ˆ	r   c           	      óê  — | j                              ¦   «         D ]+\  }}t          |t          d¦  «        ¬¦  «        | j         |<   Œ,|                      ¦   «          t          ¦   «         }t          | j         ¦  «        dk    rÑt          |¦  «        dk    r¾t          |¦  «        d         }|                      |¦  «        r”t          j
        | j        ¦  «        5  t          j        |¦  «                             |j        g| j        ¦  «        }d d d ¦  «         n# 1 swxY w Y   t!          ||j        j        j        d ¦  «         ||j        j        |ifS t          j        | j        d¬¦  «        5  |                      ¦   «         D ]>\  }}|j        j        s-t.          j                             ||| j        | j        ¬¦  «         Œ?| j        D ]>}|                     | j        ¬¦  «        }|r||j        j        j        xx         |z  cc<   Œ?| j                             ¦   «         D ]å\  \  }}	}
g }g }|
D ]N}t?          |t@          j!        ¦  «        r|j"        €| #                    |¦  «         Œ9| $                    |¦  «         ŒO|r)tK          tL          |¦  «        } |j'        di |j(        |	i¤Ž |r[|d         j)        }t          j*        |¦  «        }| +                    t          d	„ |D ¦   «         ¦  «        |j(        |	i| j        ¦  «         Œæ| j          ,                    ¦   «         D ]}| -                    ¦   «          Œ| j                              ¦   «         D ]š\  }}t          j        |¦  «        }d
„ |D ¦   «         }|                     || j        ¦  «        }|r||j        j        xx         |z  cc<   |j        j        s2|D ]/}t.          j.                             ||| j        | j        ¬¦  «         Œ0Œ›	 d d d ¦  «         n# 1 swxY w Y   | j                              ¦   «         D ]*\  }}|D ]"}t!          ||j        j        j        d ¦  «         Œ#Œ+t_          | ,                    ¦   «         ¦  «        ta          |¦  «        fS )Nrˆ   )rÐ   r¨   r   F)r8   Ú	savepoint)ÚsenderÚinstancer8   rg   )r8   c                 ó   — h | ]	}|j         ’Œ
S rJ   r‡   ©r]   rv   s     r   ú	<setcomp>z#Collector.delete.<locals>.<setcomp>ï  s   € Ð5Ð5Ð5¨˜cœfÐ5Ð5Ð5r   c                 ó   — g | ]	}|j         ‘Œ
S rJ   r‡   rë   s     r   r‰   z$Collector.delete.<locals>.<listcomp>ù  s   € Ð7Ð7Ð7 c˜3œ6Ð7Ð7Ð7r   rJ   )1ri   r‚   Úsortedr   rå   r   r¯   rj   r¤   r   Úmark_for_rollback_on_errorr8   r   ÚDeleteQueryÚdelete_batchrˆ   Úsetattrry   r»   ÚlabelÚatomicrÝ   rY   r   r�   Úsendrg   rl   r•   r.   rk   Ú
isinstancer   ÚQuerySetÚ_result_cacherq   Úextendr   r	   rr   r/   r   ÚUpdateQueryÚupdate_batchrŒ   Úreverser’   ÚsumÚdict)r   r.   ru   Údeleted_counterré   Úcountrv   r�   r6   rF   Úinstances_listÚupdatesrs   Úcombined_updatesrÃ   Úpk_lists                   r   ÚdeletezCollector.delete´  sE  € à $¤	§¢Ñ 1Ô 1ð 	Gð 	GÑˆE�9Ý% iµZÀÑ5EÔ5EÐFÑFÔFˆDŒI�eÑÐð
 	�	Š	‰Œˆå!™)œ)ˆõ ˆtŒy‰>Œ>˜QÒÐ¥3 y¡>¤>°QÒ#6Ð#6Ý˜I‘” qÔ)ˆHØ×#Ò# HÑ-Ô-ð 9Ý Ô;¸D¼JÑGÔGð ð ÝœO¨EÑ2Ô2×?Ò?Ø!œ˜ t¤zñô �Eðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ ˜ %¤+¤.Ô"8¸$Ñ?Ô?Ð?Ø˜uœ{Ô0°%Ð8Ð8Ð8åÔ d¤j¸EÐBÑBÔBð :	ð :	à"×7Ò7Ñ9Ô9ð ð ‘
��sØ”{Ô/ð ÝÔ&×+Ò+Ø$Ø!$Ø"œjØ#œ{ð	 ,ñ ô ð øð Ô'ð Cð C�ØŸš¨T¬Z˜Ñ8Ô8�Øð CØ# B¤H¤NÔ$8Ð9Ð9Ô9¸UÑBÐ9Ð9Ñ9øð 37Ô2D×2JÒ2JÑ2LÔ2Lð ð Ñ.‘�˜ Ø�Ø�Ø!/ð /ð /�Iå" 9­f¬oÑ>Ô>ð/à%Ô3Ð;àŸš yÑ1Ô1Ð1Ð1àŸš IÑ.Ô.Ð.Ð.Øð CÝ'-­c°7Ñ';Ô';Ð$Ø+Ð$Ô+ÐBÐB¨u¬z¸5Ð.AÐBÐBÐBØð Ø  œGÔ-�EÝœO¨EÑ2Ô2�EØ×&Ò&ÝÐ5Ð5°Ð5Ñ5Ô5Ñ6Ô6¸¼ÀUÐ8KÈTÌZñô ð øð
 "œY×-Ò-Ñ/Ô/ð $ð $�	Ø×!Ò!Ñ#Ô#Ð#Ð#ð %)¤I§O¢OÑ$5Ô$5ð ð Ñ ��yÝœ¨Ñ.Ô.�Ø7Ð7¨YÐ7Ñ7Ô7�Ø×*Ò*¨7°D´JÑ?Ô?�Øð @Ø# E¤KÔ$5Ð6Ð6Ô6¸%Ñ?Ð6Ð6Ñ6à”{Ô/ð Ø(ð ð ˜ÝÔ+×0Ò0Ø#(Ø%(Ø"&¤*Ø#'¤;ð	 1ñ ô ð ð øððY:	ð :	ð :	ñ :	ô :	ð :	ð :	ð :	ð :	ð :	ð :	øøøð :	ð :	ð :	ð :	ðx !%¤	§¢Ñ 1Ô 1ð 	@ð 	@ÑˆE�9Ø%ð @ð @�Ý˜ %¤+¤.Ô"8¸$Ñ?Ô?Ð?Ð?ð@å�?×)Ò)Ñ+Ô+Ñ,Ô,­d°?Ñ.CÔ.CÐCÐCs%   Ã4DÄDÄDÅ,I=O6Ï6O:Ï=O:r   )NFF)F)NFTNFFT)r   r   r    r   rw   r@   r3   r?   r„   rŽ   r“   r¤   r³   r,   rÂ   rÝ   rå   r  rJ   r   r   re   re   `   sB  € € € € € ð-ð -ð -ð -ð*ð ð ð ð0Fð Fð Fð Fð6ð 6ð 6ð?ð ?ð ?ð
ð ð ð@ð @ð @ð6ð 6ð 6ð
*
ð *
ð *
ð *
ðXð ð ð& ØØØØ ØØðZð Zð Zð ZðxOð Oð Oð!ð !ð !ð
Ið Ið Ið$VDð VDð VDð VDð VDr   re   N) Úcollectionsr   r   Ú	functoolsr   r   Ú	itertoolsr   Úoperatorr   r	   Ú	django.dbr
   r   r   r   Údjango.db.modelsr   r   r   r   r$   r9   r=   rA   rO   rQ   rN   rT   rV   rc   re   rJ   r   r   ú<module>r     sÍ  ðØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð1ð 1ð 1ð 1ð 1�^ñ 1ô 1ð 1ð2ð 2ð 2ð 2ð 2�nñ 2ô 2ð 2ð	:ð 	:ð 	:ð
ð 
ð 
ðDð Dð Dð
ð ð ð 6ð 6ð 6ð €Ô ðEð Eð Eð !€Ô ð	ð 	ð 	ðð ð ðjDð jDð jDð jDð jDñ jDô jDð jDð jDð jDr   