+
    4O|jY¹  ã                  óJ  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIHtHtHtHtHtHt ^ RIHtHtHtHt ^ RIHtHt ^ RIHtHt ^ RI H!t! ^ R	I"H#t# ^ R
I$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t- ^ RI.H/t/ ^ RI0H1t1H2t2H3t3 ^ RI4H5t5H6t6H7t7H8t8H9t9 ^ RI:H;t; ^ RI<H=t= ^ RI>H?t?H@t@HAtAHBtBHCtC ^ RIDHEtEHFtFHGtGHHtHHItI ]'       d   ^ RIJHKtK ^ RILHMtM ^ RINHOtOHPtP RtQ]R! ]! ]S4      P¨                  4      tUR R ltV ! R R4      tW ! R R4      tXR R ltYR R ltZR# ) z<Internal class to monitor a topology of one or more servers.)ÚannotationsN)ÚPath)ÚTYPE_CHECKINGÚAnyÚCallableÚMappingÚOptionalÚcast)Ú_csotÚcommonÚhelpers_sharedÚperiodic_executor)Ú_ServerSessionÚ_ServerSessionPool)ÚMonitorBaseÚ
SrvMonitor)ÚPool)ÚServer)	ÚConnectionFailureÚInvalidOperationÚNetworkTimeoutÚNotPrimaryErrorÚOperationFailureÚPyMongoErrorÚServerSelectionTimeoutErrorÚWaitQueueTimeoutErrorÚ
WriteError)ÚHello)Ú_async_cond_waitÚ_async_create_conditionÚ_async_create_lock)Ú_SDAM_LOGGERÚ_SERVER_SELECTION_LOGGERÚ
_debug_logÚ_SDAMStatusMessageÚ_ServerSelectionStatusMessage)ÚPoolOptions)ÚServerDescription)Ú	SelectionÚany_server_selectorÚarbiter_server_selectorÚsecondary_server_selectorÚwritable_server_selector)ÚSRV_POLLING_TOPOLOGIESÚTOPOLOGY_TYPEÚTopologyDescriptionÚ)_updated_topology_description_srv_pollingÚupdated_topology_description)ÚObjectId)ÚTopologySettings)ÚClusterTimeÚ_AddressFc               ó    € V ^8„  d   QhRRRR/# )é   Ú	queue_refz"weakref.ReferenceType[queue.Queue]ÚreturnÚbool© )Úformats   "ÚVC:\Users\alokc\chatbot\backend\venv\Lib\site-packages\pymongo/asynchronous/topology.pyÚ__annotate__r>   W   s   € ÷ ñ Ð$Fð È4ñ ó    c                ó˜   € V ! 4       pV'       g   R #   VP                  4       pVw  r4V! V!   K    \        P                   d     R# i ; i)FT)Ú
get_nowaitÚqueueÚEmpty)r8   ÚqÚeventÚfnÚargss   &    r=   Úprocess_events_queuerH   W   sO   € Ù‹€AßÙà
ð	Ø—L‘L“NˆEð ‰HˆBÙ�ŒIøô	 �{‰{ô 	Øñ
 ð	ús   ”0 °A	ÁA	c                  óT  € ] tR t^htRtR R ltR R ltR R ltR\R	 R
 lltR]R R llt	R\R R llt
R\R R lltR^R R lltR_R R lltR_R R lltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR`R- R. lltR/ R0 ltR1 R2 ltR3 R4 lt]R5 R6 l4       tR7 R8 lt R9 R: lt!R; R< lt"R= R> lt#R? R@ lt$RA RB lt%RC RD lt&RE RF lt'RG RH lt(RI RJ lt)RK RL lt*RM RN lt+RO RP lt,RQ RR lt-RS RT lt.RU RV lt/RW RX lt0RY RZ lt1R[t2R# )aÚTopologyz*Monitor a topology of one or more servers.c               ó   € V ^8„  d   QhRR/# )r7   Útopology_settingsr3   r;   )r<   s   "r=   r>   ÚTopology.__annotate__k   s   € ÷ m4ñ m4Ð*:ñ m4r?   c           	     	ó  a€ VP                   V n         VP                  P                  V n        V P                  R J;'       d    V P                  P                  V n        V P                  R J;'       d    V P                  P                  V n        R V n        R V n	        V P
                  '       g   V P                  '       d   \        P                  ! ^dR7      V n        \        P                  ! \        P                  4      '       d+   \!        \        \"        P$                  V P                   R7       V P                  '       d]   V P                  f   Q hV P                  f   Q hV P                  P'                  V P                  P(                  V P                   334       Wn        \-        VP/                  4       VP1                  4       VP2                  R R V4      pW n        \-        \6        P8                  / R R R V P*                  4      pV P                  '       dh   V P                  f   Q hV P                  f   Q hV P                  P'                  V P                  P:                  W0P4                  V P                   334       \        P                  ! \        P                  4      '       dI   \!        \        \"        P<                  V P                   \?        V4      \?        V P4                  4      R7       VP@                   F×  pV P
                  '       d]   V P                  f   Q hV P                  f   Q hV P                  P'                  V P                  PB                  W@P                   334       \        P                  ! \        P                  4      '       g   K�  \!        \        \"        PD                  V P                   V^ ,          V^,          R7       KÙ  	  \G        VPI                  4       4      V n%        RV n&        RV n'        \Q        4       V n)        \U        V PR                  \V        '       d   V P*                  PX                  MR 4      V n-        / V n.        R V n/        R V n0        \c        4       V n2        V P
                  '       g   V P                  '       d‘   V P                  f   Q hR V3R llp\f        Ph                  ! \j        Pl                  \j        Pn                  VRR	7      p\p        Pr                  ! V P                  VPt                  4      oW`n	        VPw                  4        R V n<        V P*                  Pz                  e7   V P*                  P|                  '       g   \        W P*                  4      V n<        . V n@        R # )
