Ë
    úmxi—  ã                  ór  — U d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ  d dlm!Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 erd dl8m9Z9 dZ:de;d<   e:› d�Z<de;d<    ed¬«       G d„ d«      «       Z= ed¬«       G d„ d«      «       Z>e>e=z  Z?de;d<   e G d„ d ee@ef   «      «       ZAd*d!„ZBe G d"„ d#«      «       ZCe G d$„ d%«      «       ZDd+d&„ZE	 	 	 	 	 	 	 	 d,d'„ZFe G d(„ d)e6«      «       ZGy)-é    )ÚannotationsN)ÚIteratorÚKeysViewÚMappingÚMutableMappingÚSequence)Údeepcopy)Ú	dataclassÚfieldÚreplace)ÚTYPE_CHECKINGÚAnyÚFinalÚ	TypeAliasÚcast)ÚconfigÚutil)Úget_dg_singleton_instance)ÚStreamlitAPIExceptionÚUnserializableSessionStateError)ÚWidgetState)ÚWidgetStates)Úget_script_run_ctx)	ÚRegisterWidgetResultÚTÚValueFieldNameÚ
WidgetArgsÚWidgetCallbackÚWidgetMetadataÚis_array_value_field_nameÚis_element_idÚis_keyed_element_id)Úapply_presenter)ÚQueryParams)ÚCACHE_MEMORY_FAMILYÚ	CacheStatÚStatsProviderÚgroup_cache_stats)ÚSessionManagerz$$STREAMLIT_INTERNAL_KEYr   ÚSTREAMLIT_INTERNAL_KEY_PREFIXÚ_SCRIPT_RUN_WITHOUT_ERRORSÚSCRIPT_RUN_WITHOUT_ERRORS_KEYT)Úfrozenc                  ó   — e Zd ZU dZded<   y)Ú
Serializedz:A widget value that's serialized to a protobuf. Immutable.ÚWidgetStateProtoÚvalueN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    ú\/home/htdocs/ttos/venv/lib/python3.12/site-packages/streamlit/runtime/state/session_state.pyr/   r/   B   s   … áDàÔr9   r/   c                  ó   — e Zd ZU dZded<   y)ÚValuez0A widget value that's not serialized. Immutable.r   r1   Nr2   r8   r9   r:   r<   r<   I   s
   … á:à„Jr9   r<   r   ÚWStatec                  óÞ   — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<   dd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zd d„Zd!d„Zd"d„Zd#d„Zd$d„Zd%d„Z	 	 	 	 	 	 d&d„Zd'd„Zd(d„Zd)d„Zy)*ÚWStatesz¿A mapping of widget IDs to values. Widget values can be stored in
    serialized or deserialized form, but when values are retrieved from the
    mapping, they'll always be deserialized.
    ©Údefault_factoryzdict[str, WState]Ústateszdict[str, WidgetMetadata[Any]]Úwidget_metadatac                ó,   — t        j                  | «      S ©N©r   Úrepr_©Úselfs    r:   Ú__repr__zWStates.__repr__]   ó   € Ü�z‰z˜$ÓÐr9   c                ó|  — | j                   j                  |«      }|€t        |«      ‚t        |t        «      r|j
                  S | j                  j                  |«      }|€t        |«      ‚t        d|j
                  j                  d«      «      }|r|j
                  j                  |«      nd}t        |«      rt        d|«      j                  }n$|dk(  rt        j                  t        d|«      «      }|j                  |«      }| j                  t!        ||¬«      «       t	        |«      | j                   |<   |S )z¨Return the value of the widget with the given key.
        If the widget's value is currently stored in serialized form, it
        will be deserialized first.
        Nr   r1   r   Ú
