+
    }iK[              :       .  a  R] tV0 t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHtHtHtHtHtHtHtHt ^ RIt^ RIt^ RIHtHt ^ R	IHt ^ R
IHt ^ RIH t  ^RI!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/H0t0H1t1 ^RI2H3t3H4t4H5t5 ^RI6H7t7H8t8H9t9H:t: ^RI;H<t< ^RI=H>t> ^RI?H@t@ ]]]AR3,          ]]A,          ]A3,          tB] ^ k R^
RR^RRRRRR/tCR R ltDR_R R lltER_R  R! lltFR" R# ltGR$ R% ltHR& R' ltIR_R( R) lltJR* R+ ltKR, R- ltLR. R/ ltMR0 R1 ltNR2 R3 ltOR4 R5 ltPR6 R7 ltQR8 R9 ltRR_R: R; lltSR_R< R= lltTR>RR?RR@RRARRBRRCRRDRRERRFRRGRRHRRIRRJRRKRRLRRMRRNRRORRPRRQRRRRRSRRTRRURRVRRWRRXRRYRRZR/R[ R\ lltUR# )`    N)environ)abspath)Path)pprint)randint	randrange)AnyDictListLiteralOptionalTupleUnioncast)FingerprintScreen)get_monitors)	TypeAlias)user_agent_parser)DefaultAddonsadd_default_addonsconfirm_paths)	InvalidOSInvalidPropertyTypeNonFirefoxFingerprintUnknownProperty)from_browserforgegenerate_fingerprint)Proxy	public_ip
valid_ipv4
valid_ipv6)geoip_allowedget_geolocationhandle_locales)OS_NAMEget_pathinstalled_verstrlaunch_path)VirtualDisplay)LeakWarning)sample_webgl.z"browser.sessionhistory.max_entriesz(browser.sessionhistory.max_total_viewerszbrowser.cache.memory.enableTzbrowser.cache.disk_cache_sslz%browser.cache.disk.smart_size.enabledc                    V ^8  d   QhR\         \        \        3,          R\        R\         \        \        \        \        \        3,          3,          /# )   
config_mapuser_agent_osreturn)r
   strr   floatbool)formats   "`/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/camoufox/utils.py__annotate__r7   ,   sB      S#X/2	#uS%%&
&'    c                p   / p \         P                  ! V 4      p\        R8X  d   RMRpXP                  R4      p\        ^ \        V4      V4       F$  pWgWu,            pRWu,          ^,            2p	 WV	&   K&  	  \        R
8X  d.   \        \        P                  P                  RV4      4      p
WR&   V#   \         P                   d/   p\        RT 24       \        P
                  ! ^4        Rp?LRp?ii ; i  \         d3   p\        RT	 R	T 24       \        P
                  ! ^4        Rp?K  Rp?ii ; i)z:
Gets a dictionary of environment variables for Camoufox.
zError updating config: Nwini  i  zutf-8CAMOU_CONFIG_zError setting z: lin
fontconfigFONTCONFIG_PATH)orjsondumpsJSONEncodeErrorprintsysexitr&   decoderangelen	Exceptionr'   ospathjoin)r/   r0   env_varsupdated_config_datae
chunk_size
config_strichunkenv_namefontconfig_paths   &&         r6   get_env_varsrU   ,   s    46H$ll:6 !E)uJ$++G4J1c*oz2q~."AOq#8"9:	!&X	 3 %"277<<m#LM&5"#O+ !! 's+,  	N8*Bqc23HHQKK	s/   B2 0C82C5$C00C58D5'D00D5c                h    V ^8  d   QhR\         \        ,          R\        \        \        3,          /# )r.   rJ   r1   )r   r   r
   r2   )r5   s   "r6   r7   r7   M   s*     B B8D> BT#s(^ Br8   c                T   V '       d   \        V P                  R,          4      pM\        R4      p\        VR4      ;_uu_ 4       p\        P
                  ! VP                  4       4      pRRR4       X Uu/ uF  qDR,          VR,          bK  	  up#   + '       g   i     L0; iu upi )z!