N)Úmaxsize©ÚmessageÚ
topologyId©rQ   rR   ÚpreviousDescriptionÚnewDescription)rQ   rR   Ú
serverHostÚ
serverPortFc               ó   € V ^8„  d   QhRR/# )r7   r9   r:   r;   )r<   s   "r=   r>   Ú'Topology.__init__.<locals>.__annotate__Â   s   € ÷ 2ñ 2 $ñ 2r?   c               “  ó"   <"  € \        S 4      # 5i©N)rH   )Úweaks   €r=   ÚtargetÚ!Topology.__init__.<locals>.targetÂ   s   øé € Ü+¨DÓ1Ð1ùs   ƒÚpymongo_events_thread)ÚintervalÚmin_intervalr]   Úname)AÚ_topology_idÚ_pool_optionsÚ_event_listenersÚ
_listenersÚenabled_for_serverÚ_publish_serverÚenabled_for_topologyÚ_publish_tpÚ_eventsÚ_Topology__events_executorrB   ÚQueuer!   ÚisEnabledForÚloggingÚDEBUGr#   r$   ÚSTART_TOPOLOGYÚputÚpublish_topology_openedÚ	_settingsr/   Úget_topology_typeÚget_server_descriptionsÚreplica_set_nameÚ_descriptionr.   ÚUnknownÚ$publish_topology_description_changedÚTOPOLOGY_CHANGEÚreprÚseedsÚpublish_server_openedÚSTART_SERVERÚlistÚserver_descriptionsÚ_seed_addressesÚ_openedÚ_closedr    Ú_lockr   Ú_IS_SYNCÚcondition_classÚ
_conditionÚ_serversÚ_pidÚ_max_cluster_timer   Ú_session_poolr   ÚAsyncPeriodicExecutorr   ÚEVENTS_QUEUE_FREQUENCYÚMIN_HEARTBEAT_INTERVALÚweakrefÚrefÚcloseÚopenÚ_srv_monitorÚfqdnÚload_balancedr   Ú_monitor_tasks)ÚselfrL   Útopology_descriptionÚ
initial_tdÚseedr]   Úexecutorr\   s   &&     @r=   Ú__init__ÚTopology.__init__k   s&  ø€ Ø-×:Ñ:ˆÔØ+×9Ñ9×JÑJˆŒØ#Ÿ™°dÐ:×aÐa¸t¿¹×?aÑ?aˆÔØŸ?™?°$Ð6×_Ð_¸4¿?¹?×;_Ñ;_ˆÔð 15ˆŒØ&*ˆÔà××Ð 4×#3×#3Ð#3Ü Ÿ;š;¨sÔ3ˆDŒLä×$Ò$¤W§]¡]×3Ò3ÜÜÜ*×9Ñ9Ø×,Ñ,õð ××ÐØ—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ø�L‰L×Ñ˜dŸo™o×EÑEÈ×HYÑHYÐG[Ð\Ô]Ø*ŒÜ2Ø×/Ñ/Ó1Ø×5Ñ5Ó7Ø×.Ñ.ØØØó 
Ðð 1ÔÜ(Ü×!Ñ! 2 t¨T°4¸¿¹ó
ˆ
ð ××ÐØ—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ø�L‰L×Ñà—O‘O×HÑHØ×!2Ñ!2°D×4EÑ4EÐFðôô ×$Ò$¤W§]¡]×3Ò3ÜÜÜ*×:Ñ:Ø×,Ñ,Ü$(¨Ó$4Ü# D×$5Ñ$5Ó6õð &×+Ô+ˆDØ×#×#Ð#Ø—|‘|Ò/Ð/Ð/Ø—‘Ò2Ð2Ð2Ø—‘× Ñ  $§/¡/×"GÑ"GÈ$×PaÑPaÐIbÐ!cÔdÜ×(Ò(¬¯©×7Ô7ÜÜ Ü.×;Ñ;Ø#×0Ñ0Ø# A�wØ# A�w÷ñ ,ô  $Ð$8×$LÑ$LÓ$NÓOˆÔØˆŒØˆŒÜ'Ó)ˆŒ
Ü1Ø�J‰J¿(»(˜Ÿ™×6Ò6Èó
ˆŒð 13ˆŒØ#'ˆŒ	Ø8<ˆÔÜ/Ó1ˆÔà××Ð 4×#3×#3Ð#3Ø—<‘<Ò+Ð+Ð+÷2ð 2ô )×>Ò>Ü×6Ñ6Ü#×:Ñ:ØØ,ô	ˆHô —;’;˜tŸ|™|¨X¯^©^Ó<ˆDØ%-Ô"Ø�M‰MŒOà ˆÔØ�>‰>×ÑÒ*°4·>±>×3O×3OÐ3OÜ *¨4·±Ó @ˆDÔð 24ˆÖr?   c               ó   € V ^8„  d   QhRR/# ©r7   r9   ÚNoner;   )r<   s   "r=   r>   rM   Ú   s   € ÷ %(ñ %(˜Dñ %(r?   c              ƒ  ó"  "  € \         P                  ! 4       pV P                  f   Wn        MÖWP                  8w  dÇ   Wn        \        P                  R,          R8¼  d   R\
        3/pMR^/p\        P                  ! R/ VB  V P                  ;_uu_4       GRj  x€L
  V P                  P                  4        F  pVP                  4       G Rj  x€L
  K  	  V P                  P                  4        RRR4      GRj  x€L
  V P                  ;_uu_4       GRj  x€L
  V P                  4       G Rj  x€L
  RRR4      GRj  x€L
  R#  L® L{ LO  + GRj  x€L 
 '       g   i     Lf; i LP L: L,  + GRj  x€L 
 '       g   i     R# ; i5i)a€  Start monitoring, or restart after a fork.

No effect if called multiple times.

.. warning:: Topology is shared among multiple threads and is protected
  by mutual exclusion. Using Topology from a process other than the one
  that initialized it will emit a warning and may result in deadlock. To
  prevent this from happening, AsyncMongoClient must be created after any
  forking.

N:Nr7   NÚskip_file_prefixesÚ
stacklevel)é   é   )z¸AsyncMongoClient opened before fork. May not be entirely fork-safe, proceed with caution. See PyMongo's documentation for details: https://dochub.mongodb.org/core/pymongo-fork-deadlock)ÚosÚgetpidrŠ   ÚsysÚversion_infoÚ_pymongo_dirÚwarningsÚwarnr…   r‰   Úvaluesr’   rŒ   ÚresetÚ_ensure_opened)r˜   ÚpidÚkwargsÚservers   &   r=   r“   ÚTopology.openÚ   s  é € ô �iŠi‹kˆØ�9‰9ÒØ�IØ—I‘IÔØŒIÜ×Ñ Õ# wÔ.Ø.´°Ð@‘à&¨Ð*�ä�MŠMñ ð ò	ð —z—z—z“zà"Ÿm™m×2Ñ2Ö4�FØ Ÿ,™,›.×(Ò(ñ 5ð ×"Ñ"×(Ñ(Ô*÷ "—zð —:—:—:“:Ø×%Ñ%Ó'×'Ð'÷ —:‘:ñ "ñ )÷ "—z—z’zúñ Ù'÷ —:—:“:üsº   ‚BFÂE
ÂFÂ1EÃE
Ã"EÃ3FÃ>EÃ?FÄE,ÄFÄE2Ä3E.Ä4E2Ä8FÅE0ÅFÅEÅFÅE)	ÅEÅ
E)	Å"E)	Å$	FÅ.E2Å0FÅ2F	Å8E;Å9
F	ÆF	Æ	Fc               ó   € V ^8„  d   QhRR/# )r7   r9   Úfloatr;   )r<   s   "r=   r>   rM     s   € ÷ ñ ¨eñ r?   c                	ód   € \         P                  ! 4       pVf   V P                  P                  # V# r[   )r
   Ú	remainingrt   Úserver_selection_timeout)r˜   Útimeouts   & r=   Úget_server_selection_timeoutÚ%Topology.get_server_selection_timeout  s(   € ä—/’/Ó#ˆØŠ?Ø—>‘>×:Ñ:Ð:Øˆr?   Nc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r7   Úselectorú Callable[[Selection], Selection]Ú	operationÚstrr¹   úOptional[float]ÚaddressúOptional[_Address]Úoperation_idúOptional[int]Údeprioritized_serversúOptional[list[Server]]r9   zlist[Server]r;   )r<   s   "r=   r>   rM     sP   € ÷ -ñ -à2ð-ð ð-ð #2ð	-ð
 $ð-ð $ð-ð  6ð-ð 
ñ-r?   c              ƒ  ó  "  € Vf   V P                  4       pMTp\        '       g+   V P                  '       d   V P                  4       G Rj  x€L
  V P                  ;_uu_4       GRj  x€L
  V P                  VVVVVVR7      G Rj  x€L
 pV U	u. uF,  p	\        \        V P                  V	P                  4      4      NK.  	  up	uuRRR4      GRj  x€L
  #  L‹ Lp LSu up	i  L  + GRj  x€L 
 '       g   i     R# ; i5i)a2  Return a list of Servers matching selector, or time out.

:param selector: function that takes a list of Servers and returns
    a subset of them.
:param operation: The name of the operation that the server is being selected for.
:param server_selection_timeout: maximum seconds to wait.
    If not provided, the default value common.SERVER_SELECTION_TIMEOUT
    is used.
:param address: optional server address to select.

Calls self.open() if needed.

Raises exc:`ServerSelectionTimeoutError` after
`server_selection_timeout` if no matching servers are found.
N)rÇ   )
r»   r†   r—   Úcleanup_monitorsr…   Ú_select_servers_loopr	   r   Úget_server_by_addressrÃ   )
r˜   r¾   rÀ   r¹   rÃ   rÅ   rÇ   Úserver_timeoutr�   Úsds
   &&&&&&&   r=   Úselect_serversÚTopology.select_servers  sÕ   é € ð0 $Ò+Ø!×>Ñ>Ó@‰Nà5ˆN÷ ‹x˜D×/×/Ð/Ø×'Ñ'Ó)×)Ð)à—:—:—:“:Ø(,×(AÑ(AØØØØØØ&;ð )Bó )÷ #Ðñ PcóÙObÈ””V˜T×7Ñ7¸¿
¹
ÓCÖDÑObñ÷ —:’:ñ *áñ#ùò÷ —:—:“:üs�   ‚#D¦D¸DÁCÁDÁ(CÁ)DÁ,C$ÂCÂC$Â2CÃC$ÃDÃC"ÃDÃDÃC$ÃC$Ã"DÃ$C>	Ã*C-Ã+
C>	Ã6C>	Ã8	Dc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r7   r¾   r¿   rº   r¶   rÀ   rÁ   rÅ   rÆ   rÃ   rÄ   rÇ   rÈ   r9   úlist[ServerDescription]r;   )r<   s   "r=   r>   rM   7  sY   € ÷ P#ñ P#à2ðP#ð ðP#ð ð	P#ð
 $ðP#ð $ðP#ð  6ðP#ð 
!ñP#r?   c              ƒ  ó,  "  € \         P                  ! 4       pWr,           pRp	\        P                  ! \        P
                  4      '       dM   \        \        \        P                  VVVV P                  V P                  P                  P                  R7       V P                  P                  TTV P                  P                  V'       d   V U
u. uF  qªP                  NK  	  up
MRR7      pV'       Egù   V^ 8X  g   Wx8”  d´   \        P                  ! \        P
                  4      '       d]   \        \        \        P                   VVVV P                  V P                  P                  P                  V P#                  V4      R7       \%        V P#                  V4       RV RV P                  : 24      hV	'       gz   \        \        \        P&                  VVVV P                  V P                  P                  P                  \)        RV\         P                  ! 4       ,
          ,          4      R	7       R
p	V P+                  4       G Rj  x€L
  V P-                  4        \/        V P0                  \2        P4                  4      G Rj  x€L
  V P                  P7                  4        \         P                  ! 4       pV P                  P                  WV P                  P                  R7      pEK  V P                  P7                  4        V# u up
