§
    ¸QDb�N  ã                   óº   — d dl Z d dlZd dlZddlmZ d„ Z G d„ d¦  «        Z G d„ d¦  «        Z G d	„ d
¦  «        Z	 G d„ d¦  «        Z
 G d„ d¦  «        Zdd„ZdS )é    Né   )ÚparseDeviceIDc                 ó¦   — t           j        j                             t	          | ¦  «                             ¦   «         ¦  «        }t          |¦  «        S ©N)ÚxmlÚetreeÚElementTreeÚXMLÚopenÚreadÚlist)ÚfilenameÚpreferreddriverss     ú</usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.pyÚPreferredDriversr      s<   € Ý”yÔ,×0Ò0µ$¸±/´/×2FÒ2FÑ2IÔ2IÑJÔJÐÝÐ Ñ!Ô!Ð!ó    c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚDeviceIDMatchzK
    A set of fields and regular expressions for matching a Device ID.
    c                 ó,   — t          ¦   «         | _        d S r   )ÚdictÚ_re©Úselfs    r   Ú__init__zDeviceIDMatch.__init__$   s   € Ý‘6”6ˆŒˆˆr   c                 óx   — t          j        |t           j        ¦  «        | j        |                     ¦   «         <   d S r   )ÚreÚcompileÚIr   Úupper)r   ÚfieldÚpatterns      r   Ú	add_fieldzDeviceIDMatch.add_field'   s*   € Ý#%¤:¨w½¼Ñ#=Ô#=ˆŒ�—’‘”Ñ Ð Ð r   c                 óð   — | j                              ¦   «         D ][\  }}||vr dS |dk    r+d}||         D ]}|                     |¦  «        rd} nŒ|s dS |                     ||         ¦  «        s dS Œ\dS )zé
        Match against a parsed Device ID dictionary.

        The CMD field is treated specially.  If any of the
        comma-separated words in this field value match, the Device ID
        pattern is considered to match.
        FÚCMDT)r   ÚitemsÚmatch)r   Údeviceidr    r&   Úthis_field_matchesÚcmds         r   r&   zDeviceIDMatch.match*   s·   € ð !œHŸNšNÑ-Ô-ð 	ð 	‰LˆE�5Ø˜HÐ$Ð$Ø�u�uà˜Š~ˆ~Ø%*Ð"Ø# Eœ?ð ð �CØ—{’{ CÑ(Ô(ð Ø-1Ð*Ø˜ðð *ð !Ø ˜5˜5à—;’; ¨¤Ñ0Ô0ð Ø�u�uðð ˆtr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r&   © r   r   r   r       sK   € € € € € ðð ðð ð ð>ð >ð >ðð ð ð ð r   r   c                   ób   — e Zd ZdZdZdZdZdZdZd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
DriverTypez
    A type of driver.
    z	exact-cmdÚexactÚcloseÚgenericÚnonec                 ó„   — || _         d | _        g | _        g | _         G d„ d¦  «        } |¦   «         | _        d | _        d S )Nc                   ó   — e Zd Zdd„ZdS )ú'DriverType.__init__.<locals>.AlwaysTrueNc                 ó   — dS ©NTr.   )r   ÚkÚds      r   Úgetz+DriverType.__init__.<locals>.AlwaysTrue.getX   s   € Ø�tr   r   )r*   r+   r,   r<   r.   r   r   Ú
AlwaysTruer7   W   s(   € € € € € ðð ð ð ð ð r   r=   )ÚnameÚppd_nameÚ
attributesr'   Ú_fitÚ_packagehint)r   r>   r=   s      r   r   zDriverType.__init__Q   sc   € ØˆŒ	ØˆŒØˆŒØˆŒð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð �J‘M”MˆŒ	Ø ˆÔÐÐr   c                 óž  — t          j        |t           j        ¦  «        | _        | j        �dS |                     dd¦  «        }t          |¦  «        dk    rv|d         }|dk    r\|d         }|                     d¦  «        r;|dd…         }|                     d¦  «        }|d	k    r|d|…         }d
|z  | _        dS dS dS d|z  | _        dS dS )z:
        An optional PPD name regular expression.
        Nú:r   r   Údrvz///é   ú/éÿÿÿÿz/usr/share/cups/drv/%sz/usr/lib/cups/driver/%s)	r   r   r   r?   rB   ÚsplitÚlenÚ