Loads the properties.json file.
zproperties.jsonrbNpropertytype)r2   parentr'   openr?   loadsread)rJ   	prop_filef	prop_dictprops   &    r6   _load_propertiesrc   M   s     &778	./		i		!LL*	 
 8AAytd6l*yAA 
	 Bs   %B6B%B"	c                l    V ^8  d   QhR\         \        \        3,          R\        \        ,          RR/# )r.   r/   rJ   r1   N)r
   r2   r   r   )r5   s   "r6   r7   r7   [   s.      S#X htn PT r8   c                   \        VR7      pV P                  4        Fe  w  r4VP                  V4      pV'       g   \        RV R24      h\	        WE4      '       d   K@  \        RV RV R\        V4      P                   24      h	  R# )z
Validates the config map.
rJ   zUnknown property z
 in configzInvalid type for property z. Expected z, got N)rc   itemsgetr   validate_typer   rZ   __name__)r/   rJ   property_typeskeyvalueexpected_types   &&    r6   validate_configro   [   s     &40N &&(
&**3/!$5cU*"EFFU22%,SE]O6RVW\R]RfRfQgh  )r8   c                <    V ^8  d   QhR\         R\        R\        /# )r.   rm   rn   r1   )r	   r2   r4   )r5   s   "r6   r7   r7   l   s!       S T r8   c                .   VR8X  d   \        V \        4      # VR8X  dA   \        V \        4      ;'       g)    \        V \        4      ;'       d    V P	                  4       # VR8X  dN   \        V \        4      ;'       g1    \        V \        4      ;'       d    V P	                  4       ;'       d    V ^ 8  # VR8X  d   \        V \        \        34      # VR8X  d   \        V \
        4      # VR8X  d   \        V \        4      # VR8X  d   \        V \        4      # R# )	z"
Validates the type of the value.
r2   intuintdoubler4   arraydictF)
isinstancer2   rr   r3   
is_integerr4   listrv   )rm   rn   s   &&r6   ri   ri   l   s     %%%	%	%%ZZ*UE*B*Y*YuGWGWGYZ	&	 uc"WWz%'?'VEDTDTDV qj	 
(	"%%..	&	 %&&	'	!%&&	&	 %&&r8   c                `    V ^8  d   QhR\         \        \        3,          R\        R,          /# )r.   configr1   macr:   r<   )r
   r2   r	   r   )r5   s   "r6   r7   r7      s(      $sCx. W5H-I r8   c                `    V P                  R4      '       d   \        V R,          4      # \        # )zg
Gets the OS from the config if the user agent is set,
otherwise returns the OS of the current system.
znavigator.userAgent)rh   determine_ua_osr&   r{   s   &r6   get_target_osr      s*    
 zz'((v&;<==Nr8   c                >    V ^8  d   QhR\         R\        R,          /# )r.   
user_agentr1   r|   )r2   r   )r5   s   "r6   r7   r7      s        0C(D r8   c                    \         P                  ! V 4      P                  R4      pV'       g   \        R4      hVP	                  R4      '       d   R# VP	                  R4      '       d   R# R# )z/
Determines the OS from the user agent string.
familyz&Could not determine OS from user agentMacr}   Windowsr:   r<   )r   ParseOSrh   
ValueError
startswith)r   	parsed_uas   & r6   r   r      sY     "))*599(CIABBE""I&&r8   c                \    V ^8  d   QhR\         \        ,          R\         \        ,          /# )r.   headlessr1   )r   r4   r   )r5   s   "r6   r7   r7      s'     F Fhtn F8H Fr8   c                    V RJ d   R#  \        4       pT'       g   R# \        TR R7      p\        TP                  TP
                  R7      #   \         d     R# i ; i)zL
