§ ����¨ÞgÆ~��ã�������������������ó ��—�d�Z�ddlZddlZddlZddlZddlZddlmZ�ddlm Z m Z mZmZm Z mZmZ�ddlT�ddlmZmZ��ede¦��«��������Z�ede¦��«��������Ze eef���������Zd efd „Zdede e���������fd „Zdedefd„Zdedefd„Zdeeef���������defd„Zdededefd„Zdede fd„Z!dedefd„Z"dedefd„Z#dedefd„Z$dedefd„Z%dede e���������fd„Z&dedeeef���������fd„Z'dede fd „Z(d!ed"edefd#„Z)defd$„Z*d%efd&„Z+d ede e���������fd'„Z,dRd ed)e-de e���������fd*„Z.d+ed,ed-edefd.„Z/dSd+ed,ed-edefd0„Z0dTdefd1„Z1d2„�Z2d3ed4ede-fd5„Z3 � �dUd:ed;ed<ed=e-def d>„Z4d?„�Z5dVdA„Z6dBe7defdC„Z8�G�dD„�dEej9��������¦��«��������Z:�G�dF„�dGe:¦��«��������Z;�G�dH„�dI¦��«��������Z<�G�dJ„�dKe<¦��«��������Z=�G�dL„�dM¦��«��������Z>�G�dN„�dO¦��«��������Z?�G�dP„�dQ¦��«��������Z@dS�)Wz pySim: various utilities é����N)ÚBytesIO)ÚOptionalÚListÚDictÚAnyÚTupleÚNewTypeÚUnion)Ú*)Úbertlv_encode_tagÚbertlv_encode_lenÚSwHexstrÚ SwMatchstrÚimsic����������� ������óÄ���—�t����������t����������|�¦��«��������dz���¦��«��������}t����������|�¦��«��������dz��}d|z��t����������d|dz��dz��t����������|�d¦��«��������fz��¦��«��������z���}|S�)z7Converts a string IMSI into the encoded value of the EFé���ú%02xz%01x%sé���é���)Ú half_round_upÚlenÚswap_nibblesÚrpad)r���ÚlÚoeÚeis��� ú;/home/jenkins/workspace/simtester-sanitize/./pySim/utils.pyÚenc_imsir���4���sb���€�å݈D‰ Œ A‰ ñ ô� €Aå ˆT‰ŒQ‰€BØ !‰•l 8°°a±¸1©}½dÀ4ȹn¼nÐ.MÑ#MÑNÔNÑ N€BØ €Ió����ÚefÚreturnc�����������������óv��—�t����������|�¦��«��������dk�����rdS�t����������|�dd…���������d¦��«��������dz��}|dz ��}t����������|�dd…���������¦��«�������� ��������������������d¦��«��������}t����������|¦��«��������dk�����rdS�t����������|d���������¦��«��������dz ��dz��}|s|dz ��}|t����������|¦��«��������dz ��k����rdS�|dd…���������}|S�) z6Converts an EF value to the IMSI string representationé���Nr���é���é���r���Úfr���)r���Úintr���Úrstrip)r ���r���Úswappedr���r���s��� r���Údec_imsir*���=���sË���€�å ˆ2w„w‚{€{؈t݈BˆqˆsŒGRÑÔ˜1Ñ€AØ ˆA‰€Aݘ2˜a˜b˜bœ6Ñ"Ô"×)Ò)¨#Ñ.Ô.€GÝ ˆ7|„|aÒÐ؈tÝ ˆgaŒj‰/Œ/˜QÑ !Ñ #€BØ ð�à ˆa‰CˆØC‰LŒL˜1ÑÒÐ؈tØ122Œ;€DØ€Kr���c�����������������óF���—�t����������|�¦��«�������� ��������������������d¦��«��������S�)Nr&���)r���Ústrip)r ���s��� r���Ú dec_iccidr-���P���s���€�ݘÑÔ×!Ò! #Ñ&Ô&Ð&r���Úiccidc�����������������ó<���—�t����������t����������|�d¦��«��������¦��«��������S�)Né���)r���r���©r.���s��� r���Ú enc_iccidr2���T���s���€�ݘU B™œÑ(Ô(Ð(r���c�����������������óú��—�t����������|�¦��«��������}�t����������|�¦��«��������dk�����rt����������d¦��«��������‚t����������|�¦��«��������dk����rt����������d¦��«��������‚t����������|�¦��«��������dk����r|�t����������t����������|�¦��«��������¦��«��������z ��}�t����������|�¦��«��������dk����rt ����������|�¦��«���������t����������|�¦��«��������dk����r@ �t ����������|�¦��«���������n/#�t����������$�r"�|�t����������t����������|�¦��«��������¦��«��������z ��}�Y�nw�xY�w|�S�)Né���z,ICCID input value must be at least 18 digitsr0���z+ICCID input value must be at most 20 digitsé���)Ústrr���Ú ValueErrorÚcalculate_luhnÚverify_luhnr1���s��� r���Úsanitize_iccidr:���W���sü���€�݉JŒJ€EÝ ˆ5z„zB‚€ÝÐGÑHÔHÐHÝ ˆ5z„zB‚€ÝÐFÑGÔGÐGÝ ˆ5z„zRÒÐà ••^ EÑ*Ô*Ñ+Ô+Ñ+ˆÝ ˆ5z„zRÒÐõ� EÑÔÐÝ ˆ5z„zRÒÐð 0ݘÑÔÐÐøÝð� 0ð� 0ð� 0à•S¨Ñ.Ô.Ñ/Ô/Ñ/ˆEˆEˆEð 0øøøð�€Ls���Â<C�Ã)C8Ã7C8ÚmccÚmncc�����������������óÞ��—�|� ���������������������¦���«���������}�| ���������������������¦���«���������}t����������|¦��«��������dk����rd}n4t����������|¦��«��������dk����r d|z���dz���}nt����������|¦��«��������dk����r|dz ��}t����������|�¦��«��������dk����rd}�n1t����������|�¦��«��������dk����rd|�z���}�nt����������|�¦��«��������dk����rd|�z���}�|�d���������|�d���������z���|d���������|�d���������z���z���|d���������|d���������z���z���S�)z,Converts integer MCC/MNC into 3 bytes for EFr���ÚFFFr���Ú0ÚFr$���Ú00)r,���r���©r;���r<���s��� r���Úenc_plmnrC���p���sè���€�ð �)Š)‰+Œ+€CØ )Š)‰+Œ+€Cõ�ˆ3x„x1‚}€}؈ˆÝ ˆS‰ŒQŠˆØC‰i˜#‰oˆˆÝ ˆS‰ŒQŠˆØˆs‰ ˆå ˆ3x„x1‚}€}؈ˆÝ ˆS‰ŒQŠˆØS‰jˆˆÝ ˆS‰ŒQŠˆØC‰iˆàŒFS˜”V‰O A¤¨¨Q¬¡Ñ0°C¸´F¸SÀ¼V±OÑDÐDr���Ú threehexbytesc�����������������óv���—�dddœ}t����������|�¦��«���������t����������|�¦��«��������|d<���t����������|�¦��«��������|d<���|S�)Nr?���rB���r;���r<���©Údec_mcc_from_plmn_strÚdec_mnc_from_plmn_str)rD���Úress��� r���Údec_plmnrJ���‹���sD���€�ؘcÐ "Ð "€Cݘ-Ñ(Ô(Ð(Ý& }Ñ5Ô5€CˆJÝ& }Ñ5Ô5€CˆJØ€Jr���Úplmnc�����������������ó²���—�t����������|�¦��«��������}|d���������dz��}|d���������dz��dz ��}|d���������dz��}|dk����r|dk����r|dk����rdS�t����������|||¦��«��������S�)Nr���r���éð���r#���r���éÿ��)Úh2iÚ derive_mcc©rK���ÚiaÚdigit1Údigit2Údigit3s��� r���Údec_mcc_from_plmnrV���–���si���€�Ý ˆT‰Œ€BØ ŒUT‰\€FØŒed‰l˜qÑ €FØ ŒUT‰\€FØ ‚}€}˜ 3š˜¨6°Sª=¨=؈uÝf˜f fÑ-Ô-Ð-r���c�����������������ó���—�|�d���������}|�d���������}|�d���������}||z���|z���}| ���������������������¦���«��������� ��������������������d¦��«��������S�)Nr���r���r���r@���©Úupperr,���©rK���rS���rT���rU���rI���s��� r���rG���rG��� ���óG���€�Ø !ŒW€FØ !ŒW€FØ !ŒW€FØ 6‰/˜FÑ "€CØ9Š9‰;Œ;×Ò˜SÑ!Ô!Ð!r���c�����������������ó¸���—�t����������|�¦��«��������}|d���������dz��}|d���������dz��dz ��}|d���������dz��dz ��}|dk����r|dk����r|dk����rdS�t����������|||¦��«��������S�)Nr$���r���rM���r#���r���rN���)rO���Ú derive_mncrQ���s��� r���Údec_mnc_from_plmnr^���¨���sn���€�Ý ˆT‰Œ€BØ ŒUT‰\€FØŒed‰l˜qÑ €FØŒed‰l˜qÑ €FØ ‚}€}˜ 3š˜¨6°Sª=¨=؈uÝf˜f fÑ-Ô-Ð-r���c�����������������ó���—�|�d���������}|�d���������}|�d���������}||z���|z���}| ���������������������¦���«��������� ��������������������d¦��«��������S�)Né���r#���r$���r@���rX���rZ���s��� r���rH���rH���²���r[���r���Útwohexbytesc�����������������óÜ��—�dddœdddœdddœdd dœd ddœg}t����������|�¦��«��������}|d���������d z��|d���������z��}t����������¦���«���������}|D�]+}|d|d���������z��z��r| ��������������������|d���������¦��«���������Œ,|dz��}|dv�r+| ��������������������d¦��«���������| ��������������������d¦��«���������n7|dk����r| ��������������������d¦��«���������n|dk����r| ��������������������d¦��«���������|dz��}|dv�r+| ��������������������d¦��«���������| ��������������������d¦��«���������n=|dz��dk����r| ��������������������d¦��«���������n|dz��dk����r| ��������������������d¦��«���������t����������t ����������|¦��«��������¦��«��������S�)Nr���ÚUTRAN)ÚbitÚnameé���zNG-RANé���zGSM COMPACTr`���z cdma2000 HRPDr#���zcdma2000 1xRTTr���é���r���rd���re���é�p��)i�@��ri���z E-UTRAN WB-S1z E-UTRAN NB-S1i�P��i�`��éŒ���)é€���rj���ÚGSMz EC-GSM-IoTé„���é†���)rO���ÚsetÚaddÚsortedÚlist)ra���Úact_listrR���Úu16tÚselÚaÚeutran_bitsÚgsm_bitss��� r���Údec_actry���º���s±��€�à˜GÐ$Ð$ؘHÐ%Ð%ؘMÐ*Ð*ؘOÐ,Ð,ØÐ,Ð-Ð-ð€Hõ� ˆ[Ñ Ô €B؈qŒEQ‰J˜"˜Qœ%Ñ€DÝ ‰%Œ%€Cà ð�ð�ˆØ1˜˜%œ‘=Ñ!ð� ØGŠGAf”IÑÔÐøà˜‘-€KØÐ&Ð&Ð&ØŠÑ Ô Ð ØŠÑ Ô Ð Ð Ø ˜Ò Ð ØŠÑ Ô Ð Ð Ø ˜Ò Ð ØŠÑ Ô Ð àf‰}€HØÐ#Ð#Ð#ØŠ‰ŒˆØŠÑÔÐÐØ ‰˜&Ò Ð ØŠ‰ŒˆˆØ ‰˜&Ò Ð ØŠÑÔÐÝ•$s‘)”)ÑÔÐr���Úfivehexbytesc�����������������ó´���—�ddg�dœ}d}d}|�d�|…���������}|�|||z���…���������}t����������|¦��«��������|d<���t����������|¦��«��������|d<���t����������|¦��«��������|d<���|S�)Nr?���©r;���r<���Úactrg���r#���r;���r<���r}���)rG���rH���ry���)rz���rI���Ú plmn_charsÚ act_charsÚplmn_strÚact_strs��� r���Údec_xplmn_w_actr‚���Þ���su���€�ؘc¨"Ð -Ð -€CØ€JØ€Ià˜K˜Z˜KÔ(€Hà˜: j°9Ñ&<Ð<Ô=€GÝ& xÑ0Ô0€CˆJÝ& xÑ0Ô0€CˆJݘÑ!Ô!€CˆJØ€Jr���c�����������������ór���—�ddg�dœ}d}|�d�|…���������}t����������|¦��«��������|d<���t����������|¦��«��������|d<���|S�)Nr���r|���rg���r;���r<���rF���)rD���rI���r~���r€���s��� r���Ú dec_xplmnr„���ì���sK���€�ؘA bÐ )Ð )€CØ€Jà˜[˜j˜[Ô)€HÝ& xÑ0Ô0€CˆJÝ& xÑ0Ô0€CˆJØ€Jr���Úki_hexÚop_hexc�����������������ó��—�ddl�m}�ddlm}�t ����������t����������|�¦��«��������¦��«��������}t ����������t����������|¦��«��������¦��«��������}| ��������������������||j��������¦��«��������}| ��������������������|¦��«��������}t�����������|||¦��«��������¦��«��������S�)zD Run the milenage algorithm to calculate OPC from Ki and OP r���)ÚAES)Ústrxor) ÚCryptodome.Cipherrˆ���ÚCryptodome.Util.strxorr‰���ÚbytesÚh2bÚnewÚMODE_ECBÚencryptÚb2h)r…���r†���rˆ���r‰���Úki_bytesÚop_bytesÚaesÚ opc_bytess��� r���Úderive_milenage_opcr–���ö���s���€�ð�&Ð%Ð%Ð%Ð%Ð%à-Ð-Ð-Ð-Ð-Ð-õ�•S˜‘[”[Ñ!Ô!€HÝ•S˜‘[”[Ñ!Ô!€HØ 'Š'(˜CœLÑ )Ô )€CØ—’˜HÑ%Ô%€I݈vˆvi Ñ*Ô*Ñ+Ô+Ð+r���c����������� ������óÜ���—�t����������t����������t����������t����������|�¦��«��������¦��«��������¦��«��������}dt ����������|ddd…���������d„�|ddd…���������D�¦���«���������z���¦��«��������dz��z ��}|dk����rdn|S�)z= Calculate Luhn checksum used in e.g. ICCID and IMEI é ���éþÿÿÿNc�����������������óN���—�g�|�]"}t����������t����������|d�z��d¦��«��������¦��«��������‘Œ#S�)r$���r˜���)ÚsumÚdivmod)Ú.0Úds��� r���ú <listcomp>z"calculate_luhn.<locals>.<listcomp>��s>���€�ð�*/ð�*/ð�*/Ø õ�+.f°Q¸±U¸BÑ.?Ô.?Ñ*@Ô*@ð�*/ð�*/ð�*/r���r���)rr���Úmapr'���r6���r›���)ÚccÚnumÚcheck_digits��� r���r8���r8�����sŠ���€�õ�s•3˜B™œÑ Ô Ñ !Ô !€CØ•s˜3˜r˜v 2˜vœ;ð�*/ð�*/Ø$'¨¨¨"¨¤Ið*/ñ�*/ô�*/ñ�/ñ�0ô�0Ø24ñ5ñ�5€Kà˜rÒ!Ð!ˆ1ˆ1 {Ð2r���Údigitsc�����������������ó¶���—�t����������|�dd…���������¦��«��������}t����������|¦��«��������|�d���������k����r(t����������dt����������|¦��«��������›d|�d���������›¦��«��������‚dS�)zBVerify the Luhn check digit; raises ValueError if it is incorrect.Néÿÿÿÿz%Luhn check digit mismatch: should be z but is )r8���r6���r7���)r¤���Úcds��� r���r9���r9�����sc���€�å ˜˜s ˜sœÑ $Ô $€BÝ ˆ2w„w&˜”*ÒÐ݈jÕPSÐTVÑPWÔPWÐPWÐPWÐY_Ð`bÔYcÐYcÐdÑeÔeÐeð�Ðr���c�����������������óH���—�|�€dS�t����������|�¦��«��������dk����r |�dd…���������S�dS�)zU Derive the MCC (Mobile Country Code) from the first three digits of an IMSI Nr���©r���)r���s��� r���Ú mcc_from_imsirª�����s/���€�ð�€|؈tå ˆ4y„y1‚}€}ØBQBŒxˆàˆtr���FÚlongc�����������������ó`���—�|�€dS�t����������|�¦��«��������dk����r|r |�dd…���������S�|�dd…���������S�dS�)zS Derive the MNC (Mobile Country Code) from the 4th to 6th digit of an IMSI Nr���rg���r`���r©���)r���r«���s��� r���Ú mnc_from_imsir���"��sF���€�ð�€|؈tå ˆ4y„y1‚}€}Øð� ؘ˜!˜”9Ðà˜˜!˜”9Ðàˆtr���rS���rT���rU���c�����������������óX���—�d}|�dk����r||�dz��z ��}|dk����r||dz��z ��}|dk����r||z ��}|S�)ze Derive decimal representation of the MCC (Mobile Country Code) from three given digits. r���r���éd���r˜���©�)rS���rT���rU���r;���s��� r���rP���rP���2��sN���€�ð�€Cà ‚~€~؈v˜‰|ÑˆØ ‚~€~؈v˜‰{ÑˆØ ‚~€~؈v‰ ˆà€Jr���r���c�����������������ój���—�d}|dk����rt����������|�||¦��«��������S�|�dk����r||�dz��z ��}|dk����r||z ��}|S�)zy Derive decimal representation of the MNC (Mobile Network Code) from two or (optionally) three given digits. r���r���r˜���)rP���)rS���rT���rU���r<���s��� r���r]���r]���D��sT���€�ð�€Cð�‚~€~ݘ& &¨&Ñ1Ô1Ð1à ‚~€~؈v˜‰{ÑˆØ ‚~€~؈v‰ ˆà€Jr���c�����������������ó`��—�|�Rt����������|�¦��«��������dk����r0d ��������������������d„�|�D�¦���«���������¦��«��������}�t����������|�d¦��«��������}�nt����������d¦��«��������‚|Wt����������|¦��«��������dk����r5|}� �t ����������|�¦��«��������}n1#�t����������$�r}t����������d¦��«��������|‚d}~ww�xY�wt����������d¦��«��������‚|�S�) a�� The ADM pin can be supplied either in its hexadecimal form or as ascii string. This function checks the supplied opts parameter and returns the pin_adm as hex encoded string, regardless in which form it was originally supplied by the user Nrh���Ú�c�����������������ó2���—�g�|�]}d�t����������|¦��«��������z��‘ŒS�)r���)Úord©r���Úxs��� r���rŸ���z$sanitize_pin_adm.<locals>.<listcomp>b��s#���€�ÐBÐBÐB°Q˜v¨Q©¬Ñ0ÐBÐBÐBr���r%���z&PIN-ADM needs to be <=8 digits (ascii)z1PIN-ADM needs to be hex encoded using this optionz3PIN-ADM needs to be exactly 16 digits (hex encoded))r���Újoinr���r7���r���)Úpin_admÚpin_adm_hexÚ try_encodeÚexcs��� r���Úsanitize_pin_admr½���X��sÙ���€�ð�Ð݈w‰<Œ<˜1ÒÐØ—g’gÐBÐB¸'ÐBÑBÔBÑCÔCˆGݘ7 BÑ'Ô'ˆGˆGõ�ÐEÑFÔFÐFàÐ݈{ÑÔ˜rÒ!Ð!Ø!ˆGð _Ý ™\œ\ øÝð� _ð� _ð� _Ý Ð!TÑUÔUÐ[^Ð^øøøøð _øøøõ�ÐRÑSÔSÐSà€Ns���Á-A=�Á= BÂBÂBc�����������������óŠ��—�t����������|�¦��«��������dk����rdS�|� ��������������������d¦��«��������} �ddl}| ��������������������|�¦��«��������}|j��������dk����rdS�|j��������dk����rdS�n:#�t ����������$�r-�d}|D�] }ddl}| ��������������������d |¦��«��������sd }�nŒ!|rY�dS�Y�nw�xY�wd}|D�] }ddl}| ��������������������d|¦��«��������sd }�nŒ!|rdS�dS�)z¾ Validates the given address and returns it's type (FQDN or IPv4 or IPv6) Return: 0x00 (FQDN), 0x01 (IPv4), 0x02 (IPv6), None (Bad address argument given) TODO: Handle IPv6 r���Nú.r#���r���rg���r$���Tz ^[0-9_]+$Fz ^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$)r���ÚsplitÚ ipaddressÚ ip_addressÚversionÚ ExceptionÚreÚmatch)ÚaddrÚ addr_listrÁ���ÚipaÚinvalid_ipv4ÚirÅ���Ú fqdn_flags��� r���Ú get_addr_typerÍ���v��sG��€�õ�ˆ4y„yA‚~€~؈tà— ’ ˜3‘”€IðØÐÐÐà×"Ò" 4Ñ(Ô(ˆàŒ;˜!ÒÐØ4Ø Œ[˜AÒ Ð Ø4ð�øåð�ð�ð�؈Øð� ð� ˆAð� ˆIˆIˆIØ—8’8˜K¨Ñ+Ô+ð� Ø$Øð ð�ð� Ø44ð ð� ðøøøð�€IØ ð�ð�ˆàˆ ˆ ˆ ØxŠxÐ:¸AÑ>Ô>ð� ؈I؈Eð ð �ð�؈tàˆ4s���¬$A �ÁA �Á 1BÂBÚswÚpatternc�����������������ó¾���—�|� ���������������������¦���«���������}d}t����������dd¦��«��������D�]1}||���������dk����r|dz���}Œ||���������dk����r|dz���}Œ&|||���������z���}Œ2||k����S�)z%Match given SW against given pattern.r³���r���r#���ú?r·���)ÚlowerÚrange)rÎ���rÏ���Úsw_lowerÚ sw_maskedrË���s��� r���Úsw_matchrÖ���ª��s|���€�ð�xŠx‰zŒz€HØ€IÝ 1a‰[Œ[ð�0ð�0ˆØ1Œ:˜ÒÐØ! C™ˆIˆIØ QŒZ˜3Ò Ð Ø! C™ˆIˆIà! H¨Q¤KÑ/ˆIˆIà˜ÒÐr���éO���r$���r���TÚwidthÚhspaceÚlspaceÚ align_leftc�����������������óÒ��—�|�€dS�t����������|�¦��«��������dk����rdS�t����������|�t�����������¬¦��«��������}t����������|¦��«��������|z���}||z��}t����������|�¦��«��������dz ��|z��dz���}g�} t����������t����������|¦��«��������¦��«��������D�]V} |�| d|…���������}|rd}nd}||z��t����������|¦��«��������z��} d|z��| z���} | ��������������������| t����������|¦��«��������z��¦��«���������ŒWd ��������������������| ¦��«��������S�) aZ��Pretty print a list of strings into a tabulated form. Args: width : total width in characters per line space : horizontal space between cells lspace : number of spaces before row align_lef : Align text to the left side Returns: multi-line string containing formatted table Nr³���r���)Úkeyr���z%%-%dsz%%%dsú ú )r���ÚmaxÚiterrÓ���ÚappendÚtupler¸���)Ústr_listrØ���rÙ���rÚ���rÛ���Úlongest_strÚcellwithÚcolsÚrowsÚtablerË���Ústr_list_rowÚformat_str_cellÚformat_str_rows��� r���Útabulate_str_listrí���º��s��€�ð�Ð؈rÝ ˆ8}„}˜ÒÐ؈rÝh¥CÐ(Ñ(Ô(€KÝ;ÑÔ &Ñ(€HØHÑ€D݉MŒM˜AÑ $Ñ&¨Ñ*€DØ€EÝ •%˜‘+”+Ñ Ô ð�;ð�;ˆØ 4 Ô(ˆØð� &Ø&ˆOˆOà%ˆOØ)¨HÑ4½¸LÑ8IÔ8IÑIˆØ ™,¨.Ñ8ˆØ Š^¥e¨LÑ&9Ô&9Ñ9Ñ:Ô:Ð:Ð:Ø9Š9UÑÔÐr���c�����������������ó`��—�|� ���������������������d¦��«��������dk����rk|� ��������������������d¦��«��������}|dk����r|�|dz �����������}n|�|dz������������}|dz��t����������|�¦��«��������dz ��z ��}|dk����r|�S�|� ��������������������d||z��¦��«��������S�|� ���������������������d¦��«��������dk����rt����������|�¦��«��������dz��r|�S�|� ��������������������d¦��«��������}|dz��r|�S�|dk����r|�|dz ��|…���������}n|�|dz���|dz���…���������}|dz��t����������|�¦��«��������dz ��z ��}|dk����r|�S�|� ��������������������d||dz��z��¦��«��������S�|�S�)ap��Expand a given hexstring to a specified length by replacing "." or ".." with a filler that is derived from the neighboring nibbles respective bytes. Usually this will be the nibble respective byte before "." or "..", execpt when the string begins with "." or "..", then the nibble respective byte after "." or ".." is used.". In case the string cannot be expanded for some reason, the input string is returned unmodified. Args: hexstring : hexstring to expand length : desired length of the resulting hexstring. Returns: expanded hexstring r¿���r���r���r$���z..r#���)ÚcountÚindexr���Úreplace)Ú hexstringÚlengthÚposÚfillerÚmissings��� r���Ú expand_hexr÷���Û��sm��€�ð �‡‚sÑÔ˜qÒ Ð ØoŠo˜cÑ"Ô"ˆØŠ7ˆ7ؘs Q™wÔ'ˆFˆFà˜s Q™wÔ'ˆFà˜1‘*¥ I¡¤°Ñ 2Ñ3ˆØaŠ<ˆ<ØÐà× Ò f¨wÑ&6Ñ7Ô7Ð7ð� Š˜Ñ Ô !Ò #Ð #݈y‰>Œ>˜AÑð� ØÐàoŠo˜dÑ#Ô#ˆà‰7ð� ØÐàŠ7ˆ7ؘs Q™w s˜{Ô+ˆFˆFà˜s Q™w s¨1¡u˜}Ô-ˆFà˜1‘*¥ I¡¤°Ñ 2Ñ3ˆØaŠ<ˆ<ØÐà× Ò v°¸A±Ñ'>Ñ?Ô?Ð?ð�Ðr���éP���c�����������������ó°���—�t����������|�¦��«��������|dz ��k����rt����������|�¦��«��������dz���}d|z��}dt����������|dz ��¦��«��������z���dz���}|||�z��z ��}|d|z��z ��}|S�)z0Generate a string that contains a boxed heading.r#���ú#z # %-zs # )r���r6���)ÚheadingrØ���rI���Úfstrs��� r���Úboxed_heading_strrý�����sm���€�õ�ˆ7|„|e˜a‘iÒÐÝG‘”˜qÑ ˆà ‰+€CØ•c˜% !™)‘n”nÑ$ wÑ.€D؈47ÑÑ€C؈3‰;Ñ€CØ€Jr���Úapduc�����������������óH��—�t����������|�¦��«��������dk����rd}d}d}d|||fS�t����������|�¦��«��������dk����rd}|�d���������}|dk����rd}d}d|||fS�t����������|�¦��«��������dk����r¥|�d���������}|dk����rd}|�d|dz���…���������}t����������|�¦��«��������d|z���k����rd}d|||fS�t����������|�¦��«��������d|z���dz���k����r|�d|z������������}|dk����rd}d|||fS�t����������d t����������|�¦��«��������||t����������|�dd …���������¦��«��������fz��¦��«��������‚t����������dt����������|�¦��«��������z��¦��«��������‚)a*��Parse a given command APDU and return case (see also ISO/IEC 7816-3, Table 12 and Figure 26), lc, le and the data field. Args: apdu : hexstring that contains the command APDU Returns: tuple containing case, lc and le values of the APDU (case, lc, le, data) r#���r���r���r���r`���é���r$���r���zRinvalid APDU (%s), Lc=0x%02x (%d) does not match the length (%d) of the data fieldNzinvalid APDU (%s), too short!)r���r7���r‘���)rþ���ÚlcÚleÚdatas��� r���Úparse_command_apdur����sm��€�õ�ˆ4y„yA‚~€~à ˆØ ˆØˆØ2r˜4Ð Ð Ý ˆT‰ŒaŠˆà ˆØ !ŒWˆØ Š7ˆ7؈B؈Ø2r˜4Ð Ð Ý ˆT‰ŒQŠˆØ !ŒWˆØ Š7ˆ7؈BØAb˜‘dFŒ|ˆÝˆt‰9Œ9˜˜B™ÒÐàˆBØr˜2˜tÐ$Ð$Ý ‰YŒY˜!˜b™& 1™*Ò $Ð $àa˜"‘f”ˆBØQŠwˆwØØr˜2˜tÐ$Ð$åÐqÝ # D¡ ¤ ¨2¨rµ3°t¸A¸B¸B´x±=´=ÐAñBñ�Cô�Cð� Cõ�Ð8½3¸t¹9¼9ÑDÑEÔEÐEr���c�������������������ó��—�e�Zd�ZdZddedee���������dee���������fd„Zd„�Zdefd „Z dd„Z dd „Zdefd„Zde fd„Zej��������defd„¦���«���������Zej��������defd„¦���«���������Zdedefd„Zdefd„Zdedee ef���������fd„Zdefd„ZdS�)Ú DataObjecta_��A DataObject (DO) in the sense of ISO 7816-4. Contrary to 'normal' TLVs where one simply has any number of different TLVs that may occur in any order at any point, ISO 7816 has the habit of specifying TLV data but with very spcific ordering, or specific choices of tags at specific points in a stream. This class tries to represent this.Nre���ÚdescÚtagc�����������������óL���—�||�_���������||�_��������||�_��������d|�_��������d|�_��������dS�)zä Args: name: A brief, all-lowercase, underscore separated string identifier desc: A human-readable description of what this DO represents tag : The tag associated with this DO N)re���r��r��ÚdecodedÚencoded)Úselfre���r��r��s��� r���Ú__init__zDataObject.__init__R��s+���€�ð�ˆŒ ؈Œ ؈ŒØˆŒØˆŒˆˆr���c�����������������ó���—�|�j���������S�©N©re���©r��s��� r���Ú__str__zDataObject.__str___��ó ���€�ØŒyÐr���r!���c�����������������ó&���—�|�j���������›d|�j��������›dS�)Nú(ú))Ú __class__re���r��s��� r���Ú__repr__zDataObject.__repr__b��s���€�Øœ>˜>˜>¨4¬9¨9¨9Ð5Ð5r���ÚDataObjectChoicec�����������������ó`���—�t����������|t����������¦��«��������rt����������d|�|g¬¦��«��������S�t����������‚)z7OR-ing DataObjects together renders a DataObjectChoice.N©Úmembers)Ú isinstancer��r��Ú TypeError©r��Úothers��� r���Ú__or__zDataObject.__or__e��s0���€�åeZÑ(Ô(ð� å# D°4¸°-Ð@Ñ@Ô@Ð@åˆOr���ÚDataObjectCollectionc�����������������ó`���—�t����������|t����������¦��«��������rt����������d|�|g¬¦��«��������S�t����������‚)z<ADD-ing DataObjects together renders a DataObjectCollection.Nr��)r��r��r"��r��r��s��� r���Ú__add__zDataObject.__add__m��s0���€�åeZÑ(Ô(ð� å'¨°t¸U°mÐDÑDÔDÐDåˆOr���c�����������������ó���—�|�j���������S�)z>Compute the tag (sometimes the tag encodes part of the value).©r��r��s��� r���Ú_compute_tagzDataObject._compute_tagu��s ���€�àŒxˆr���c�����������������ó���—�|�j���������|�j��������iS�)z,Return a dict in form "name: decoded_value" )re���r ��r��s��� r���Úto_dictzDataObject.to_dicty��s���€�à” ˜4œ<Ð(Ð(r���Údoc�����������������ó���—�dS�)z…Parse the value part of the DO into the internal state of this instance. Args: do : binary encoded bytes Nr°���)r��r*��s��� r���Ú from_byteszDataObject.from_bytes}��ó���€�€�€�r���c�����������������ó���—�dS�)z’Encode the internal state of this instance into the TLV value part. Returns: binary bytes encoding the internal state Nr°���r��s��� r���Úto_byteszDataObject.to_bytes„��r-��r���c�����������������óÄ���—�|d���������|�j���������k����rt����������d|�|�j���������fz��¦��«��������‚|d���������}|dd|z���…���������}|� ��������������������|¦��«���������|d|z���d…���������S�)aS��Parse binary TLV representation into internal state. The resulting decoded representation is _not_ returned, but just internalized in the object instance! Args: do : input bytes containing TLV-encoded representation Returns: bytes remaining at end of 'do' after parsing one TLV/DO. r���z%s: Can only decode tag 0x%02xr���r$���N)r��r7���r,��)r��r*��ró���Úvals��� r���Úfrom_tlvzDataObject.from_tlv‹��sw���€�ð�ˆaŒ5D”HÒÐÝÐ=Ø" D¤HÐ-ñ.ñ�/ô�/ð� /àA”ˆØ1V‘8ŒnˆØŠ˜ÑÔÐà!F‘())Œ}Ðr���c�����������������ó¬���—�|� ���������������������¦���«���������}t����������|� ��������������������¦���«���������¦��«��������t����������t ����������|¦��«��������¦��«��������z���|z���S�)zpEncode internal representation to binary TLV. Returns: bytes encoded in TLV format. )r/��r���r'��r ���r���)r��r1��s��� r���Úto_tlvzDataObject.to_tlvœ��sE���€�ð �mŠm‰oŒoˆÝ ×!2Ò!2Ñ!4Ô!4Ñ5Ô5Õ8IÍ#ÈcÉ(Ì(Ñ8SÔ8SÑSÐVYÑYÐYr���Úbinaryc�����������������ó´���—�|d���������}||�j���������k����rt����������d|�|||�j���������fz��¦��«��������‚|� ��������������������|¦��«��������}|� ��������������������¦���«���������|fS�)zºDecode a single DOs from the input data. Args: binary : binary bytes of encoded data Returns: tuple of (decoded_result, binary_remainder) r���z-%s: Unknown Tag 0x%02x in %s; expected 0x%02x)r��r7���r2��r)��)r��r5��r��Ú remainders��� r���ÚdecodezDataObject.decode¥��sd���€�ð�QŒiˆØ$”(Š?ˆ?ÝÐLØ" C¨°´Ð:ñ;ñ�<ô�<ð� <à—M’M &Ñ)Ô)ˆ Ø—’‘” Ð*Ð*r���c�����������������ó*���—�|� ���������������������¦���«���������S�r��)r4��r��s��� r���ÚencodezDataObject.encode´��s���€�Ø{Š{‰}Œ}Ðr���©NN©r!���r��©r!���r"��)Ú__name__Ú __module__Ú__qualname__Ú__doc__r6���r���r'���r ��r��r��r!��r$��r'��Údictr)��ÚabcÚabstractmethodrŒ���r,��r/��r2��r4��r���r8��r:��r°���r���r���r��r��L��s¼��€�€�€�€�€�ðQð�Qð ð�˜Sð�¨°¬ ð�À8ÈCÄ=ð�ð�ð�ð�ðð�ð�ð6˜#ð�6ð�6ð�6ð�6ðð�ð�ð�ðð�ð�ð�ð˜cð�ð�ð�ð�ð)˜ð�)ð�)ð�)ð�)ð� Ôð˜Uð�ð�ð�ñ�Ôðð� Ôð˜%ð�ð�ð�ñ�Ôðð˜5ð� Uð�ð�ð�ð�ð"Z˜ð�Zð�Zð�Zð�Zð+˜Uð�+ u¨T°5¨[Ô'9ð�+ð�+ð�+ð�+ð˜ð�ð�ð�ð�ð�ð�r���r��c�������������������óJ���‡�—�e�Zd�ZdZddededefˆ�fd„ Zdefd„Zd efd „Z ˆ�xZ S�)ÚTL0_DataObjectz2Data Object that has Tag, Len=0 and no Value part.Nre���r��r��c�����������������ó\���•—�t����������¦���«��������� ��������������������|||¦��«���������||�_��������d�S�r��)Úsuperr ��r1��)r��re���r��r��r1��r��s��� €r���r ��zTL0_DataObject.__init__»��s*���ø€�Ý ‰Œ×Ò˜˜t SÑ)Ô)Ð)؈Œˆˆr���r5��c�����������������óR���—�t����������|¦��«��������dk����rt����������‚|�j��������|�_��������d�S�©Nr���)r���r7���r1��r ��)r��r5��s��� r���r,��zTL0_DataObject.from_bytes¿��s&���€�݈v‰;Œ;˜!ÒÐÝÐØ”xˆŒˆˆr���r!���c�����������������ó���—�dS�)Nr���r°���r��s��� r���r/��zTL0_DataObject.to_bytesÄ��s���€�؈sr���r��)r>��r?��r@��rA��r6���r'���r ��rŒ���r,��r/��Ú __classcell__)r��s���@r���rF��rF��¸��s“���ø€�€�€�€�€�Ø<Ð<ðð�˜Sð�¨ð�°#ð�ð�ð�ð�ð�ð�ð ð� ð� ð� ð� ð ˜%ð�ð�ð�ð�ð�ð�ð�ð�r���rF��c�������������������ó|���—�e�Zd�ZdZd dedee���������fd„Zdefd„Zdefd„Zdd „Z d e deee f���������fd„Z de fd„ZdS�)r"��zÁA DataObjectCollection consits of multiple Data Objects identified by their tags. A given encoded DO may contain any of them in any order, and may contain multiple instances of each DO.Nre���r��c�����������������ó”���—�||�_���������||�_��������|pg�|�_��������i�|�_��������i�|�_��������d„�|D�¦���«���������|�_��������d„�|D�¦���«���������|�_��������d�S�)Nc�����������������ó���—�i�|�] }|j���������|“ŒS�r°���r&��©r���Úms��� r���ú <dictcomp>z1DataObjectCollection.__init__.<locals>.<dictcomp>Ó��s���€�Ð9Ð9Ð9¨A˜qœu aÐ9Ð9Ð9r���c�����������������ó���—�i�|�] }|j���������|“ŒS�r°���r��rP��s��� r���rR��z1DataObjectCollection.__init__.<locals>.<dictcomp>Ô��s���€�Ð;Ð;Ð;¨a ¤¨Ð;Ð;Ð;r���)re���r��r��Úmembers_by_tagÚmembers_by_name)r��re���r��r��s��� r���r ��zDataObjectCollection.__init__Í��s]���€�؈Œ ؈Œ Ø} "ˆŒØ ˆÔØ!ˆÔØ9Ð9°Ð9Ñ9Ô9ˆÔØ;Ð;°7Ð;Ñ;Ô;ˆÔÐÐr���r!���c�����������������ód���—�d„�|�j���������D�¦���«���������}|�j��������›dd ��������������������|¦��«��������›dS�)Nc�����������������ó,���—�g�|�]}t����������|¦��«��������‘ŒS�r°���©r6���r¶���s��� r���rŸ���z0DataObjectCollection.__str__.<locals>.<listcomp>×��s���€�Ð4Ð4Ð4 !•s˜1‘v”vÐ4Ð4Ð4r���r��ú,r��)r��re���r¸���©r��Úmember_strss��� r���r��zDataObjectCollection.__str__Ö��s:���€�Ø4Ð4 t¤|Ð4Ñ4Ô4ˆØœ9˜9˜9 c§h¢h¨{Ñ&;Ô&;Ð&;Ð&;Ð<Ð<r���c�����������������ód���—�d„�|�j���������D�¦���«���������}|�j��������›dd ��������������������|¦��«��������›dS�)Nc�����������������ó,���—�g�|�]}t����������|¦��«��������‘ŒS�r°���©Úreprr¶���s��� r���rŸ���z1DataObjectCollection.__repr__.<locals>.<listcomp>Û��s���€�Ð5Ð5Ð5 1•t˜A‘w”wÐ5Ð5Ð5r���r��rY��r��)r��r��r¸���rZ��s��� r���r��zDataObjectCollection.__repr__Ú��s:���€�Ø5Ð5¨¬Ð5Ñ5Ô5ˆØœ>˜>˜>¨3¯8ª8°KÑ+@Ô+@Ð+@Ð+@ÐAÐAr���c�����������������ó���—�t����������|t����������¦��«��������r*|�j��������|j��������z���}t����������|�j��������|�j��������|¦��«��������S�t����������|t ����������¦��«��������r$t����������|�j��������|�j��������|�j��������|gz���¦��«��������S�t����������‚)zDExtending DataCollections with other DataCollections or DataObjects.)r��r"��r��re���r��r��r��©r��r ��r��s��� r���r$��zDataObjectCollection.__add__Þ��so���€�åeÕ1Ñ2Ô2ð� à”l U¤]Ñ2ˆGÝ'¨¬ °4´9¸gÑFÔFÐFÝ ˜zÑ *Ô *ð� å'¨¬ °4´9¸d¼lÈeÈWÑ>TÑUÔUÐUåˆOr���r5��c�����������������óp��—�g�}|}t����������|¦��«��������r |d���������}|dk����r||fS�||�j��������vr-t����������d|�|||�j�������� ��������������������¦���«���������fz��¦��«��������‚|�j��������|���������}| ��������������������|¦��«��������}| ��������������������| ��������������������¦���«���������¦��«���������t����������|¦��«��������° ||fS�)a��Decode any number of DOs from the collection until the end of the input data, or uninitialized memory (0xFF) is found. Args: binary : binary bytes of encoded data Returns: tuple of (decoded_result, binary_remainder) r���éÿ���ú)%s: Unknown Tag 0x%02x in %s; expected %s)r���rT��r7���Úkeysr2��râ���r)��)r��r5��rI���r7��r��Úobjs��� r���r8��zDataObjectCollection.decodeë��sÕ���€�ð�ˆØˆ å)‰nŒnð� &ؘA”,ˆCØdŠ{ˆ{ؘYÐ'Ð'ؘ$Ô-Ð-Ð-Ý Ð!LØ"&¨¨Y¸Ô8K×8PÒ8PÑ8RÔ8RÐ!Sñ"Tñ�Uô�Uð�UàÔ% cÔ*ˆCàŸš YÑ/Ô/ˆIàJŠJs—{’{‘}”}Ñ%Ô%Ð%õ�)‰nŒnð� &ð�YÐÐr���c�����������������ó°���—�t����������¦���«���������}|D�]D}|� ��������������������|d���������¦��«��������}| ��������������������| ��������������������¦���«���������¦��«���������ŒE|S�rJ��)Ú bytearrayrU��râ���r4��)r��r ��rI���rË���rf��s��� r���r:��zDataObjectCollection.encode��sS���€�݉kŒkˆØð� %ð� %ˆAØ×&Ò& q¨¤tÑ,Ô,ˆCØJŠJs—z’z‘|”|Ñ$Ô$Ð$Ð$؈ r���r;��r=��)r>��r?��r@��rA��r6���r���r ��r��r��r$��rŒ���r���r���r8��r:��r°���r���r���r"��r"��È��sÞ���€�€�€�€�€�ðð�ð<ð�<˜Sð�<¨°¬ ð�<ð�<ð�<ð�<ð=˜ð�=ð�=ð�=ð�=ðB˜#ð�Bð�Bð�Bð�Bð ð� ð� ð� ð ˜Uð� u¨T°5¨[Ô'9ð� ð� ð� ð� ð4 ð�ð�ð�ð�ð�ð�r���r"��c�������������������óL���—�e�Zd�ZdZd„�Zd d„Zdedeeef���������fd„Z defd„Z dS�) r��zªOne Data Object from within a choice, identified by its tag. This means that exactly one member of the choice must occur, and which one occurs depends on the tag.c�����������������ó���—�t�����������‚)zRWe overload the add operator here to avoid inheriting it from DataObjecCollection.)r��r��s��� r���r$��zDataObjectChoice.__add__��s���€�åˆr���r!���c�����������������ó���—�t����������|t����������¦��«��������r*|�j��������|j��������z���}t����������|�j��������|�j��������|¦��«��������S�t����������|t ����������¦��«��������r$t����������|�j��������|�j��������|�j��������|gz���¦��«��������S�t����������‚)zROR-ing a Choice to another choice extends the choice, as does OR-ing a DataObject.)r��r��r��re���r��r��r��ra��s��� r���r!��zDataObjectChoice.__or__��so���€�åeÕ-Ñ.Ô.ð� à”l U¤]Ñ2ˆGÝ# D¤I¨t¬y¸'ÑBÔBÐBÝ ˜zÑ *Ô *ð� å# D¤I¨t¬y¸$¼,È%ÈÑ:PÑQÔQÐQåˆOr���r5��c�����������������ó��—�|d���������}|dk����rd|fS�||�j���������vr-t����������d|�|||�j��������� ��������������������¦���«���������fz��¦��«��������‚|�j���������|���������}| ��������������������|¦��«��������}| ��������������������¦���«���������|fS�)zÇDecode a single DOs from the choice based on the tag. Args: binary : binary bytes of encoded data Returns: tuple of (decoded_result, binary_remainder) r���rc��Nrd��)rT��r7���re��r2��r)��)r��r5��r��rf��r7��s��� r���r8��zDataObjectChoice.decode#��s˜���€�ð�QŒiˆØ$Š;ˆ;ؘ&>Ð!ØdÔ)Ð)Ð)ÝÐHØ" C¨°Ô1D×1IÒ1IÑ1KÔ1KÐLñMñ�Nô�Nð� NàÔ! #Ô&ˆØ—L’L Ñ(Ô(ˆ Ø—’‘ ” ˜yÐ)Ð)r���c�����������������óÂ���—�|�j���������t����������|¦��«��������d������������������}t����������| ��������������������¦���«���������¦��«��������d���������|_��������| ��������������������¦���«���������S�rJ��)rU��rr���Úvaluesr ��r4��)r��r ��rf��s��� r���r:��zDataObjectChoice.encode5��sF���€�ØÔ"¥4¨¡=¤=°Ô#3Ô4ˆÝ˜7Ÿ>š>Ñ+Ô+Ñ,Ô,¨QÔ/ˆŒØzŠz‰|Œ|Ðr���Nr<��)r>��r?��r@��rA��r$��r!��rŒ���r���rB��r8��r:��r°���r���r���r��r�� ��s‡���€�€�€�€�€�ðð�ðð�ð�ð ð� ð� ð� ð*˜Uð�* u¨T°5¨[Ô'9ð�*ð�*ð�*ð�*ð$ ð�ð�ð�ð�ð�ð�r���r��c�������������������ó¨���—�e�Zd�ZdZddedee���������fd„Zdefd„Zdefd„Zdd „Z d e deee f���������fd„Z de deee f���������fd „Zde fd„Zde fd„ZdS�)ÚDataObjectSequenceaD��A sequence of DataObjects or DataObjectChoices. This allows us to express a certain ordered sequence of DOs or choices of DOs that have to appear as per the specification. By wrapping them into this formal DataObjectSequence, we can offer convenience methods for encoding or decoding an entire sequence.Nre���r��c�����������������ó4���—�|pg�|�_���������||�_��������||�_��������d�S�r��)Úsequencere���r��)r��re���r��rr��s��� r���r ��zDataObjectSequence.__init__A��s���€�Ø ˜ BˆŒ ؈Œ ؈Œ ˆ ˆ r���r!���c�����������������ód���—�d„�|�j���������D�¦���«���������}|�j��������›dd ��������������������|¦��«��������›dS�)Nc�����������������ó,���—�g�|�]}t����������|¦��«��������‘ŒS�r°���rX��r¶���s��� r���rŸ���z.DataObjectSequence.__str__.<locals>.<listcomp>G��s���€�Ð5Ð5Ð5 !•s˜1‘v”vÐ5Ð5Ð5r���r��rY��r��)rr��re���r¸���rZ��s��� r���r��zDataObjectSequence.__str__F��s:���€�Ø5Ð5 t¤}Ð5Ñ5Ô5ˆØœ9˜9˜9 c§h¢h¨{Ñ&;Ô&;Ð&;Ð&;Ð<Ð<r���c�����������������ód���—�d„�|�j���������D�¦���«���������}|�j��������›dd ��������������������|¦��«��������›dS�)Nc�����������������ó,���—�g�|�]}t����������|¦��«��������‘ŒS�r°���r^��r¶���s��� r���rŸ���z/DataObjectSequence.__repr__.<locals>.<listcomp>K��s���€�Ð6Ð6Ð6 1•t˜A‘w”wÐ6Ð6Ð6r���r��rY��r��)rr��r��r¸���rZ��s��� r���r��zDataObjectSequence.__repr__J��s:���€�Ø6Ð6¨¬ Ð6Ñ6Ô6ˆØœ>˜>˜>¨3¯8ª8°KÑ+@Ô+@Ð+@Ð+@ÐAÐAr���c�����������������óF��—�t����������|d¦��«��������r$t����������|�j��������|�j��������|�j��������|gz���¦��«��������S�t����������|d¦��«��������r$t����������|�j��������|�j��������|�j��������|gz���¦��«��������S�t����������|d¦��«��������r(t����������|�j��������|�j��������|�j��������|j��������z���¦��«��������S�dS�)z>Add (append) a DataObject or DataObjectChoice to the sequence.r��r��rp��N)r��rp��re���r��rr��r��s��� r���r$��zDataObjectSequence.__add__N��s¦���€�åe˜\Ñ*Ô*ð� \Ý% d¤i°´¸D¼MÈUÈGÑ<SÑTÔTÐTÝ ˜Ð1Ñ 2Ô 2ð� \Ý% d¤i°´¸D¼MÈUÈGÑ<SÑTÔTÐTÝ ˜Ð3Ñ 4Ô 4ð� \Ý% d¤i°´¸D¼MÈEÌNÑ<ZÑ[Ô[Ð[ð \ð� \r���r5��c�����������������ó„���—�|}g�}|�j���������D�]1}| ��������������������|¦��«��������\��}}|r| ��������������������|¦��«���������Œ2||fS�)zÛDecode a sequence by calling the decoder of each element in the sequence. Args: binary : binary bytes of encoded data Returns: tuple of (decoded_result, binary_remainder) )rr��r8��râ���)r��r5��r7��rI���ÚeÚrs��� r���r8��zDataObjectSequence.decodeX��sW���€�ð�ˆ ؈ؔð� ð� ˆAØŸXšX iÑ0Ô0‰NˆQ Øð� Ø— ’ ˜1‘ ” øØYÐÐr���r*��c�����������������óø���—�|}g�}t����������|¦��«��������rd|� ��������������������|¦��«��������\��}}|r| ��������������������|¦��«���������t����������|¦��«��������t����������|¦��«��������k�����r|}n|}nt����������|¦��«��������°d||fS�)zÝDecode multiple occurrences of the sequence from the binary input data. Args: do : binary input data to be decoded Returns: list of results of the decoder of this sequences )r���r8��râ���)r��r*��r7��rI���rz��Ú remainder2s��� r���Údecode_multizDataObjectSequence.decode_multih��s‹���€�ð�ˆ ؈Ý)‰nŒnð� Ø"Ÿkšk¨)Ñ4Ô4‰OˆQ Øð� Ø— ’ ˜1‘ ” Ý:‰Œ¥ Y¡¤Ò/Ð/Ø& à& Øõ�)‰nŒnð� ð�YÐÐr���c�����������������ó€���—�t����������¦���«���������}d}|�j��������D�]%}|| ��������������������||���������¦��«��������z ��}|dz ��}Œ&|S�)zIEncode a sequence by calling the encoder of each element in the sequence.r���r���)rh��rr��r:��)r��r ��r��rË���ry��s��� r���r:��zDataObjectSequence.encode}��sK���€�å‘+”+ˆØ ˆØ”ð� ð� ˆAØq—x’x ¨¤ Ñ+Ô+Ñ+ˆGØ ‰FˆAˆA؈r���c�����������������ó\���—�t����������¦���«���������}|D�]}||� ��������������������|¦��«��������z ��}Œ|S�)zîEncode multiple occurrences of the sequence from the decoded input data. Args: decoded : list of json-serializable input data; one sequence per list item Returns: binary encoded output data )rh��r:��)r��r ��r��rž���s��� r���Úencode_multizDataObjectSequence.encode_multi†��s7���€�õ�‘+”+ˆØð� &ð� &ˆAØt—{’{ 1‘~”~Ñ%ˆGˆG؈r���r;��)r!���rp��)r>��r?��r@��rA��r6���r���r ��r��r��r$��rŒ���r���rr���r8��r}��r:��r€��r°���r���r���rp��rp��;��s(��€�€�€�€�€�ð7ð�7ð ð�˜Sð�¨°¬ ð�ð�ð�ð�ð =˜ð�=ð�=ð�=ð�=ðB˜#ð�Bð�Bð�Bð�Bð\ð�\ð�\ð�\ð ˜Uð� u¨T°5¨[Ô'9ð� ð� ð� ð� ð ˜uð� ¨¨t°U¨{Ô);ð� ð� ð� ð� ð* ð�ð�ð�ð�ð uð� ð� ð� ð� ð� ð� r���rp��c�������������������ó,���—�e�Zd�ZdZdd„Zd„�Zd„�Zd„�ZdS�)ÚCardCommandz$A single card command / instruction.Nc�����������������ón���—�||�_���������||�_��������|pg�|�_��������d„�|�j��������D�¦���«���������|�_��������||�_��������d�S�)Nc�����������������ó6���—�g�|�]}| ���������������������¦���«���������‘ŒS�r°���)rÒ���r¶���s��� r���rŸ���z(CardCommand.__init__.<locals>.<listcomp>š��s ���€�Ð:Ð:Ð: q˜Ÿš™œÐ:Ð:Ð:r���)re���ÚinsÚcla_listr��)r��re���r…��r†��r��s��� r���r ��zCardCommand.__init__–��s=���€�؈Œ ؈ŒØ ˜ BˆŒ Ø:Ð:¨D¬MÐ:Ñ:Ô:ˆŒ ؈Œ ˆ ˆ r���c�����������������ó���—�|�j���������S�r��r��r��s��� r���r��zCardCommand.__str__��r��r���c�����������������ó0���—�d|�j���������|�j��������|�j��������fz��S�)Nz%s(INS=%02x,CLA=%s))re���r…��r†��r��s��� r���r��zCardCommand.__repr__ ��s���€�Ø$¨¬ °4´8¸T¼]Ð'KÑKÐKr���c�����������������óì���—�t����������|t����������¦��«��������sd|z��}| ��������������������¦���«���������}|�j��������D�]=}d}t ����������dd¦��«��������D�]}||���������dk����r|dz ��}Œ|||���������z ��}Œ ||k����r�dS�Œ>dS�)z6Does the given CLA match the CLA list of the command?.z%02ur³���r���r$���r·���TF)r��r6���rÒ���r†��rÓ���)r��ÚclaÚ cla_matchÚ cla_maskedrË���s��� r���Ú match_clazCardCommand.match_cla£��sž���€�å˜#sÑ#Ô#ð� ؘ3‘,ˆCØiŠi‰kŒkˆØœð� ð� ˆI؈Jݘ1˜a‘[”[ð� )ð� )ؘQ”< 3Ò&Ð&Ø #Ñ%JJà # a¤&Ñ(JJؘYÒ&Ð&Øttð�'àˆur���r;��)r>��r?��r@��rA��r ��r��r��r��r°���r���r���r‚��r‚��“��s^���€�€�€�€�€�Ø.Ð.ðð�ð�ð�ðð�ð�ðLð�Lð�Lðð�ð�ð�ð�r���r‚��c�������������������ó6���—�e�Zd�ZdZg�fd„Zd„�Zd„�Zd„�Zdd„ZdS�) ÚCardCommandSetz@A set of card instructions, typically specified within one spec.c�����������������ó6���—�||�_���������d„�|D�¦���«���������|�_��������d�S�)Nc�����������������ó���—�i�|�] }|j���������|“ŒS�r°���)r…��)r���Úcs��� r���rR��z+CardCommandSet.__init__.<locals>.<dictcomp>¹��s���€�Ð,Ð,Ð, !Q”U˜AÐ,Ð,Ð,r���)re���Úcmds)r��re���r“��s��� r���r ��zCardCommandSet.__init__·��s"���€�؈Œ Ø,Ð, tÐ,Ñ,Ô,ˆŒ ˆ ˆ r���c�����������������ó���—�|�j���������S�r��r��r��s��� r���r��zCardCommandSet.__str__»��r��r���c�����������������ó���—�|�j���������|���������S�r��)r“��)r��Úidxs��� r���Ú__getitem__zCardCommandSet.__getitem__¾��s���€�ØŒy˜Œ~Ðr���c�����������������óv��—�t����������|t����������¦��«��������rI|j��������|�j��������v�r*t ����������d|�|j��������|�j��������|j�����������������fz��¦��«��������‚||�j��������|j��������<���d�S�t����������|t ����������¦��«��������r3|j�������� ��������������������¦���«���������D�]}|j��������|���������|�j��������|<���Œd�S�t ����������|�›d|›¦��«��������‚)Nz"%s: INS 0x%02x already defined: %sz$: Unsupported type to add operator: )r��r‚��r…��r“��r7���r��re��)r��r ��r’��s��� r���r$��zCardCommandSet.__add__Á��sÛ���€�Ýe[Ñ)Ô)ð� LØŒy˜DœIÐ%Ð%Ý Ð!EØ"&¨¬ °4´9¸U¼YÔ3GÐ!Hñ"Iñ�Jô�Jð�Jà#(ˆDŒIe”iÑ Ð Ð Ý ˜~Ñ .Ô .ð� LØ”Z—_’_Ñ&Ô&ð� -ð� -Ø$œz¨!œ}” ˜!‘ð -ð� -õ�Ø>B¸d¸dÀEÀEÐJñLô�Lð� Lr���Nc�����������������ó†���—�t����������|¦��«��������}||�j��������vrdS�|�j��������|���������}|r| ��������������������|¦��«��������sdS�|S�)z*look-up the command within the CommandSet.N)r'���r“��r��)r��r…��rŠ��Úcmds��� r���ÚlookupzCardCommandSet.lookupÎ��sO���€�å#‰hŒhˆØd”iÐÐØ4ØŒi˜ŒnˆØð� s—}’} SÑ)Ô)ð� Ø4؈ r���r��) r>��r?��r@��rA��r ��r��r—��r$��r›��r°���r���r���r��r��´��su���€�€�€�€�€�ØJÐJà"$ð�-ð�-ð�-ð�-ðð�ð�ðð�ð�ðLð�Lð�Lðð�ð�ð�ð�ð�r���r��)F)r���r��)r×���r$���r���T)rø���)ArA��ÚjsonrC��ÚstringÚdatetimeÚargparseÚior���Útypingr���r���r���r���r���r ���r ���Ú osmocom.utilsÚosmocom.tlvr���r ���r6���r���r���ÚHexstrÚResTupler���r*���r-���r2���r'���r:���rC���rB��rJ���rV���rG���r^���rH���ry���r‚���r„���r–���r8���r9���rª���Úboolr���rP���r]���r½���rÍ���rÖ���rí���r÷���rý���rŒ���r��ÚABCr��rF��r"��r��rp��r‚��r��r°���r���r���ú<module>r¨�����s2��ððð�ð�€€€Ø� € € € Ø� € € € Ø�€€€Ø�€€€Ø�Ð�Ð�Ð�Ð�Ð�Ø�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CÐ�CØ�Ð�Ð�Ð�Ø�<Ð�<Ð�<Ð�<Ð�<Ð�<Ð�<Ð�<ðD�ˆ7:˜sÑ#Ô#€Ø ˆW\ 3Ñ 'Ô '€ ؘÐ!Ô"€ð3ð�ð�ð�ð�ðð�˜H SœMð�ð�ð�ð�ð&'&ð�'˜Sð�'ð�'ð�'ð�'ð)Sð�)˜Vð�)ð�)ð�)ð�)ð˜% S œ/ð�¨cð�ð�ð�ð�ð2E&ð�E˜vð�E¨&ð�Eð�Eð�Eð�Eð6˜Fð� tð�ð�ð�ð�ð.˜Fð�. sð�.ð�.ð�.ð�.ð" ð�"¨3ð�"ð�"ð�"ð�"ð.˜Fð�. sð�.ð�.ð�.ð�.ð" ð�"¨3ð�"ð�"ð�"ð�"ð!˜ð�! D¨¤Ið�!ð�!ð�!ð�!ðH &ð�¨T°#°s°(¬^ð�ð�ð�ð�ð˜Vð�¨ð�ð�ð�ð�ð , ð� ,°ð� ,¸6ð� ,ð� ,ð� ,ð� ,ð 3˜#ð�3ð�3ð�3ð�3ðf˜ð�fð�fð�fð�fð ˜ð� ¨¤ ð� ð� ð� ð� ð ð� ˜ð� 4ð� °H¸S´Mð� ð� ð� ð� ð sð� Cð�°ð�¸ð�ð�ð�ð�ð$ð�sð� Cð�°ð�Àð�ð�ð�ð�ð(ð�°6ð�ð�ð�ð�ð<1ð�1ð�1ðh ð� ˜sð� tð� ð� ð� ð� ð �QRØ)-ðð� sð�¸ð�È#ð�Ø"&ðØ25ðð�ð�ð�ðB3ð�3ð�3ðl ð� ð� ð� ð+F˜Uð�+F sð�+Fð�+Fð�+Fð�+Fð\ið�ið�ið�ið�i”ñ�iô�ið�iðX ð� ð� ð� ð� Zñ� ô� ð� ð Bð�Bð�Bð�Bð�Bñ�Bô�Bð�BðJ+ð�+ð�+ð�+ð�+Ð+ñ�+ô�+ð�+ð\Uð�Uð�Uð�Uð�Uñ�Uô�Uð�Uðpð�ð�ð�ð�ñ�ô�ð�ðB"ð�"ð�"ð�"ð�"ñ�"ô�"ð�"ð�"ð�"r���