startswithÚrfind)r   r!   ÚpartsÚschemeÚrestrE   Úfs          r   Úadd_ppd_namezDriverType.add_ppd_name^   sï   € õ œ
 G­R¬TÑ2Ô2ˆŒð ÔÐ(ØˆFà—’˜s AÑ&Ô&ˆÝ�‰;Œ;˜Š?ˆ?Ø˜1”XˆFØ˜ŠˆØ˜Q”x�Ø—?’? EÑ*Ô*ð KØ˜q˜r˜rœ(�CØŸ	š	 3™œ�AØ˜B’w�wØ! " 1 "œg˜Ø,DÀsÑ,J˜Ô)Ð)Ð)ðKð Kð �wð %>ÀÑ$F�Ô!Ð!Ð!ð ˆ?r   c                 óx   — | j                              |t          j        |t          j        ¦  «        f¦  «         dS )zl
        An optional IPP attribute name and regular expression to match
        against its values.
        N)r@   Úappendr   r   r   )r   r>   r!   s      r   Úadd_attributezDriverType.add_attributew   s3   € ð
 	Œ×Ò ¥r¤z°7½B¼DÑ'AÔ'AÐ BÑCÔCÐCÐCÐCr   c                 ó:   — | j                              |¦  «         dS )z8
        An optional IEEE 1284 Device ID match.
        N©r'   rS   ©r   Údeviceid_matchs     r   Úadd_deviceid_matchzDriverType.add_deviceid_match~   ó    € ð 	Œ×Ò˜nÑ-Ô-Ð-Ð-Ð-r   c                 óŠ   — i | _         |                     ¦   «         D ]&}d| j         |<   || j        k    rd| j         | j        <   Œ'd S r9   )rA   rI   Ú	FIT_EXACTÚFIT_EXACT_CMD)r   ÚtextÚfittypes      r   Úadd_fitzDriverType.add_fit„   sU   € ØˆŒ	Ø—z’z‘|”|ð 	5ð 	5ˆGØ!%ˆDŒI�gÑð ˜$œ.Ò(Ð(Ø04�”	˜$Ô,Ñ-øð	5ð 	5r   c                 ó   — || _         d S r   )Ú_packagekit)r   Úhints     r   Úset_packagehintzDriverType.set_packagehint�   s   € ØˆÔÐÐr   c                 ó   — | j         S )z7
        Return the name for this driver type.
        )r>   r   s    r   Úget_namezDriverType.get_name�   s   € ð ŒyÐr   c                 ó4   — d| j         t          | ¦  «        fz  S )Nz <DriverType %s instance at 0x%x>)r>   Úidr   s    r   Ú__repr__zDriverType.__repr__–   s   € Ø1°T´YÅÀDÁ	Ä	Ð4JÑJÐJr   c                 ó(  — | j                              |d¦  «        }|r#| j        r| j                             |¦  «        sd}|r[| j        D ]S\  }}||vrd} nG||         }t          |t          ¦  «        s|g}d}|D ]}	|                     |	¦  «        rd} nŒ|sd} nŒT|rr| j        rd|vrd}nd| j        r]|d         }
t          |
t          ¦  «        s|
g}
d}|
D ]4}t          |¦  «        }| j        D ]}|                     |¦  «        rd} nŒŒ5|sd}|S )z•
        Return True if there is a match for all specified criteria.

        ppdname: string

        attributes: dict

        fit: string
        FTzppd-device-id)	rA   r<   r?   r&   r@   Ú