Determines a sane viewport size for Camoufox if being ran in headful mode.
FNc                 <    V P                   V P                  ,          # N)widthheight)ms   &r6   <lambda>!get_screen_cons.<locals>.<lambda>   s    !''AHH*<r8   )rl   )	max_width
max_height)r   rH   maxr   r   r   )r   monitorsmonitors   &  r6   get_screen_consr      s[     5>  ( <=GGMMgnnEE  s   
A AAc                V    V ^8  d   QhR\         \        \        3,          R\        RR/# )r.   r{   	target_osr1   Nr
   r2   r	   )r5   s   "r6   r7   r7      s)        c3h  C  D  r8   c                   \        \        P                  P                  \        P                  P	                  \
        4      R4      R4      ;_uu_ 4       p\        P                  ! VP                  4       4      V,          pRRR4       RV 9   d8   \        P                  ! XV R,          ,           4      P                  4       V R&   R# XV R&   R#   + '       g   i     LU; i)z&
Updates the fonts for the target OS.
z
fonts.jsonrX   Nfonts)r\   rI   rJ   rK   dirname__file__r?   r]   r^   npuniquetolist)r{   r   r`   r   s   &&  r6   update_fontsr      s     
bggll277??84lCT	J	JaQVVX&y1 
K &))EF7O$;<CCEww 
K	Js   ,CC	c                (    V ^8  d   QhR\         RR/# )r.   fingerprintr1   N)r   )r5   s   "r6   r7   r7      s     2 2+ 2$ 2r8   c                    \         P                  ! V P                  P                  4      P	                  RR4      pVR8w  d   \        RV R24      h\        P                  ! RR4       R# )	z
Asserts that the passed BrowserForge fingerprint is a valid Firefox fingerprint.
and warns the user that passing their own fingerprint is not recommended.
r   zNon-FirefoxFirefox"z" fingerprints are not supported in Camoufox. Using fingerprints from a browser other than Firefox WILL lead to detection. If this is intentional, pass `i_know_what_im_doing=True`.custom_fingerprintFN)r   ParseUserAgent	navigator	userAgentrh   r   r+   warn)r   browser_names   & r6   check_custom_fingerprintr      sm     %33K4I4I4S4STXX-L y #~ H H
 	
 )51r8   c                (    V ^8  d   QhR\         RR/# )r.   rI   r1   N)ListOrString)r5   s   "r6   r7   r7      s     E E| E Er8   c                    \        V \        4      '       g   V  F  p\        V4       K  	  R# V P                  ! 4       '       g   \	        RV  R24      hV R9  d   \	        RV  R24      hR# )z#
Checks if the target OS is valid.
NzOS values must be lowercase: ''z#Camoufox does not support the OS: ')windowsmacoslinux)rw   r2   check_valid_osislowerr   )rI   os_names   & r6   r   r      si     b#G7# ::<<8A>??	..=bTCDD /r8   c                t    V ^8  d   QhR\         \        \        3,          R\         \        \        3,          /# )r.   datar1   r   )r5   s   "r6   r7   r7      s*      S#X 4S> r8   c                    V R V R V # )z:
Gets the launch options from the locals of the function.

playwrightpersistent_context )r   s   &r6   _clean_localsr      s     	\!"Kr8   c                x    V ^8  d   QhR\         \        \        3,          R\         \        \        3,          RR/# )r.   targetsourcer1   Nr   )r5   s   "r6   r7   r7      s1        tCH~  tCH~  $  r8   c                P    VP                  4        F  w  r#W 9  g   K  W0V&   K  	  R# )z
Merges new keys/values from the source dictionary into the target dictionary.
Given that the key does not exist in the target dictionary.
N)rg   )r   r   rl   rm   s   &&  r6   
merge_intor      s#    
 lln
3K %r8   c                b    V ^8  d   QhR\         \        \        3,          R\        R\        RR/# )r.   r   rl   rm   r1   Nr   )r5   s   "r6   r7   r7      s0      T#s(^ # c d r8   c                    W9  d   W V&   R# R# )zn
Sets a new key/value into the target dictionary.
Given that the key does not exist in the target dictionary.
Nr   )r   rl   rm   s   &&&r6   set_intor      s    
 s r8   c                ^    V ^8  d   QhR\         \        \        3,          R\        R\        /# )r.   r{   
propertiesr1   )r
   r2   r	   r4   )r5   s   "r6   r7   r7      s.      cN 
r8   c                   a V F`  oSR,          R9   dF   \         ;QJ d    V3R lV  4       F  '       g   K   RM	  RM! V3R lV  4       4      '       d    R# KV  SV 9   g   K_   R# 	  R# )z*
Checks if a domain is set in the config.
c              3   D   <"   T F  qP                  S4      x  K  	  R # 5ir   )r   ).0rl   rb   s   & r6   	<genexpr> is_domain_set.<locals>.<genexpr>  s     :6C>>$''6s    TF).:)any)r{   r   rb   s   &*@r6   is_domain_setr      sU     8z!s:6:sss:6::: ; v~  r8   c                J    V ^8  d   QhR\         \        \        3,          RR/# )r.   r{   r1   Nr   )r5   s   "r6   r7   r7     s"     , ,tCH~ ,$ ,r8   c                   \        V RRRR4      '       d   \        P                  ! RR4       \        V RR4      '       d   \        P                  ! R	R4       \        V R
4      '       d   \        P                  ! RR4       \        V R4      '       d   \        P                  ! RR4       \        V RRR4      '       d   \        P                  ! RR4       R# R# )z_
Warns the user if they are manually setting properties that Camoufox already sets internally.
znavigator.languageznavigator.languageszheaders.Accept-Languagezlocale:localeFzgeolocation:timezonegeolocationzheaders.User-Agentz	header-uaz
navigator.r   zscreen.zwindow.zdocument.body.viewportN)r   r+   r   r   s   &r6   warn_manual_configr     s    
 $&;=VXa  	5)V^Z88.V122e,V\**e,VY	3CDDU+ Er8   c                R    V ^8  d   QhR\         R\        \        ,          R\         /# r.   browservirtual_displayr1   r	   r   r*   )r5   s   "r6   r7   r7   %  )      #+N#;r8   c                l   aa"   S'       g   V # V P                   oR VV3R llpW n         SV n        V # 5i)z;
