
    h|l                     *   S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJrJrJrJr  S S	KJr  S S
KJrJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SK!J"r#  / SQr$ " S S5      r% " S S\%5      r& " S S\5      r' " S S\%5      r(g)    N)Enum)NoneType)checks)FieldDoesNotExist
FieldErrorValidationError)connections)
LOOKUP_SEP)ExistsExpressionListFRawSQL)IndexExpression)ExactIsNull)Q)Query)DEFAULT_DB_ALIAS)RemovedInDjango60Warning)gettext_lazy)BaseConstraintCheckConstraint
DeferrableUniqueConstraintc                       \ rS rSr\" S5      rSrSrSSSS.S jr\	S 5       r
S rS rS	 rS\4S
 jrS rS rS rS rS rSrg)r      u&   Constraint “%(name)s” is violated.Nnameviolation_error_codeviolation_error_messagec                |   Uc)  U(       d"  [        U R                  R                   S35      eXl        Ub  X l        Ub  X0l        OU R                  U l        U(       a_  [        R                  " SU R                  R                   S3[        SS9  [        USS/5       H  u  pVU(       d  M  [        XU5        M     g g )Nz<.__init__() missing 1 required keyword-only argument: 'name'z Passing positional arguments to z is deprecated.   
stacklevelr   r    )	TypeError	__class____name__r   r   r    default_violation_error_messagewarningswarnr   zipsetattr)selfr   r   r    argsargattrs          N/var/www/html/env/lib/python3.13/site-packages/django/db/models/constraints.py__init__BaseConstraint.__init__   s     <>>**+ ,# $  	+(<%".+B(+/+O+OD(MM24>>3J3J2K L (	 !0I'JK	3D, L     c                     g)NF r-   s    r1   contains_expressions#BaseConstraint.contains_expressions:   s    r4   c                     [        S5      eNz.This method must be implemented by a subclass.NotImplementedErrorr-   modelschema_editors      r1   constraint_sqlBaseConstraint.constraint_sql>       !"RSSr4   c                     [        S5      er;   r<   r>   s      r1   
create_sqlBaseConstraint.create_sqlA   rC   r4   c                     [        S5      er;   r<   r>   s      r1   
remove_sqlBaseConstraint.remove_sqlD   rC   r4   c                     [        S5      er;   r<   )r-   r?   instanceexcludeusings        r1   validateBaseConstraint.validateG   rC   r4   c                 8    U R                   SU R                  0-  $ )Nr   )r    r   r7   s    r1   get_violation_error_message*BaseConstraint.get_violation_error_messageJ   s    ++vtyy.AAAr4   c                     / $ Nr6   )r-   r?   
connections      r1   _checkBaseConstraint._checkM   s    	r4   c           
         / n[        5       nU GH'  tpVUS:w  a  UR                  U5        U(       d  M%   US:X  a  UR                  R                  nOUR                  R	                  U5      nUR
                  (       a"  UR                  (       d  UR                  (       a  M   US   n[        US5      (       d  M  [        US5      (       d  M  UR                  U5      b  M  UR                  U5      b  M  UR                  [        R                  " S[        R                   " U/U-   5      -  USS95        GM*     UR#                  UR%                  US5      5        U$ ! [         a     GM]  f = f)	Npkr   get_transform
get_lookupz.'constraints' refers to the joined field '%s'.zmodels.E041)objidconstraints)setadd_metarY   	get_fieldis_relationmany_to_manyone_to_manyr   hasattrrZ   r[   appendr   Errorr
   joinextend_check_local_fields)	r-   r?   
referenceserrorsfields
field_namelookupsfieldfirst_lookups	            r1   _check_references BaseConstraint._check_referencesP   s<   $. JT!

:&%!KKNNE!KK11*=E((E,>,>%BSBS CT
 #1:L//E<00''5=$$\2:LLH$//:,*@AB!(	1 %/@ 	e//FG' % s   A+E
E-,E-c                 R   U R                   R                  < SU R                   R                  < 3nUR                  SS5      nSU R                  0nU R
                  b)  U R
                  U R                  :w  a  U R
                  US'   U R                  b  U R                  US'   USU4$ )N.zdjango.db.models.constraintszdjango.db.modelsr   r    r   r6   )r&   