isinstancer   r'   r   )r   r?   r@   ÚfitÚmatchesr>   r&   ÚvaluesÚany_value_matchesÚvalueÚdeviceidlistÚany_id_matchesÚdeviceidstrr'   s                 r   r&   zDriverType.match™   s«  € ð ”)—-’-  eÑ,Ô,ˆØð 	�t”}ð 	¨T¬]×-@Ò-@À(Ñ-KÔ-Kð 	ØˆGàð 	Ø#œð ð ‘��eØ˜zÐ)Ð)Ø#�GØ�Eà# DÔ)�Ý! 6­4Ñ0Ô0ð &à$˜X�Fà$)Ð!Ø#ð ð �EØ—{’{ EÑ*Ô*ð Ø,0Ð)Ø˜ðð )ð Ø#�GØ�Eðð ð 	$ØŒ}ð $ ¸
Ð!BÐ!BØ��Ø”ð $ð  *¨/Ô:�Ý! <µÑ6Ô6ð 2à$0 >�Là!&�Ø#/ð "ð "�KÝ,¨kÑ:Ô:�HØ!%¤ð "ð "˜Ø Ÿ;š;¨Ñ1Ô1ð "Ø-1˜NØ!˜Eð"øð &ð $Ø#�Gàˆr   c                 ó   — d S r   r.   r   s    r   Úget_packagehintzDriverType.get_packagehintÕ   s   € Øˆtr   N)r*   r+   r,   r-   r]   r\   Ú	FIT_CLOSEÚFIT_GENERICÚFIT_NONEr   rQ   rT   rY   r`   rd   rf   ri   r&   ru   r.   r   r   r0   r0   F   sÙ   € € € € € ðð ð $€MØ€IØ€IØ!€KØ€Hð!ð !ð !ðGð Gð Gð2Dð Dð Dð.ð .ð .ð5ð 5ð 5ð ð  ð  ðð ð ðKð Kð Kð:ð :ð :ðxð ð ð ð r   r0   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚDriverTypesz!
    A list of driver types.
    c                 ó   — g | _         d S r   )Údrivertypesr   s    r   r   zDriverTypes.__init__Ý   s   € ØˆÔÐÐr   c                 óÈ  — g }t          |¦  «        D �]G}t          |j        d         ¦  «        }t          |¦  «        D �]}|j        dk    r!|                     |j        d         ¦  «         Œ/|j        dk    r-|                     |j        d         |j        d         ¦  «         Œg|j        dk    rmt          ¦   «         }t          |¦  «        D ]9}|j        dk    r,|                     |j        d         |j        d         ¦  «         Œ:|                     |¦  «         Œß|j        dk    r| 	                    |j
        ¦  «         �Œ|                     |¦  «         �ŒI|| _        dS )	zA
        Load the list of driver types from an XML file.
        r>   Úppdnamer&   Ú	attributer'   r    rl   N)r   r0   ÚattribÚtagrQ   rT   r   r"   rY   r`   r^   rS   r|   )r   r|   ÚtypesÚ
drivertypeÚtÚchildrX   r    s           r   ÚloadzDriverTypes.loadà   sy  € ð
 ˆÝ˜{Ñ+Ô+ð 	ñ 	ˆJÝ˜JÔ-¨fÔ5Ñ6Ô6ˆAå˜jÑ)Ô)ð +ñ +�Ø”9 	Ò)Ð)Ø—N’N E¤L°Ô$9Ñ:Ô:Ð:Ð:Ø”Y +Ò-Ð-Ø—O’O U¤\°&Ô%9Ø%*¤\°'Ô%:ñ<ô <ð <ð <à”Y *Ò,Ð,Ý%2Ñ%5Ô%5�NÝ!% e¡¤ð Mð M˜Ø œ9¨Ò/Ð/Ø*×4Ò4°e´lÀ6Ô6JØ6;´lÀ7Ô6KñMô Mð Møð ×(Ò(¨.Ñ9Ô9Ð9Ð9Ø”Y %Ò'Ð'Ø—I’I˜uœzÑ*Ô*Ð*ùà�LŠL˜!ÑÔÐÑà ˆÔÐÐr   c                 óP   — | j         D ]}|                     |||¦  «        r|c S ŒdS )z�
        Return the first matching drivertype for a PPD, given its name,
        attributes, and fitness, or None if there is no match.
        N)r|   r&   )r   r~   Úppddictrl   rƒ   s        r   r&   zDriverTypes.matchþ   sH   € ð Ô*ð 	"ð 	"ˆJØ×Ò ¨'°3Ñ7Ô7ð "Ø!Ð!Ð!Ð!ð"ð ˆtr   c                 óJ   — t          j        d„ | j        D ¦   «         |¦  «        S )z[
        Return the subset of driver type names that match a glob
        pattern.
        c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r.   )rf   )Ú.0Úxs     r   ú