json_valueÚstr)Ú
value_type)rB   ÚgetÚKeyErrorÚ
isinstancer<   r1   rC   r   Ú
WhichOneofÚ__getattribute__r    ÚdataÚjsonÚloadsÚdeserializerÚset_widget_metadatar   )rI   ÚkÚwstateÚmetadataÚvalue_field_namer1   Údeserializeds          r:   Ú__getitem__zWStates.__getitem__`   s'  € ð
 —‘—‘ Ó#ˆØˆ>Ü˜1“+Ðä�fœeÔ$à—<‘<Ðð
 ×'Ñ'×+Ñ+¨AÓ.ˆØÐô ˜1“+ÐÜØØ�L‰L×#Ñ# GÓ,ó
Ðñ  ð �L‰L×)Ñ)Ð*:Ô;àð 	ô %Ð%5Ô6ä˜ Ó&×+Ñ+‰EØ Ò-Ü—J‘Jœt E¨5Ó1Ó2ˆEà×,Ñ,¨UÓ3ˆð 	× Ñ ÜØØ+ôô	
ô ˜|Ó,ˆ�‰�A‰ØÐr9   c                ó"   — || j                   |<   y rE   ©rB   ©rI   rZ   Úvs      r:   Ú__setitem__zWStates.__setitem__“   s   € Øˆ�‰�AŠr9   c                ó   — | j                   |= y rE   ra   ©rI   rZ   s     r:   Ú__delitem__zWStates.__delitem__–   s   € Ø�K‰K˜‰Nr9   c                ó,   — t        | j                  «      S rE   )ÚlenrB   rH   s    r:   Ú__len__zWStates.__len__™   s   € Ü�4—;‘;ÓÐr9   c              #  ó8   K  — | j                   E d {  –—†  y 7 Œ­wrE   ra   rH   s    r:   Ú__iter__zWStates.__iter__œ   s   è ø€ ð —;‘;×Òús   ‚’“c                ó,   — t        | j                  «      S rE   )r   rB   rH   s    r:   ÚkeyszWStates.keys¢   s   € Ü˜Ÿ™Ó$Ð$r9   c                ó6   — | D �ch c]	  }|| |   f’Œ c}S c c}w rE   r8   rf   s     r:   ÚitemszWStates.items¥   s   € Ø&*Ö+ ��D˜‘G’Ò+Ð+ùÒ+s   …c                ó2   — | D �ch c]  }| |   ’Œ	 c}S c c}w rE   r8   )rI   Úwids     r:   ÚvalueszWStates.values¨   s   € Ø%)Ö*˜c��S“	Ò*Ð*ùÒ*s   …c                ó˜   — | j                   j                  |j                   «       | j                  j                  |j                  «       y)z™Copy all widget values and metadata from 'other' into this mapping,
        overwriting any data in this mapping that's also present in 'other'.
        N)rB   ÚupdaterC   ©rI   Úothers     r:   ru   zWStates.update«   s4   € ð 	�‰×Ñ˜5Ÿ<™<Ô(Ø×Ñ×#Ñ# E×$9Ñ$9Õ:r9   c                ó4   — t        |«      | |j                  <   y)zGSet a widget's serialized value, overwriting any existing value it has.N)r/   Úid)rI   Úwidget_states     r:   Úset_widget_from_protozWStates.set_widget_from_proto²   s   € ä *¨<Ó 8ˆˆ\�_‰_Òr9   c                ó    — t        |«      | |<   y)zISet a widget's deserialized value, overwriting any existing value it has.N)r<   rb   s      r:   Úset_from_valuezWStates.set_from_value¶   s   € ä˜“(ˆˆQŠr9   c                ó6   — || j                   |j                  <   y)zBSet a widget's metadata, overwriting any existing metadata it has.N)rC   ry   )rI   Úwidget_metas     r:   rY   zWStates.set_widget_metadataº   s   € à/:ˆ×Ñ˜[Ÿ^™^Ò,r9   c           	     óÂ   — | j                   j                  «       D ��ci c].  \  }}t        | j                  j	                  |«      ||«      s||“Œ0 c}}| _         yc c}}w )z&Remove widget state for stale widgets.N)rB   rp   Ú_is_stale_widgetrC   rP   )rI   Úactive_widget_idsÚfragment_ids_this_runrZ   rc   s        r:   Úremove_stale_widgetszWStates.remove_stale_widgets¾   sZ   € ð Ÿ™×)Ñ)Ó+÷
á��1Ü#Ø×$Ñ$×(Ñ(¨Ó+Ø!Ø%ôð ˆq‰Dó
ˆ�ùó 
s   ž3Ac                óÈ  — | j                   j                  |«      }|€yt        |t        «      r|j                  S | j
                  j                  |«      }|€yt        «       }||_        |j                  }|j                  |j                  «      }t        |«      r)t        ||«      }|j                  j                  |«       |S |dv r"t        ||t        j                   |«      «       |S |dk(  r|j"                  j%                  |«       |S |dk(  r|j&                  j%                  |«       |S |dk(  r|j(                  j%                  |«       |S |�|�t        |||«       |S )zÎGet the serialized value of the widget with the given id.

        If the widget doesn't exist, return None. If the widget exists but
        is not in serialized form, it will be serialized first.
        N>   rM   Újson_trigger_valueÚfile_uploader_state_valueÚstring_trigger_valueÚchat_input_value)rB   rP   rR   r/   r1   rC   r0   ry   rO   Ú
serializerr    ÚgetattrrU   ÚextendÚsetattrrV   Údumpsr‡   ÚCopyFromrˆ   r‰   )rI   rZ   Úitemr\   Úwidgetr   Ú
serializedÚarrs           r:   Úget_serializedzWStates.get_serializedÎ   se  € ð �{‰{�‰˜qÓ!ˆØˆ<àä�dœJÔ'à—:‘:Ðð ×'Ñ'×+Ñ+¨AÓ.ˆØÐàä!Ó#ˆØˆŒ	à×#Ñ#ˆØ×(Ñ(¨¯©Ó4ˆ
ä$ UÔ+Ü˜& %Ó(ˆCØ�H‰H�O‰O˜JÔ'ð  ˆð Ð:Ñ:Ü�F˜E¤4§:¡:¨jÓ#9Ô:ð ˆð Ð1Ò1Ø×,Ñ,×5Ñ5°jÔAð ˆð Ð,Ò,Ø×'Ñ'×0Ñ0°Ô<ð ˆð Ð(Ò(Ø×#Ñ#×,Ñ,¨ZÔ8ð ˆð Ð :Ð#9ô
 �F˜E :Ô.àˆr9   c                ó–   — | j                   D �cg c]$  }| j                  |«      r| j                  |«      ‘Œ& }}t        d|«      S c c}w )úGReturn a list of serialized widget values for each widget with a value.úlist[WidgetStateProto])rB   r”   r   )rI   Ú	widget_idrB   s      r:   Úas_widget_stateszWStates.as_widget_statesþ   sS   € ð "Ÿ[™[ö
àØ×"Ñ" 9Ô-ð ×Ñ 	Õ*ð
ˆð 
ô
 Ð,¨fÓ5Ð5ùò
s   �)Ac                ó(  — | j                   j                  |«      }|€t        d|› d�«      ‚|j                  }|€y|j                  xs d}|j
                  xs i }t        «       }|r#|j                  �d|_         ||i |¤Ž d|_        y ||i |¤Ž y)z¿Call the given widget's callback and return the callback's
        return value. If the widget has no callback, return None.

        If the widget doesn't exist, raise an Exception.
        NzWidget z not found.r8   TF)	rC   rP   ÚRuntimeErrorÚcallbackÚcallback_argsÚcallback_kwargsr   Úfragment_idÚin_fragment_callback)rI   r˜   r\   rœ   ÚargsÚkwargsÚctxs          r:   Úcall_callbackzWStates.call_callback  s¨   € ð ×'Ñ'×+Ñ+¨IÓ6ˆàÐÜ ¨¨°;Ð?Ó@Ð@à×$Ñ$ˆØÐØà×%Ñ%Ò+¨ˆØ×)Ñ)Ò/¨Rˆä Ó"ˆÙ�8×'Ñ'Ð3Ø'+ˆCÔ$Ù�dÐ%˜fÒ%Ø',ˆCÕ$á�dÐ%˜fÓ%r9   N©ÚreturnrN   )rZ   rN   r¦   r   )rZ   rN   rc   r=   r¦   ÚNone)rZ   rN   r¦   r§   ©r¦   Úint)r¦   zIterator[str])r¦   zKeysView[str])r¦   zset[tuple[str, Any]])r¦   zset[Any])rw   r?   r¦   r§   )rz   r0   r¦   r§   )rZ   rN   rc   r   r¦   r§   )r   úWidgetMetadata[Any]r¦   r§   )r‚   úset[str]rƒ   úlist[str] | Noner¦   r§   )rZ   rN   r¦   zWidgetStateProto | None©r¦   r—   )r˜   rN   r¦   r§   )r3   r4   r5   r6   r   ÚdictrB   r7   rC   rJ   r_   rd   rg   rj   rl   rn   rp   rs   ru   r{   r}   rY   r„   r”   r™   r¤   r8   r9   r:   r?   r?   S   sœ   … ññ
 !&°dÔ ;€FÐÓ;Ù6;ÈDÔ6Q€OÐ3ÓQó ó1ófóó óó%ó,ó+ó;ó9óó;ð
à#ð
ð  0ð
ð 
ó	
ó .ó`6ô&r9   r?   c                ó   — d| › d�S )Nzst.session_state has no key "zƒ". Did you forget to initialize it? More info: https://docs.streamlit.io/develop/concepts/architecture/session-state#initializationr8   ©Úkeys    r:   Ú_missing_key_error_messager²   "  s   € à
'¨ uð -jð 	kðr9   c                  ó¦   — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<   dd„Z	dd„Z
dd„Zedd	„«       Zdd
„Zddd„Zdd„Zdd„Zdd„Zdd„Zy)ÚKeyIdMappera#  A mapping of user-provided keys to element IDs.
    It also maps element IDs to user-provided keys so that this reverse mapping
    does not have to be computed ad-hoc.
    All built-in dict-operations such as setting and deleting expect the key as the
    argument, not the element ID.
    r@   údict[str, str]Ú_key_id_mappingÚ_id_key_mappingc                ó   — || j                   v S rE   )r¶   ©rI   r±   s     r:   Ú__contains__zKeyIdMapper.__contains__5  s   € Ø�d×*Ñ*Ð*Ð*r9   c                ó@   — || j                   |<   || j                  |<   y rE   ©r¶   r·   ©rI   r±   r˜   s      r:   rd   zKeyIdMapper.__setitem__8  s"   € Ø$-ˆ×Ñ˜SÑ!Ø*-ˆ×Ñ˜YÒ'r9   c                ó&   — | j                  |«       y rE   )Údeleter¹   s     r:   rg   zKeyIdMapper.__delitem__<  s   € Ø�‰�CÕr9   c                ó   — | j                   S rE   ©r·   rH   s    r:   Úid_key_mappingzKeyIdMapper.id_key_mapping?  s   € à×#Ñ#Ð#r9   c                óp   — || _         |j                  «       D ��ci c]  \  }}||“Œ
 c}}| _        y c c}}w rE   )r¶   rp   r·   )rI   Úkey_id_mappingrZ   rc   s       r:   Úset_key_id_mappingzKeyIdMapper.set_key_id_mappingC  s1   € Ø-ˆÔØ1?×1EÑ1EÓ1G×H©¨¨A  1¡ÓHˆÕùÓHs   ›2Nc                ó:   — | j                   j                  ||«      S rE   )r¶   rP   )rI   r±   Údefaults      r:   Úget_id_from_keyzKeyIdMapper.get_id_from_keyG  s   € Ø×#Ñ#×'Ñ'¨¨WÓ5Ð5r9   c                ó    — | j                   |   S rE   rÁ   ©rI   r˜   s     r:   Úget_key_from_idzKeyIdMapper.get_key_from_idJ  s   € Ø×#Ñ# IÑ.Ð.r9   c                ó˜   — | j                   j                  |j                   «       | j                  j                  |j                  «       y rE   )r¶   ru   r·   rv   s     r:   ru   zKeyIdMapper.updateM  s6   € Ø×Ñ×#Ñ# E×$9Ñ$9Ô:Ø×Ñ×#Ñ# E×$9Ñ$9Õ:r9   c                ól   — | j                   j                  «        | j                  j                  «        y rE   )r¶   Úclearr·   rH   s    r:   rÎ   zKeyIdMapper.clearQ  s&   € Ø×Ñ×"Ñ"Ô$Ø×Ñ×"Ñ"Õ$r9   c                óV   — | j                   |   }| j                   |= | j                  |= y rE   r¼   r½   s      r:   r¿   zKeyIdMapper.deleteU  s.   € Ø×(Ñ(¨Ñ-ˆ	Ø× Ñ  Ð%Ø× Ñ  Ñ+r9   ©r±   rN   r¦   Úbool)r±   rN   r˜   r   r¦   r§   ©r±   rN   r¦   r§   )r¦   rµ   )rÄ   rµ   r¦   r§   rE   )r±   rN   rÇ   ú