i  LÄ LŠ5i)z7select_servers() guts. Hold the lock when calling this.F)rQ   r¾   rÀ   ÚoperationIdÚtopologyDescriptionÚclientIdN)Úcustom_selectorrÇ   )rQ   r¾   rÀ   rÔ   rÕ   rÖ   Úfailurez, Timeout: zs, Topology Description: iè  )rQ   r¾   rÀ   rÔ   rÕ   rÖ   ÚremainingTimeMST)r×   )ÚtimeÚ	monotonicr"   rn   ro   rp   r#   r%   ÚSTARTEDÚdescriptionÚ_topology_settingsrc   rx   Úapply_selectorrt   Úserver_selectorÚFAILEDÚ_error_messager   ÚWAITINGÚintr°   Ú_request_check_allr   rˆ   r   r�   Úcheck_compatible)r˜   r¾   rº   rÀ   rÅ   rÃ   rÇ   ÚnowÚend_timeÚlogged_waitingr³   r�   s   &&&&&&&     r=   rË   ÚTopology._select_servers_loop7  s|  é € ô �nŠnÓˆØ•=ˆØˆä#×0Ò0´·±×?Ò?ÜÜ(Ü5×=Ñ=Ø!Ø#Ø(Ø$(×$4Ñ$4Ø×)Ñ)×<Ñ<×IÑIõð #×/Ñ/×>Ñ>ØØØ ŸN™N×:Ñ:ç$ñ EZÓ"ZÑDY¸&×#5Ô#5ÑDYÒ"Zàð ?ó 
Ð÷ &Ð%à˜!Œ|˜sœ~Ü+×8Ò8¼¿¹×GÒGÜÜ0Ü =× DÑ DØ!)Ø"+Ø$0Ø,0×,<Ñ,<Ø!%×!1Ñ!1×!DÑ!D×!QÑ!QØ $× 3Ñ 3°HÓ =õ	ô 2Ø×*Ñ*¨8Ó4Ð5°[ÀÀ	ÐIbÐcg×csÑcsÑbvÐwóð ÷ "ÜÜ,Ü9×AÑAØ%Ø'Ø ,Ø(,×(8Ñ(8Ø!×-Ñ-×@Ñ@×MÑMÜ$'¨°¼4¿>º>Ó;KÕ0KÕ(LÓ$Mõ	ð "&�à×%Ñ%Ó'×'Ð'Ø×#Ñ#Ô%ô # 4§?¡?´F×4QÑ4QÓR×RÐRØ×Ñ×.Ñ.Ô0Ü—.’.Ó"ˆCØ"&×"3Ñ"3×"BÑ"BØ°4·>±>×3QÑ3Qð #Có #Óð 	×Ñ×*Ñ*Ô,Ø"Ð"ùòg #[ñH (ñ SùsK   ‚C	LÃLÃLÃ$LÃ76LÄ.BLÆ?BLÉLÉ;LÊLÊB	LÌLc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# ©r7   r¾   r¿   rÀ   rÁ   r¹   rÂ   rÃ   rÄ   rÇ   rÈ   rÅ   rÆ   r9   r   r;   )r<   s   "r=   r>   rM   ‰  sP   € ÷ ñ à2ðð ðð #2ð	ð
 $ðð  6ðð $ðð 
ñr?   c              ƒ  	ó  "  € V P                  VVVVVV4      G R j  x€L
 p\        V4      ^8X  d
   V^ ,          # \        P                  ! V^4      w  r‰VP                  P
                  V	P                  P
                  8:  d   V# V	#  Li5ir[   )rÏ   ÚlenÚrandomÚsampleÚpoolÚoperation_count)
r˜   r¾   rÀ   r¹   rÃ   rÇ   rÅ   ÚserversÚserver1Úserver2s
   &&&&&&&   r=   Ú_select_serverÚTopology._select_server‰  s„   é € ð ×+Ñ+ØØØ$ØØØ!ó
÷ 
ˆô ˆw‹<˜1ÔØ˜1•:ÐÜ!Ÿ=š=¨°!Ó4ÑˆØ�<‰<×'Ñ'¨7¯<©<×+GÑ+GÔGØˆNàˆNñ
ùs   ‚BœB�A*Bc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# rì   r;   )r<   s   "r=   r>   rM   ¢  sP   € ÷  ñ  à2ð ð ð ð #2ð	 ð
 $ð ð  6ð ð $ð ð 
ñ r?   c              ƒ  ó6  "  € V P                  VVVVVVR7      G Rj  x€L
 p\        P                  ! 4       '       d+   \        P                  ! VP                  P
                  4       \        P                  ! \        P                  4      '       d…   \        \        \        P                  VVVV P                  V P                  P                  P                  VP                  P                  ^ ,          VP                  P                  ^,          R7	       V#  Lù5i)zALike select_servers, but choose a random server if several match.©rÅ   N)rQ   r¾   rÀ   rÔ   rÕ   rÖ   rV   rW   )rö   r
   Úget_timeoutÚset_rttrÝ   Úmin_round_trip_timer"   rn   ro   rp   r#   r%   Ú	SUCCEEDEDrÞ   rc   rÃ   )r˜   r¾   rÀ   r¹   rÃ   rÇ   rÅ   r³   s   &&&&&&& r=   Úselect_serverÚTopology.select_server¢  sà   é € ð ×*Ñ*ØØØ$ØØ!Ø%ð +ó 
÷ 
ˆô ×Ò×ÒÜ�MŠM˜&×,Ñ,×@Ñ@ÔAÜ#×0Ò0´·±×?Ò?ÜÜ(Ü5×?Ñ?Ø!Ø#Ø(Ø$(×$4Ñ$4Ø×)Ñ)×<Ñ<×IÑIØ!×-Ñ-×5Ñ5°aÕ8Ø!×-Ñ-×5Ñ5°aÕ8õ
ð ˆñ-
ùs   ‚D�DžD½ADÂBDc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r7   rÃ   r5   rÀ   rÁ   r¹   rÆ   rÅ   r9   r   r;   )r<   s   "r=   r>   rM   Ä  s<   € ÷ 
ñ 
àð
ð ð
ð #0ð	
ð
 $ð
ð 
ñ
r?   c              ƒ  óR   "  € V P                  \        VVVVR7      G Rj  x€L
 #  L5i)aÕ  Return a Server for "address", reconnecting if necessary.

If the server's type is not known, request an immediate check of all
servers. Time out after "server_selection_timeout" if the server
cannot be reached.

:param address: A (host, port) pair.
:param operation: The name of the operation that the server is being selected for.
:param server_selection_timeout: maximum seconds to wait.
    If not provided, the default value
    common.SERVER_SELECTION_TIMEOUT is used.
:param operation_id: The unique id of the current operation being performed. Defaults to None if not provided.

Calls self.open() if needed.

Raises exc:`ServerSelectionTimeoutError` after
`server_selection_timeout` if no matching servers are found.
rú   N)rÿ   r)   )r˜   rÃ   rÀ   r¹   rÅ   s   &&&&&r=   Úselect_server_by_addressÚ!Topology.select_server_by_addressÄ  s8   é € ð2 ×'Ñ'ÜØØ$ØØ%ð (ó 
÷ 
ð 	
ñ 
ùs   ‚' %¡'c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r7   Úserver_descriptionr'   Ú
reset_poolr:   Úinterrupt_connectionsr9   r¡   r;   )r<   s   "r=   r>   rM   å  s8   € ÷ E%ñ E%à-ðE%ð ðE%ð  $ð	E%ð
 
ñE%r?   c           	   ƒ  óž  "  € V P                   pVP                  VP                  ,          p\        WQ4      '       d   R# \	        V P                   V4      pVP
                  '       g2   VP                  '       do   VP                  \        P                  8X  dP   V P                  P                  VP                  4      pV'       d#   VP                  P                  4       G Rj  x€L
  WQ8H  pV P                  '       dq   V'       gi   V P                  f   Q hV P                   f   Q hV P                  P#                  V P                   P$                  WQVP                  V P&                  334       W`n         V P)                  4       G Rj  x€L
  V P*                  '       dp   V'       gh   V P                  f   Q hV P                   f   Q hV P                  P#                  V P                   P,                  W@P                   V P&                  334       \.        P0                  ! \2        P4                  4      '       dQ   V'       gI   \7        \.        \8        P:                  V P&                  \=        V4      \=        V P                   4      R7       V P>                  '       d’   VP                  \        P@                  8X  ds   V P                   P                  \B        9  dT   V P>                  PE                  4       G Rj  x€L
  \F        '       g&   V PH                  PK                  V P>                  4       V PL                  PO                  4        R#  ELc ELÂ LW5i)zYProcess a new ServerDescription on an opened topology.

Hold the lock when calling this.
NrS   )(rx   Ú_server_descriptionsrÃ   Ú_is_stale_server_descriptionr1   Úis_readableÚis_server_type_knownÚtopology_typer.   ÚSingler‰   Úgetrñ   Úreadyrh   rk   rf   rr   Ú"publish_server_description_changedrc   Ú_update_serversrj   rz   r!   rn   ro   rp   r#   r$   r{   r|   r”   ry   r-   r’   r†   r—   Úappendrˆ   Ú
notify_all)	r˜   r  r  r	  Útd_oldÚsd_oldÚnew_tdr³   Úsuppress_events	   &&&&     r=   Ú_process_changeÚTopology._process_changeå  sv  é € ð ×"Ñ"ˆØ×,Ñ,Ð-?×-GÑ-GÕHˆÜ'¨×CÒCáä-¨d×.?Ñ.?ÐASÓTˆà×)×)Ð)Ø×3×3Ð3¸×8LÑ8LÔP]×PdÑPdÔ8dà—]‘]×&Ñ&Ð'9×'AÑ'AÓBˆFßØ—k‘k×'Ñ'Ó)×)Ð)àÑ5ˆØ××Ð¯Ø—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ø�L‰L×Ñà—O‘O×FÑFØÐ1C×1KÑ1KÈT×M^ÑM^Ð_ðôð #ÔØ×"Ñ"Ó$×$Ð$à××Ð§NØ—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ø�L‰L×Ñà—O‘O×HÑHØ×.Ñ.°×0AÑ0AÐBðôô ×$Ò$¤W§]¡]×3Ò3¿NÜÜÜ*×:Ñ:Ø×,Ñ,Ü$(¨£LÜ# D×$5Ñ$5Ó6õð ××ÐØ× Ñ ¤M×$9Ñ$9Ô9Ø×!Ñ!×/Ñ/Ô7MÔMà×#Ñ#×)Ñ)Ó+×+Ð+ß“8Ø×#Ñ#×*Ñ*¨4×+<Ñ+<Ô=ð 	�‰×"Ñ"Ö$ò] *ò 	%ñ6 ,ùsr   ‚A6MÁ9AMÃMÃ"MÃ#!MÄBMÆMÆMÆMÆ%BMÈ6MÈ>AMÊAMË3MË4MÌAMÍMÍMc               ó(   € V ^8„  d   QhRRRRRRRR/# r  r;   )r<   s   "r=   r>   rM   ,  s8   € ÷ Uñ Uà-ðUð ðUð  $ð	Uð
 