<listcomp>z&DriverTypes.filter.<locals>.<listcomp>  s    € ÐHÐHÐH°! §
¢
¡¤ÐHÐHÐHr   )ÚfnmatchÚfilterr|   ©r   r!   s     r   r�   zDriverTypes.filter
  s/   € õ Œ~ÐHÐH°tÔ7GÐHÑHÔHØ&ñ(ô (ð 	(r   c           	      ó¶  — g }i }t           j        }|                     ¦   «         D ]y\  }}|                      |||                     ||¦  «        ¦  «        }	|	r|	                     ¦   «         }
nd}
|                     |
g ¦  «        }|                     |¦  «         |||
<   Œz|D ]7}|                     |g ¦  «        D ]}||v rŒ|                     ||f¦  «         ŒŒ8|S )a  
        Given a list of driver type names, a dict of PPD attributes by
        PPD name, and a dict of driver fitness status codes by PPD
        name, return a list of tuples in the form (driver-type-name,
        PPD-name), representing PPDs that match the list of driver
        types.

        The returned tuples will have driver types in the same order
        as the driver types given, with the exception that any
        blacklisted driver types will be omitted from the returned
        result.
        r4   )r0   rv   r%   r&   r<   rf   rS   )r   r|   Úppdsdictrl   ÚppdnamesÚppdtypesÚfit_defaultr?   Úppd_dictrƒ   r>   ÚmÚdrivertypenames                r   Úget_ordered_ppdnamesz DriverTypes.get_ordered_ppdnames  s  € ð ˆð ˆÝ Ô*ˆØ"*§.¢.Ñ"3Ô"3ð 
	ð 
	ÑˆH�hØŸš X¨x¸¿ºÀ(ØBMñ:Oô :Oñ Pô PˆJàð Ø!×*Ò*Ñ-Ô-��à�à—’˜d BÑ'Ô'ˆAØ�HŠH�hÑÔÐØˆH�T‰NˆNð *ð 	=ð 	=ˆNØ$ŸLšL¨.¸"Ñ=Ô=ð =ð =�Ø˜xÐ'Ð'Øà—’ .°(Ð!;Ñ<Ô<Ð<Ð<ð	=ð ˆr   N)	r*   r+   r,   r-   r   r†   r&   r�   r™   r.   r   r   rz   rz   Ø   si   € € € € € ðð ðð ð ð!ð !ð !ð<
ð 
ð 
ð(ð (ð (ð'ð 'ð 'ð 'ð 'r   rz   c                   óN   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )ÚPrinterTypez©
    A make-and-model pattern and/or set of IEEE 1284 Device ID
    patterns for matching a set of printers, together with an ordered
    list of driver type names.
    c                 ó|   — d | _         g | _        g | _        t          ¦   «         | _        t          ¦   «         | _        d S r   )Úmake_and_modelr'   Údrivertype_patternsÚsetÚavoidÚ	blacklistr   s    r   r   zPrinterType.__init__C  s3   € Ø"ˆÔØˆŒØ#%ˆÔ Ý‘U”UˆŒ
Ý™œˆŒˆˆr   c                 óN   — t          j        |t           j        ¦  «        | _        dS )zR
        Set a make-and-model regular expression.  Only one is permitted.
        N)r   r   r   r�   r�   s     r   Úadd_make_and_modelzPrinterType.add_make_and_modelJ  s    € õ !œj¨'µ2´4Ñ8Ô8ˆÔÐÐr   c                 ó:   — | j                              |¦  «         dS )z(
        Add a Device ID match.
        NrV   rW   s     r   rY   zPrinterType.add_deviceid_matchP  rZ   r   c                 ó^   — | j                              |                     ¦   «         ¦  «         dS )z/
        Append a driver type pattern.
        N)rž   rS   Ústrip©r   r>   s     r   Úadd_drivertype_patternz"PrinterType.add_drivertype_patternV  s)   € ð 	Ô ×'Ò'¨¯ª©¬Ñ7Ô7Ð7Ð7Ð7r   c                 ó   — | j         S )z:
        Return the list of driver type patterns.
        )rž   r   s    r   Úget_drivertype_patternsz#PrinterType.get_drivertype_patterns\  s   € ð Ô'Ð'r   c                 ó:   — | j                              |¦  «         dS )z3
        Add an avoid driver type pattern.
        N)r    Úaddr§   s     r   Úadd_avoidtype_patternz!PrinterType.add_avoidtype_patternb  s   € ð 	Œ
