+
    }iV                     <   ^ RI 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 . ROt]! RR7       ! R R4      4       t]! RR7       ! R R4      4       t]! RR7       ! R R4      4       t ! R R]4      t]! RR7       ! R R4      4       t]! RR7       ! R R4      4       t]! RR7       ! R R	4      4       t ! R R
]
4      t]! R4      t ! R R] P.                  ]],          4      t]]]],          ,          ]]],          ,          ]]],          ,          3,          tR# )    N)	dataclass)Flagauto)GenericListOptionalProtocolTupleTypeVarOSDefaultedResultDeviceDomainPartialResultResolverResult	UserAgentT)frozenc                   J   a  ] tR t^t o RtRtRV 3R lR lltV 3R ltRtV t	R# )	r   zsBrowser ("user agent" aka the software responsible for the request)
information parsed from the user agent string.
Nc                |   < V ^8  d   QhRS[ RS[S[ ,          RS[S[ ,          RS[S[ ,          RS[S[ ,          RR/#    familymajorminorpatchpatch_minorreturnNstrr   )format__classdict__s   "`/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/ua_parser/core.py__annotate__UserAgent.__annotate__    W     = == }= }	=
 }= c]= 
=    c                    \         P                  V R V4       \         P                  V RV4       \         P                  V RV4       \         P                  V RV4       \         P                  V RV4       R# r   r   r   r   r   Nobject__setattr__selfr   r   r   r   r   s   &&&&&&r#   __init__UserAgent.__init__    ^     	4624%04%04%04<r'   c                   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # r   r   r   r   r   r   r   )r!   r"   s   "r#   r$   r%      sU      K  C=  C=  C=  # r'    r   r   r   r   r   OtherNNNN
__name__
__module____qualname____firstlineno____doc__	__slots__r/   __annotate_func____static_attributes____classdictcell__r"   s   @r#   r   r      s#      EI= =  r'   c                   J   a  ] tR t^/t o RtRtRV 3R lR lltV 3R ltRtV t	R# )	r   z1OS information parsed from the user agent string.Nc                |   < V ^8  d   QhRS[ RS[S[ ,          RS[S[ ,          RS[S[ ,          RS[S[ ,          RR/# r   r   )r!   r"   s   "r#   r$   OS.__annotate__:   r&   r'   c                    \         P                  V R V4       \         P                  V RV4       \         P                  V RV4       \         P                  V RV4       \         P                  V RV4       R# r)   r*   r-   s   &&&&&&r#   r/   OS.__init__:   r1   r'   c                   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # r3   r   )r!   r"   s   "r#   r$   rE   /   sU     
 K  C=  C=  C=  # r'   r4   r5   r6   r8   rB   s   @r#   r   r   /   s     ;DI= =  r'   c                   J   a  ] tR t^It o RtRtRV 3R lR lltV 3R ltRtV t	R# )	r   z5Device information parsed from the user agent string.Nc                P   < V ^8  d   QhRS[ RS[S[ ,          RS[S[ ,          RR/# )r   r   brandmodelr   Nr   )r!   r"   s   "r#   r$   Device.__annotate__R   s;     1 11 }1 }	1
 
1r'   c                    \         P                  V R V4       \         P                  V RV4       \         P                  V RV4       R# )r   rK   rL   Nr*   )r.   r   rK   rL   s   &&&&r#   r/   Device.__init__R   s:     	4624%04%0r'   c                ^   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # )r   r   rK   rL   r   )r!   r"   s   "r#   r$   rM   I   s3     
 K  C=  C= r'   r4   )rK   r   rL   )r7   NNr8   rB   s   @r#   r   r   I   s     ?,I
1 1  r'   c                   d    ] tR t^]tRt]! 4       t]! 4       t]! 4       t]],          ],          t	Rt
R# )r   zYHint for selecting which domains are requested when asking for a
:class:`PartialResult`.
r4   N)r9   r:   r;   r<   r=   r   
USER_AGENTr   DEVICEALLr@   r4   r'   r#   r   r   ]   s,    
 J	BVF
r/F
"Cr'   c                   0   a  ] tR t^lt o RtV 3R ltRtV tR# )r   zVariant of :class:`Result` where attributes are set
to a default value if their resolution failed.

For all domains, the default value has ``family`` set to
``"Other"`` and every other attribute set to ``None``.
c                J   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[;R&   # r   
user_agentosdevicestring)r   r   r   r    )r!   r"   s   "r#   r$   DefaultedResult.__annotate__l   s6        	F  N  K r'   r4   N)r9   r:   r;   r<   r=   r?   r@   rA   rB   s   @r#   r   r   l   s       r'   c                   B   a  ] tR t^{t o RtV 3R lR ltV 3R ltRtV tR# )r   zComplete result.

For each attribute (and domain), either the resolution was a
success (a match was found) and the corresponding data is set, or
it was a failure and the value is `None`.

c                    < V ^8  d   QhRS[ /# r   r   )r   )r!   r"   s   "r#   r$   Result.__annotate__   s     
 
 
r'   c                    \        V P                  ;'       g    \        4       V P                  ;'       g    \	        4       V P
                  ;'       g    \        4       V P                  R7      # )zReplaces every failed domain by its default value.

Roughly matches pre-1.0 semantics, and can allow for more
uniform handling by the client if they don't want or need the
lookup failure information.

rX   rY   rZ   r[   )r   rX   r   rY   r   rZ   r   r[   r.   s   &r#   with_defaultsResult.with_defaults   sI     55)+ww"$;;**&(;;	
 	
r'   c                z   < V ^8  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[;R&   # rW   )r   r   r   r   r    )r!   r"   s   "r#   r$   r`   {   sF      ##  	  V  K r'   r4   N)	r9   r:   r;   r<   r=   rd   r?   r@   rA   rB   s   @r#   r   r   {   s     
 
  r'   c                   F   a  ] tR t^t o RtRtV 3R lR ltV 3R ltRtV t	R# )r   a  Potentially partial (incomplete) result.

Domain fields (``user_agent``, ``os``, and ``device``) can be:

- unset if not parsed yet
- set to a parsing failure
- set to a parsing success

The ``domains`` flags specify which is which: if a :class:`Domain`
flag is set, the corresponding attribute was looked up and is
either ``None`` for a resolution failure (no match was found) or a
value for a parsing success.

If the flag is unset, the field has not been looked up yet, in
which case it can be anything (but should usually be ``None``).

c                    < V ^8  d   QhRS[ /# r_   )r   )r!   r"   s   "r#   r$   PartialResult.__annotate__   s     
 
& 
r'   c                    V P                   \        P                  8w  d   \        R4      h\	        V P
                  V P                  V P                  V P                  R7      # )zRequires that the result be fully resolved (every attribute is set,
even if to a lookup failure).

:raises ValueError: if the result is not fully resolved
z6Only a result with all attributes set can be completedrb   )	domainsr   rT   
ValueErrorr   rX   rY   rZ   r[   rc   s   &r#   completePartialResult.complete   sI     <<6::%UVVww;;;;	
 	
r'   c                   < V ^8  d   Qh/ S[ ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   # )r   rk   rX   rY   rZ   r[   )r   r   r   r   r   r    )r!   r"   s   "r#   r$   ri      sR     * O+ , ##- . 	/ 0 V1 2 K3 r'   r4   N)rZ   rk   rY   r[   rX   )
r9   r:   r;   r<   r=   r>   rm   r?   r@   rA   rB   s   @r#   r   r      s#     $ DI
 
7  r'   c                   T   a  ] tR t^t o Rt]P                  V 3R lR l4       tRtV t	R# )r   a%  Resolver()

The resolver is the thin central abstraction of ua-parser, and
used to compose various objects into the resolution stack which
best fits the system's needs.

A resolver is any callable which takes a string ``ua`` and a
:class:`Domain`, and returns a :class:`PartialResult` with at
least the requested domains marked as resolved (whether
successfully or not).

A resolver may resolve more domains than requested, but it needs
to resolve at least the requested domains.

See :class:`PartialResult` for more information about its
working.

c                ,   < V ^8  d   QhRS[ RS[RS[/# )r   uadomainr   )r    r   r   )r!   r"   s   "r#   r$   Resolver.__annotate__   s"      3  m r'   c                   R# )zResolves the ``ua``.Nr4   )r.   rr   rs   s   """r#   __call__Resolver.__call__        	r'   r4   N)
r9   r:   r;   r<   r=   abcabstractmethodrv   r@   rA   rB   s   @r#   r   r      s$     & 	 r'   Tc                      a  ] tR t^t o Rt]P                  V 3R lR l4       t]]P                  V 3R lR l4       4       t	]V 3R lR l4       t
RtV tR	# )
MatcherzA matcher is an individual pattern-rule, able to match a user
agent string and in case of success extract the relevant data.

Matchers need to expose their pattern for bulk resolvers.

c                6   < V ^8  d   QhRS[ RS[S[,          /# )r   rr   r   )r    r   r{   )r!   r"   s   "r#   r$   Matcher.__annotate__   s      3 8A; r'   c                    R# )z Applies the matcher to an input.Nr4   )r.   rr   s   &&r#   rv   Matcher.__call__   rx   r'   c                    < V ^8  d   QhRS[ /# r_   )r    )r!   r"   s   "r#   r$   r      s      s r'   c                    R# )zReturns the matcher's pattern.Nr4   rc   s   &r#   regexMatcher.regex   s     	r'   c                    < V ^8  d   QhRS[ /# r_   )int)r!   r"   s   "r#   r$   r      s      s r'   c                    ^ # )zReturns the matcher's pattern flags (only
:data:`re.IGNORECASE` is supported, and only for
:class:`Matcher` [:class:`Device`])

r4   rc   s   &r#   flagsMatcher.flags   s     r'   r4   N)r9   r:   r;   r<   r=   ry   rz   rv   propertyr   r   r@   rA   rB   s   @r#   r}   r}      sZ      	      r'   r}   )	r   r   r   r   Matchersr   r   r   r   )ry   dataclassesr   enumr   r   typingr   r   r   r	   r
   r   __all__r   r   r   r   r   r   r   r   r{   ABCr}   r   r4   r'   r#   <module>r      s?   
 !  D D
 $= = =6 $= = =2 $1 1 1&#T # $   $
 
 
> $(
 (
 (
Vx 4 CLcggwqz : 	r'   