str | Noner¦   rÓ   )r˜   rN   r¦   rN   )rw   r´   r¦   r§   ©r¦   r§   )r3   r4   r5   r6   r   r®   r¶   r7   r·   rº   rd   rg   ÚpropertyrÂ   rÅ   rÈ   rË   ru   rÎ   r¿   r8   r9   r:   r´   r´   )  si   … ññ ',¸DÔ&A€O�^ÓAÙ&+¸DÔ&A€O�^ÓAó+ó.óð ò$ó ð$óIô6ó/ó;ó%ô,r9   r´   c                  ó  — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<    ee	¬«      Z
ded<    ee¬«      Zded	<    ee¬«      Zd
ed<   d.d„Zd/d„Zd/d„Zed0d„«       Zd1d„Zd2d„Zd3d„Zd4d„Zd5d„Zd6d„Zd7d„Zd8d„Zd9d„Zd:d„Zd;d„Zd/d„Z	 	 	 	 	 	 	 	 	 	 d<d„Z 	 	 	 	 	 	 	 	 	 	 d=d„Z!	 	 	 	 	 	 	 	 	 	 d=d„Z"d>d„Z#d?d „Z$d/d!„Z%d@d"„Z&dAd#„Z'dBd$„Z(dCd%„Z)dDd&„Z*dEd'„Z+	 	 	 	 	 	 dFd(„Z,dGd)„Z-	 dH	 	 	 dId+„Z.d/d,„Z/d/d-„Z0y*)JÚSessionStatea  SessionState allows users to store values that persist between app
    reruns.

    Example
    -------
    >>> if "num_script_runs" not in st.session_state:
    ...     st.session_state.num_script_runs = 0
    >>> st.session_state.num_script_runs += 1
    >>> st.write(st.session_state.num_script_runs)  # writes 1

    The next time your script runs, the value of
    st.session_state.num_script_runs will be preserved.
    >>> st.session_state.num_script_runs += 1
    >>> st.write(st.session_state.num_script_runs)  # writes 2
    r@   údict[str, Any]Ú
_old_stateÚ_new_session_stater?   Ú_new_widget_stater´   Ú_key_id_mapperr$   Úquery_paramsc                ó,   — t        j                  | «      S rE   rF   rH   s    r:   rJ   zSessionState.__repr__~  rK   r9   c                ó¾   — | D ]  }	 | |   | j                   |<   Œ | j                  j                  «        | j                  j                  «        y# t        $ r Y ŒXw xY w)z¤Copy all current session_state and widget_state values into our
        _old_state dict, and then clear our current session_state and
        widget_state.
        N)rÙ   rQ   rÚ   rÎ   rÛ   )rI   Ú