�Š˜ÑÔÐÐÐr   c                 ó   — | j         S )zB
        Return the set of driver type patterns to avoid.
        )r    r   s    r   Úget_avoidtype_patternsz"PrinterType.get_avoidtype_patternsh  s   € ð ŒzÐr   c                 ó:   — | j                              |¦  «         dS )z8
        Add a blacklisted driver type pattern.
        N)r¡   r¬   r§   s     r   Úadd_blacklistedzPrinterType.add_blacklistedn  s    € ð 	Œ×Ò˜DÑ!Ô!Ð!Ð!Ð!r   c                 ó   — | j         S )zE
        Return the set of blacklisted driver type patterns.
        )r¡   r   s    r   Úget_blacklistzPrinterType.get_blacklistt  s   € ð Œ~Ðr   c                 ó¾   — | j         du o
| j        g k    }| j         r| j                              |¦  «        rd}|s#| j        D ]}|                     |¦  «        rd} nŒ|S )a}  
        Return True if there are no constraints to match against; if
        the make-and-model pattern matches; or if all of the IEEE 1284
        Device ID patterns match.

        The deviceid parameter must be a dict indexed by Device ID
        field key, of strings; except for the CMD field which must be
        a list of strings.

        Return False otherwise.
        NT)r�   r'   r&   )r   r�   r'   rm   r&   s        r   r&   zPrinterType.matchz  s‰   € ð Ô&¨$Ð.ÐF°4´=ÀBÒ3FˆØÔð 	ØÔ"×(Ò(¨.Ñ9Ô9ð Ø�àð 	Øœð ð �Ø—;’; Ñ)Ô)ð Ø"�GØ�Eðð ˆr   N)r*   r+   r,   r-   r   r£   rY   r¨   rª   r­   r¯   r±   r³   r&   r.   r   r   r›   r›   <  s´   € € € € € ðð ðð ð ð9ð 9ð 9ð.ð .ð .ð8ð 8ð 8ð(ð (ð (ðð ð ðð ð ð"ð "ð "ðð ð ðð ð ð ð r   r›   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚPreferenceOrderzA
    A policy for choosing the preference order for drivers.
    c                 ó   — g | _         d S r   )Úptypesr   s    r   r   zPreferenceOrder.__init__™  s   € ØˆŒˆˆr   c                 ó>  — t          |¦  «        D �]‹}t          ¦   «         }t          |¦  «        D �]O}|j        dk    r!|                     |j        d         ¦  «         Œ/|j        dk    rmt          ¦   «         }t          |¦  «        D ]9}|j        dk    r,|                     |j        d         |j        d         ¦  «         Œ:|                     |¦  «         Œ§|j        dk    r-t          |¦  «        D ]}|                     |j	        ¦  «         ŒŒß|j        dk    r.t          |¦  «        D ]}| 
                    |j	        ¦  «         Œ�Œ|j        dk    r,t          |¦  «        D ]}|                     |j	        ¦  «         Œ�ŒQ| j                             |¦  «         �Œ�d	S )