Attaches the virtual display to the async browser cleanup
c                0    V ^8  d   QhR\         R\         /# r.   argskwargsr	   )r5   s   "r6   r7   %async_attach_vd.<locals>.__annotate__0  s     # #s #c #r8   c                  h   <"   S! V / VB G R j  xL
  S'       d   SP                  4        R # R #  L 5ir   killr   r   _closer   s   *,r6   	new_close"async_attach_vd.<locals>.new_close0  s2     d%f%%%  "  	&s   2022close_virtual_displayr   r   r   r   s   &f @r6   async_attach_vdr   %  s7      ]]F# #
 M.GNs   04c                R    V ^8  d   QhR\         R\        \        ,          R\         /# r   r   )r5   s   "r6   r7   r7   ;  r   r8   c                d   aa S'       g   V # V P                   oR VV3R llpW n         SV n        V # )z:
Attaches the virtual display to the sync browser cleanup
c                0    V ^8  d   QhR\         R\         /# r   r   )r5   s   "r6   r7   $sync_attach_vd.<locals>.__annotate__F  s     # # # #r8   c                  L   < S! V / VB  S'       d   SP                  4        R # R # r   r   r   s   *,r6   r   !sync_attach_vd.<locals>.new_closeF  s$      " r8   r   r   s   &f @r6   sync_attach_vdr   ;  s4     ]]F# #
 M.GNr8   r{   rI   block_imagesblock_webrtcblock_webgldisable_coopwebgl_configgeoiphumanizer   addonsr   custom_fonts_onlyexclude_addonsscreenwindowr   
ff_versionr   main_world_evalexecutable_pathfirefox_user_prefsproxyenable_cacher   envi_know_what_im_doingdebugr   c          @      <   V ^8  d   QhR\         \        \        \        3,          ,          R\         \        ,          R\         \
        ,          R\         \
        ,          R\         \
        ,          R\         \
        ,          R\         \        \        \        3,          ,          R\         \        \        \
        3,          ,          R	\         \        \
        \        3,          ,          R
\         \        \        \        \        ,          3,          ,          R\         \        \        ,          ,          R\         \        \        ,          ,          R\         \
        ,          R\         \        \        ,          ,          R\         \        ,          R\         \        \        \        3,          ,          R\         \        ,          R\         \        ,          R\         \
        ,          R\         \
        ,          R\         \        \        \        3,          ,          R\         \        \        \        3,          ,          R\         \        \        \        3,          ,          R\         \
        ,          R\         \        \        ,          ,          R\         \        \        \        \        \        \
        3,          3,          ,          R\         \
        ,          R\         \
        ,          R\         \        ,          R\        \        \        3,          R\        \        \        3,          /# ) r.   r{   rI   r   r   r  r  r  r  r  r   r  r   r  r  r	  r
  r   r  r   r  r  r  r  r  r   r  r  r  r   launch_optionsr1   )r   r
   r2   r	   r   r4   r   r   r3   r   r   r   rr   r   r   )r5   s   "r6   r7   r7   Q  so    E ET#s(^$E 	E 4.	E
 4.E $E 4.E 5c?+E E#t)$%E uT5[)*E U3S	>*+E T#YE DIE  ~E T-01E  V!E" U38_%#E$ +&%E& 'E( tn)E* d^+E, eCI./-E. !c3h0/E0 DcN#1E2 4.3E4 49