key_or_wids     r:   Ú_compact_statezSessionState._compact_state‚  sg   € ð
 ò 	ˆJðØ.2°:Ñ.>�—‘ 
Ò+ð	ð 	×Ñ×%Ñ%Ô'Ø×Ñ×$Ñ$Õ&øô ò ñ ðús   ‡AÁ	AÁAc                óÔ   — | j                   j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        y)z;Reset self completely, clearing all current and old values.N)rÙ   rÎ   rÚ   rÛ   rÜ   rH   s    r:   rÎ   zSessionState.clear‘  sH   € à�‰×ÑÔØ×Ñ×%Ñ%Ô'Ø×Ñ×$Ñ$Ô&Ø×Ñ×!Ñ!Õ#r9   c                ó  — | j                   j                  }i }| j                  «       D ]G  }t        |«      st	        |«      s	| |   ||<   Œ"t        |«      sŒ.t	        |«      rŒ:	 ||   }| |   ||<   ŒI |S # t        $ r Y ŒWw xY w)zVThe combined session and widget state, excluding keyless widgets and internal widgets.)rÜ   rÂ   Ú_keysr!   Ú_is_internal_keyr"   rQ   )rI   Úwid_key_mapÚstaterZ   r±   s        r:   Úfiltered_statezSessionState.filtered_state˜  s–   € ð ×)Ñ)×8Ñ8ˆà "ˆð —‘“ò 	ˆAÜ  Ô#Ô,<¸QÔ,?Ø ™7��a’Ü$ QÕ'Ô0@ÀÕ0CðØ% a™.�Cà!% a¡�E˜#’Jð	ð ˆøô  ò ñ ðús   Á$A5Á5	BÂ Bc                ó  — | j                   D �ch c]  }| j                  |«      ’Œ }}t        | j                  j	                  «       «      }| j
                  D �ch c]  }| j                  |«      ’Œ }}||z  |z  S c c}w c c}w )z÷All keys active in Session State, with widget keys converted
        to widget ids when one is known. (This includes autogenerated keys
        for widgets that don't have user_keys defined, and which aren't
        exposed to user code).
        )rÙ   Ú_get_widget_idÚsetrÛ   rn   rÚ   )rI   rZ   Úold_keysÚnew_widget_keysÚnew_session_state_keyss        r:   rä   zSessionState._keys³  s‰   € ð 59·O±OÖD¨q�D×'Ñ'¨Õ*ÐDˆÐDÜ˜d×4Ñ4×9Ñ9Ó;Ó<ˆà,0×,CÑ,Cö"
Ø'(ˆD×Ñ Õ"ð"
Ðð "
ð ˜/Ñ)Ð,BÑBÐBùò Eùò"
s   �A<ÁBc                ó   — || j                   v S )zCTrue if a value with the given key is in the current session state.©rÚ   )rI   Úuser_keys     r:   Úis_new_state_valuezSessionState.is_new_state_valueÀ  s   € à˜4×2Ñ2Ð2Ð2r9   c                ó"   — || j                   |<   y)z€Reset a new session state value to a given value
        without triggering the "state value cannot be modified" error.
        Nrð   )rI   rñ   r1   s      r:   Úreset_state_valuezSessionState.reset_state_valueÄ  s   € ð -2ˆ×Ñ Ò)r9   c                ó4   — t        | j                  «       «      S )zrReturn an iterator over the keys of the SessionState.
        This is a shortcut for `iter(self.keys())`.
        )Úiterrä   rH   s    r:   rl   zSessionState.__iter__Ê  s   € ô �D—J‘J“LÓ!Ð!r9   c                ó4   — t        | j                  «       «      S )z+Return the number of items in SessionState.)ri   rä   rH   s    r:   rj   zSessionState.__len__Ð  s   € ä�4—:‘:“<Ó Ð r9   c                óö   — | j                   j                  }| j                  |«      }||v r
||k(  r||   }	 | j                  ||«      }|�t	        | ||«      S |S # t
        $ r t        t        |«      «      ‚w xY wrE   )rÜ   rÂ   rê   Ú_getitemr#   rQ   r²   )rI   r±   ræ   r˜   Ú
base_values        r:   r_   zSessionState.__getitem__Ô  s˜   € Ø×)Ñ)×8Ñ8ˆØ×'Ñ'¨Ó,ˆ	à˜Ñ#¨	°SÒ(8à˜iÑ(ˆCð	<ØŸ™ y°#Ó6ˆJð Ð(ô    i°Ó<ðð  ðøô
 ò 	<ÜÔ5°cÓ:Ó;Ð;ð	<ús   · A ÁA ÁA8c                ó>  — |€|€t        d«      ‚|�	 | j                  |   S |�	 | j                  |   S |�	 | j                  |   S |�	 | j                  |   S t        ‚# t        $ r Y ŒGw xY w# t        $ r Y ŒDw xY w# t        $ r Y ŒAw xY w# t        $ r Y t        ‚w xY w)zåGet the value of an entry in Session State, using either the
        user-provided key or a widget id as appropriate for the internal dict
        being accessed.

        At least one of the arguments must have a value.
        zEuser_key and widget_id cannot both be None. This should never happen.)Ú
ValueErrorrÚ   rQ   rÛ   rÙ   ©rI   r˜   rñ   s      r:   rù   zSessionState._getitemå  sî   € ð Ð 	Ð 1ÜØWóð ð ÐðØ×.Ñ.¨xÑ8Ð8ð Ð ðØ×-Ñ-¨iÑ8Ð8ð Ð ðØ—‘ yÑ1Ð1ð ÐðØ—‘ xÑ0Ð0ô
 ˆøô; ò Ùðûô ò Ùðûô ò Ùðûô ò Øô ˆð	úsE   “A ¥A- ·A< Á	B Á	A*Á)A*Á-	A9Á8A9Á<	BÂBÂ	BÂBc                óÖ   — t        «       }|�N| j                  j                  |d«      }|j                  }|j                  }||v s||v rt        d|› d|› d�«      ‚|| j                  |<   y)zåSet the value of the session_state entry with the given user_key.

        If the key corresponds to a widget or form that's been instantiated
        during the current script run, raise a StreamlitAPIException instead.
        Nz`st.session_state.z0` cannot be modified after the widget with key `z` is instantiated.)r   rÜ   rÈ   Úwidget_ids_this_runÚform_ids_this_runr   rÚ   )rI   rñ   r1   r£   r˜   Ú