z3
        Load the policy from an XML file.
        zmake-and-modelr&   r'   r    r>   Údriversr    r¡   N)r   r›   r�   r£   r€   r   r"   rY   r¨   r^   r­   r±   r¸   rS   )r   r   ÚprinterÚptyper…   rX   r    rƒ   s           r   r†   zPreferenceOrder.loadœ  sÕ  € õ
 Ð,Ñ-Ô-ð 	'ñ 	'ˆGÝ‘N”NˆEÝ˜g™œð @ñ @�Ø”9Ð 0Ò0Ð0Ø×,Ò,¨e¬l¸7Ô.CÑDÔDÐDÐDØ”Y *Ò,Ð,Ý%2Ñ%5Ô%5�NÝ!% e¡¤ð Mð M˜Ø œ9¨Ò/Ð/Ø*×4Ò4°e´lÀ6Ô6JØ6;´lÀ7Ô6KñMô Mð Møà×,Ò,¨nÑ=Ô=Ð=Ð=à”Y )Ò+Ð+Ý&*¨5¡k¤kð Gð G˜
Ø×4Ò4°j´oÑFÔFÐFÐFðGð ”Y 'Ò)Ð)Ý&*¨5¡k¤kð Fð F˜
Ø×3Ò3°Z´_ÑEÔEÐEÐEñFð ”Y +Ò-Ð-Ý&*¨5¡k¤kð @ð @˜
Ø×-Ò-¨z¬Ñ?Ô?Ð?Ð?ùàŒK×Ò Ñ&Ô&Ð&Ñ&ð3	'ð 	'r   c                 ó2  — |€i }|€d}g }t          ¦   «         }t          ¦   «         }| j        D ]è}|                     ||¦  «        rÐ|                     ¦   «         D ]3}|                     |¦  «        D ]}	|	|vr|                     |	¦  «         ŒŒ4|                     ¦   «         D ]/}|                     |¦  «        D ]}	|                     |	¦  «         ŒŒ0|                     ¦   «         D ]/}|                     |¦  «        D ]}	|                     |	¦  «         ŒŒ0Œé|rZg }
|D ]@}	 | 	                    |¦  «        }||= |
                     |¦  «         Œ1# t          $ r Y Œ=w xY w|                     |
¦  «         |r"g }|D ]}||vr|                     |¦  «         Œ|}|S )a  
        Return an accumulated list of driver types from all printer
        types that match a given printer's device-make-and-model and
        IEEE 1284 Device ID.

        The deviceid parameter must be None or a dict indexed by
        short-form upper-case field keys.
        NÚ )rŸ   r¸   r&   rª   r�   rS   r¯   r¬   r³   ÚindexÚ
IndexErrorÚextend)r   r|   r�   r'   Úorderedtypesr¡   Ú
avoidtypesr¼   r!   rƒ   Úavoidedr„   ÚiÚ	remainings                 r   Úget_ordered_typesz!PreferenceOrder.get_ordered_types¼  s-  € ð ÐØˆHàÐ!ØˆNàˆÝ‘E”Eˆ	Ý‘U”Uˆ
Ø”[ð 	3ð 	3ˆEØ�{Š{˜N¨HÑ5Ô5ð 3Ø$×<Ò<Ñ?Ô?ð =ð =�Gà&1×&8Ò&8¸'Ñ&BÔ&Bð =ð =˜
à%¨\Ð9Ð9Ø(×/Ò/°Ñ<Ô<Ð<øð=ð
  %×;Ò;Ñ>Ô>ð 4ð 4�Gà&1×&8Ò&8¸'Ñ&BÔ&Bð 4ð 4˜
à"Ÿš¨
Ñ3Ô3Ð3Ð3ð4ð  %×2Ò2Ñ5Ô5ð 3ð 3�Gà&1×&8Ò&8¸'Ñ&BÔ&Bð 3ð 3˜
à!Ÿš zÑ2Ô2Ð2Ð2ð3øð ð 
	*ØˆGØð ð �ðØ$×*Ò*¨AÑ.Ô.�AØ$ Q˜Ø—N’N AÑ&Ô&Ð&Ð&øÝ!ð ð ð Ø�Hðøøøð ×Ò Ñ)Ô)Ð)àð 	%àˆIØ!ð )ð )�Ø˜IÐ%Ð%Ø×$Ò$ aÑ(Ô(Ð(øà$ˆLàÐs   Ä -EÅ
EÅEN)r*   r+   r,   r-   r   r†   rÇ   r.   r   r   r¶   r¶   ”  sL   € € € € € ðð ðð ð ð'ð 'ð 'ð@=ð =ð =ð =ð =r   r¶   Fc           
      óÎ  — dd l }dd l}ddlm} ddlm} ddlm} dd l}	|rd„ }