ñUr?   c              ƒ  ó  "  € V P                   ;_uu_4       GRj  x€L
  V P                  '       dF   V P                  P                  VP                  4      '       d   V P                  WV4      G Rj  x€L
  RRR4      GRj  x€L
  V'       dV   V P                  P                  VP                  4      pV'       d'   VP                  P                  VR7      G Rj  x€L
  R# R# R#  LÊ Lu Lg  + GRj  x€L 
 '       g   i     L~; i L,5i)z>Process a new ServerDescription after an hello call completes.N)r	  )
r…   rƒ   rx   Ú
has_serverrÃ   r  r‰   r  rñ   r¯   )r˜   r  r  r	  r³   s   &&&& r=   Ú	on_changeÚTopology.on_change,  s¿   é € ð —:—:—:“:ð �|�|ˆ| × 1Ñ 1× <Ñ <Ð=O×=WÑ=W× XÒ XØ×*Ñ*Ð+=ÐK`Óa×aÐa÷ —:÷ Ø—]‘]×&Ñ&Ð'9×'AÑ'AÓBˆFßØ—k‘k×'Ñ'Ð>SÐ'ÓT×TÒTñ ñ ñ ñ b÷ —:—:’:úñ Uùsz   ‚D
›C&œD
Ÿ=C,ÁC,Á2C(Á3C,Á7D
ÂC*ÂD
Â,D
Â<D
ÃDÃD
Ã(C,Ã*D
Ã,D	Ã2C5Ã3
D	Ã>D	Ä 	D
c               ó    € V ^8„  d   QhRRRR/# ©r7   Úseedlistzlist[tuple[str, Any]]r9   r¡   r;   )r<   s   "r=   r>   rM   E  s   € ÷ ñ Ð2Gð ÈDñ r?   c           	   ƒ  ó˜  "  € V P                   pVP                  \        9  d   R# \        V P                   V4      V n         V P	                  4       G Rj  x€L
  V P
                  '       dh   V P                  f   Q hV P                  f   Q hV P                  P                  V P                  P                  W P                   V P                  334       \        P                  ! \        P                  4      '       dK   \        \        \         P"                  V P                  \%        V4      \%        V P                   4      R7       R# R#  Ló5i)zOProcess a new seedlist on an opened topology.
Hold the lock when calling this.
NrS   )rx   r  r-   r0   r  rj   rk   rf   rr   rz   rc   r!   rn   ro   rp   r#   r$   r{   r|   )r˜   r$  r  s   && r=   Ú_process_srv_updateÚTopology._process_srv_updateE  s  é € ð ×"Ñ"ˆØ×ÑÔ'=Ô=ÙÜEÀd×FWÑFWÐYaÓbˆÔà×"Ñ"Ó$×$Ð$à××ÐØ—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ø�L‰L×Ñà—O‘O×HÑHØ×.Ñ.°×0AÑ0AÐBðôô ×$Ò$¤W§]¡]×3Ò3ÜÜÜ*×:Ñ:Ø×,Ñ,Ü$(¨£LÜ# D×$5Ñ$5Ó6÷ñ 4ñ 	%ùs    ‚AE
ÁEÁE
Á+BE
Ã<AE
c               ó    € V ^8„  d   QhRRRR/# r#  r;   )r<   s   "r=   r>   rM   b  s   € ÷ 9ñ 9Ð,Að 9Àdñ 9r?   c              ƒ  ó  "  € V P                   ;_uu_4       GRj  x€L
  V P                  '       d   V P                  V4      G Rj  x€L
  RRR4      GRj  x€L
  R#  LA L L
  + GRj  x€L 
 '       g   i     R# ; i5i)z?Process a new list of nodes obtained from scanning SRV records.N)r…   rƒ   r&  )r˜   r$  s   &&r=   Úon_srv_updateÚTopology.on_srv_updateb  sF   é € ð —:—:—:“:Ø�|�|ˆ|Ø×.Ñ.¨xÓ8×8Ð8÷ —:“:á8÷ —:—:“:üs\   ‚B ›AœB Ÿ'A#ÁAÁA#ÁB ÁA!ÁB ÁA#Á!B Á#A=	Á)A,Á*
A=	Á5A=	Á7	B c               ó    € V ^8„  d   QhRRRR/# )r7   rÃ   r5   r9   zOptional[Server]r;   )r<   s   "r=   r>   rM   i  s   € ÷ *ñ *¨Xð *Ð:Jñ *r?   c                ó8   € V P                   P                  V4      # )a"  Get a Server or None.

Returns the current version of the server immediately, even if it's
Unknown or absent from the topology. Only use this in unittests.
In driver code, use select_server_by_address, since then you're
assured a recent view of the server's type and wire protocol version.
)r‰   r  ©r˜   rÃ   s   &&r=   rÌ   ÚTopology.get_server_by_addressi  s   € ð �}‰}× Ñ  Ó)Ð)r?   c               ó    € V ^8„  d   QhRRRR/# )r7   rÃ   r5   r9   r:   r;   )r<   s   "r=   r>   rM   s  s   € ÷ (ñ ( (ð (¨tñ (r?   c                	ó   € WP                   9   # r[   )r‰   r.  s   &&r=   r  ÚTopology.has_servers  s   € ØŸ-™-Ñ'Ð'r?   c               ó   € V ^8„  d   QhRR/# )r7   r9   rÄ   r;   )r<   s   "r=   r>   rM   v  s   € ÷ Nñ NÐ#5ñ Nr?   c              ƒ  ó~  "  € V P                   ;_uu_4       GRj  x€L
  V P                  P                  pV\        P                  8w  d    RRR4      GRj  x€L
  R# \        V P                  4       4      ^ ,          P                  uuRRR4      GRj  x€L
  #  L~ LD L	  + GRj  x€L 
 '       g   i     R# ; i5i)z!Return primary's address or None.N)r…   rx   r  r.   ÚReplicaSetWithPrimaryr,   Ú_new_selectionrÃ   )r˜   r  s   & r=   Úget_primaryÚTopology.get_primaryv  sl   é € ð —:—:—:“:Ø ×-Ñ-×;Ñ;ˆMØ¤× CÑ CÔCØ÷ —:‘:ô
 ,¨D×,?Ñ,?Ó,AÓBÀ1ÕE×MÑM÷ —:—:—:—:—:’:üsh   ‚B=›BœB=Ÿ-B ÁB=ÁBÁB=Á)B ÂB=ÂBÂB=ÂB=ÂB=Â B:	Â&B)Â'
B:	Â2B:	Â4	B=c               ó    € V ^8„  d   QhRRRR/# )r7   r¾   r¿   r9   úset[_Address]r;   )r<   s   "r=   r>   rM   €  s    € ÷ Pñ PØ8ðPà	ñPr?   c              ƒ  óÖ  "  € V P                   ;_uu_4       GRj  x€L
  V P                  P                  pV\        P                  \        P
                  39  d   \        4       uuRRR4      GRj  x€L
  # \        V! V P                  4       4      4       Uu0 uF  q3P                  kK  	  upuuRRR4      GRj  x€L
  #  L¥ LQu upi  L  + GRj  x€L 
 '       g   i     R# ; i5i)z+Return set of replica set member addresses.N)
r…   rx   r  r.   r5  ÚReplicaSetNoPrimaryÚsetÚiterr6  rÃ   )r˜   r¾   r  rÎ   s   &&  r=   Ú_get_replica_set_membersÚ!Topology._get_replica_set_members€  s—   é € ð
 —:—:—:“:Ø ×-Ñ-×;Ñ;ˆMØÜ×3Ñ3Ü×1Ñ1ð%ô ô “u÷ —:’:ô *.©h°t×7JÑ7JÓ7LÓ.MÔ)NÓOÑ)N 2—J”JÑ)NÑO÷ —:–:ùò P÷ —:—:“:üs{   ‚C)›CœC)ŸACÁ$C)Á1CÁ2C)Á7!CÂCÂ,CÂ.C)Â;C
Â<C)ÃC)ÃCÃ
C)ÃC&	ÃCÃ
C&	ÃC&	Ã 	C)c               ó   € V ^8„  d   QhRR/# ©r7   r9   r:  r;   )r<   s   "r=   r>   rM   �  s   € ÷ Nñ N }ñ Nr?   c              ƒ  óH   "  € V P                  \        4      G Rj  x€L
 #  L5i)z"Return set of secondary addresses.N)r?  r+   ©r˜   s   &r=   Úget_secondariesÚTopology.get_secondaries�  s   é € à×2Ñ2Ô3LÓM×MÐMÑMùó   ‚"› œ"c               ó   € V ^8„  d   QhRR/# rB  r;   )r<   s   "r=   r>   rM   “  s   € ÷ Lñ L Mñ Lr?   c              ƒ  óH   "  € V P                  \        4      G Rj  x€L
 #  L5i)z Return set of arbiter addresses.N)r?  r*   rD  s   &r=   Úget_arbitersÚTopology.get_arbiters“  s   é € à×2Ñ2Ô3JÓK×KÐKÑKùrG  c               ó   € V ^8„  d   QhRR/# )r7   r9   zOptional[ClusterTime]r;   )r<   s   "r=   r>   rM   —  s   € ÷ &ñ &Ð"7ñ &r?   c                ó   € V P                   # )z1Return a document, the highest seen $clusterTime.©r‹   rD  s   &r=   Úmax_cluster_timeÚTopology.max_cluster_time—  s   € à×%Ñ%Ð%r?   c               ó    € V ^8„  d   QhRRRR/# ©r7   Úcluster_timeúOptional[Mapping[str, Any]]r9   r¡   r;   )r<   s   "r=   r>   rM   ›  s   € ÷ 6ñ 6Ð:Uð 6ÐZ^ñ 6r?   c                	óŒ   € V'       d<   V P                   '       d    VR ,          V P                   R ,          8”  d	   Wn         R# R# R# )ÚclusterTimeNrN  ©r˜   rS  s   &&r=   Ú_receive_cluster_time_no_lockÚ&Topology._receive_cluster_time_no_lock›  s>   € ÷ ð ×*×*Ð*Ø Õ.°×1GÑ1GÈÕ1VÔVà)5Ö&ñ Wñ	 r?   c               ó    € V ^8„  d   QhRRRR/# rR  r;   )r<   s   "r=   r>   rM   ª  s   € ÷ =ñ =Ð7Rð =ÐW[ñ =r?   c              ƒ  	óÌ   "  € V P                   ;_uu_4       GR j  x€L
  V P                  V4       R R R 4      GR j  x€L
  R #  L' L  + GR j  x€L 
 '       g   i     R # ; i5ir[   )r…   rX  rW  s   &&r=   Úreceive_cluster_timeÚTopology.receive_cluster_timeª  s-   é € Ø—:—:—:“:Ø×.Ñ.¨|Ô<÷ —:—:—:—:—:üsG   ‚A$›AœA$ŸA±A$¼A½A$ÁA$ÁA!	ÁAÁ
A!	ÁA!	Á	A$c               ó    € V ^8„  d   QhRRRR/# )r7   Ú	wait_timerä   r9   r¡   r;   )r<   s   "r=   r>   rM   ®  s   € ÷ ?ñ ?°ð ?¸Tñ ?r?   c              ƒ  ó
  "  € V P                   ;_uu_4       GRj  x€L
  V P                  4        \        V P                  V4      G Rj  x€L
  RRR4      GRj  x€L
  R#  LD L L
  + GRj  x€L 
 '       g   i     R# ; i5i)z=Wake all monitors, wait for at least one to check its server.N)r…   rå   r   rˆ   )r˜   r_  s   &&r=   Úrequest_check_allÚTopology.request_check_all®  sG   é € à—:—:—:“:Ø×#Ñ#Ô%Ü" 4§?¡?°IÓ>×>Ð>÷ —:“:á>÷ —:—:“:üs\   ‚B›A œBŸ*A&Á	A"Á
A&ÁBÁA$ÁBÁ"A&Á$BÁ&B 	Á,A/Á-
B 	Á8B 	Á:	Bc               ó   € V ^8„  d   QhRR/# )r7   r9   rÒ   r;   )r<   s   "r=   r>   rM   ´  s   € ÷ 2ñ 2Ð&=ñ 2r?   c                ó¬   € V P                   P                  \        P                  8X  d   V P                   P                  # V P                   P
                  # )znReturn a list of all data-bearing servers.

This includes any server that might be selected for an operation.
)rx   r  r.   r  Úknown_serversÚreadable_serversrD  s   &r=   Údata_bearing_serversÚTopology.data_bearing_servers´  sB   € ð
 ×Ñ×*Ñ*¬m×.BÑ.BÔBØ×$Ñ$×2Ñ2Ð2Ø× Ñ ×1Ñ1Ð1r?   c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   ½  s   € ÷ ñ  4ñ r?   c           	   ƒ  	ó‚  "  € . pV P                   ;_uu_4       GR j  x€L
  V P                  4        FT  pV P                  VP                  ,          pVP	                  W3P
                  P                  P                  4       34       KV  	  R R R 4      GR j  x€L
  V F)  w  r4 VP
                  P                  V4      G R j  x€L
  K+  	  R #  L­ L7  + GR j  x€L 
 '       g   i     LN; i L*  \         dE   p\        T^ TRR 4      pT P                  TP                  P                  T4      G R j  x€L 
  h R p?ii ; i5i)NF)r…   rg  r‰   rÃ   r  rñ   ÚgenÚget_overallÚremove_stale_socketsr   Ú_ErrorContextÚhandle_errorrÝ   )r˜   ró   rÎ   r³   Ú
generationÚexcÚctxs   &      r=   Úupdate_poolÚTopology.update_pool½  så   é € àˆØ—:—:—:“:à×/Ñ/Ö1�ØŸ™ r§z¡zÕ2�Ø—‘ ¯©¯©×(CÑ(CÓ(EÐFÖGñ 2÷ —:ó #*ÑˆFðØ—k‘k×6Ñ6°zÓB×BÒBó #*÷ —:—:”:úñ CøÜô Ü# C¨¨J¸¸tÓD�Ø×'Ñ'¨×(:Ñ(:×(BÑ(BÀCÓH×HÑHØûðüs�   ‚D?�CžD?¡A)CÂ
D?ÂCÂD?Â"C-Ã C+ÃC-ÃD?ÃD?ÃC(	ÃCÃ
C(	Ã!C(	Ã#D?Ã+C-Ã-D<Ã88D7Ä0D3Ä1D7Ä7D<Ä<D?c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   Î  s   € ÷ B<ñ B<˜Tñ B<r?   c           	   ƒ  ó*  "  € V P                   ;_uu_4       GRj  x€L
  V P                  pV P                  P                  4        FN  pVP	                  4       G Rj  x€L
  \
        '       d   K)  V P                  P                  VP                  4       KP  	  V P                  P                  4       V n        V P                  P                  4       P                  4        F.  w  r4W0P                  9   g   K  W@P                  V,          n        K0  	  V P                  '       dT   V P                  P	                  4       G Rj  x€L
  \
        '       g&   V P                  P                  V P                  4       RV n        RV n        RRR4      GRj  x€L
  V P                   '       Ed   V P"                  f   Q hV P$                  f   Q h\'        \(        P*                  / V P                  P,                  V P                  P.                  V P                  P0                  V P                  P2                  4      V n        V P"                  P5                  V P$                  P6                  XV P                  V P8                  334       V P"                  P5                  V P$                  P:                  V P8                  334       \<        P>                  ! \@        PB                  4      '       ds   \E        \<        \F        PH                  V P8                  \K        X4      \K        V P                  4      R7       \E        \<        \F        PL                  V P8                  R7       V PN                  '       g   V P                   '       di   V PP                  P	                  4        V PP                  PS                  ^4      G Rj  x€L
  \U        \V        PX                  ! V P"                  4      4       R# R#  ELÍ EL� EL® ELb  + GRj  x€L 
 '       g   i     ELz; i LZ5i)zŒClear pools and terminate monitors. Topology does not reopen on
demand. Any further operations will raise
:exc:`~.errors.InvalidOperation`.
NFTrS   rP   )-r…   rx   r‰   r®   r’   r†   r—   r  Ú_monitorr¯   r�   ÚitemsrÝ   r”   rƒ   r„   rj   rk   rf   r/   r.   ry   rw   Úmax_set_versionÚmax_election_idrÞ   rr   rz   rc   Úpublish_topology_closedr!   rn   ro   rp   r#   r$   r{   r|   ÚSTOP_TOPOLOGYrh   rl   ÚjoinrH   r�   r‘   )r˜   Úold_tdr³   rÃ   rÎ   s   &    r=   r’   ÚTopology.closeÎ  sç  é € ð
 —:—:—:“:Ø×&Ñ&ˆFØŸ-™-×.Ñ.Ö0�Ø—l‘l“n×$Ð$ß•xØ×'Ñ'×.Ñ.¨v¯©Ö?ñ 1ð !%× 1Ñ 1× 7Ñ 7Ó 9ˆDÔØ#×0Ñ0×DÑDÓF×LÑLÖN‘�ØŸm™mÖ+Ø9;—M‘M 'Õ*Ö6ñ  Oð
 × × Ð Ø×'Ñ'×-Ñ-Ó/×/Ð/ß“xØ×'Ñ'×.Ñ.¨t×/@Ñ/@ÔAà ˆDŒLØˆDŒL÷) —:ð. ××ÑØ—<‘<Ò+Ð+Ð+Ø—?‘?Ò.Ð.Ð.Ü 3Ü×%Ñ%ØØ×!Ñ!×2Ñ2Ø×!Ñ!×1Ñ1Ø×!Ñ!×1Ñ1Ø×!Ñ!×4Ñ4ó!ˆDÔð �L‰L×Ñà—O‘O×HÑHàØ×)Ñ)Ø×)Ñ)ððô	ð �L‰L×Ñ˜dŸo™o×EÑEÈ×HYÑHYÐG[Ð\Ô]Ü×$Ò$¤W§]¡]×3Ò3ÜÜÜ*×:Ñ:Ø×,Ñ,Ü$(¨£LÜ# D×$5Ñ$5Ó6õô ÜÔ&8×&FÑ&FÐSW×SdÑSdõð ××Ð 4×#3×#3Ð#3à×"Ñ"×(Ñ(Ô*Ø×(Ñ(×-Ñ-¨aÓ0×0Ð0Ü ¤§¢¨T¯\©\Ó!:Ö;ñ	 $4òs ò %ò 0÷ —:—:”:úñx 1ùs­   ‚P›O(œPŸ=O4ÁO+
ÁO4Á/BO4Ã6,O4Ä#O4Å O.ÅO4Å3O4ÆPÆO1ÆPÆ'E PË(BPÍ,PÍ>8PÎ6PÎ72PÏ+O4Ï.O4Ï1PÏ4P	Ï:O=Ï;
P	ÐP	Ð
Pc               ó   € V ^8„  d   QhRR/# )r7   r9   r/   r;   )r<   s   "r=   r>   rM     s   € ÷ !ñ !Ð0ñ !r?   c                	ó   € V P                   # r[   )rx   rD  s   &r=   rÝ   ÚTopology.description  s   € à× Ñ Ð r?   c               ó   € V ^8„  d   QhRR/# )r7   r9   zlist[_ServerSession]r;   )r<   s   "r=   r>   rM     s   € ÷ ,ñ ,Ð"6ñ ,r?   c                ó6   € V P                   P                  4       # )z"Pop all session ids from the pool.)rŒ   Úpop_allrD  s   &r=   Úpop_all_sessionsÚTopology.pop_all_sessions  s   € à×!Ñ!×)Ñ)Ó+Ð+r?   c               ó    € V ^8„  d   QhRRRR/# )r7   Úsession_timeout_minutesrÆ   r9   r   r;   )r<   s   "r=   r>   rM     s   € ÷ Nñ N¸-ð NÈNñ Nr?   c                ó8   € V P                   P                  V4      # )z>Start or resume a server session, or raise ConfigurationError.)rŒ   Úget_server_session)r˜   r‰  s   &&r=   r‹  ÚTopology.get_server_session  s   € à×!Ñ!×4Ñ4Ð5LÓMÐMr?   c               ó    € V ^8„  d   QhRRRR/# )r7   Úserver_sessionr   r9   r¡   r;   )r<   s   "r=   r>   rM     s   € ÷ Añ A°Nð AÀtñ Ar?   c                	ó<   € V P                   P                  V4       R # r[   )rŒ   Úreturn_server_session)r˜   rŽ  s   &&r=   r�  ÚTopology.return_server_session  s   € Ø×Ñ×0Ñ0°Ö@r?   c               ó   € V ^8„  d   QhRR/# )r7   r9   r(   r;   )r<   s   "r=   r>   rM   !  s   € ÷ Fñ F 	ñ Fr?   c                óB   € \         P                  ! V P                  4      # )z]A Selection object, initially including all known servers.

Hold the lock when calling this.
)r(   Úfrom_topology_descriptionrx   rD  s   &r=   r6  ÚTopology._new_selection!  s   € ô
 ×2Ò2°4×3DÑ3DÓEÐEr?   c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   (  s   € ÷  ñ   dñ  r?   c              ƒ  ó  "  € V P                   '       d   \        R4      hV P                  '       Eg   RV n        V P                  4       G Rj  x€L
  V P                  '       g   V P
                  '       d   V P                  P                  4        V P                  '       d:   V P                  P                  \        9   d   V P                  P                  4        V P                  P                  '       dN   V P                  \        V P                   ^ ,          \#        R^RV P$                  R^/4      4      4      G Rj  x€L
  V P&                  P)                  4        F  pVP                  4       G Rj  x€L
  K  	  R#  EL2 LB L5i)zKStart monitors, or restart after a fork.

Hold the lock when calling this.
z'Cannot use AsyncMongoClient after closeTNÚokÚ	serviceIdÚmaxWireVersion)r„   r   rƒ   r  rj   rh   rl   r“   r”   rÝ   r  r-   rt   r–   r  r'   r‚   r   rc   r‰   r®   ©r˜   r³   s   & r=   r°   ÚTopology._ensure_opened(  s/  é € ð
 �<�<ˆ<Ü"Ð#LÓMÐMà�|�|‰|ØˆDŒLØ×&Ñ&Ó(×(Ð(ð ××Ð 4×#7×#7Ð#7Ø×&Ñ&×+Ñ+Ô-ð × × Ð  d×&6Ñ&6×&DÑ&DÔH^Ô&^Ø×!Ñ!×&Ñ&Ô(à�~‰~×+×+Ð+à×*Ñ*Ü%Ø×,Ñ,¨QÕ/Ü˜t Q¨°T×5FÑ5FÐHXÐZ\Ð]Ó^óó÷ ð ð —m‘m×*Ñ*Ö,ˆFØ—+‘+“-×Òó -ò) )ññ  ùsT   ‚0F³FÁE?ÁFÁ$FÁ6+FÂ"AFÃ7AFÄ?FÅ 4FÅ4FÅ5FÆFÆFc               ó$   € V ^8„  d   QhRRRRRR/# )r7   rÃ   r5   Úerr_ctxrn  r9   r:   r;   )r<   s   "r=   r>   rM   I  s&   € ÷ Bñ B xð B¸-ð BÈDñ Br?   c                	ó¼  € V P                   P                  V4      pVf   R# VP                  P                  VP                  VP
                  4      '       d   R# VP                  P                  pVP                  pR pV'       dN   \        VR4      '       d<   \        VP                  \        4      '       d   VP                  P                  R4      p\        WF4      # )NTÚdetailsÚtopologyVersion)r‰   r  Ú_poolÚstale_generationÚsock_generationÚ
service_idrÝ   Útopology_versionÚerrorÚhasattrÚ
isinstancer   ÚdictÚ _is_stale_error_topology_version)r˜   rÃ   rž  r³   Úcur_tvr§  Úerror_tvs   &&&    r=   Ú_is_stale_errorÚTopology._is_stale_errorI  s¥   € Ø—‘×"Ñ" 7Ó+ˆØŠ>áà�<‰<×(Ñ(¨×)@Ñ)@À'×BTÑBT×UÒUáð ×#Ñ#×4Ñ4ˆØ—‘ˆØˆß”W˜U I×.Ò.Ü˜%Ÿ-™-¬×.Ò.Ø Ÿ=™=×,Ñ,Ð->Ó?�ä/°ÓAÐAr?   c               ó$   € V ^8„  d   QhRRRRRR/# ©r7   rÃ   r5   rž  rn  r9   r¡   r;   )r<   s   "r=   r>   rM   ]  s'   € ÷ D+ñ D+¨8ð D+¸mð D+ÐPTñ D+r?   c              ƒ  	ó.  "  € V P                  W4      '       d   R # V P                  V,          pVP                  pVP                  pV P                  P
                  '       d   V'       g   VP                  '       g   R # \        V\        4      '       d   VP                  '       d   R # \        V\        4      '       d   R # \        V\        \        34      '       Edo   \        VR4      '       d   VP                  pM6\        V\        4      '       d   RMR pVP                  P                  RV4      pV\         P"                  9   d—   V\         P$                  9   pV P                  P
                  '       g$   V P'                  \)        WR7      4      G R j  x€L
  V'       g   VP*                  ^8:  d   VP-                  V4      G R j  x€L
  VP/                  4        R # VP                  '       g[   V P                  P
                  '       g$   V P'                  \)        WR7      4      G R j  x€L
  VP-                  V4      G R j  x€L
  R # R # \        V\0        4      '       d¤   \        V\2        4      '       g   VP5                  R4      '       d   R # V P                  P
                  '       g$   V P'                  \)        WR7      4      G R j  x€L
  VP-                  V4      G R j  x€L
  VP6                  P9                  4        R # R #  ELr ELC Lâ LË LE L.5i)NÚcodei{'  ©r§  ÚSystemOverloadedError)r®  r‰   r§  r¥  rt   r–   Úcompleted_handshaker©  r   r   r   r   r¨  r³  r   r  r   Ú_NOT_PRIMARY_CODESÚ_SHUTDOWN_CODESr  r'   Úmax_wire_versionr¯   Úrequest_checkr   r   Úhas_error_labelrw  Úcancel_check)	r˜   rÃ   rž  r³   r§  r¥  Úerr_codeÚdefaultÚis_shutting_downs	   &&&      r=   Ú_handle_errorÚTopology._handle_error]  sI  é € Ø×Ñ ×1Ò1Ùà—‘˜wÕ'ˆØ—‘ˆØ×'Ñ'ˆ
ð �>‰>×'×'Ð'·
À7×C^×C^ÐC^Ùä�eœ^×,Ò,°×1L×1LÐ1Lñ
 Ü˜œz×*Ò*áÜ˜¤Ô1AÐB×CÓCô �u˜f×%Ò%Ø Ÿ:™:‘ô $.¨e´_×#EÒ#E™%È4�Ø Ÿ=™=×,Ñ,¨V°WÓ=�Øœ>×<Ñ<Ô<Ø#+¬~×/MÑ/MÑ#MÐ à—~‘~×3×3Ð3Ø×.Ñ.Ô/@ÀÔ/VÓW×WÐWß#¨×(@Ñ(@ÀAÔ(Eà Ÿ,™, zÓ2×2Ð2Ø×$Ñ$Ö&Ø×0×0Ð0à—~‘~×3×3Ð3Ø×.Ñ.Ô/@ÀÔ/VÓW×WÐWà—l‘l :Ó.×.Ò.ñ 1ô ˜Ô0×1Ò1Ü˜%Ô!6×7Ò7Ø×%Ñ%Ð&=×>Ò>áð —>‘>×/×/Ð/Ø×*Ñ*Ô+<¸WÔ+RÓS×SÐSà—,‘,˜zÓ*×*Ð*ð �O‰O×(Ñ(Ö*ñ 2ò Xò 3ñ
 Xá.ñ Tá*ùsª   ‚A LÁ#LÁ+LÁ=)LÂ'CLÅ7LÆLÆLÆ"%LÇL
Ç'LÇ0LÈLÈ*LÈ+LÉLÉA
LÊLÊ-LËLËLË$LË%#LÌ
LÌLÌLÌLÌLc               ó$   € V ^8„  d   QhRRRRRR/# r±  r;   )r<   s   "r=   r>   rM   £  s!   € ÷ 7ñ 7¨(ð 7¸]ð 7Ètñ 7r?   c              ƒ  óà   "  € V P                   ;_uu_4       GRj  x€L
  V P                  W4      G Rj  x€L
  RRR4      GRj  x€L
  R#  L/ L L
  + GRj  x€L 
 '       g   i     R# ; i5i)z–Handle an application error.

May reset the server to Unknown, clear the pool, and request an
immediate check depending on the error and the context.
N)r…   rÀ  )r˜   rÃ   rž  s   &&&r=   ro  ÚTopology.handle_error£  s=   é € ð —:—:—:“:Ø×$Ñ$ WÓ6×6Ð6÷ —:“:Ù6÷ —:—:“:üsY   ‚A.›AœA.ŸA´AµA¹A.ÁAÁA.ÁAÁA.ÁA+	ÁAÁ
A+	Á#A+	Á%	A.c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   ¬  s   € ÷ #ñ # Dñ #r?   c                óh   € V P                   P                  4        F  pVP                  4        K  	  R# )z3Wake all monitors. Hold the lock when calling this.N)r‰   r®   rº  r›  s   & r=   rå   ÚTopology._request_check_all¬  s%   € à—m‘m×*Ñ*Ö,ˆFØ× Ñ Ö"ó -r?   c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   ±  s   € ÷ *+ñ *+ tñ *+r?   c           
   ƒ  óÒ  "  € V P                   P                  4       P                  4        EF{  w  rWP                  9  d×   V P                  P                  VV V P                  V4      V P                  R7      pRpV P                  '       d/   V P                  e!   \        P                  ! V P                  4      p\        VV P                  V4      VV P                  V P                  VR7      pWPP                  V&   VP                  4       G Rj  x€L
  Kì  V P                  V,          P                   P"                  pW P                  V,          n        WbP"                  8w  g   EK=  V P                  V,          P$                  P'                  VP"                  4      G Rj  x€L
  EK~  	  \)        V P                  P                  4       4       FŒ  w  rV P                   P+                  V4      '       d   K(  VP-                  4       G Rj  x€L
  \.        '       g&   V P0                  P3                  VP4                  4       V P                  P7                  V4       KŽ  	  R#  ELP LÁ L[5i)zbSync our Servers from TopologyDescription.server_descriptions.

Hold the lock while calling this.
)r  Útopologyrñ   rL   N)r  rñ   ÚmonitorÚtopology_idÚ	listenersÚevents)rx   r�   rx  r‰   rt   Úmonitor_classÚ_create_pool_for_monitorrh   rk   r�   r‘   r   Ú_create_pool_for_serverrc   rf   r“   rÝ   Úis_writablerñ   Úupdate_is_writabler€   r  r’   r†   r—   r  rw  Úpop)r˜   rÃ   rÎ   rË  r\   r³   Úwas_writables   &      r=   r  ÚTopology._update_servers±  sÈ  é € ð
  ×,Ñ,×@Ñ@ÓB×HÑH×J‰KˆGØŸm™mÔ+ØŸ.™.×6Ñ6Ø')Ø!Ø×6Ñ6°wÓ?Ø&*§n¡nð	 7ó �ð �Ø×'×'Ð'¨D¯L©LÒ,DÜ"Ÿ;š; t§|¡|Ó4�DÜØ')Ø×5Ñ5°gÓ>Ø#Ø $× 1Ñ 1Ø"Ÿo™oØô�ð *0—‘˜gÑ&Ø—k‘k“m×#Ò#ð  $Ÿ}™}¨WÕ5×AÑA×MÑM�à57—‘˜gÕ&Ô2à§>¡>×1ØŸ-™-¨Õ0×5Ñ5×HÑHÈÏÉÓX×XÓXñ= Kô@  $ D§M¡M×$7Ñ$7Ó$9Ö:‰OˆGØ×$Ñ$×/Ñ/°×8Ô8Ø—l‘l“n×$Ð$ß“xØ×'Ñ'×.Ñ.¨v¯©Ô?Ø—‘×!Ñ! 'Ö*ó  ;ò $ñ Yñ %ùsR   ‚B
I'ÂBI'ÄI ÄAI'Å(9I'Æ!I#Æ"AI'Ç6I'È	I%È
I'ÈAI'É#I'É%I'c               ó    € V ^8„  d   QhRRRR/# ©r7   rÃ   r5   r9   r   r;   )r<   s   "r=   r>   rM   Ý  s   € ÷ 
ñ 
¨xð 
¸Dñ 
r?   c                	óx   € V P                   P                  WP                   P                  V P                  R 7      # ))Ú	client_id)rt   Ú
pool_classÚpool_optionsrc   r.  s   &&r=   rÑ  Ú Topology._create_pool_for_serverÝ  s3   € Ø�~‰~×(Ñ(Ø—^‘^×0Ñ0¸D×<MÑ<Mð )ó 
ð 	
r?   c               ó    € V ^8„  d   QhRRRR/# rØ  r;   )r<   s   "r=   r>   rM   â  s   € ÷ 
ñ 
°ð 
¸Tñ 
r?   c                	óF  € V P                   P                  p\        VP                  VP                  VP                  VP
                  VP                  VP                  VP                  R VP                  R7	      pV P                   P                  WRV P                  R7      # )F)	Úconnect_timeoutÚsocket_timeoutÚssl_contextÚtls_allow_invalid_hostnamesÚevent_listenersÚappnameÚdriverÚpause_enabledÚ
server_apiT)Úis_sdamrÚ  )rt   rÜ  r&   rà  Ú_ssl_contextrã  re   rå  ræ  rè  rÛ  rc   )r˜   rÃ   ÚoptionsÚmonitor_pool_optionss   &&  r=   rÐ  Ú!Topology._create_pool_for_monitorâ  s�   € Ø—.‘.×-Ñ-ˆô
  +Ø#×3Ñ3Ø"×2Ñ2Ø×,Ñ,Ø(/×(KÑ(KØ#×4Ñ4Ø—O‘OØ—>‘>ØØ×)Ñ)ô
 
Ðð �~‰~×(Ñ(Ø°4À4×CTÑCTð )ó 
ð 	
r?   c               ó    € V ^8„  d   QhRRRR/# )r7   r¾   r¿   r9   rÁ   r;   )r<   s   "r=   r>   rM   ø  s   € ÷ 8Yñ 8YÐ'Gð 8YÈCñ 8Yr?   c                ó*  a€ V P                   P                  \        P                  \        P                  39   pV'       d   RpM.V P                   P                  \        P
                  8X  d   RpMRpV P                   P                  '       d'   V\        J d   V'       d   R# RV,          # RV RV R2# \        V P                   P                  4       4      p\        V P                   P                  4       P                  4       4      pV'       g8   V'       d'   R	P                  VV P                  P                  4      # R
V,          # V^ ,          P                  o\        ;QJ d&    V3R lVR,           4       F  '       d   K   RM	  RM! V3R lVR,           4       4      pV'       dT   Sf
   RV,          # V'       d4   \!        V4      P#                  V P$                  4      '       g
   RV,          # \'        S4      # RP)                  R V 4       4      # )zUFormat an error message if server selection fails.

Hold the lock when calling this.
zreplica set membersÚmongosesró   zNo primary available for writeszNo %s available for writeszNo z match selector "Ú"z)No {} available for replica set name "{}"zNo %s availablec              3  ó@   <"  € T F  qP                   S8H  x € K  	  R # 5ir[   r´  )Ú.0r³   r§  s   & €r=   Ú	<genexpr>Ú*Topology._error_message.<locals>.<genexpr>!  s   øé € ÐG¹;°—|‘| uÖ,»;ùs   ƒ:é   NNFTzNo %s found yetz\Could not reach any servers in %s. Replica set is configured with internal hostnames or IPs?Ú,c              3  ór   "  € T F-  qP                   '       g   K  \        VP                   4      x € K/  	  R # 5ir[   )r§  rÁ   )ró  r³   s   & r=   rô  rõ  0  s#   é € ÐXÁ°fÏ<Í<Ô 1¤ F§L¡L× 1Ð 1Ãùs   ‚7š7)rx   r  r.   r5  r<  ÚShardedre  r,   r€   r�   r®   r<   rt   rw   r§  Úallr=  Úintersectionr‚   rÁ   r}  )r˜   r¾   Úis_replica_setÚserver_pluralÚ	addressesró   Úsamer§  s   &&     @r=   râ   ÚTopology._error_messageø  s±  ø€ ð
 ×*Ñ*×8Ñ8Ü×/Ñ/Ü×-Ñ-ð=
ñ 
ˆ÷
 Ø1‰MØ×Ñ×,Ñ,´×0EÑ0EÔEØ&‰Mà%ˆMà×Ñ×*×*Ð*àÔ3Ó3ß!Ù<à7¸-ÕGÐGà˜]˜OÐ+<¸X¸JÀaÐHÐHä˜T×.Ñ.×BÑBÓDÓEˆIÜ˜4×,Ñ,×@Ñ@ÓB×IÑIÓKÓLˆGßß!àF×MÑMØ%ØŸ™×7Ñ7óð ð
 -¨}Õ<Ð<ð ˜A•J×$Ñ$ˆEß“3ÔG¸7À2¾;ÓG—3—3’3ÔG¸7À2¾;ÓGÓGˆDßØ’=à,¨}Õ<Ð<ç!¬#¨i«.×*EÑ*EÀd×FZÑFZ×*[Ò*[ðFØHQõRðô
 ˜5“zÐ!à—x‘xÑXÁÓXÓXÐXr?   c               ó   € V ^8„  d   QhRR/# r    r;   )r<   s   "r=   r>   rM   2  s   € ÷ Qñ Q¨ñ Qr?   c              ƒ  	ó6  "  € . p V P                   '       d,   VP                  V P                   P                  4       4       K=   \        P
                  ! V Uu. uF  q"P                  4       NK  	  upR R/ G Rj  x€L
  R#   \         d     LJi ; iu upi  L5i)Úreturn_exceptionsTN)r—   r  rÔ  Ú
IndexErrorÚasyncioÚgatherr}  )r˜   ÚtasksÚts   &  r=   rÊ   ÚTopology.cleanup_monitors2  s€   é € Øˆð	Ø×%×%Ð%Ø—‘˜T×0Ñ0×4Ñ4Ó6Ö7ð &ô �nŠn±Ó7±¨AŸv™vžx±Ñ7ÐPÈ4ÑP×PÒPøô ô 	Ùð	üâ7ÑPùsE   ‚B†B ˜+B ÁBÁBÁ0
BÁ:BÁ;BÂBÂBÂBÂ	Bc               ó   € V ^8„  d   QhRR/# )r7   r9   rÁ   r;   )r<   s   "r=   r>   rM   ;  s   € ÷ Iñ I˜#ñ Ir?   c                	ó‚   € R pV P                   '       g   RpRV P                  P                   RV V P                  : R2# )Ú zCLOSED Ú<Ú Ú>)rƒ   Ú	__class__Ú__name__rx   )r˜   Úmsgs   & r=   Ú__repr__ÚTopology.__repr__;  s@   € ØˆØ�|�|ˆ|ØˆCØ�4—>‘>×*Ñ*Ð+¨1¨S¨E°$×2CÑ2CÑ1FÀaÐHÐHr?   c               ó   € V ^8„  d   QhRR/# )r7   r9   z>tuple[tuple[_Address, ...], Optional[str], Optional[str], str]r;   )r<   s   "r=   r>   rM   A  s   € ÷ \ñ \ÐXñ \r?   c                óš   € V P                   p\        \        VP                  4      4      VP                  VP
                  VP                  3# )zDThe properties to use for AsyncMongoClient/Topology equality checks.)rt   ÚtupleÚsortedr}   rw   r•   Úsrv_service_name)r˜   Útss   & r=   Úeq_propsÚTopology.eq_propsA  s8   € à�^‰^ˆÜ”f˜RŸX™XÓ&Ó'¨×)<Ñ)<¸b¿g¹gÀr×GZÑGZÐ[Ð[r?   c               ó    € V ^8„  d   QhRRRR/# )r7   ÚotherÚobjectr9   r:   r;   )r<   s   "r=   r>   rM   F  s   € ÷ ñ ˜Fð  tñ r?   c                	ó†   € \        WP                  4      '       d"   V P                  4       VP                  4       8H  # \        # r[   )r©  r  r  ÚNotImplemented)r˜   r  s   &&r=   Ú__eq__ÚTopology.__eq__F  s/   € Ü�eŸ^™^×,Ò,Ø—=‘=“? e§n¡nÓ&6Ñ6Ð6ÜÐr?   c               ó   € V ^8„  d   QhRR/# )r7   r9   rä   r;   )r<   s   "r=   r>   rM   K  s   € ÷ %ñ %˜#ñ %r?   c                	ó4   € \        V P                  4       4      # r[   )Úhashr  rD  s   &r=   Ú__hash__ÚTopology.__hash__K  s   € Ü�D—M‘M“OÓ$Ð$r?   )Ú__events_executorr„   rˆ   rx   rk   rf   r…   r‹   r—   rƒ   rŠ   rh   rj   r‚   r‰   rŒ   rt   r”   rc   )NNNNr[   )NN)FF)é   )3r  Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r�   r“   r»   rÏ   rË   rö   rÿ   r  r  r   r&  r*  rÌ   r  r7  r?  rE  rJ  rO  rX  r\  ra  rg  rs  r’   ÚpropertyrÝ   r†  r‹  r�  r6  r°   r®  rÀ  ro  rå   r  rÑ  rÐ  râ   rÊ   r  r  r"  r'  Ú__static_attributes__r;   r?   r=   rJ   rJ   h   s  † Ù4õm4õ^%(õN÷-÷^P#÷d÷2 ÷D
÷BE%÷NUõ2õ:9õ*õ(õNõPõNõLõ&õ6õ=÷?õ2õõ"B<ðH ô!ó ð!õ,õNõAõFõ õBBõ(D+õL7õ#õ
*+õX
õ

õ,8YõtQõIõ\õ
÷
%ñ %r?   rJ   c                  ó&   € ] tR tRtRtR R ltRtR# )rn  iO  z.An error with context for SDAM error handling.c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r7   r§  ÚBaseExceptionr¹  rä   r¤  r¶  r:   r¥  zOptional[ObjectId]r;   )r<   s   "r=   r>   Ú_ErrorContext.__annotate__R  s<   € ÷ %ñ %àð%ð ð%ð ð	%ð
 "ð%ð 'ñ%r?   c                	óB   € Wn         W n        W0n        W@n        WPn        R # r[   )r§  r¹  r¤  r¶  r¥  )r˜   r§  r¹  r¤  r¶  r¥  s   &&&&&&r=   r�   Ú_ErrorContext.__init__R  s    € ð Œ
Ø 0ÔØ.ÔØ#6Ô Ø$Žr?   )r¶  r§  r¹  r¥  r¤  N)r  r+  r,  r-  r.  r�   r0  r;   r?   r=   rn  rn  O  s   † Ù8÷%ñ %r?   rn  c               ó$   € V ^8„  d   QhRRRRRR/# )r7   Ú
current_tvrT  r­  r9   r:   r;   )r<   s   "r=   r>   r>   a  s$   € ÷ 8ñ 8Ø+ð8Ø7Rð8à	ñ8r?   c                ój   € V e   Vf   R# V R,          VR,          8w  d   R# V R,          VR,          8¬  # )z9Return True if the error's topologyVersion is <= current.FÚ	processIdÚcounterr;   )r8  r­  s   &&r=   r«  r«  a  s<   € ð Ò˜XÒ-ÙØ�+Õ (¨;Õ"7Ô7ÙØ�iÕ  H¨YÕ$7Ñ7Ð7r?   c               ó$   € V ^8„  d   QhRRRRRR/# )r7   Ú
current_sdr'   Únew_sdr9   r:   r;   )r<   s   "r=   r>   r>   l  s$   € ÷ 5ñ 5Ð->ð 5ÐHYð 5Ð^bñ 5r?   c                ó˜   € V P                   VP                   r2Ve   Vf   R# VR,          VR,          8w  d   R# VR,          VR,          8„  # )z4Return True if the new topologyVersion is < current.Fr:  r;  )r¦  )r=  r>  r8  Únew_tvs   &&  r=   r  r  l  sL   € à#×4Ñ4°f×6MÑ6M�ØÒ˜Vš^ÙØ�+Õ &¨Õ"5Ô5ÙØ�iÕ  6¨)Õ#4Ñ4Ð4r?   )[r.  Ú
__future__r   r  ro   r§   rB   rï   r©   rÚ   r¬   r�   Úpathlibr   Útypingr   r   r   r   r   r	   Úpymongor
   r   r   r   Ú#pymongo.asynchronous.client_sessionr   r   Úpymongo.asynchronous.monitorr   r   Úpymongo.asynchronous.poolr   Úpymongo.asynchronous.serverr   Úpymongo.errorsr   r   r   r   r   r   r   r   r   Úpymongo.hellor   Úpymongo.lockr   r   r    Úpymongo.loggerr!   r"   r#   r$   r%   Úpymongo.pool_optionsr&   Úpymongo.server_descriptionr'   Úpymongo.server_selectorsr(   r)   r*   r+   r,   Úpymongo.topology_descriptionr-   r.   r/   r0   r1   Úbsonr2   Úpymongo.asynchronous.settingsr3   Úpymongo.typingsr4   r5   r†   rÁ   Ú__file__Úparentr«   rH   rJ   rn  r«  r  r;   r?   r=   Ú<module>rV     sÕ   ðñ Cå "ã Û Û 	Û Û Û 
Û Û Û Ý ß H× Hç DÓ Dß Rß @Ý *Ý .÷
÷ 
õ 
õ  ÷ñ ÷
õ õ -Ý 8÷õ ÷õ ÷ ÝÝ>ß5à€á‘4˜“>×(Ñ(Ó)€õ÷"d%ñ d%÷N%ñ %õ$8÷5r?   