widget_idsÚform_idss          r:   rd   zSessionState.__setitem__  s†   € ô !Ó"ˆàˆ?Ø×+Ñ+×;Ñ;¸HÀdÓKˆIØ×0Ñ0ˆJØ×,Ñ,ˆHà˜JÑ&¨(°hÑ*>Ü+Ø(¨¨
ð 3"Ø"* Ð+=ð?óð ð
 -2ˆ×Ñ Ò)r9   c                óŠ  — | j                  |«      }|| v s|| v st        t        |«      «      ‚|| j                  v r| j                  |= || j                  v r| j                  |= || j
                  v r| j
                  j                  |«       || j                  v r| j                  |= || j                  v r| j                  |= y y rE   )rê   rQ   r²   rÚ   rÙ   rÜ   r¿   rÛ   r½   s      r:   rg   zSessionState.__delitem__(  sÀ   € Ø×'Ñ'¨Ó,ˆ	à�t‘˜y¨DÑ0ÜÔ5°cÓ:Ó;Ð;à�$×)Ñ)Ñ)Ø×'Ñ'¨Ð,à�$—/‘/Ñ!Ø—‘ Ð$à�$×%Ñ%Ñ%Ø×Ñ×&Ñ& sÔ+à˜×.Ñ.Ñ.Ø×&Ñ& yÐ1à˜Ÿ™Ñ'Ø—‘ 	Ñ*ð (r9   c                ó\   — |j                   D ]  }| j                  j                  |«       Œ y)zHSet the value of all widgets represented in the given WidgetStatesProto.N)ÚwidgetsrÛ   r{   )rI   Úwidget_statesrç   s      r:   Úset_widgets_from_protoz#SessionState.set_widgets_from_proto=  s-   € à"×*Ñ*ò 	@ˆEØ×"Ñ"×8Ñ8¸Õ?ñ	@r9   c                ó†   — | j                  «        | j                  «        | j                  |«       | j                  «        y)z¾Called by ScriptRunner before its script re-runs.

        Update widget data and call callbacks on widgets whose value changed
        between the previous and current script runs.
        N)Ú_reset_triggersrá   r  Ú_call_callbacks)rI   Úlatest_widget_statess     r:   Úon_script_will_rerunz!SessionState.on_script_will_rerunB  s7   € ð 	×ÑÔØ×ÑÔØ×#Ñ#Ð$8Ô9Ø×ÑÕr9   c                óú  — ddl m} | j                  D �cg c]I  }| j                  |«      r6| j                  j                  j                  |«      x}	 �|j                  �|‘ŒK }}|D ]  }	 | j                  j                  |«       Œ  t        | j                  j                  j                  «       «      }|D ]Ž  }| j                  j                  j                  |«      }|r|j                  €Œ7|j                  xs d}|j                   xs i }| j#                  ||||«       |j$                  dk(  sŒ{| j'                  ||||«       Œ� yc c}w # |$ r' t        «       j                  j                  d«       Y �Œw xY w)zFCall callbacks for widgets whose value changed or whose trigger fired.r   ©ÚRerunExceptionNú0Calling st.rerun() within a callback is a no-op.r8   rM   )Ústreamlit.runtime.scriptrunnerr  rÛ   Ú_widget_changedrC   rP   rœ   r¤   r   Úmain_dgÚwarningÚlistrB   rn   Ú	callbacksr�   rž   Ú_dispatch_trigger_callbacksrO   Ú_dispatch_json_change_callbacks)rI   r  rr   r\   Ú&changed_widget_ids_for_single_callbackÚwidget_ids_to_processr¡   r¢   s           r:   r
  zSessionState._call_callbacksN  s€  € åAð
 ×-Ñ-ö2
àØ×#Ñ# CÔ(Ø!×3Ñ3×CÑC×GÑGÈÓLÐL�Øðà×!Ñ!Ð-ò ð2
Ð.ð 2
ð :ò 	ˆCðØ×&Ñ&×4Ñ4°SÕ9ð	ô !% T×%;Ñ%;×%BÑ%B×%GÑ%GÓ%IÓ JÐà(ò 	RˆCØ×-Ñ-×=Ñ=×AÑAÀ#ÓFˆHÙ˜x×1Ñ1Ð9Øà×)Ñ)Ò/¨RˆDØ×-Ñ-Ò3°ˆFð ×,Ñ,¨S°(¸DÀ&ÔIð ×"Ñ" lÓ2Ø×4Ñ4°S¸(ÀDÈ&ÕQñ	Rùò)2
øð "ò Ü)Ó+×3Ñ3×;Ñ;ØF÷ðús   •AE	Á+EÅ(E:Å9E:c                óR  — ddl m} t        «       }|r$|j                  �d|_        	  ||i |¤Ž d|_        y	  ||i |¤Ž y# |$ r& t        «       j                  j                  d«       Y Œ<w xY w# d|_        w xY w# |$ r& t        «       j                  j                  d«       Y yw xY w)a  Execute a widget callback with fragment-aware context.

        If the widget belongs to a fragment, temporarily marks the current
        script context as being inside a fragment callback to adapt rerun
        semantics. Attempts to call ``st.rerun()`` inside a widget callback are
        converted to a user-visible warning and treated as a no-op.

        Parameters
        ----------
        callback_fn : WidgetCallback
            The user-provided callback to execute.
        cb_metadata : WidgetMetadata[Any]
            Metadata of the widget associated with the callback.
        cb_args : WidgetArgs
            Positional arguments passed to the callback.
        cb_kwargs : dict[str, Any]
            Keyword arguments passed to the callback.
        r   r  NTr  F)r  r  r   rŸ   r    r   r  r  )rI   Úcallback_fnÚcb_metadataÚcb_argsÚ	cb_kwargsr  r£   s          r:   Ú_execute_widget_callbackz%SessionState._execute_widget_callbackv  s´   € õ2 	Bä Ó"ˆÙ�;×*Ñ*Ð6Ø'+ˆCÔ$ð1Ù˜WÐ2¨	Ò2ð ,1�Õ(ðÙ˜WÐ2¨	Ó2øð "ò Ü)Ó+×3Ñ3×;Ñ;ØFöðûð
 ,1�Õ(ûð "ò Ü)Ó+×3Ñ3×;Ñ;ØFöðús4   §A ¸A; Á(A,Á)A/ Á+A,Á,A/ Á/	A8Á;(B&Â%B&c                óÎ  — | j                   j                  |«      }|sy|j                  rª	 | j                   |   }t	        |t
        «      r|}n|g}|D ]~  }t	        |t        «      sŒt        d|«      j                  d«      }	t	        |	t        «      sŒ@|j                  sŒM|j                  j                  |	«      }