|                     |
¦  «         |                     |j	        d¦  «         | €Q|	j
                             |	j
                             |	j
                             t          ¦  «        d¦  «        d	¦  «        } | |	j        d
<   |	j
                             | d¦  «        }  |¦   «         }t          | ¦  «        \  }}t!          ¦   «         }|                     |¦  «         t%          ¦   «         }|                     |¦  «          |¦   «         |z
  }|rt'          d| |fz  ¦  «         |                     ¦   «         }	 |                     ¦   «         }n$# t,          $ r |                     ¦   «         }Y nw xY w|                     |¦  «        }|s|�rÅ|r*|                     d¦  «         |                     ¦   «         }n't7          |¦  «        }d||d         ›d|d         ›�dœi}|                     ¦   «         D �]Z\  }}|                     d¦  «        dk    rŒ |                     dd¦  «        }t?          |t@          ¦  «        r|d         }|sŒV| !                    d¦  «        st'          |¦  «         t7          |¦  «        }| "                    |d         |d         |d         |d         |¦  «        }|                     dd¦  «        }| #                    |||¦  «        }i }| $                    ¦   «         D ]}| %                    |¦  «        ||<   Œ| &                    |||¦  «        }d}|D ]&\  }} t'          d|| |||          fz  ¦  «         |dz  }Œ'�Œ\d S | '                    ¦   «         D ]Ò}!| (                    |!¦  «        D ]º}"| )                    |!|"¦  «        }#|!dz   |"z   }| #                    ||d ¦  «        }i }|# $                    ¦   «         D ]}tT          j+        ||<   Œ| &                    ||#|¦  «        }t'          |dz   ¦  «         d}|D ]\  }} t'          d|| |fz  ¦  «         |dz  }Œ t'          ¦   «          Œ»ŒÓd S )Nr   r   )Úppds)Úpprint)Útimec                 ó$   — t          | ¦  «         d S r   )Úprint)rŒ   s    r   Ú
debugprintztest.<locals>.debugprint  s   € Ý�1‰IŒIˆIˆIˆIr   r¾   z..r   ÚCUPSHELPERS_XMLDIRzpreferreddrivers.xmlzTime to load %s: %.3fsÚrootz	xxx://yyyÚMFGú ÚMDL)ú	device-idúdevice-make-and-modelrD   rH   rÔ   zxxx:ÚDESr$   rÕ   z%d  %s
    (%s, %s)z%d  %s
    (%s)),ÚcupsÚlocaler¾   rÉ   rÊ   rË   Úos.pathÚset_debugprint_fnÚ	setlocaleÚLC_ALLÚpathÚjoinÚdirnameÚ__file__Úenvironr   rz   r†   r¶   rÍ   Ú
