
    gh                     t   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJr  S SKJr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JrJrJrJr   S SKJr  S SK!r!S S	K"J#r#  S S
K$J%r%J&r&J'r'J(r(  S SK)J*r*J+r+J,r,  S SK-J.r.  \.(       aN  S SK/J0r0J1r1  S SK-J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrC  S SK)JDrDJErEJFrFJGrG  \<" S5      rH\@" S5      rI\" SSS5      rJ\R                  " S5      rLSqM\R                  " S5      rO\P" S5      rQ\P" S5      rRSrS SS.S jrTS rUS rVS rWS  rX " S! S"5      rY\Y" 5       rZS# r[S$ r\S% r]S& r^\P" S'5      r_S( r`SS) jra " S* S+\b5      rc " S, S-5      rd " S. S/5      reS0 rfS1 rgS2 rhS3 ri   SS4 jrj SS5 jrkS6 rlS7 rmS8 rn     SS9 jro   SS: jrpS; rqS< rr      SS= jrs\t" \uS>5      rv\v(       a  S? rwOS@ rw      SSA jrx   SSB jrySC rzSD r{SE r|SSF jr}SSG jr~SH rSI r  SSJ jrSK rSL rSM rSN rSO rSSP jrSQ rSR rSS rST r\" 5       u  rrSUrSV rSW r\" SX5      r " SY SZ\u5      r " S[ S\\
GR&                  5      rS] rS^ r\" S_/ S`Q5      rSSa jr\" Sb/ ScQ5      rSSd jrSe rSSf jrSg rSh rSi rSj rSk rSSl jrSm r\.(       a  \;Sn 5       r\;So 5       r\4Sp jr\#(       a  Sq rOSr rSs r S StKJr  S SuKJr  Sx rSSy jrSz r\.(       a  \@" S{5      rS| rS} rS~ rS rg! \  a    Sr GNf = f! \  a	    Sv rSw r NDf = f)    N)
namedtuple)datetimetimezone)Decimal)partialpartialmethodwraps)Real)parse_qsunquote	urlencodeurlsplit
urlunsplit)BaseExceptionGroup)PY37)DEFAULT_ADD_FULL_STACKDEFAULT_MAX_STACK_FRAMESDEFAULT_MAX_VALUE_LENGTHEndpointType)	AnnotatedAnnotatedValueSENSITIVE_DATA_SUBSTITUTE)TYPE_CHECKING)	FrameTypeTracebackType)AnyCallablecastContextManagerDictIteratorListNoReturnOptionaloverload	ParamSpecSetTupleTypeTypeVarUnion)Hub)EventExcInfoLogHintPRi     zsentry_sdk.errorsz^[a-zA-Z0-9/+=]*$)falsefnnooff0)truetyyeson1i  F)strictc                    U b  [        U 5      R                  5       OSnU[        ;   a  gU[        ;   a  gU(       a  S$ [	        U 5      $ )zCasts an ENV variable value to boolean using the constants defined above.
In strict mode, it may return None if the value doesn't match any of the predefined values.
NFT)strlowerFALSY_ENV_VALUESTRUTHY_ENV_VALUESbool)valuer@   
normalizeds      S/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/utils.pyenv_to_boolrJ   Z   sF    
 (-'8U!!#dJ%%&&4*tE{*    c                 L    [         R                  " U SSS9R                  S5      $ )zCSerialize data into a compact JSON representation encoded as UTF-8.F),:)	allow_nan
separatorsutf-8)jsondumpsencode)datas    rI   
json_dumpsrV   j   s"     ::de
CJJ7SSrK   c            	      ,    [        [        R                  R                  S5       n S n[        R
                  S:X  d  [        R
                  S:X  a8  [        R                  " 5       nU=R                  [        R                  -  sl        [        R                  " / SQU[        R                  U U S9R                  5       S   R                  5       R                  S5      nS S S 5        U$ ! , (       d  f       W$ = f! [        [         ["        4 a     g f = f)Nzw+win32cygwin)gitz	rev-parseHEAD)startupinfostdoutstderrstdinr   rQ   )openospathdevnullsysplatform
subprocessSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWPopenPIPEcommunicatestripdecodeOSErrorIOErrorFileNotFoundError)nullr\   revisions      rI   get_git_revisionrt   p   s    "''//4(DK||w&#,,(*B(446##z'F'FF#   0 +%?? q"   ), O- )(, O W/0 s/   $C; B9C)C; )
C83C; 8C; ;DDc                      [         R                  R                  S5      n U (       a  U $ [        5       n U (       a  U $ S H-  n[         R                  R                  U5      n U (       d  M+  U s  $    g)zTry to guess a default release.SENTRY_RELEASE)HEROKU_SLUG_COMMITSOURCE_VERSION!CODEBUILD_RESOLVED_SOURCE_VERSIONCIRCLE_SHA1GAE_DEPLOYMENT_IDN)ra   environgetrt   )releasevars     rI   get_default_releaser      s^     jjnn-.G G **..%7N rK   c                 N    / SQnU H  nX ;   d  M
  SR                  U5      s  $    g)zAReturn the SDK name including the name of the used web framework.)djangoflaskfastapibottlefalconquartsanic	starlettelitestarstarlitechalice
serverlesspyramidtornadoaiohttp
aws_lambdagcpbeamasgiwsgizsentry.python.{}zsentry.python)format)installed_integrationsframework_integrationsintegrations      rI   get_sdk_namer      s2    . .0%,,[99 . rK   c                   $    \ rS rSrSrS rS rSrg)CaptureInternalException    c                     U $ Nr   selfs    rI   	__enter__"CaptureInternalException.__enter__   s    rK   c                 *    Ub  Ub  [        XU45        g)NT)capture_internal_exception)r   tyrG   tbs       rI   __exit__!CaptureInternalException.__exit__   s    >e/&27rK   N)__name__
__module____qualname____firstlineno__	__slots__r   r   __static_attributes__r   rK   rI   r   r      s    IrK   r   c                      [         $ r   )_CAPTURE_INTERNAL_EXCEPTIONr   rK   rI   capture_internal_exceptionsr      s    &&rK   c                 ~    [         R                  " 5       R                  5       (       a  [        R	                  SU S9  gg)z
Capture an exception that is likely caused by a bug in the SDK
itself.

These exceptions do not end up in Sentry and are just logged instead.
zInternal error in sentry_sdkexc_infoN)
sentry_sdk
get_client	is_activeloggererrorr   s    rI   r   r      s2     ((**3hG +rK   c                 0    U [         -
  R                  5       $ r   )epochtotal_secondsrG   s    rI   to_timestampr      s    EM((**rK   c                 b    U R                  [        R                  5      nUR                  S5      $ )zFormats a timestamp in RFC 3339 format.

Any datetime objects with a non-UTC timezone are converted to UTC, so that all timestamps are formatted in UTC.
z%Y-%m-%dT%H:%M:%S.%fZ)
astimezoner   utcstrftime)rG   utctimes     rI   format_timestampr      s,     x||,G 344rK   )+-c                 v    [         R                  " U 5      nUR                  [        R                  5      $ ! [        [        4 aq    SU ;   a  SOSnU R	                  S5      (       a  U S S S-   n U S   [
        ;   a  US-  nU S S	 U S
S  -   n OU S   [
        ;   a  US-  n[         R                  " X5      n Nf = f)N.z%Y-%m-%dT%H:%M:%S.%fz%Y-%m-%dT%H:%M:%SZz+0000iz%z)
r   fromisoformatAttributeError
ValueErrorendswithISO_TZ_SEPARATORSstrptimer   r   r   )rG   resulttimestamp_formats      rI   datetime_from_isoformatr      s    <''.  X\\** J' < '*Ul"8K 	 >>##2J(E9))$#2Jrs+E2Y++$""5;<s   7 A>B87B8c                 b    U c  [         R                  " 5       n O[        U 5      n U S   c  Sn SU 0$ )z+Creates a hint with the exc info filled in.Nr   r   )rd   r   exc_info_from_errorr   s    rI   event_hint_with_exc_infor     s9     <<>&x0{!!rK   c                       \ rS rSrSrSrg)BadDsni"  zRaised on invalid DSNs.r   Nr   r   r   r   __doc__r   r   rK   rI   r   r   "  s    !rK   r   c                   >    \ rS rSrSrS r\S 5       rS	S jrS r	Sr
g)
Dsni&  zRepresents a DSN.c                    [        U[        5      (       a  [        UR                  5      U l        g [	        [        U5      5      nUR                  S;  a  [        SUR                  -  5      eUR                  U l        UR                  c  [        S5      eUR                  U l	        UR                  c'  U R                  S:H  =(       a    S=(       d    SU l
        OUR                  U l
        UR                  (       d  [        S5      eUR                  U l        UR                  U l        UR                  R!                  SS	5      n [        [#        UR%                  5       5      5      U l        SR-                  U5      S-   U l        g ! [(        [*        4 a%    [        S
UR                  =(       d    SS	S  -  5      ef = f)N)httphttpszUnsupported scheme %rzMissing hostnamer     P   zMissing public key/r3   zInvalid project in DSN (%r) )
isinstancer   dict__dict__r   rB   schemer   hostnamehostportusername
public_keypassword
secret_keyrb   rsplitintpop
project_idr   	TypeErrorjoin)r   rG   partsrb   s       rI   __init__Dsn.__init__)  sW   eS!! 0DMU$<<0005<<?@@ll>>!+,,NN	::w.63<"DI

DI~~-......zz  a(	Q!#dhhj/2DO HHTNS(	 I& 	Q6%**:JAB9OOPP	Qs   'F 5F=c                 |    U R                   nU R                  U R                  4S;  a  U< SU R                  < 3nU$ )zThe netloc part of a DSN.))r   r   )r   r   rN   )r   r   r   r   rvs     rI   netloc
Dsn.netlocM  s6     YYKK#+II		*B	rK   Nc           
          [        U R                  U R                  U R                  U R                  U R
                  U R                  US9$ )z*Returns the auth info object for this dsn.)r   r   rb   r   r   r   client)Authr   r   rb   r   r   r   )r   r  s     rI   to_authDsn.to_authV  s>     ;;
 	
rK   c                     U R                   < SU R                  < U R                  =(       a    SU R                  -   =(       d    S< SU R                  < U R                  < U R
                  < 3$ )N://@r   )r   r   r   r   rb   r   r   s    rI   __str__Dsn.__str__c  sN     KKOOOO5doo 5;;KKIIOO
 	
rK   )r   r   rb   r   r   r   r   r   r   )r   r   r   r   r   r   propertyr   r  r
  r   r   rK   rI   r   r   &  s)    ")H  
	
rK   r   c                   P    \ rS rSrSr    SS jr\R                  4S jrS r	Sr
g)	r  io  z,Helper object that represents the auth info.Nc	                 d    Xl         X l        Xl        X0l        X@l        XPl        X`l        Xpl        g r   )r   r   rb   r   r   r   versionr  )	r   r   r   r   r   r   r  r  rb   s	            rI   r   Auth.__init__r  s,     		$$$rK   c           	          U R                   < SU R                  < U R                  < SU R                  < SUR                  < S3	$ )z'Returns the API url for storing events.r  zapi/r   )r   r   rb   r   rG   )r   types     rI   get_api_urlAuth.get_api_url  s1     KKIIIIOOJJ
 	
rK   c                    SU R                   4SU R                  4/nU R                  b  UR                  SU R                  45        U R                  b  UR                  SU R                  45        SSR                  S U 5       5      -   $ )z!Returns the auth header a string.
sentry_keysentry_versionsentry_clientsentry_secretzSentry z, c              3   8   #    U  H  u  pU< S U< 3v   M     g7f)=Nr   ).0keyrG   s      rI   	<genexpr>!Auth.to_header.<locals>.<genexpr>  s     $Qb
U%;bs   )r   r  r  appendr   r   r   s     rI   	to_headerAuth.to_header  sy     T__-0@$,,/OP;;"II45??&II89499$Qb$QQQQrK   )r  r   rb   r   r   r   r   r  )N   Nr   )r   r   r   r   r   r   r   ENVELOPEr  r!  r   r   rK   rI   r  r  o  s.    6 ,  ((
RrK   r  c                 D    [        U SS 5      =(       d    [        U SS 5      $ )Nr   r   getattr)clss    rI   get_type_namer)    s    3-Oj$1OOrK   c                 .    [        U SS 5      nUS;  a  U$ g )Nr   )Nbuiltins__builtins__r&  )r(  mods     rI   get_type_moduler.    s!    
#|T
*C
44
rK   c                      U R                   S   nUR                  S5      (       a  g S H  n U R                  U   (       a    gM     g! [        [        4 a     N3f = f! [
         a     MB  f = f)Nr   zsentry_sdk.T)__traceback_hide____tracebackhide__F)	f_globals
startswithr   KeyErrorf_locals	Exception)framer-  	flag_names      rI   should_hide_framer9    s    ooj)>>-(( )
 ?		~~i( ) ?  H%   		s"   %A
 A 
AA 
A.-A.c              #   v   #    U nUb0  [        UR                  5      (       d  Uv   UR                  nUb  M/  g g 7fr   )r9  tb_frametb_next)r   tb_s     rI   iter_stacksr>    s3     
C
/ ..Ikk /s   399c                    SnS nUb6  [        US5      (       a%   UR                  U5      nUb  UR	                  5       nUc   [
        R                  " U 5      nU(       d  / S / 4$ [        SX-
  5      n[        US-   U-   [        U5      5      n	 XhU  V
s/ s H  n
[        U
R                  S5      US9PM     nn
[        Xa   R                  S5      US9nXaS-   U	  V
s/ s H  n
[        U
R                  S5      US9PM     nn
XU4$ ! [        [        4 a    S n Nf = f! [        [        4 a    / S / 4s $ f = fs  sn
f s  sn
f ! [         a    / S / 4s $ f = f)N   
get_sourcer   r3   z
)
max_length)hasattrrA  ImportErrorrp   
splitlines	linecachegetlinesro   maxminlenstrip_stringrm   
IndexError)filenamelinenorB  loadermodulecontext_linessource
source_strlower_boundupper_boundlinepre_contextcontext_linepost_contexts                 rI   get_lines_from_filerZ    s    MFgfl;;	**62J !**,F~	 ''1F 4|a/0Kfqj=0#f+>K 62
2 F+
C2 	 
 $FN$8$8$@ZX 
k:
: F+
C: 	 
 ,667 W% 	J	 ! 	 tR<	 



  4|sS   D D E #D97&E #D> E DDD65D69
E EEc                      U R                   R                  n U R                  S   n U R                  S   nUb  U(       a  US-
  n[	        X6X%US9$ / S / 4$ ! [         a    S n NMf = f! [         a    / S / 4s $ f = f! [         a    S n NTf = f)Nr   
__loader__r3   )rO  rP  )f_codeco_filenamer6  r2  rZ  )r7  	tb_linenomax_value_lengthabs_pathrP  rO  rN  s          rI   get_source_contextrb    s    <<++,. Q".f
 	
 tR<#    4|  s3   A A) A> A&%A&)A;:A;>BBc                 P     [        U 5      $ ! [         a    [        U 5      s $ f = fr   )rB   r6  	safe_reprr   s    rI   safe_strre    s+     5z   s   
 %%c                 :     [        U 5      $ ! [         a     gf = f)Nz<broken repr>)reprr6  r   s    rI   rd  rd    s#    E{ s   
 
c                    U(       a  U (       d  U$  UR                  S5      (       a  US S nU R                  SS5      S   nX :X  a  [        R                  R	                  U5      $ [
        R                  U   R                  nU(       d  U$ UR                  UR                  [        R                  S5      S   S5      S   R                  [        R                  5      $ ! [         a    Us $ f = f)Nz.pycr   r   r3   r      )r   splitra   rb   basenamerd   modules__file__r   seplstripr6  )rP  ra  base_modulebase_module_paths       rI   filename_for_modulerr  "  s    6V$$}Hll3*1- 77##H--;;{3<<O~~.55bffa@CQGKRRFF
 	
  s   AC &%C AC C.-C.c                 D   [        U SS 5      nU(       d  S nS nO,U R                  R                  nU R                  R                  n U R                  S   n	Uc  U R                  n U(       a  [        R                  R                  U5      OS n
[        X5      =(       d    S U
U=(       d    SU	US.nU(       a  [        XU5      u  US'   US'   US'   U(       a$  SS	KJn  U" [        U R                  5      S
US9US'   U$ ! [
         a    S n	 Nf = f! [
         a    S n
 Nf = f)Nr]  r   z	<unknown>)rM  ra  functionrP  rN  rW  rX  rY  r   )	serializeT)is_varscustom_reprvars)r'  r]  r^  co_namer2  r6  f_linenora   rb   abspathrr  rb  sentry_sdk.serializerru  r   r5  )r7  r_  include_local_variablesinclude_source_contextr`  rw  r]  ra  rt  rP  os_abs_pathr   ru  s                rI   serialize_framer  :  s'    UHd+F<<++<<'', NN	3;bggooh/
 (9AT+
B DV.E
A=2n-r./A 3 $K
6
 I?    s$   C> &(D >DDDDc           	          Sn/ n[         R                  " 5       nUb<  [        U5      (       d  UR                  [	        UU UUS95        UR
                  nUb  M<  UR                  5         SU0$ )NT)r}  r~  r`  frames)rd   	_getframer9  r   r  f_backreverse)r}  r~  r`  r1  r  r5   s         rI   current_stacktracer  n  ss     FA
- ##MM,C+A%5	 HH - NNfrK   c                     [        U SS 5      $ )Nerrnor&  )	exc_values    rI   	get_errnor    s    9gt,,rK   c                 
   [        U SS5      =(       d    [        U SS5      =(       d    [        U 5      n[        U SS 5      n[        U[        5      (       a-  [	        U5      S:  a  USSR                  S U 5       5      -   -  nU$ )Nmessager   detail	__notes__r   
c              3   T   #    U  H  n[        U[        5      (       d  M  Uv   M      g 7fr   )r   rB   )r  notes     rI   r  $get_error_message.<locals>.<genexpr>  s     #TUTjs>SDDUs   (	()r'  re  r   listrJ  r   )r  r  notess      rI   get_error_messager    s}     		9b) 	9h+	I  I{D1E%3u:>4$))#TU#TTTTNrK   c	                    0 n	U(       a  UR                  5       OSSS.U	S'   Ub  XYS   S'   Ub  [        U5      n
OSn
U
b5  U	S   R                  S0 5      R                  S0 5      R                  S	U
5        Ub  XyS   S
'   US:H  nU(       d  Ub  XiS   S'   SU	S   S'   U(       a  SU	S   ;  a  SU	S   S'   [        SL=(       a    [	        U[        5      nU(       a  SU	S   S'   [        U 5      U	S'   [        U 5      U	S'   [        U5      U	S'   Uc  SnSn[        nSnO US   nUS   nUS   nUR                  S5      n[        [        U5      [        [        S-   5      5       VVs/ s H(  u  nn[        UR                  UR                   UUUUS9PM*     nnn[#        U5      [        :  a  [$        R&                  " SS9U	S'   U	$ U(       a  U(       d  UnO[)        UX5      nSU0U	S'   U	$ s  snnf )z
Creates a dict that goes into the events `exception.values` list and is ingestible by Sentry.

See the Exception Interface documentation for more details:
https://develop.sentry.dev/sdk/event-payloads/exception/
genericT)r  handled	mechanismNexception_idmetar  numberrR  r   	parent_idchainedr  is_exception_grouprP  rG   r}  r~  r`  rw  r3   )r_  r}  r~  r`  rw  r   
stacktracer  )copyr  
setdefaultr   r   r.  r)  r  r   r}   zipr>  rangeMAX_STACK_FRAMESr  r;  r_  rJ  r   removed_because_over_size_limitmerge_stack_frames)exc_typer  r   client_optionsr  r  r  rR  
full_stackexception_valuer  is_root_exceptionr  r}  r~  r`  rw  _r  
new_framess                       rI   !single_exception_from_error_tupler    s]   $ O%	I$+O K  7C$^4)$$//;FFR	

*Xu
%17$X.$)!64=$[1/8$V,V?;+GG/8$V,+47 J%= =A$%9: / 9OH+H5OF0;OG"&!%3"01J"K!/0H!I)*<=$((7 R%0@10D*EF GEB 	KKll$;#9-#	
 G   6{%% )7(V(V)
%  
J+FJOJ)1:(>%Cs   %/G)__suppress_context__c              #     #    U u  pn/ n[        5       nUb  Ub  [        U5      U;  a  XU4v   UR                  U5        UR                  [        U5      5        UR                  (       a  UR
                  nOUR                  nUc  g [        U5      nUn[        USS 5      nUb  Ub  [        U5      U;  a  M  g g g g g g 7f)N__traceback__)	setidr   addr  	__cause____context__r  r'  )r   r  r  r   seen_exceptionsseen_exception_idscauses          rI   walk_exception_chainr    s     "*R U  %9%77r))
 ""9-""2i=1--!++!--}E{HI6B)  %9%77 & !7 & !s   B5B?9B?c              #      #    U v   g 7fr   r   r   s    rI   r  r  ,  s
     s   c	                 H   [        U UUUUUUUUS9	n	U	/n
UnUS-  n[        US5      =(       a    UR                  nU(       au  U=(       a!    [        US5      =(       a    UR                  SLnU(       aC  UR                  n[	        [        U5      U[        USS5      UUUSUS9u  p^U
R                  U5        OtU=(       a!    [        US5      =(       a    UR                  SLnU(       aC  UR                  n[	        [        U5      U[        USS5      UUUSUS9u  p^U
R                  U5        U=(       a    [        US	5      nU(       aZ  [        UR                  5       HA  u  nn[	        [        U5      U[        USS5      UUUUS
U-  US9	u  p^U
R                  U5        MC     XZ4$ )z
Creates the list of exceptions.
This can include chained exceptions and exceptions from an ExceptionGroup.

See the Exception Interface documentation for more details:
https://develop.sentry.dev/sdk/event-payloads/exception/
)	r  r  r   r  r  r  r  rR  r  r3   r  r  Nr  )r  r  r   r  r  r  rR  r  r  
exceptionszexceptions[%s])r  rC  r  r  exceptions_from_errorr  r'  extendr  	enumerater  )r  r  r   r  r  r  r  rR  r  parentr  should_supress_contextexception_has_causer  child_exceptionsexception_has_contentcontextr  idxes                       rI   r  r  1  s   ( /%!
F JIAL$Y0FGjILjLj  0	;/0##4/ 	
 ''E/De5/48-#)"%	0,\ ./  2	=12%%T1 	
 !++G/Dg!7OT:-#)$%	0,\ ./ #Gwy,'G	 4 45FC/Da1ot4-#)#'#-%
0,\ ./ 6 %%rK   c                 
   U u  pEn[         S L=(       a    [        U[         5      nU(       a  [        UUUUUSSUS9u  pO4/ n	[        U 5       H#  u  pEnU	R	                  [        UUUUUUS95        M%     U	R                  5         U	$ )Nr   )r  r  r   r  r  r  r  r  )r  r  r   r  r  r  )r   r   r  r  r   r  r  )
r   r  r  r  r  r  r   r  r  r  s
             rI   exceptions_from_error_tupler    s     'H+47 J%= /)!	
J 
';H'E#H1%'#1')	 (F rK   c                 V     [        U 5      $ ! [         a    [        U 5      SS s $ f = f)Nr3   r   )rB   UnicodeDecodeErrorrg  r   s    rI   	to_stringr    s1    !5z !E{1R  !s   
 ((c              #   :  #    SU ;   a  U S   v   SU ;   a3  U S   R                  S5      =(       d    S H  nSU;   d  M  US   v   M     SU ;   aK  U S   R                  S5      =(       d    S H)  n[        U[        5      (       d  M  SU;   d  M"  US   v   M+     g g 7f)Nr  threadsvaluesr   	exception)r}   r   r   )eventthreadr  s      rI   iter_event_stacktracesr    s     uL!!EI&**84::Fv%\** ; e{+//9?R?I)T**|y/H-- @ s   8BABBBc              #      #    [        U 5       HR  n[        U[        5      (       a  UR                  =(       d    0 nUR	                  S5      =(       d    S H  nUv   M	     MT     g 7f)Nr  r   )r  r   r   rG   r}   )r  r  r7  s      rI   iter_event_framesr    sQ     ,U3
j.11#))/RJ^^H-33EK 4	 4s   A#A%c                     [        U 5       HH  n[        U[        5      (       a  UR                  =(       d    0 n[	        UR                  S5      UUUS9  MJ     U $ )Nr  )in_app_excludein_app_includeproject_root)r  r   r   rG   set_in_app_in_framesr}   )r  r  r  r  r  s        rI   handle_in_appr    sR    ,U3
j.11#))/RJNN8$))%		
	 4 LrK   c                 Z   U (       d  g U  H  nUR                  S5      nUb  M  UR                  S5      n[        Xb5      (       a  SUS'   MA  [        Xa5      (       a  SUS'   MX  UR                  S5      nUc  Mn  [        U5      (       a  SUS'   M  [        Xs5      (       d  M  SUS'   M     U $ )Nin_apprP  TFra  )r}   _module_in_list_is_external_source_is_in_project_root)r  r  r  r  r7  current_in_apprP  ra  s           rI   r  r    s    8,%8$ 622"E(O 622#E(O 99Z(x((#E(Ox66"E(O; > MrK   c                    [        U [        5      (       a  [        U 5      S:X  a  U u  pnOv[        U [        5      (       aJ  [	        U SS 5      nUb  [        U 5      nU nOC[        R                  " 5       u  pnX La  S nU n[        U 5      nO[        S[        U 5      -  5      eXU4n[        (       a  [        [        U5      nU$ )N   r  z,Expected Exception object to report, got %s!)r   tuplerJ  BaseExceptionr'  r  rd   r   r   r   r   r.   )r   r  r  r   r   s        rI   r   r     s    %CJ!O"'R	E=	)	)UOT2>E{HI&)lln#H%!	; G$u+UVVR(H} *OrK   c                 :   U  Vs1 s H  nUS   US   US   US   4iM     nnU Vs/ s H  nUS   US   US   US   4U;  d  M  UPM     nnUR                  U 5        U(       a  UR                  S[        5      OSnUb  U[        U5      U-
  S nU$ s  snf s  snf )zN
Add the missing frames from full_stack to frames and return the merged list.
ra  rX  rN  rt  max_stack_framesN)r  r}   r   rJ  )r  r  r  r7  	frame_ids
stackframer  r  s           rI   r  r  6  s      E *.!(O*		
    %
$Jz"~&x z"	
  	$  
 f
  	-/GH 
 #J2B B DE
A
s   BBBc                     [        U 5      n [        U 5      nU(       a/  UR                  S[        5      (       a  [	        US   US   S9S   nOS nSS[        XX$5      0S.U4$ )	Nadd_full_stackr}  r`  )r}  r`  r  r   r  )levelr  )r   r   r}   r   r  r  )r   r  r  hintr  s        rI   event_from_exceptionr  ^  s     #8,H#H-D.,,-=?UVV'$23L$M+,>?
 

 
 5i	
 	
 
rK   c                 n    U c  gU(       d  gU H#  nX :X  d  U R                  US-   5      (       d  M#    g   g)NFr   Tr3  )nameitemsitems      rI   r  r  |  s9    |<4??4#:66  rK   c                 @    U c  g[         R                  " SU 5      S LnU$ )NFz [\\/](?:dist|site)-packages[\\/]research)ra  external_sources     rI   r  r    s0      			5x@L  rK   c                 @    U b  Uc  gU R                  U5      (       a  gg)NFTr  )ra  r  s     rI   r  r    s)    </ <((rK   c                 V    U R                  S5      SUS-
   R                  SSS9nUS-   $ )z\
Truncate a UTF-8-encodable string to the last full codepoint so that it fits in max_bytes.
rQ   Nr  ignore)errors...)rT   rn   )string	max_bytes	truncateds      rI   _truncate_by_bytesr    s8    
 g&Q7>>wx>XIurK   c                 d     [        U R                  S5      5      $ ! [        [        4 a     g f = f)NrQ   )rJ  rT   UnicodeEncodeErrorr  r   s    rI   _get_size_in_bytesr    s3    5<<()) 23 s    //c                     U (       d  U $ Uc  [         n[        U 5      n[        U 5      nUb  X!:  a  [        X5      nOUb  X1:  a  U S US-
   S-   nOU $ [	        UU=(       d    USSUS-
  U//S.S9$ )Nr  r  z!limitx)rJ  rem)rG   metadata)r   r  rJ  r  r   )rG   rB  	byte_size	text_sizetruncated_values        rI   rK  rK    s    -
"5)IE
I!7,U?		9#9 0*q.1E9)	sJNJ?@
 rK   c                 T   Sn[         R                  " SU-   S-   [         R                  [         R                  -  5      n UR	                  U 5      R                  5       S   n[        [        [        UR                  S5      SS 5      5      nU$ ! [        [        [        4 a     gf = f)z
Parses a version string into a tuple of integers.
This uses the parsing loging from PEP 440:
https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
a    # noqa: N806
        v?
        (?:
            (?:(?P<epoch>[0-9]+)!)?                           # epoch
            (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
            (?P<pre>                                          # pre-release
                [-_\.]?
                (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
                [-_\.]?
                (?P<pre_n>[0-9]+)?
            )?
            (?P<post>                                         # post release
                (?:-(?P<post_n1>[0-9]+))
                |
                (?:
                    [-_\.]?
                    (?P<post_l>post|rev|r)
                    [-_\.]?
                    (?P<post_n2>[0-9]+)?
                )
            )?
            (?P<dev>                                          # dev release
                [-_\.]?
                (?P<dev_l>dev)
                [-_\.]?
                (?P<dev_n>[0-9]+)?
            )?
        )
        (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
    z^\s*z\s*$r~   r   Nr  )r  compileVERBOSE
IGNORECASEmatch	groupdictr  mapr   rj  r   r   r   )r  VERSION_PATTERNpatternr~   release_tuples        rI   parse_versionr    s    O> jj/!G+


R]]"G
--(224Y?c#w}}S'9"1'=>?  z>2 s    AB B'&B'c                      SSK n SSKJn  [        [        R
                  " SU R                  5      SS  Vs/ s H  n[        U5      PM     sn5      nU" SS5      (       a*  [        R                  S:  a  US	:  d  U" S
S5      (       a  gg  SSKnSSKJn  [        UR                  5      nUc  [        R!                  S5        gU" S5      (       a  US:  a  ggs  snf ! [         a     N_f = f! [         a     gf = f)z
Returns whether gevent/eventlet have patched the stdlib in a way where thread locals are now more "correct" than contextvars.
r   N)is_object_patchedz	a|b|rc|\.ri  	threadinglocalr  r#  )   	   contextvars
ContextVarFT)is_monkey_patchedzYInternal error in Sentry SDK: Could not parse Greenlet version from greenlet.__version__.r  )r   r@  )geventgevent.monkeyr  r  r  rj  __version__r   rd   version_inforD  greenleteventlet.patcherr"  r  r   r   )r#  r  partversion_tupler'  r"  greenlet_versions          rI   _is_contextvars_brokenr,    s	   
3 #%88L&:L:L#Mbq#QR#Q4SY#QR
 ['22 !!V+0H%m\BB 3&6()=)=>#LLk X&&+;f+D M S$  "  s:   5C C=C 7C/ C/ C 
C,+C,/
C<;C<c                 "   ^   " U 4S jS5      nU$ )Nc                   <   > \ rS rSrSU 4S jjrSS jrS rS rSrg)	1_make_threadlocal_contextvars.<locals>.ContextVari<  Nc                 N   > Xl         X l        T" 5       U l        T" 5       U l        g r   )_name_default_local_original_local)r   r  defaultr  s      rI   r   :_make_threadlocal_contextvars.<locals>.ContextVar.__init__?  s     J#M'DK#(7D rK   c                 V    [        U R                  SU=(       d    U R                  5      $ )NrG   )r'  r3  r2  )r   r5  s     rI   r}   5_make_threadlocal_contextvars.<locals>.ContextVar.getF  s    4;;1IDMMJJrK   c                     [        [        R                  " S5      5      nU R                  5       n[	        U R
                  X#5        XR                  l        U$ )N@   )rB   randomgetrandbitsr}   setattrr4  r3  rG   )r   rG   tokenoriginal_values       rI   r  5_make_threadlocal_contextvars.<locals>.ContextVar.setJ  sA    **2./E!XXZND((%@ %KKLrK   c                 |    [        U R                  U5      U R                  l        U R                  R                  U	 g r   )r'  r4  r3  rG   r   )r   r>  s     rI   reset7_make_threadlocal_contextvars.<locals>.ContextVar.resetR  s/     '(<(<e DDKK$$--e4rK   )r2  r3  r1  r4  r   )	r   r   r   r   r   r}   r  rB  r   r  s   rI   r!  r/  <  s    	+	K		5rK   r!  r   )r  r!  s   ` rI   _make_threadlocal_contextvarsrE  :  s    5 58 rK   c                      [        5       (       d*  [        R                  S:  a   SSKJn   SU 4$  SSKJn   SU 4$ SSKJn  S[        U5      4$ ! [
         a     Nf = f! [
         a     N/f = f)z
Figure out the "right" contextvars installation to use. Returns a
`contextvars.ContextVar`-like class with a limited API.

See https://docs.sentry.io/platforms/python/contextvars/ for more information.
r  r   )r!  TrD  F)
r,  rd   r&  aiocontextvarsr!  rD  r   r  r  rE  )r!  r  s     rI   _get_contextvarsrH  [  s     "##
 f$5Z''
2Z''  /666    s"   	A 	A 
AA
A*)A*z

With asyncio/ASGI applications, the Sentry SDK requires a functional
installation of `contextvars` to avoid leaking scope/context data across
requests.

Please refer to https://docs.sentry.io/platforms/python/contextvars/ for more information.
c                    Sn U R                   R                  < SU R                   R                  < SU R                  < 3$ ! [         a     Of = fSu  p#[	        U [
        5      (       a,  [        U R                  S5      (       a  Su  p#U R                  n OF[        U SS5      =(       d    [        U SS5      n[	        U[        5      (       a  Su  p#UR                  n [        U S	5      (       a  U R                  nO[        U S5      (       a  U R                  nUbI  [        U S
5      (       a1  [	        U R                  [        5      (       a  U R                  S-   U-   nX!-   U-   nU$ )zbReturn the qualified name of func. Works with regular function, lambda, partial and partialmethod.Nr   )r   r   r   )zpartial(<function >)_partialmethod__partialmethod__)zpartialmethod(<function rJ  r   r   )im_classr   r   r6  r   r   rC  funcr'  r   r   rB   )rN  func_qualnameprefixsuffixpartial_methods        rI   qualname_from_functionrS    sC    MMM$$MM""MM
 	

   NF$  WTYY
%C%C3yy !'7> 
'%tC
 nm44=NF!&&Dt^$$))	z	"	"  4&&:doos+K+K OOc1MAM.7s   >A 
AAc                     [        U 5      $ r   )rS  )rN  s    rI   transaction_from_functionrU    s    !$''rK   disable_capture_eventc                       \ rS rSrSrSrg)ServerlessTimeoutWarningi  z>Raised when a serverless method is about to reach its timeout.r   Nr   r   rK   rI   rX  rX    s    HrK   rX  c                   *    \ rS rSrSrS rS rS rSrg)TimeoutThreadi  zCreates a Thread which runs (sleeps) for a time duration equal to
waiting_time and raises a custom ServerlessTimeout exception.
c                     [         R                  R                  U 5        Xl        X l        [         R
                  " 5       U l        g r   )r  Threadr   waiting_timeconfigured_timeoutr-   _stop_event)r   r]  r^  s      rI   r   TimeoutThread.__init__  s1    !!$'("4$??,rK   c                 8    U R                   R                  5         g r   )r_  r  r   s    rI   stopTimeoutThread.stop  s    rK   c                    U R                   R                  U R                  5        U R                   R                  5       (       a  g [	        U R
                  5      nXR
                  :  a  US-   n[        SR                  U5      5      e)Nr3   zZWARNING : Function is expected to get timed out. Configured timeout duration = {} seconds.)r_  waitr]  is_setr   r^  rX  r   )r   integer_configured_timeouts     rI   runTimeoutThread.run  s     	d//0""$$%()@)@%A" &(?(??)Ca)G& 'hoo*
 	
rK   )r_  r^  r]  N)	r   r   r   r   r   r   rb  rh  r   r   rK   rI   rZ  rZ    s    -
rK   rZ  c                     Sn U R                  S5      n[        R                  " U5      nUR                  S5      nU$ ! [         a.  n[
        R                  SR                  U S9U5         SnAU$ SnAff = f)zG
Convert a string to base64, via UTF-8. Returns None on invalid input.
NUTF-8z"Unable to encode {orig} to base64:)orig)rT   base64	b64encodern   r6  r   warningr   )originalbase64_string
utf8_bytesbase64_byteserrs        rI   	to_base64ru    s    
 MX__W-
''
3$++G4   X;BBBQSVWWXs   8> 
A6#A11A6c                 .   Sn [         R                  U 5      nU(       d   eU R                  S5      n[        R                  " U5      nUR                  S5      nU$ ! [         a.  n[        R                  SR                  U S9U5         SnAU$ SnAff = f)zI
Convert a string from base64, via UTF-8. Returns None on invalid input.
Nrk  z#Unable to decode {b64} from base64:)b64)
BASE64_ALPHABETr  rT   rm  	b64decodern   r6  r   ro  r   )rq  utf8_stringonly_valid_charsrs  rr  rt  s         rI   from_base64r|    s    
 K

*00?$++G4%%l3
 ''0   
188]8KS	
 	
 
s   AA 
B&#BB
Components)r   r   rb   queryfragmentc           	         [        U 5      n[        UR                  SS9nU(       aP  UR                  R	                  S5      n[        U5      S:  a  [        < S[        < SUS   < 3nOUR                  nOUR                  nU(       a*  [        [        U Vs0 s H	  o[        _M     sn5      5      n	OUR                  n	[        UR                  UU	UR                  UR                  S9n
U(       a  U
$ [        U
5      $ s  snf )zD
Removes the authority and query parameter values from a given URL.
T)keep_blank_valuesr	  r3   rN   r   r   r   r~  rb   r  )r   r   r~  r   rj  rJ  r   r   r   r}  r   rb   r  r   )urlremove_authorityremove_query_valuesrj  
parsed_urlquery_paramsnetloc_partsr   r  query_string
componentss              rI   sanitize_urlr    s    
 #JJ,,EL !((..s3|q ))R F  &&F"" N#55NO
 "''  __$$J *%%! Os   C?	ParsedUrlr  r~  r  c           
          [        U SUSS9n[        [        UR                  UR                  SUR
                  SS95      n[        UUR                  UR                  S9$ )z
Splits a URL into a url (including path), query and fragment. If sanitize is True, the query
parameters will be sanitized to remove sensitive data. The autority (username and password)
in the URL will always be removed.
T)r  r  rj  r   r  r  )	r  r   r}  r   r   rb   r  r~  r  )r  sanitizer  base_urls       rI   	parse_urlr  F  sn     dJ $$$$	
H $$ rK   c           	      >   [        U [        [        45      (       a  [        R                  " U 5      (       a-  [
        R                  SR                  X[        U 5      S95        g[        U 5      n U S:  d  U S:  a#  [
        R                  SR                  XS95        gg)	zz
Checks the given sample rate to make sure it is valid type and value (a
boolean or a number between 0 and 1, inclusive).
z|{source} Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got {rate} of type {type}.)rR  rater  Fr   r3   zW{source} Given sample rate is invalid. Sample rate must be between 0 and 1. Got {rate}.)rR  r  T)
r   r
   r   mathisnanr   ro  r   r  float)r  rR  s     rI   is_valid_sample_rater  b  s     dT7O,,

40@0@ K  R  RtDz R 	

  ;Dax4!8ell m 	

 rK   c                     Uc  gU H7  nU(       d  US   S:w  a  US-  n[         R                  " X05      nU(       d  M7    g   g)NFr   $Tr  )r  
regex_listsubstring_matchingitem_matchermatcheds        rI   match_regex_listr    sI    "!l2&6#&=CL))L/7 # rK   c                     U SL=(       aW    U R                   SL=(       aB    U R                   R                  SL=(       a#    U R                   R                  R                  U;   $ )z:
Determines whether the given URL matches the Sentry DSN.
N)	transport
parsed_dsnr   )r  r  s     rI   is_sentry_urlr    s^     	d 	6D(	6''t3	6 ''..#5	rK   c               #     #     SSK Jn   [        5       nU R                  5        He  nUR                  R	                  SS 5      nUc  M$  [        U5      nUR                  c  M>  XA;  d  ME  XBR                  4v   UR                  U5        Mg     g ! [         aP     SS K	nO! [         a      g f = fUR                   H&  n[        UR                  5      UR                  4v   M(      g f = f7f)Nr   )r
  Name)	importlibr
  r  distributionsr}   _normalize_module_namer  r  rD  pkg_resourcesworking_setr  )r
  yieldeddistr  normalized_namer  infos          rI   _generate_installed_modulesr    s     A&%**,D==$$VT2D
 "8"><<+0N)<<77KK0 -  A	  		 "--D(2DLL@@ .Ase   C+A B B "B )$B C+
C(BC(
B,(C()C++B,,9C(%C+'C((C+c                 "    U R                  5       $ r   )rC   )r  s    rI   r  r    s    ::<rK   c                  B    [         c  [        [        5       5      q [         $ r   )_installed_modulesr   r  r   rK   rI   _get_installed_modulesr    s     !!"="?@rK   c                 V    [        5       nUR                  U 5      nUc  g [        U5      $ r   )r  r}   r  )packageinstalled_packagesr  s      rI   package_versionr    s.    /1 $$W-G!!rK   c                 P    Uc   eUR                   ULa  UR                  U5      eUer   )r  with_traceback)tprG   r   s      rI   reraiser    s2    "$""2&&
KrK   c                      g)z.No-op function for ensure_integration_enabled.Nr   )_a_ks     rI   _no_opr    s     	rK   c                     g r   r   )r   original_functions     rI   ensure_integration_enabledr    s     	rK   c                     g r   r   )r   s    rI   r  r    s    
 	rK   c                 h   ^ ^ [         (       a  [        [        [        [        4   T5      mU U4S jnU$ )aG  
Ensures a given integration is enabled prior to calling a Sentry-patched function.

The function takes as its parameters the integration that must be enabled and the original
function that the SDK is patching. The function returns a function that takes the
decorated (Sentry-patched) function as its parameter, and returns a function that, when
called, checks whether the given integration is enabled. If the integration is enabled, the
function calls the decorated, Sentry-patched function. If the integration is not enabled,
the original function is called.

The function also takes care of preserving the original function's signature and docstring.

Example usage:

```python
@ensure_integration_enabled(MyIntegration, my_function)
def patch_my_function():
    with sentry_sdk.start_transaction(...):
        return my_function()
```
c                 p   >^  SUUU 4S jjnT[         L a  [        T 5      " U5      $ [        T5      " U5      $ )Nc                  n   > [         R                  " 5       R                  T5      c  T" U 0 UD6$ T" U 0 UD6$ r   )r   r   get_integration)argskwargsr   r  sentry_patched_functions     rI   runner;ensure_integration_enabled.<locals>.patcher.<locals>.runner  s=    $$&66{CK($9&99*D;F;;rK   )r  zP.argsr  zP.kwargs)r  r	   )r  r  r   r  s   ` rI   patcher+ensure_integration_enabled.<locals>.patcher  s9    	< 	< &01&99&'//rK   )r   r   r   r1   r2   )r   r  r  s   `` rI   r  r    s.    4 } !!Q$1BC0 NrK   c                  ,    [         R                  " 5       $ r   )timeperf_counter_nsr   rK   rI   nanosecond_timer  $  s    ##%%rK   c                  D    [        [        R                  " 5       S-  5      $ )Ng    eA)r   r  perf_counterr   rK   rI   r  r  *  s    4$$&,--rK   c                  ,    [         R                  " 5       $ r   )r  r  r   rK   rI   nowr  /  s    rK   )get_hubis_module_patchedc                      g r   r   r   rK   rI   get_gevent_hubr  ;  s    rK   c                     gNFr   )mod_names    rI   r  r  ?  s     rK   c                  <    [        S5      =(       d    [        S5      $ )Nr  _threadr  r   rK   rI   	is_geventr  E  s    [)I->y-IIrK   c                    U b    U R                   nU R                  nUb  X4$  [        5       (       a  [	        5       nUb   UR
                  S4$  [        R                  " 5       n U R                   nU R                  nUb  X4$   [        R                  " 5       n U R                   nU R                  nUb  X4$  g! [         a     Nf = f! [         a     Nf = f! [         a     Nbf = f! [         a     gf = f)zC
Try to get the id of the current thread, with various fall backs.
NNN)	identr  r   r  r  thread_identr  current_threadmain_thread)r  	thread_idthread_name
gevent_hubs       rI   get_current_thread_metar  J  s,    	I ++K$ -- % {{#%
!!..44
))+LL	kk )) !&&(LL	kk )) ! G  		 "      	sG   B: C
 2C 2C* :
CC

CC
C'&C'*
C76C7c                 \    U [         :X  a"  [        US5      (       a  UR                  S;   a  gg)Ncode)r   NFT)
SystemExitrC  r  )r   rG   s     rI   should_be_treated_as_errorr  }  s'    	ZGE622uzzY7NrK   Tc                 4     U " U5      $ ! [          a     gf = f)z
Attempt to convert from an unknown type to a specific type, using the
given function. Return None if the conversion fails, i.e. if the function
raises an exception.
N)r6  )convert_funcrG   s     rI   try_convertr    s$    E"" s   
 
c                    ^ U4S jm T" U 5      n[         R                  " U[        S9$ ! [         a    [        U 5      s $ f = f)z&Safely serialize to a readable string.c                 h  > [        U 5      (       a\   [        U SS 5      n[        U SS 5      n[        U SS5      nU(       a  U(       a  U SU 3nOU(       a  U(       a  U SU 3nOUnSU S3$ [        U [        5      (       a,  U R                  5        VVs0 s H  u  pVUT	" U5      _M     snn$ [        U [        [        45      (       a  U  Vs/ s H  nT	" U5      PM     sn$ [        U S	5      (       ai   [        U 5      R                  5        VVs0 s H&  u  pVUR                  S
5      (       a  M  UT	" U5      _M(     nnnS[        U 5      R                   SU S3$ U $ ! [         a    S[        U 5      R                   S3s $ f = fs  snnf s  snf s  snnf ! [         a    [        U 5      s $ f = f)Nr   r   r   	anonymousr   z
<function >z
<callable r   r  < )callabler'  r6  r  r   r   r   r  r  r  rC  rx  r3  rg  )
r  rP  qualnamer  	full_pathkvr  attrsserialize_items
            rI   r  &safe_serialize.<locals>.serialize_item  s   D>>; |T:"4>tZ=h#)(!H: 6I#)(!D6 2I $I#I;a00 d##59ZZ\B\TQA~a((\BBtUm,,/34t!N1%t44T:&&" !%T
 0 0 2 2<<, )A~a(( 2  
 4:../qq99 K#  ;#DJ$7$7#8::; C4  "Dz!"sH   AE FF5F F1F>F #FFF F10F1)r5  )rR   rS   rB   r6  )rU   
serializedr  s     @rI   safe_serializer    sB    !F#D)
zz*c22 4ys    * AAc                 x    U c  g[        U R                  SS5      =(       d    U S   R                  SS5      5      $ )NFenable_logs_experiments)rF   r}   optionss    rI   has_logs_enabledr    s?    M5) 	=>"&&}e< rK   c                 b    U c  g U R                  S5      =(       d    U S   R                  S5      $ )Nbefore_send_logr  )r}   r  s    rI   get_before_send_logr    s6    ;;() W^-D-H-H. rK   r   )NNN)NTTNN)TTN)NNNNNN)NNr   r   NNr  )TTF)Tr  )rm  rR   rF  loggingr  ra   r;  r  rf   rd   r  r  collectionsr   r   r   decimalr   	functoolsr   r   r	   numbersr
   urllib.parser   r   r   r   r   r+  r   rD  r   sentry_sdk._compatr   sentry_sdk.constsr   r   r   r   sentry_sdk._typesr   r   r   typingr   typesr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   
gevent.hubr,   r-   r.   r/   r0   r1   r2   r   	getLoggerr   r  r  rx  	frozensetrD   rE   r  rJ   rV   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)  r.  r9  r>  rZ  rb  re  rd  rr  r  r  r  r  r  rC  r6  HAS_CHAINED_EXCEPTIONSr  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  rK  r  r,  rE  rH  HAS_REAL_CONTEXTVARSr!  CONTEXTVARS_ERROR_MESSAGErS  rU  rV  rX  r\  rZ  ru  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r  r  r$  r  r  r  r  r  r  r  r  r  r   rK   rI   <module>r     s/        	  	  
   " '  3 3  K K+
  #  S R  .    & ;;#AA 	q! 
		.	/ **12BC BC   "' + T80!H  78 '
	H+

5 j) +,	""Z "F
 F
R-R -R`P
& +b 8 4  1j !6-
. dN !,BC 7@ b&N 	)X!. $N:%T <		:1h1hB#7L $4#5   j )X(
 ##:; 	y 	#
I$$ #
L", &WX
)&X {$@A	8> 
A:
"	     -` &.

0/J
0f A
+\s=  @9  s$   $L &L( L%$L%(L76L7