|
€Œk| j                  |
|||«       Œ€ yy# t        $ r d}Y Œ¨w xY w)a  Dispatch trigger-style callbacks for a widget.

        Handles the JSON trigger aggregator. The JSON payload may be a single
        event dict or a list of event dicts; each event must contain an
        ``"event"`` field that maps to the corresponding callback name in
        ``metadata.callbacks``.

        Examples
        --------
        A component with a "submit" callback:

        >>> metadata.callbacks = {"submit": on_submit}

        The frontend can send a single event payload:

        >>> {"event": "submit", "value": "payload"}

        Or a list of event payloads to be processed in order:

        >>> [{"event": "edit", ...}, {"event": "submit", ...}]

        Parameters
        ----------
        wid : str
            The widget ID.
        metadata : WidgetMetadata[Any]
            Metadata for the widget, including registered callbacks.
        args : WidgetArgs
            Positional arguments forwarded to the callback.
        kwargs : dict[str, Any]
            Keyword arguments forwarded to the callback.
        NzMapping[str, object]Úevent)rÛ   r”   r†   rQ   rR   r  r®   r   rP   rN   r  r   )rI   rr   r\   r¡   r¢   Úwidget_proto_stater^   ÚpayloadsÚpayloadÚ
event_nameÚcbs              r:   r  z(SessionState._dispatch_trigger_callbacks¤  sé   € ðN "×3Ñ3×BÑBÀ3ÓGÐÙ!Øð ×0Ò0ð$Ø#×5Ñ5°cÑ:�ô
 ˜,¬Ô-Ø'‘à(˜>�à#ò V�Ü˜g¤tÕ,Ü!%Ð&<¸gÓ!F×!JÑ!JÈ7Ó!S�JÜ! *¬cÕ2°x×7IÓ7IØ%×/Ñ/×3Ñ3°JÓ?˜Ø™>Ø ×9Ñ9¸"¸hÈÈfÕUñVð 1øô ò $Ø#’ð$ús   ¬C ÃC$Ã#C$c                ó  — |j                   sy	 | j                  j                  |«      }| j                  j                  |«      }dd„} ||«      } ||«      }	|s|	rŽ|j                  «       |	j                  «       z  }
|
D �ch c](  }|	j                  |«      |j                  |«      k7  sŒ'|’Œ* }}|D ]4  }|j                   j                  |«      }|€Œ!| j                  ||||«       Œ6 yy# t        $ r d}Y ŒÏw xY wc c}w )a8  Dispatch change callbacks for JSON-valued widgets.

        Computes a shallow diff between the new and old JSON maps and invokes
        callbacks for keys that changed or were added/removed.

        Parameters
        ----------
        wid : str
            The widget ID.
        metadata : WidgetMetadata[Any]
            Metadata for the widget, including registered callbacks.
        args : WidgetArgs
            Positional arguments forwarded to the callback.
        kwargs : dict[str, Any]
            Keyword arguments forwarded to the callback.
        Nc                óæ   — t        | t        «      si S t        d| «      } t        | j	                  «       «      dhk(  r,| j                  d«      }t        |t        «      rt        |«      S t        | «      S )NrØ   r1   )rR   r®   r   rë   rn   rP   )Úobjr1   s     r:   Úunwrapz<SessionState._dispatch_json_change_callbacks.<locals>.unwrap  s^   € Ü˜c¤4Ô(Ø�	äÐ'¨Ó-ˆCÜ�3—8‘8“:‹ 7 )Ò+ØŸ™ Ó(�Ü˜e¤TÔ*Ü ›;Ð&ä˜“9Ðr9   )r*  Úobjectr¦   zdict[str, object])r  rÛ   rP   rQ   rÙ   rn   r   )rI   rr   r\   r¡   r¢   Únew_valÚold_valr+  Únew_mapÚold_mapÚall_keysrZ   Úchanged_keysr±   r'  s                  r:   r  z,SessionState._dispatch_json_change_callbacksä  s   € ð. ×!Ò!Øð	Ø×,Ñ,×0Ñ0°Ó5ˆGð —/‘/×%Ñ% cÓ*ˆó
	ñ ˜“/ˆÙ˜“/ˆá‘gØ—|‘|“~¨¯©«Ñ6ˆHØ'/ÖT !°7·;±;¸q³>ÀWÇ[Á[ÐQRÃ^Ó3SšAÐTˆLÐTà#ò N�Ø×'Ñ'×+Ñ+¨CÓ0�Ø‘>Ø×1Ñ1°"°hÀÀfÕMñNð	 øô' ò 	ØŠGð	üò* Us   �C, Â(C=Â+C=Ã,C:Ã9C:c                ó|   — | j                   j                  |«      }| j                  j                  |«      }||k7  }|S )zuTrue if the given widget's value changed between the previous
        script run and the current script run.
        )rÛ   rP   rÙ   )rI   r˜   Ú	new_valueÚ	old_valueÚchangeds        r:   r  zSessionState._widget_changed  s=   € ð ×*Ñ*×.Ñ.¨yÓ9ˆ	Ø—O‘O×'Ñ'¨	Ó2ˆ	Ø! YÑ.ˆØˆr9   c                óF   — | j                  «        | j                  |«       y)a”  Called by ScriptRunner after its script finishes running.
         Updates widgets to prepare for the next script run.

        Parameters
        ----------
        widget_ids_this_run: set[str]
            The IDs of the widgets that were accessed during the script
            run. Any widget state whose ID does *not* appear in this set
            is considered "stale" and will be removed.
        N)r	  Ú_remove_stale_widgets)rI   rÿ   s     r:   Úon_script_finishedzSessionState.on_script_finished%  s   € ð 	×ÑÔØ×"Ñ"Ð#6Õ7r9   c                ó   — | j                   D ]y  }| j                   j                  j                  |«      }|€Œ+|j                  dk(  rt	        d«      | j                   |<   ŒS|j                  dv sŒbt	        d«      | j                   |<   Œ{ | j
                  D ]g  }| j                   j                  j                  |«      }|€Œ+|j                  dk(  rd| j
                  |<   ŒJ|j                  dv sŒYd| j
                  |<   Œi y)z8Set all trigger values in our state dictionary to False.NÚtrigger_valueF>   r‰   r†   rˆ   )rÛ   rC   rP   rO   r<   rÙ   )rI   Ústate_idr\   s      r:   r	  zSessionState._reset_triggers3  sü   € à×.Ñ.ò 
	CˆHØ×-Ñ-×=Ñ=×AÑAÀ(ÓKˆHØÑ#Ø×&Ñ&¨/Ò9Ü7<¸U³|�D×*Ñ*¨8Ò4Ø×(Ñ(ð -ò ô
 8=¸T³{�D×*Ñ*¨8Ò4ð
	Cð Ÿ™ò 
	5ˆHØ×-Ñ-×=Ñ=×AÑAÀ(ÓKˆHØÑ#Ø×&Ñ&¨/Ò9Ø05�D—O‘O HÒ-Ø×(Ñ(ð -ò ð
 15�D—O‘O HÒ-ñ
	5r9   c           	     óf  — t        «       }|€y| j                  j                  ||j                  «       | j                  j                  «       D ��ci c]M  \  }}t        |«      r:t        | j                  j                  j                  |«      ||j                  «      s||“ŒO c}}| _        yc c}}w )zHRemove widget state for widgets whose ids aren't in `active_widget_ids`.N)