ConnectionÚgetPPDs2ÚAttributeErrorÚgetPPDsÚPPDsÚsetUserÚ
getDevicesr   r%   Úfindr<   rk   r   rK   ÚgetPPDNamesFromDeviceIDrÇ   ÚkeysÚgetInfoFromPPDNamer™   ÚgetMakesÚ	getModelsÚgetInfoFromModelr0   rv   )$Úxml_pathÚattachedr'   Údebugr×   rØ   rÉ   rÊ   rË   ÚosrÎ   Ú	loadstartÚxmldrivertypesÚxmlpreferenceorderr|   Ú	preforderÚloadtimeÚcÚcupsppdsÚ	ppdfinderÚdevicesÚdevidÚuriÚdeviceÚid_dictrl   ÚmmrÂ   r~   ÚorderedppdsrÅ   r„   ÚppdÚmakeÚmodelr’   s$                                       r   Útestr  ü  sC  € Ø€K€K€KØ€M€M€MØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ€N€N€Nàð ,ð	ð 	ð 	ð 	×Ò 
Ñ+Ô+Ð+à
×Ò�f”m RÑ(Ô(Ð(ØÐØ”7—<’< ¤§¢¨r¬w¯ªÅÑ/IÔ/IØ/3ñ"5ô "5à!&ñ(ô (ˆð (0€B„JÐ#Ñ$ØŒw�|Š|˜XÐ'=Ñ>Ô>€HØ�‘”€IÝ+;¸XÑ+FÔ+FÑ(€^Ð'Ý‘.”.€KØ×Ò�nÑ%Ô%Ð%åÑ"Ô"€IØ‡N‚NÐ&Ñ'Ô'Ð'Øˆt‰wŒw˜Ñ"€HØð ?ÝÐ&¨(°HÐ)=Ñ=Ñ>Ô>Ð>à�ŠÑÔ€Að Ø—:’:‘=”=ˆˆøÝð  ð  ð  à—9’9‘<”<ˆˆˆð øøøð —	’	˜8Ñ$Ô$€Iàð E�8ñ EØð 
	Ø�LŠL˜&Ñ!Ô!Ð!Ø—l’l‘o”oˆGˆGå! 8Ñ,Ô,ˆEØ#Ø+3ØBGÈÄ,À,À,ØBGÈÄ,À,ð8Pð ð  ðˆGð #Ÿ=š=Ñ+Ô+ð #	ñ #	‰KˆC�Ø�xŠx˜‰~Œ~ Ò#Ð#Øà—J’J ¨RÑ0Ô0ˆEÝ˜5¥$Ñ'Ô'ð !Ø˜aœ�àð Øà—>’> 6Ñ*Ô*ð Ý�s‘”�å# UÑ+Ô+ˆGØ×3Ò3°W¸U´^Ø5<¸U´^Ø5<¸U´^Ø5<¸U´^Ø58ñ	:ô :ˆCð —’Ð4°bÑ9Ô9ˆBØ$×6Ò6¸Ø8:¸GñEô EˆLð ˆDØŸ8š8™;œ;ð Gð G�Ø )× <Ò <¸gÑ FÔ F��W‘�à%×:Ò:¸LØ<@Ø<?ñAô AˆKð ˆAØ%ð ð ‘��3ÝÐ,°°3¸¸3¸s¼8Ð/DÑDÑEÔEÐEØ�Q‘��ñðC#	ð #	ðJ ×&Ò&Ñ)Ô)ð 	ð 	ˆDØ"×,Ò,¨dÑ3Ô3ð ð �Ø$×5Ò5°t¸UÑCÔC�Ø˜C‘Z %Ñ'�Ø(×:Ò:¸KØ<>Àñ Fô  F�ð �Ø'Ÿ}š}Ñ/Ô/ð 8ð 8�GÝ#-Ô#7�C˜‘L�Là)×>Ò>ÀØ@HÈ#ñOô O�å�b˜3‘h‘”�Ø�Ø)ð ð ‘F�A�sÝÐ,°°3¸¨{Ñ:Ñ;Ô;Ð;Ø˜‘F�A�Aå‘”��ð%ð	ð 	s   Å&E; Å;FÆF)NFNF)rŽ   r   Úxml.etree.ElementTreer   Úcupshelpersr   r   r   r0   rz   r›   r¶   r  r.   r   r   ú<module>r	     sW  ðð. €€€Ø 	€	€	€	Ø Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &ð"ð "ð "ð$ð $ð $ð $ð $ñ $ô $ð $ðLPð Pð Pð Pð Pñ Pô Pð Pðdbð bð bð bð bñ bô bð bðHVð Vð Vð Vð Vñ Vô Vð Vðpeð eð eð eð eñ eô eð eðPoð oð oð oð oð or   