5E6 
$sE#ud"2334	57E8 #4.9E: D>;E< c]=E> 38n?E@ 
#s(^AEr8   c                8
   V f   / p Vf   RpV
f   . p
Vf   . pVf   / pVf   RpVf   RpVf<   \        \        \        \        \        \        \
        3,          3,          \        4      p\        V\        4      '       d   \        \        V4      4      pV'       d   VVR&   V'       g   \        V 4       V'       d   \        V4       MV'       d   \        R4      h\        W4       V
'       d   \        V
4       WR&   V'       d$   \        V4      p\        P                   ! RV4       M!\#        4       P%                  R^4      ^ ,          pVf0   \'        T;'       g    \)        T;'       g    RV9   4      VVR7      pMV'       g   \+        V4       \-        V \/        VV4      4       \1        V 4      p\3        V R\5        ^^4      4       V'       d   WR	&   V'       d0   ^ VR
&   V'       d   \        P                   ! R4       M\        R4      h\7        V V4       \3        V R\9        ^ R4      4       V'       d   \;        4        VRJ d6   V'       d$   \=        \?        R0/ VB PA                  4       4      pM
\=        4       pV'       gC   \C        V4      '       d   \3        V RV4       RVR&   M\E        V4      '       d   \3        V RV4       \G        V4      p V PI                  V PK                  4       4       MGV'       d@   RVPM                  RR4      9  d)   \O        V R4      '       g   \        P                   ! R4       V	'       d   \Q        W4       V'       d7   \3        V RR4       \        V\R        \        34      '       d   \3        V RV4       V'       d   \3        V RR4       V'       d   \        P                   ! RV4       ^VR&   V'       d   RVR&   V'       d   \        P                   ! RV4       RVR&   V'       g   VPU                  R R4      RJ d   RVR!&   \        P                   ! R"V4       MNV'       d   \W        V.VO5!  p!M\W        V4      p!V!PU                  R#4      p"\-        V V!4       \-        VR$V"R%R/4       \-        V R&\9        R1^24      R'R/4       V'       d   \-        V\X        4       V'       d   \[        R(4       \]        V 4       \_        V VR)7       / \a        V V4      CVCp#V'       d   \        V4      pM
\c        4       pR*VR+VR,V#R-VR.VR/V/Ve   VC# / C# )2a~  
Launches a new browser instance for Camoufox.
Accepts all Playwright Firefox launch options, along with the following:

Parameters:
    config (Optional[Dict[str, Any]]):
        Camoufox properties to use. (read https://github.com/daijro/camoufox/blob/main/README.md)
    os (Optional[ListOrString]):
        Operating system to use for the fingerprint generation.
        Can be "windows", "macos", "linux", or a list to randomly choose from.
        Default: ["windows", "macos", "linux"]
    block_images (Optional[bool]):
        Whether to block all images.
    block_webrtc (Optional[bool]):
        Whether to block WebRTC entirely.
    block_webgl (Optional[bool]):
        Whether to block WebGL. To prevent leaks, only use this for special cases.
    disable_coop (Optional[bool]):
        Disables the Cross-Origin-Opener-Policy, allowing elements in cross-origin iframes,
        such as the Turnstile checkbox, to be clicked.
    geoip (Optional[Union[str, bool]]):
        Calculate longitude, latitude, timezone, country, & locale based on the IP address.
        Pass the target IP address to use, or `True` to find the IP address automatically.
    humanize (Optional[Union[bool, float]]):
        Humanize the cursor movement.
        Takes either `True`, or the MAX duration in seconds of the cursor movement.
        The cursor typically takes up to 1.5 seconds to move across the window.
    locale (Optional[Union[str, List[str]]]):
        Locale(s) to use in Camoufox. The first listed locale will be used for the Intl API.
    addons (Optional[List[str]]):
        List of Firefox addons to use.
    fonts (Optional[List[str]]):
        Fonts to load into Camoufox (in addition to the default fonts for the target `os`).
        Takes a list of font family names that are installed on the system.
    custom_fonts_only (Optional[bool]):
        If enabled, OS-specific system fonts will be not be passed to Camoufox.
    exclude_addons (Optional[List[DefaultAddons]]):
        Default addons to exclude. Passed as a list of camoufox.DefaultAddons enums.
    screen (Optional[Screen]):
        Constrains the screen dimensions of the generated fingerprint.
        Takes a browserforge.fingerprints.Screen instance.
    window (Optional[Tuple[int, int]]):
        Set a fixed window size instead of generating a random one
    fingerprint (Optional[Fingerprint]):
        Use a custom BrowserForge fingerprint. Note: Not all values will be implemented.
        If not provided, a random fingerprint will be generated based on the provided
        `os` & `screen` constraints.
    ff_version (Optional[int]):
        Firefox version to use. Defaults to the current Camoufox version.
        To prevent leaks, only use this for special cases.
    headless (Optional[bool]):
        Whether to run the browser in headless mode. Defaults to False.
        Note: If you are running linux, passing headless='virtual' to Camoufox & AsyncCamoufox
        will use Xvfb.
    main_world_eval (Optional[bool]):
        Whether to enable running scripts in the main world.
        To use this, prepend "mw:" to the script: page.evaluate("mw:" + script).
    executable_path (Optional[Union[str, Path]]):
        Custom Camoufox browser executable path.
    firefox_user_prefs (Optional[Dict[str, Any]]):
        Firefox user preferences to set.
    proxy (Optional[Dict[str, str]]):
        Proxy to use for the browser.
        Note: If geoip is True, a request will be sent through this proxy to find the target IP.
    enable_cache (Optional[bool]):
        Cache previous pages, requests, etc (uses more memory).
    args (Optional[List[str]]):
        Arguments to pass to the browser.
    env (Optional[Dict[str, Union[str, float, bool]]]):
        Environment variables to set.
    debug (Optional[bool]):
        Prints the config being sent to Camoufox.
    virtual_display (Optional[str]):
        Virtual display number. Ex: ':99'. This is handled by Camoufox & AsyncCamoufox.
    webgl_config (Optional[Tuple[str, str]]):
        Use a specific WebGL vendor/renderer pair. Passed as a tuple of (vendor, renderer).
    **launch_options (Dict[str, Any]):
        Additional Firefox launch options.
FDISPLAYz&OS must be set when using webgl_configr  r  r   )r	  r
  rI   zwindow.history.lengthr   zgfx.bundled-fonts.activater  z@No custom fonts were passed, but `custom_fonts_only` is enabled.zfonts:spacing_seedi?Tzwebrtc:ipv4znetwork.dns.disableIPv6zwebrtc:ipv6	localhostserver r   proxy_without_geoipr  zhumanize:maxTimeallowMainWorldr   zpermissions.default.imagezmedia.peerconnection.enabledr  z.browser.tabs.remote.useCrossOriginOpenerPolicyallow_webglzwebgl.disabledr  webGl2Enabledzwebgl.enable-webgl2zwebgl.force-enabledzcanvas:aaOffsetzcanvas:aaCapOffsetz[DEBUG] Config:rf   r  r   r  r  r  r   r   i)2r   r
   r2   r   r3   r4   r   rw   r   r   r   r   r   r   r   r+   r   r(   splitr   r   r   r   r   r   r   r   r   r   r#   r    r   	as_stringr!   r"   r$   update	as_configrh   r   r%   rr   popr,   CACHE_PREFSrB   r   ro   rU   r)   )$r{   rI   r   r   r  r  r  r  r  r   r  r   r  r  r	  r
  r   r  r   r  r  r  r  r  r   r  r  r  r   r  ff_version_strr   r   webgl_fpenable_webgl2rL   s$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$,      r6   r  r  Q  s   b ~ ~|! !#$
{4U3t#3445w?/3''w78 (I  6" 
r 
ABB v. f!x Z';<)+11#q9!< *JJ_X-I-Ic9IJ
 $$[1 +~6
 f%I V,i1o> w;<7801 _``VY' V)71m+DE D=!%.%.":":"<=! %  6@D"#<=E""6%e,k++-.
 	uyy266fm44./ v& T*he--V/: )40 )=>:;67=B9:)=>OTKL n((=F/3+,(<= #I==H#I.H _5 	68$%}%t	
 wsB/ $	
 %{3  v F1
vy
)
H
 o.%- 	?x0H ,7>  >@ r8   c                @    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   # )r.   r   )__conditional_annotations__r   )r5   s   "r6   r7   r7      s    		> A @i @? 
r8   r   r   )Wr)  rI   rC   r   os.pathr   pathlibr   r   randomr   r   typingr	   r
   r   r   r   r   r   r   numpyr   r?   browserforge.fingerprintsr   r   
screeninfor   typing_extensionsr   	ua_parserr   r  r   r   r   
exceptionsr   r   r   r   fingerprintsr   r   ipr   r    r!   r"   r   r#   r$   r%   pkgmanr&   r'   r(   r)   virtdisplayr*   warningsr+   webglr,   r2   r   r$  rU   rc   ro   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r7   )r)  s   @r6   <module>r:     sM   		 
     % I I I   9 # ' ' D D  B 8 8 B B D D ' ! c3hcC ?@ @ )".!4"D+TBB"0F$ 2&E  &,.,,E'+E "&E $(	E
 $(E #'E $(E /3E )-E .2E /3E #'E "&E )-E 59E   $!E" )-#E$ *.%E& !%'E(  $)E* '++E, 37-E. 48/E0 '+1E2 $(3E4 !%5E6 9=7E8 ,09E: !;E< &*=E Er8   