r   rÛ   r„   rƒ   rÙ   rp   r!   r�   rC   rP   )rI   r‚   r£   rZ   rc   s        r:   r8  z"SessionState._remove_stale_widgetsM  sž   € ä Ó"ˆØˆ;Øà×Ñ×3Ñ3ØØ×%Ñ%ô	
ð Ÿ™×-Ñ-Ó/÷
á��1ä! !Ô$Ü'Ø×*Ñ*×:Ñ:×>Ñ>¸qÓAØ%Ø×-Ñ-ôð	 ˆq‰Dó
ˆ�ùó 
s   ÁAB-c                óL   — | j                   j                  j                  |«      S )zBReturn the metadata for a widget id from the current widget state.)rÛ   rC   rP   rÊ   s     r:   Ú_get_widget_metadataz!SessionState._get_widget_metadatag  s   € à×%Ñ%×5Ñ5×9Ñ9¸)ÓDÐDr9   c                óN   — |j                   }|| j                  j                  |<   y)zSet a widget's metadata.N)ry   rÛ   rC   )rI   rC   r˜   s      r:   Ú_set_widget_metadataz!SessionState._set_widget_metadatak  s#   € à#×&Ñ&ˆ	Ø<Kˆ×Ñ×.Ñ.¨yÒ9r9   c                ó6   — | j                   j                  «       S )r–   )rÛ   r™   rH   s    r:   Úget_widget_stateszSessionState.get_widget_statesp  s   € à×%Ñ%×6Ñ6Ó8Ð8r9   c                óN   — t        d| j                  j                  ||«      «      S )znTurns a value that might be a widget id or a user provided key into
        an appropriate widget id.
        rN   )r   rÜ   rÈ   rf   s     r:   rê   zSessionState._get_widget_idt  s$   € ô �E˜4×.Ñ.×>Ñ>¸qÀ!ÓDÓEÐEr9   c                ó"   — || j                   |<   y rE   )rÜ   rý   s      r:   Ú_set_key_widget_mappingz$SessionState._set_key_widget_mapping|  s   € Ø(1ˆ×Ñ˜HÒ%r9   c                ód  — |j                   }| j                  |«       |�| j                  ||«       || vr?|�|| vr9|j                  }t	         |d«      «      }| j
                  j                  ||«       t        d| |   «      }t	        |«      }|duxr | j                  |«      }t        ||«      S )a  Register a widget with the SessionState.

        Returns
        -------
        RegisterWidgetResult[T]
            Contains the widget's current value, and a bool that will be True
            if the frontend needs to be updated with the current value.
        Nr   )