__module__r'   replacer   r    r(   r   )r-   pathkwargss      r1   deconstructBaseConstraint.deconstructv   s    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-$$0-1-F-FF)*b&!!r4   c                 L    U R                  5       u  pnU R                  " U0 UD6$ rT   )r{   r&   )r-   _r.   rz   s       r1   cloneBaseConstraint.clone   s(    **,~~t.v..r4   )r'   rw   __qualname____firstlineno__r~   r(   r   r    r2   propertyr8   rA   rE   rH   r   rN   rQ   rV   rs   r{   r   __static_attributes__r6   r4   r1   r   r      sx    &'(P&Q#" TSW-8  TTT 15<L TB$L"/r4   r   c                      ^  \ rS rSrSSSSS.U 4S jjrS rS r\" \\5      rS r	S r
S	 rS
 rS rS\4S jrS rU 4S jrU 4S jrSrU =r$ )r      N)	conditioncheckr   r    c                   > Ub  [         R                  " S[        SS9  UnX l        [	        USS5      (       d  [        S5      e[        TU ]  UUUS9  g )N=CheckConstraint.check is deprecated in favor of `.condition`.r"   r#   conditionalFzECheckConstraint.condition must be a Q instance or boolean expression.r   )r)   r*   r   r   getattrr%   superr2   )r-   r   r   r   r   r    r&   s         r1   r2   CheckConstraint.__init__   sh     MMO(
 I"y-77W  	!5$; 	 	
r4   c                 N    [         R                  " S[        SS9  U R                  $ Nr   r"   r#   r)   r*   r   r   r7   s    r1   
_get_checkCheckConstraint._get_check   s#    K$	

 ~~r4   c                 D    [         R                  " S[        SS9  Xl        g r   r   )r-   values     r1   
_set_checkCheckConstraint._set_check   s    K$	

 r4   c           	         / nUR                   R                  (       dO  SUR                  R                  ;   d5  UR	                  [
        R                  " UR                   S3SUSS95        U$ UR                   R                  (       d  SUR                  R                  ;  a  [        5       nU R                  n[        U[        5      (       a   UR                  UR                  U5      5        [        S UR                  5        5       5      (       a5  UR	                  [
        R                  " SU R                   < S3S	US
S95        UR#                  U R%                  X5      5        U$ )N supports_table_check_constraintsz$ does not support check constraints.OA constraint won't be created. Silence this warning if you don't care about it.zmodels.W027hintr\   r]   c              3   B   #    U  H  n[        U[        5      v   M     g 7frT   )
isinstancer   ).0exprs     r1   	<genexpr>)CheckConstraint._check.<locals>.<genexpr>   s     L8K:dF++8Ks   zCheck constraint zS contains RawSQL() expression and won't be validated during the model full_clean().z0Silence this warning if you don't care about it.zmodels.W045)featuresr   ra   required_db_featuresrg   r   Warningdisplay_namer_   r   r   r   update_get_expr_referencesanyflattenr   rj   rs   )r-   r?   rU   rm   rl   r   s         r1   rV   CheckConstraint._check   s4   @@1U[[5U5UUMM!..//ST/ $
> ' @@1;;334 JI)Q''!!%"<"<Y"GHL	8I8I8KLLLNN+DII= 9P PO!( MM$00CDr4   c                    ^ [        USS9nUR                  U R                  5      nUR                  TR                  S9nUR                  UTR                  5      u  pgU[        U4S jU 5       5      -  $ )NFr?   
alias_colsrU   c              3   F   >#    U  H  nTR                  U5      v   M     g 7frT   quote_valuer   pr@   s     r1   r   1CheckConstraint._get_check_sql.<locals>.<genexpr>        HA=44Q77   !)r   build_wherer   get_compilerrU   as_sqltupler-   r?   r@   querywherecompilersqlparamss     `     r1   _get_check_sqlCheckConstraint._get_check_sql   sj    Ee4!!$..1%%1I1I%Jll8]-E-EFUHHHHHr4   c                 \    U R                  X5      nUR                  U R                  U5      $ rT   )r   
_check_sqlr   r-   r?   r@   r   s       r1   rA   CheckConstraint.constraint_sql   s)    ##E9''		599r4   c                 \    U R                  X5      nUR                  XR                  U5      $ rT   )r   _create_check_sqlr   r   s       r1   rE   CheckConstraint.create_sql   s)    ##E9..uiiGGr4   c                 8    UR                  XR                  5      $ rT   )_delete_check_sqlr   r>   s      r1   rH   CheckConstraint.remove_sql   s    ..uii@@r4   c                     UR                  UR                  US9n [        U R                  5      R	                  XTS9(       d"  [        U R                  5       U R                  S9eg ! [         a     g f = f)NmetarL   rM   code)	_get_field_expression_mapra   r   r   r   r   rQ   r   r   )r-   r?   rK   rL   rM   againsts         r1   rN   CheckConstraint.validate   su    44%++w4W	T^^$**7*@%446T=V=V  A  		s   A	A& &
A32A3c           	      2   SU R                   R                  < SU R                  < S[        U R                  5      < U R
                  c  SOSU R
                  -  < U R                  b  U R                  U R                  :X  a  SOSU R                  -  < S3	$ )N<z: condition=z name=  violation_error_code=%r violation_error_message=%r>)r&   r   r   reprr   r   r    r(   r7   s    r1   __repr__CheckConstraint.__repr__   s    NN''NNO ,,4 /$2K2KKL //7//43W3WW  3T5Q5QQR
 	
r4   c                 >  > [        U[        5      (       ay  U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  $ [        TU ]  U5      $ rT   )r   r   r   r   r   r    r   __eq__r-   otherr&   s     r1   r   CheckConstraint.__eq__  s    e_--		UZZ' RNNeoo5R--1K1KKR 00E4Q4QQ	 w~e$$r4   c                 L   > [         TU ]  5       u  pnU R                  US'   XU4$ )Nr   )r   r{   r   r-   ry   r.   rz   r&   s       r1   r{   CheckConstraint.deconstruct  s.    "W02F"nn{6!!r4   )r   )r'   rw   r   r   r2   r   r   r   r   rV   r   rA   rE   rH   r   rN   r   r   r{   r   __classcell__r&   s   @r1   r   r      sq     ! $
 
6 Z,E%NI:HA 15<L 
$%" "r4   r   c                   "    \ rS rSrSrSrS rSrg)r   i  deferred	immediatec                 L    U R                   R                   SU R                   3$ )Nrv   )r&   r   _name_r7   s    r1   r   Deferrable.__repr__$  s"    ..--.a}==r4   r6   N)r'   rw   r   r   DEFERRED	IMMEDIATEr   r   r6   r4   r1   r   r     s    HI>r4   r   c            
          ^  \ rS rSrSSSSSSSSSS.	U 4S jjr\S 5       rS rS rS	 r	S
 r
S rS rS rU 4S jrU 4S jrS\4S jrSrU =r$ )r   i(  r6   N)	rn   r   r   
deferrableinclude	opclassesnulls_distinctr   r    c       	         0  > U(       d  [        S5      eU
(       d  U(       d  [        S5      eU
(       a  U(       a  [        S5      e[        U[        [        45      (       d  [        S5      eU(       a  U(       a  [        S5      eU(       a  U(       a  [        S5      eU(       a  U(       a  [        S5      eU
(       a  U(       a  [        S5      eU
(       a  U(       a  [        S	5      e[        U[        [        45      (       d  [        S
5      e[        U[        [        [        45      (       d  [        S5      e[        U[        [        45      (       d  [        S5      e[        U[        [        45      (       d  [        S5      eU(       a#  [        U5      [        U5      :w  a  [        S5      e[        U5      U l
        X0l        X@l        U(       a  [        U5      OSU l        X`l        Xpl        [        S U
 5       5      U l        ["        TU ]I  UUU	S9  g )Nz"A unique constraint must be named.zKAt least one field or expression is required to define a unique constraint.z?UniqueConstraint.fields and expressions are mutually exclusive.z0UniqueConstraint.condition must be a Q instance.z4UniqueConstraint with conditions cannot be deferred.z8UniqueConstraint with include fields cannot be deferred.z3UniqueConstraint with opclasses cannot be deferred.z5UniqueConstraint with expressions cannot be deferred.zrUniqueConstraint.opclasses cannot be used with expressions. Use django.contrib.postgres.indexes.OpClass() instead.z:UniqueConstraint.deferrable must be a Deferrable instance.z1UniqueConstraint.include must be a list or tuple.z3UniqueConstraint.opclasses must be a list or tuple.z/UniqueConstraint.nulls_distinct must be a bool.z]UniqueConstraint.fields and UniqueConstraint.opclasses must have the same number of elements.r6   c              3   f   #    U  H'  n[        U[        5      (       a  [        U5      OUv   M)     g 7frT   )r   strr   )r   
expressions     r1   r   ,UniqueConstraint.__init__.<locals>.<genexpr>e  s,      !
)
 (
C88AjMjH)s   /1r   )
ValueErrorr   r   r   r   r%   listr   boollenrn   r   r   r   r   r   expressionsr   r2   )r-   rn   r   r   r   r   r   r   r   r    r   r&   s              r1   r2   UniqueConstraint.__init__)  s    ABB6%  6Q  )h]33OPPSTTzWXXRSS:TUU9I  *x&<==L  'HdE#:;;OPP)dE]33QRR.8T*:;;MNNVI64  Fm"$)0uW~b",  !
)!
 
 	!5$; 	 	
r4   c                 ,    [        U R                  5      $ rT   )r   r   r7   s    r1   r8   %UniqueConstraint.contains_expressionso  s    D$$%%r4   c           	      R   UR                  1 U R                  kU R                  kS5      nUR                  R                  nU R
                  bT  UR                  R                  (       d9  SU;   d3  UR                  [        R                  " UR                   S3SUSS95        U R                  bT  UR                  R                  (       d9  SU;   d3  UR                  [        R                  " UR                   S3SUS	S95        U R                  (       aT  UR                  R                  (       d9  S
U;   d3  UR                  [        R                  " UR                   S3SUSS95        U R                  (       aT  UR                  R                   (       d9  SU;   d3  UR                  [        R                  " UR                   S3SUSS95        U R"                  bT  UR                  R$                  (       d9  SU;   d3  UR                  [        R                  " UR                   S3SUSS95        ['        5       nUR                  R                  (       d  SU;  aI  [)        U R
                  [*        5      (       a*  UR-                  UR/                  U R
                  5      5        U R                  (       aT  UR                  R                   (       d  SU;  a3  U R0                   H#  nUR-                  UR/                  U5      5        M%     UR3                  U R5                  X5      5        U$ )Nr^   supports_partial_indexesz5 does not support unique constraints with conditions.r   zmodels.W036r   &supports_deferrable_unique_constraintsz0 does not support deferrable unique constraints.zmodels.W038supports_covering_indexesz: does not support unique constraints with non-key columns.zmodels.W039supports_expression_indexesz4 does not support unique constraints on expressions.zmodels.W044*supports_nulls_distinct_unique_constraintsz9 does not support unique constraints with nulls distinct.zmodels.W047)rk   rn   r   ra   r   r   r   r  rg   r   r   r   r   r  r  r8   r  r   r	  r_   r   r   r   r   r   rj   rs   )r-   r?   rU   rm   r   rl   r   s          r1   rV   UniqueConstraint._checks  s   **+HT[[+H4<<+H-X${{??>>%88)-AAMM!../ 0' '/ $	 ??&FF7;OOMM!../ 0# #/ $	 <<99*.BBMM!../ 0, ,/ $	 $$;;,0DDMM!../ 0# #/ $	 *JJ;?SSMM!../ 0+ +/ $	 U
88)1EE++e88HI$$;;,4HH"..
!!%"<"<Z"HI /d,,U?@r4   c                   ^ U R                   c  g [        USS9nUR                  U R                   5      nUR                  TR                  S9nUR                  UTR                  5      u  pgU[        U4S jU 5       5      -  $ )NFr   r   c              3   F   >#    U  H  nTR                  U5      v   M     g 7frT   r   r   s     r1   r   6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  r   r   )r   r   r   r   rU   r   r   r   s     `     r1   _get_condition_sql#UniqueConstraint._get_condition_sql  sw    >>!Ee4!!$..1%%1I1I%Jll8]-E-EFUHHHHHr4   c                     U R                   (       d  g / nU R                    H:  n[        U5      nUR                  UR                  5        UR	                  U5        M<     [        U6 R                  [        USS95      $ )NF)r   )r   r   set_wrapper_classesrU   rg   r   resolve_expressionr   )r-   r?   r@   index_expressionsr   index_expressions         r1   _get_index_expressions'UniqueConstraint._get_index_expressions  sw    **J.z:001I1IJ$$%56 + 01DD%E*
 	
r4   c                    U R                    Vs/ s H  o1R                  R                  U5      PM     nnU R                   Vs/ s H'  o1R                  R                  U5      R                  PM)     nnU R                  X5      nU R                  X5      nUR                  UUU R                  UU R                  UU R                  UU R                  S9	$ s  snf s  snf N)r   r   r   r   r   r   )rn   ra   rb   r   columnr  r  _unique_sqlr   r   r   r   r-   r?   r@   ro   rn   r   r   r   s           r1   rA   UniqueConstraint.constraint_sql  s    FJkkRk
++''
3kRGK||
GSKK!!*-44| 	 
 ++EA	11%G((IInn#.. ) 

 
	
 S
   $C.Cc                    U R                    Vs/ s H  o1R                  R                  U5      PM     nnU R                   Vs/ s H'  o1R                  R                  U5      R                  PM)     nnU R                  X5      nU R                  X5      nUR                  UUU R                  UU R                  UU R                  UU R                  S9	$ s  snf s  snf r  )rn   ra   rb   r   r  r  r  _create_unique_sqlr   r   r   r   r  s           r1   rE   UniqueConstraint.create_sql  s    FJkkRk
++''
3kRGK||
GSKK!!*-44| 	 
 ++EA	11%G//IInn#.. 0 

 
	
 S
r  c                 H   U R                  X5      nU R                   Vs/ s H'  oAR                  R                  U5      R                  PM)     nnU R                  X5      nUR                  UU R                  UU R                  UU R                  UU R                  S9$ s  snf r  )r  r   ra   rb   r  r  _delete_unique_sqlr   r   r   r   )r-   r?   r@   r   ro   r   r   s          r1   rH   UniqueConstraint.remove_sql  s    ++EA	GK||
GSKK!!*-44| 	 
 11%G//IInn#.. 0 	
 		
	
s   .Bc                 6   SU R                   R                  < SU R                  (       d  SOS[        U R                  5      -  < U R                  (       d  SOS[        U R                  5      -  < S[        U R
                  5      -  < U R                  c  SOSU R                  -  < U R                  c  SOSU R                  -  < U R                  (       d  SOS	[        U R                  5      -  < U R                  (       d  SOS
[        U R                  5      -  < U R                  c  SOSU R                  -  < U R                  c  SOSU R                  -  < U R                  b  U R                  U R                  :X  a  SOSU R                  -  < S3$ )Nr   :r   z
 fields=%sz expressions=%sz name=%sz condition=%sz deferrable=%rz include=%sz opclasses=%sz nulls_distinct=%rr   r   r   )r&   r   rn   r   r   r   r   r   r   r   r   r   r    r(   r7   s    r1   r   UniqueConstraint.__repr__!  s^   NN''kkB|d4;;6G'GG&&B,=TEUEU@V,VVdii(..(Bo.NN//)B/?$///QQllBT\\8J(JJnnB/D<P*PP &&. )D,?,??@ ,,4 /$2K2KKL //7//43W3WW  3T5Q5QQR)
 	
r4   c                   > [        U[        5      (       Ga9  U R                  UR                  :H  =(       Ga    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ax    U R                  UR                  :H  =(       aX    U R                  UR                  L =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ [        TU ]5  U5      $ rT   )r   r   r   rn   r   r   r   r   r   r   r   r    r   r   r   s     r1   r   UniqueConstraint.__eq__=  s#   e-..		UZZ' 	R 	RKK5<</	RNNeoo5	R OOu'7'77	R LLEMM1		R
 NNeoo5	R $$(9(99	R ''5+?+??	R --1K1KK	R 00E4Q4QQ w~e$$r4   c                   > [         TU ]  5       u  pnU R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U R
                  (       a  U R
                  US'   U R                  (       a  U R                  US'   U R                  b  U R                  US'   XR                  U4$ )Nrn   r   r   r   r   r   )	r   r{   rn   r   r   r   r   r   r   r   s       r1   r{   UniqueConstraint.deconstructM  s    "W02F;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;*'+':':F#$%%v--r4   c           	         UR                   R                  U5      nU R                  (       a  0 nU R                   H  nU(       a  Xs;   a    g UR                  R	                  U5      n[        X(R                  5      n	U R                  SLa  U	b(  U	S:X  a$  [        U   R                  R                  (       a    g XUR                  '   M     UR                  " S
0 UD6nGOU(       a  U R                   H  n
[        U
S5      (       aC  U
R                  5        H-  n[!        U["        5      (       d  M  UR                  U;   d  M,      g    MW  [!        U
["        5      (       d  Mn  U
R                  U;   d  M    g    UR%                  UR                  US9R'                  5        VVs0 s H  u  p[#        U5      U_M     nnn/ nU R                   H  n[        US5      (       a  UR)                  5       nUR+                  U5      n[-        X5      nU R                  SL a,  [/        U5      [/        [1        US5      [1        US5      5      -  nUR3                  U5        M     UR                  " U6 nUR5                  UR                  5      nUR6                  R8                  (       d  Ub  UR;                  US9nU R<                  (       dm  UR?                  5       (       aW  U R                  (       a$  [A        URC                  XR                  5      5      e[A        U RE                  5       U RF                  S9eg UR%                  UR                  US9n U R<                  [I        UR                  U R<                  5      5      -  RK                  UUS	9(       a"  [A        U RE                  5       U RF                  S9eg s  snnf ! [L         a     g f = f)NFr   r   r   get_expression_for_validationT)rY   r   r   r6   )'_default_managerrM   rn   ra   rb   r   attnamer   r	   r   !interprets_empty_strings_as_nullsr   filterr   rf   r   r   r   r   itemsr,  replace_expressionsr   r   r   rg   _get_pk_val_stateaddingrL   r   existsr   unique_error_messagerQ   r   r   r   r   )r-   r?   rK   rL   rM   querysetlookup_kwargsro   rq   lookup_valuer   r   r   replacementsfiltersrhsr   model_class_pkr   s                      r1   rN   UniqueConstraint.validate]  sT   ))//6;;M"kk
z4--j9&x?''u4$,$*'!"(#D#DE ,8ejj)% *&  77H "&"2"2Jz955$.$6$6$8D)$22tyyG7K & %9 $J22z'7Q #3 %-$F$Fg %G %%'%%LE %%%   G((4!@AA==?D..|<!$,	&&%/ !)qd1CVCQUEV/W WIy) )  0H!--ekk:%%.*D''>':H~~  ;; * 55e[[I  &44622  ! 88[[' 9 G	NNVHOODNN,K%LLSS5 T  *88:!66 IV  s    N0	A&N6 6
OO)r   r   r   rn   r   r   r   )r'   rw   r   r   r2   r   r8   rV   r  r  rA   rE   rH   r   r   r{   r   rN   r   r   r   s   @r1   r   r   (  s     ! $D
 D
L & &`DI


&
&
"
8% .  15<L N Nr4   r   ))r)   enumr   typesr   django.corer   django.core.exceptionsr   r   r   	django.dbr	   django.db.models.constantsr
   django.db.models.expressionsr   r   r   r   django.db.models.indexesr   django.db.models.lookupsr   r   django.db.models.query_utilsr   django.db.models.sql.queryr   django.db.utilsr   django.utils.deprecationr   django.utils.translationr   r~   __all__r   r   r   r   r6   r4   r1   <module>rO     ss        Q Q ! 1 J J 4 2 * , , = 6
Qp/ p/fT"n T"n> >C~ Cr4   