ry   rA  rF  rX   r	   rÛ   r}   r   rò   r   )rI   r\   rñ   r˜   rX   Úinitial_widget_valueÚwidget_valueÚwidget_value_changeds           r:   Úregister_widgetzSessionState.register_widget  sÇ   € ð —K‘Kˆ	à×!Ñ! (Ô+ØÐà×(Ñ(¨°HÔ=à˜DÑ  hÐ&6¸(È$Ñ:Nð $×0Ñ0ˆLÜ#+©L¸Ó,>Ó#?Ð Ø×"Ñ"×1Ñ1°)Ð=QÔRô
 ˜C  i¡Ó1ˆÜ Ó-ˆð  (¨tÐ3ò  
¸×8OÑ8OØó9
Ðô $ LÐ2FÓGÐGr9   c                ó.   — 	 | |    y# t         $ r Y yw xY w)NTF)rQ   r¹   s     r:   rº   zSessionState.__contains__¦  s'   € ð	Ø�ŠIð øô ò 	Ùð	ús   ‚ ˆ	“Nc                óF   — ddl m} t        dd || «      «      }t        |giS )Nr   )ÚasizeofÚst_session_stateÚ )Ú streamlit.vendor.pympler.asizeofrN  r&   r%   )rI   Ú_family_namesrN  Ústats       r:   Ú	get_statszSessionState.get_stats®  s)   € õ 	=äÐ+¨R±¸³Ó?ˆô $ d VÐ,Ð,r9   c                ó¨   — | D ]  }	 t        j                  | |   «       Œ y# t        $ r&}dt        | |   «      › d|› d�}t	        |«      |‚d}~ww xY w)z¿Verify that everything added to session state can be serialized.
        We use pickleability as the metric for serializability, and test for
        pickleability by just trying it.
        z%Cannot serialize the value (of type `z`) of 'aV  ' in st.session_state. Streamlit has been configured to use [pickle](https://docs.python.org/3/library/pickle.html) to serialize session_state values. Please convert the value to a pickle-serializable type. To learn more about this behavior, see [our docs](https://docs.streamlit.io/knowledge-base/using-streamlit/serializable-session-state).N)ÚpicklerŽ   Ú	ExceptionÚtyper   )rI   rZ   ÚeÚerr_msgs       r:   Ú_check_serializablez SessionState._check_serializableº  sw   € ð
 ò 	FˆAðFÜ—‘˜T !™WÕ%ñ	Føô ò 	Fà;¼DÀÀaÁ»M¸?È'ÐRSÐQTð U{ð {ð ô 6°gÓ>ÀAÐEûð	Fús   ‡"¢	A«!AÁAc                óP   — t        j                  d«      r| j                  «        yy)z“Verify that session state can be serialized, if the relevant config
        option is set.

        See `_check_serializable` for details.
        z&runner.enforceSerializableSessionStateN)r   Ú
get_optionr[  rH   s    r:   Úmaybe_check_serializablez%SessionState.maybe_check_serializableÍ  s%   € ô ×ÑÐEÔFØ×$Ñ$Õ&ð Gr9   r¥   rÔ   )r¦   rØ   )r¦   r«   )rñ   rN   r¦   rÑ   )rñ   rN   r1   z
Any | Noner¦   r§   )r¦   zIterator[Any]r¨   )r±   rN   r¦   r   )r˜   rÓ   rñ   rÓ   r¦   r   )rñ   rN   r1   r   r¦   r§   rÒ   )r  ÚWidgetStatesProtor¦   r§   )r  r_  r¦   r§   )
r  r   r  rª   r  r   r  rØ   r¦   r§   )
rr   rN   r\   rª   r¡   r   r¢   rØ   r¦   r§   )r˜   rN   r¦   rÑ   )rÿ   r«   r¦   r§   )r‚   r«   r¦   r§   )r˜   rN   r¦   úWidgetMetadata[Any] | None)rC   rª   r¦   r§   r­   )rZ   rN   r¦   rN   )r˜   rN   rñ   rN   r¦   r§   )r\   zWidgetMetadata[T]rñ   rÓ   r¦   zRegisterWidgetResult[T]rÐ   rE   ©rR  zSequence[str] | Noner¦   zdict[str, list[CacheStat]])1r3   r4   r5   r6   r   r®   rÙ   r7   rÚ   r?   rÛ   r´   rÜ   r$   rÝ   rJ   rá   rÎ   rÕ   rè   rä   rò   rô   rl   rj   r_   rù   rd   rg   r  r  r
  r   r  r  r  r9  r	  r8  r?  rA  rC  rê   rF  rK  rº   rT  r[  r^  r8   r9   r:   r×   r×   [  sì  … ññ" "'°tÔ!<€J�Ó<ñ */¸tÔ)DÐ˜ÓDñ "'°wÔ!?Ð�wÓ?ñ #(¸Ô"D€N�KÓDñ !&°kÔ B€L�+ÓBó ó'ó$ð òó ðó4Có3ó2ó"ó!ó<ó",ó\2ó*+ó*@ó

ó&RðP,à#ð,ð )ð,ð ð	,ð
 "ð,ð 
ó,ð\>Vàð>Vð &ð>Vð ð	>Vð
 ð>Vð 
ó>Vð@6Nàð6Nð &ð6Nð ð	6Nð
 ð6Nð 
ó6Nópó8ó5ó4
ó4EóLó
9óFó2ð%HØ)ð%HØ5?ð%Hà	 ó%HóNð 59ð
-Ø1ð
-à	#ó
-óFô&'r9   r×   c                ó,   — | j                  t        «      S rE   )Ú
startswithr*   r°   s    r:   rå   rå   ×  s   € Ø�>‰>Ô7Ó8Ð8r9   c                óN   — | sy| j                   |v xs |xr | j                  |v S )NT)ry   rŸ   )r\   r‚   rƒ   s      r:   r�   r�   Û  s=   € ñ
 Øð 	�‰Ð(Ð(ò 	YØ!ÒW h×&:Ñ&:ÐBWÐ&Wðð r9   c                  ó<   — e Zd ZU ded<   edd„«       Z	 d	 	 	 dd„Zy)	ÚSessionStateStatProviderr)   Ú_session_mgrc                ó   — t         fS rE   )r%   rH   s    r:   Ústats_familiesz'SessionStateStatProvider.stats_familiesð  s   € ä#Ð%Ð%r9   Nc                ó  — g }| j                   j                  «       D ]N  }|j                  j                  }|j	                  «       }|j                  «       D ]  }|j                  |«       Œ ŒP |si S t        t        |«      iS rE   )	rg  Úlist_active_sessionsÚsessionÚsession_staterT  rs   rŒ   r%   r(   )rI   rR  ÚstatsÚsession_inform  Úsession_statsÚfamily_statss          r:   rT  z"SessionStateStatProvider.get_statsô  s‡   € ð "$ˆØ ×-Ñ-×BÑBÓDò 	+ˆLØ(×0Ñ0×>Ñ>ˆMØ)×3Ñ3Ó5ˆMØ -× 4Ñ 4Ó 6ò +�Ø—‘˜\Õ*ñ+ð	+ñ
 ØˆIô $Ô%6°uÓ%=Ð>Ð>r9   )r¦   zSequence[str]rE   ra  )r3   r4   r5   r7   rÕ   ri  rT  r8   r9   r:   rf  rf  ì  s4   … à Ó àò&ó ð&ð 59ð?Ø1ð?à	#ô?r9   rf  )r±   rN   r¦   rN   rÐ   )r\   r`  r‚   r«   rƒ   r¬   r¦   rÑ   )HÚ
__future__r   rV   rV  Úcollections.abcr   r   r   r   r   Úcopyr	   Údataclassesr
   r   r   Útypingr   r   r   r   r   Ú	streamlitr   r   Ú$streamlit.delta_generator_singletonsr   Ústreamlit.errorsr   r   Ú streamlit.proto.WidgetStates_pb2r   r0   r   r_  Ú7streamlit.runtime.scriptrunner_utils.script_run_contextr   Ústreamlit.runtime.state.commonr   r   r   r   r   r   r    r!   r"   Ú$streamlit.runtime.state.presentationr#   Ú$streamlit.runtime.state.query_paramsr$   Ústreamlit.runtime.statsr%   r&   r'   r(   Ú!streamlit.runtime.session_managerr)   r*   r7   r,   r/   r<   r=   rN   r?   r²   r´   r×   rå   r�   rf  r8   r9   r:   ú<module>r�     s‡  ðö #ã Û ß QÕ QÝ ß 1Ñ 1÷õ ÷ #Ý Jß SÝ LÝ NÝ V÷
÷ 
õ 
õ AÝ <÷ó ñ Ý@ð (BÐ ˜uÓ Aà$Ð%Ð%?Ð@ð ˜uó ñ
 �$Ô÷ð ó ðñ �$Ô÷ð ó ðð ˜JÑ&€ˆ	Ó &ð ôK&ˆn˜S #˜XÑ&ó K&ó ðK&ó\ð ÷.,ð .,ó ð.,ðb ÷x	'ð x	'ó ðx	'óv9ðØ(ðàðð ,ðð 
ó	ð" ô?˜}ó ?ó ñ?r9   