python-ply-doc-3.10-150000.3.5.1<>,efp9|ԁw<&s(22 )W C@ ( `(F0(l6-*mu ωZ}2AȻ< \xc<͠$[KFP;&= #ϺdD_\JÃX;JnϒaaCZ;OuM #ZONq#1c3ge~oC7>rUK\Y)c&Dm˨i+^?ǽ>;?d # 58<HLe    <   |D }t 4$8(8 9 : FGHIXPYT\h]H^-b/cdUeZf]l_utvT zJ\`fCpython-ply-doc3.10150000.3.5.1Python Lex & YaccPLY is yet another implementation of lex and yacc for Python. Some notable features include the fact that its implemented entirely in Python and it uses LALR(1) parsing which is efficient and well suited for larger grammars. PLY provides most of the standard lex/yacc features including support for empty productions, precedence rules, error recovery, and support for ambiguous grammars. PLY is extremely easy to use and provides very extensive error checking. It is compatible with both Python 2 and Python 3.efh04-ch1d CSUSE Linux Enterprise 15SUSE LLC LGPL-2.1+https://www.suse.com/Development/Languages/Pythonhttp://www.dabeaz.com/ply/linuxnoarchq} [EY"Ig9 <wN8K;X YO , bB N ]Fm6aQe'&:w 6KvSg[vFh (>\ED4XX vX[<P.LUQ d:_'QMe:^-G,SuQ2lK:[qduK,M'{H(JCr&HABY t<15WF8&>R^/?8:S<M '| &9$ :iQ[ +* B 9$:O )&9$ yk R1%S<| :M 'H &9$ :oM HhSd-&1 hbK i  R         Q            _ (   9  Q<   "AA큤AA큤A큤A큤A큤A큤A큤AA큤A큤AA큤A큤A큤A큤A큤큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤efX٩XyXyXyX٩edXyedededededXyXyXyXyXyXyXyXyXyXyXyXyXyededXyXyedXyededededededededededXyedededededededXyededededXyedededefXyefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefefefefefefefefefefefefefefefefefefefefefefefeeXyeeXyXyedXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyXyedXyedXyedXyedXyedXyedXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeefeeXyeeeeeeeeXyeeeeeeeeeeeeeeXyeeXyeeeeeeeeeeXyeeeeeeeeXyeeeeeeeeeeeeeeXyeeeeXyeeeeeeeeXyeeeeeeeeXyeeeeeeeeeeeeeeeeeeXyeeeeeeeeeeXyeeXyeeeeXyeeeeeeeeXyeeeeeeeeeeXyeeXyeeeeXyeeeeeeeeXyeeeeeeeeeeeeeeXyeeXyeeeeeeeeeeXyeeeeeeeeXyeeeeeeeeeeeeeeeeeeXyeeXyeeXyeeeeeeeeXyeeXyXyXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyeeXyee89a766fb72dadff504fa1fcd90b04f4a595055007d25bfc3607abe9b832fc70d0dd3cd68714f1c452084631a1fa5071a4630c67395a7fa4bec5e13b55918bcb497d9b663cdf4f7e4953983099fef721ea39c4a1bbf350a61a17039a758830fa46dc228df965cc0291d4dafb2603b7ed88c7067d54da4a652710f8f8cf5ffaae7c3fe666f35a495926c628da5eb519c0abe74373aae2db6164c829a5c3cb72ad93627c91899e1c71e276811de502c50def23ca135c86442f83f682e5c3f961f1baf274ad0d67d107feed6cceacdd87a53365a8e0a4a98dab1e6d5df2bb05d381a5bd8bfaafd9773d090d8a3546f8ecdba935352f1356550dd7892a63938de54bb6f8fcb7afaa59f83946650233745ecfed39df9e634fdd96034ac7564936e7aebfed85629d170b444d85acdf64ee9610fae15ff40e97b21202e4815168d4c3c9c26488b664204c283b05258dffe0b45d7e8d09772ad13a435b482053b7c944e93367e57a8f5d5beb0e1d9d791c843c61ead75a172ee0930a6f2b85e955f9a8f646c0ce3941d1b4bd36e3e59e72b176c01171a96c3c6490f5a456b1c2e0a79984765175a072a23e6143b9e84ea1e845d7a68cc7ef6df931e2b1cb6a475b6ee56d7169f4a980cd42c5250e7b0128f30b5a9dd4ba804fc7b5a28dd867f3e0c7da6294ee20571c4baf96f629e57e34572165e414be8d63d973ba4c5a523e8c3d1ac29cb52471ec9d32ce2253672c4547000137c1b29615c543c1aec4ab2a5aa867bc08988cabd5211563fcb706d30732d647d212608a3188703b3c61ddc46163faf777a094d036ba6eb993de6468affc21b8903b0eda7f50ca96e8bf5dc8bcd335bce8993aa9c10386a3eab5a239917715bfd99794dd402c5ec059439857e3464d91bc0d049faf07012c9af045d6a9a2eebbe38fa331eba9c3cae22513a3893ea34c2f11babebed863ae73624569f16e092cbf1df4390f1b8c52ed5097970245f4c583f8c08f444e12793596cd017b13bfbdd1b57b0a9232885b7ee8f9d51da46b2d1d66adf8f67ec42b39741391794b4ea66c33c05e7b0b9981c4a92ad5fc40ebeecc466775b45a54e54c4ae854fe30a2719c4c561434fc985468a7738d3bd3fd991b39664e21b27217304e61611e83e7d91e357bcf1074d9e44d33310845d840017800dbce6755949dc31128913ca7efb8fa42a814a5e14eedea601f57f5ae235301ed45dcc2fda585bac12e20689db728cc19a3c8568878ce9af16d6352b2de763046ef82b4df1aad73130ad189c229cbbb3d5f882bfe52d6df158c024b47417433143c7229cf572281a7f5324516805812735a7f75c14f90f398fe88633f910bd94af671139ffc02b9d33c60dd33096f889f152c079148fca15bf3270f3fe93290b1e67685481730fe562b799cf4f362eb6a39a14f323ba26d3437be33d5f3d6116902573924499fa544aede50f234c45a656e98e4f70f879cfedddcc74acc7837defe9b9de7c5731339fca86a1a28808d2a090b557c7298f36e56e0591a3baee23653f8e37f6d83be45d90459768138d8e27dbe53fc2677f7cb766d1b72204ca5007285f921baddc8e40a3f1e353a8d59ddf7b5d4d3d5968ee9662625cc7386242454d98f894598eaa6c8703ba054e2708f5b4c2e17019266e7694cce102cb0a94bed5078ae9cf2deeaf90d242879e24cbc6c8749b20e04fff29d5f9dfab44dc96f6fb7aeeefbe3684bf2da3749a92776eb2bb2e3d3fda54168a06e9a1cd69c597a426047c630135ed4344a565ab85a74f468cf22f9a47bf138c5c286f852e9de02b571b25da7c2d0906d1ce2d151e7b3835cda3e5be81fdfc133b3a721b747d01b4b6915727baec6e9b483c731374d03f04b58dc8a5455533729fa43db67f1224d57f59f0fcf8ed790fb42a0b3420b46d5dd07b81ea1c00f122ea1af79360070e9240166d21a3006267d186903913c1094634e8ad45a98efb041329d9aaa9bce037ebd737ba2284818d37787a9b4c0f2897ccd3f6f82091de267b08a0ffa3d7aeacb9bf9fcb0c5fab0abaa32011f84b4be8f7a15c629fe111e601f14bc40ecf8697c185636cd673c05176a0b6c763bc280cc8bd5673ed89286f710299dd58b0a49efe7c108f8b81e760fc983e59412d0459ac08ebafaadeaeb34617d02ef1d4e431b4dd96bbdc8de2de45f400535c1e7b0b0009f543e61cd0290f3f51b476b5bf242931f6bf65a7724ad59acbd66ca7420bdb7942ffd61f87fa27c118169e6fa21b4cdf88b611f149f5632f1f807e247ef20757041eda48c5cc777c5c7a03bba9dbc8c2a73747ed234975fe7cf53654d5b6b3d8ee479a300c7e30f165cbfa093f9df57fdf0441b03101d4e9179d8a3d8f956ec406e29305550e09da4a7e1100c3805d12f41237b9b49db12bf22bdbe7806b40e41e38a1a044dafad2294a5c92118799ea532b67b776293f9fb69579589dc46456758154e944f9b075581a4da3e51ac2fc1f1ecedb064dff607307e56037d7618ac8c8b065577764d66b59801beaff097e5898bc684983b0ee2ef9411998ec1e81bad0813cba5760afaae2b532b28a1eeca03b83d38fc360b47740271a195c6585f65f1f9f15c8d36af8c67855a62d5853975882c62bf2b23856dd15fd1e29ab71be142763c76965535662326e0801db212bf8be1e9153a4faa782a26cc00704567547a75d57d591484f8e4fe6dca9e06b17990d27338084d771be6619774fef277ea96ad4980c293d4ee1ff3fdee1a12141ecc0b51db3be3210074530059ce1275dd349f3f5eb6cf3b536d17edcbdcfc28aaacbbeb0a2bddb50de3db9ed01206a0962be506b34c138c4640751264010a3dc5edd47bd2f2c75e5ce3d32d6550ff438e1cd0f2cfb41ed000e2374fdfbe9f39641e66ad9f4a3676f6e73ca15ccd68b3281c63a84d67cbccbde297dfa7233610e5d913c00d7e16c724266eaff22e2014902b69c9ac484036b369738118bba382a23c7964ea26c442b10aa50391eccb13104234d0041e74c344feecebaa0f3c0d73e3a64111ccc70f34ed66a1e397ae7b5d7ad95d0a40f603a89b7d971c4b8064befb759496c70930e804343b87524e9ddb4f1a274e20cc714cb276f19bf63996d89a94fcbef4c72ae12c2114f4d64dcddb03d7ca08dc3c46f016c3aeadb50697145f3ad3fa27ea7dc17f4af6b0ff7278ab7d7b3aa55b61df4ce963174e5d686433a45989139b04fae5101ca634fb9e724286aa48944089483b9f11c5d8cae74ad5dacce63b0a99d6450d8bf10980524ff38c5a80fef5ab7b864026648f7a3699cc66d7b022bf395f6584901ad0409d0792a94b0d07392ccfe66afeff98ab06020beccac3714dfa8ea81947e8afd27f043c61dbab427bbe70d4a5ea04ebfb51a527ad218c8249d05528ea7cd384207371bbd38433c9a924a6b1e593a9158e0df6be7b0384b2b0b80574dcac63bd7b8861af4b5fef6a54b2528f55aaa5897f6c3c851e045e603cbc758dbd305335da01209661d1df15b3c7f559410990f47e7c6d33998ca0c840b86f99e659b5c8d37baef2075e8bef7164d57f6b1c0712084ce9d0c6bd24ca3fc9fc7640a6a589f8cb3b95b2ef649309c14cb2c0b2e335a780f96bb03e53315800edd648c01c9283ccfd292db54ebe0e726c36a4d8a73960cb4c31842abe06826ba090f38ffe6ff7568d7645659cd1ba90a73d0b56165bb1a5c5e0453402370571ddc73193e9d62780708dd622f66ee72ac7288e12c0a3f2c31efbafdbd71e1e5300ba52b9104a00828bb2bdac2c8659c2651a533ecb697a94b915377c6e6afcbccb03570e6aaa52ac520f5d2af7c559f52522fad24a6655df3402e67e16401ebf64ddbc613a800012ddb58ce621201ee8b9744a9ad7cec16d31118b87f4d658d986296eea8fabeecfea1ed1a752d6698671a87e9cd4906762b0f882304710806614a1ffa1e5621757753a0f569da8c4845c18ed80d0bece9ab053d28b2ad6327b76a59cd77d16f5e810626a1a016139b10532eb6686a5560bd4b2c6be3c4c68583b16f35051808a89b3c5d86f44a32c91aa728c842dec8cf757f3de566dd13baef5ea1c8b08484ad978c0325b1bbc2667c31bfbf1f3d4648b22788abce5bfdbb775b7ffff8d84289c8f1500fdc611844aa5813caecd514c58237f102988b7802d52ce13332d7e1edbd8f460ac2bf720338ccb7a3ea62f81de462f70195c62666094ac93765aba8ac6c5912a8f1047bf0df8f353c078f44c0fe15a084428b0dd84de2357b683237ef071ffefe73acaa324a38a00a1cfa00c307e0954cea1dc559a618823ed64a926e5cdeac77ef25529ff716211528c7da63066faccf6c5042e8c381c05562df12d8d4bb893609f48233f8299454dddb96a5eeb078e718939604857ae9db612c71e4ef34ee4129cf2ae51ae0719428be6ed0e21630d4bfb4d016042b66243f67605abbe3751e5f157714b0f3807fc7193ff342c1361dac660d3d6805dc58617b031af5903fee26ec52d5a0e86de5dda547aa841c18bfc4af91450ffdc53f428618f0bf4b05fceb9f6511b916f1057ec16fad49b5689789ba9b475dacd8dda61d65e7a7e4ac9f6df3e0369ff80c9d57ba4988ab748acd8a2d773be1ad7425f60554af9f59c7e065106b1ba66a5ec48375417c2c75f018b41df2e514abb13cc7164e331bc4a1c05c37feb97dc1f7a7280f5048d4074e818c8063ab5f927e927eebbfef4bcafeab7c9f6fce4a7f3e454647c4f299e4f3290559e0d125ada18fafcffdac51bd26089a5cc0ce719de96ef164767fbd272c18a7edfcb16583e83f59d72812e01b84a66e99bef5d4ac7bba20533bca7f8a8e30f81d39c7e9e8a89e8b23b269fc95e97f3460ac9b2af393e3c7ba3fe3692a48b5319c860ba804ab8c5d2bf82450c7d93836513f3969826a0793e1dc95c8cc7ac3e624f88c18411a1537e2e37777ccd38272a9173ec273df0d4a911ab6e65094b30cc655081dd887d5e97bdd6f9c9d4c26d2f214de0c65b2e804b0ac9b6467d2c8b38d99567c409c94eb4d876be4744f71f1d1f8c59988d97109d12082fccd54cda45173563e7af7c59e54262015ecfcba5d815d0e785ee088ce97e798a0cf0a4002e0d7e7919ee9eea5e2606088c923c7a28f6e8fa64104c1f50c130a0884e1794f60c3e96a0d65c3e97433f9cd13b5533d1252d865266f999f3c13f427cca980db7c4b2a30fca9e601e9d60e02169e273b8a5b82911234fa9ff3ed9be6b5ede74487dab4eadb1bae1bac1426001485fa4f0f015f70f8a55da81dffe9f78b6576069b817b29416df9a1f793049a7d43f03733979ecd02582f61a16512e3b0aff74f23d35d974b4f3e4cc293acad01dd9ea97e7c027df99061146313a0189a71c1679d0b249e885d44558a7bf26190ccd20a88af01d6c3761fcc2cff3d619d1aee0bb4453299d2f472793542b54b74041eb06f8a3d7ba88a1ba4f99ca932fa1f4ae3b7fe8e4d96c84ebefa715bbb252d03bc6e137097f9086852205b5d1dc5ee7bce39db2bd64a7dab3f22738b1e332f6ccf2a311670e215f1cea4ecef5697329bbb107c2e5da582e1279b4bcdb3f331f951ba74628bbfc7b3cae9505a7ea17b4a6c4138df682b745bc5c7ca5de729a095c35784f9f201ec7f07ee9c93721da4fe280010161409393351e6c38bf2471551fe1085d13566ed9ed1ca5343b1340f72e8f8d05181e0d7bf003ad8b749239ccefe966b7aa862aea51c063db5b45598d11fe817ee4ee9936ce3c74da10b9722263cb81edfe213695535a3139725c37bdb29ee48ecb1c56c714bd9fb6f88938e2c61e8944558a188ffc96373ff020f947dbaac67c1b33b99ba2d88129b6d851d85311d49953d705d16c54385df68687e2ff0cf64ff2129881faefce8e71485b64721055fe6167af42ae0ee799827d196b6ef84e24e80ae259e50da56e8900da1c65cec379f0436f1a5a176597179f41e789af08e87fcf72851bc548927bc4a85a870f1f3c8818d1eed35dc9fc1b838a28b46d4c6c9f7b64660f7d405a0d73317c7098827b2893d99b934b9dc910d1f1361b890bacf735a8b74cc5f6c42147fcd05055358d1d25ffda8d76136f84146ee8f52f62d4010c7346637412bcc4f840f286f0d9ae4999ddf2e3efb7a1ae127140a7a6a2bd985aac765400599288b2704fe1e1861eec25c6a14431ecb8d127cb24f967c6dc775466e625a7aca6272ab751614e1302652dce2d5da545a25d7759e5a5df9ffb7eff7bd35200b114886ca2a36412008f9413c978b5d45e9269ff7b44d5edc36a061e0c2675e6c54b8bea434dfc06f2f5cb90289ba96438b0902455d6dd7c68a1b58cd0faa6a5180b139bf0ce1e38893b5819e31f6cdc27b4759754492278bb139f5772ac819a8743c069c5c91a15cf65a190c8d6511c91319566df4cf224bede3390eef8bdd9a80f152c641d1a75cebc930554363e176e35d8cb2ab71a2b5d4363ce9f27732da0859ec897318c8dadd64d3858291daa2d237ae84ac1a9a25f283bd510289d555f15349be1474087c81fd608aff6fa04980636fdabd5a76c57af1199c42b5bc24c07600147ec9b5d866bca9923e8576aed46788e918b406227376f475d87373dafa987c6428ddac3f9b49c996443baa19d6fe8c318d07bfbde5418178f8031ec758ae24547b7fe4f3ec6387878b8d24c405e92599f72a18f5bcb7c836af712b0cf658465c37a662fa36ee852c9fcaefd73b8b8f20af72911fb91107cf9a1ee2543dc5202bf6c80c0379e15bebba48892840bd2797f13ace3e2043a10f2ec3de5c3878f3e27f9481fad940f2e46eb310f5907ce66643bcc381df7171869e9e2835ac693f2379a68636a3e426d6be27d9b2cb79510f408718eb2e662c3a92dffce679eed80a081cb8a9496089dad524d545dc87f1be998c23aa9ee02b5f642f4c1d30dd2316d762d2529c12cbc2b35b86937fe4ff7bfea182c003a5d52924404d63634842a0b22d0e195f4f3bb9520d3653f7f173254836b852413520aaa2781f2223f5cba12304bdc74f922d23b797be700deaf60c20ac4a98a2a5ba45f0b90748f6ba2d47dbfbdb7048cef7458c6ff7f7c469bf7d8c64143f549455895f186a2b0c9f920e5fcff47c0bd895082a9038344c7a0c2390d31a809be32f133c4b0adbdd29f2885e1f984a66dfecc49eda5209fc611b95350991e1ff6e52789cef59212151d18b3fbe4bfe7fda683d0dcb9fc34a7ee9109864485d542f08302f8d4e8be9a162def9c701070be896aaf24ad7fc42362f2a8ae7c1f89a48c1f2920eace0712f879a961632eb33e3f5259156043941705e21a77ae0b1f0f829d82735b03ad7b876b468a192a3ff19a29a8f601c80dfffd026b1b026ab0918116609bd00e85c4689269a786282b4cbcaa007837c2e9d5d79b55baaa5af291fa934d648b2182d37b56a3ac35742eab6aebff59420a5ac63ec4e5fb4f2c34d61d8d6f6b5385ae5d68b2c698eb82fb70c5c39a3deae5eb2fda36c352c97a5e73f225b03fea86ab7b3ad4770cf18d8e3288a9dae759234917092a1a2d04bdd59d12a4d9f908b460a48b432baa2ed16a83bcc1fbe086f0b2a5e78cec6c98c67a1505df22de8812a845da4fa849ed83ff2285f5b01b2d0d911ab17a5386f2662ddb88390f2ea9f21bab7ab3a19305b92869ed071ea327f964835ea2a8fd12cb2c0a6c80ba682440b6b28f3e33493ed53aaa3da395e4532ddb69f90a1b19ef03d634d552e39540b2830d944ca79f4198db5e8e8e908b69bcb9a17e3cb7140c3b8820c1a1387c8612528f94e74e05e79ceb927d17a5e7091431b784629349d585d276cce123ad7449ecc7de2d0eb8658289fae7c1cc04dbb490505f8007061d403cb26a96f73b2f4e93713a480a1b62921fd5f856cb12a2d445d133b11bc224e992d4fe8434749ab1291d12641ff3b63aec6c2feb9398a033a6d64a596c83a5369cf0d06ce15cdf7bd41f82fe7a45b55ffc78fb568c29a444a36fae8d132565e52a29a07b09154f0bef28d09f04356be9e9319acdfd0f2c5ed3eb661958a1eac464abbc24e967463fd8bd797cf9f59f45f15aadb3e3687ffe1259e9844c69615d5e6464b7a9499c5108761600a0e17cc6372fd610aaa40b311ca29a2b9c7da6791dd9df849b98045a9eeb6fe0131498b4418c3a1995769a28e56106d6d6b4a1d18715ca7d5fe750b910ed8b4e3d86f2eb166240cad50253992c15177618ed0757f6b9476fe621b1048f45cdfc2060e2641f48917b4012e8c3205e10358e9636ac10f2adfa593870e348381038303d7c04078092e5d01c075482ddd954c2b9fd1617b25cc65e85ea5150906c504d061ea11f113c016e0d3d4110ab4df77d1d166964e2793e10473fb8253fef09b161a65c9d1ec4a72c561170ee4f3a4b988571c1764fcf2e6cde3dc8e817e5ba5efb5a961b4f90cae30471bdf98df53066b211e0f758c1fcf873c8e2f7eda424411f25efe689e5986e2fa98c20ec03a131eb2036b3a5db3ced9ca7cbed207578b4a24a67af9e9cd2246c488bf38d83edd37689c5ee51033a92dd8c9319222f775c3f21432707b6bf3118e2af0f06c2eb59e250a3c9c80bdff8c7910aea5a0e1dd4f330cbe1cb94b4ff74a4c41c67732a8e4429e3897e83930dc673c8b0d3467c931a4b7702c60264f3f6dbfb9a5f1801148585e6298082dbeed7201fd22fdc5c3a6fb6467a64d283cd450e9f480375ecef81e6951dfd04b7f13f7ef68ebaaf7507ba44200a9e83f09f7fb5e9a69b07bf52074bc6448a2fe538631c9325c3aaeedd0d1b416377eab8d5a9e3a80caa4bdc7be07e01761ce8e12a60d5619cd0f2cd5ae7e6ec59dc532b2f1c9589fd23fb93990d90eacd1703a6e7c053cf32a03f5ba00def9ab4b217d1f1232992024f2c10b875758d8e2177cc8ec2fa9defbd36c4f3ce9c57e759e6074f132fdc72393fcb33e1f8207f2fb13bacaa5111690106debb343040cd98e5c4339f6fd0982bf7a142dc4b1772145452fd581ba0ad630ce6a192b7c253514933fc36938efc14ae1c844f7f2808608180cb3873ec8cfe12c374816729c0a798f854e21ed8ffc483cc36dda17cf80e37f4074d18b80009082441ed468d48daaa5a3f93019b07dc225049278c8df7d347a3e8f7bd7cdaf4e77b67a948d62970f0bb69aea05b2123076b555feac35a44793eb0e929ef3d603ddd6daf02f7ae7f9697e60e1997d1f61d7697a00cd6c6dd57879a9081af348f2fcc59931a52897317f66ff8bea63b58ef6ef8777bb4b833c15f0034e9ba83a40fe58b31dede457608d82ac2011cd8cb02f166374f00695d88f651583b36bef1a14609c3efefcc75df1b8eda1bde02855815072bc1daac319700f462da4968e93974e7985af878f80922120255e7ad013c92192649765ab2f4e6f8ca3d555b58c8f16a2cd9b672ce34ea1f0159a5f29f1b1e38cd338c100a3074fb0b55945b67c2a313b4b43177c5c1f8bdcf9fc8b82983b68d36b94a247a59248f5e8dd4786d92eb6c13199da72b3252a67466fcffc194d314e6c0d2b9bad21a1981f600786c64e001b63e3b1f0a8b2dbc16c174922dd70524a344365c86ccd989b37d4d8a5f8caefa9ad50191fc80fc804535bb88c4c2340ec3dde63b6ce426e1f146481c3401eff479d9a3683e22b4164975ff1f11e708a97852d4934cac0a3f8fff05b50bd4d6ebf9ec0dac964064669c524b768514dcc54f1b9800c91f580d30481d19e59a7868703f93a2920937be79986f033b6d555a6e977d1821014a1c87420497a63efb0d1629eec9b17f1427e130356c66a908b800816fb97b7e00ebd5a0213e1278f8df669aab5ee927f58243dac4469208c69c8864a504807829d997dfcba8a4f20acd676873ff5e088114087b3e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855c37689ea693c34374854e7444ac580d709dcff4add58f14fa0e5834cea8c3ffb6566cfc778b77392061675f8e59f308d34f16600fe6f56f4a356025d0f3069fdbcd6abe0285ce62661e1a2867ad5108c6ea32cb9530c77f46f4ab0a3571d3a1a091457e04e0b76030961e2a3af73a966488daeba52ac4bf278ad70ff6b0baa2b6c927499969404f20a5061d3872a6a343ab52cc3a4adfaee79a7eb1c3d453dd000b18abe280ffc8dd75ded8fb104d781a2d7265e1ee31ea5e1a94498fcc427b1c3f3944c8f4daf3a8a714a3e09e338d84f8355b9e12f2c1289e744f91e0722ba050b2efe5dd0b8be394f35dd3a3123b26ce3bcb451d96b0002608d62ceb3feebe461f5308613cc571b09cb17a1295c9da0be71a8b7f9fe35c060140649b4e6fd6ad31e5528859f36857173f24f540b9b028838dc2fd53db27c284d4b6b5e7cec017f3aefe1a7b40fdb8eebf87f3510a42bec68feadf7371dd302371e89432a5399f1ea268c9c3eb5b6a7d46dbf414ac467fb148c5a330852c8c5d242eaa693bd7aa157073a7a9261531ca03df205fb4cb9ea97c1666a57c1c0899657a14ef3aef033b6d555a6e977d1821014a1c87420497a63efb0d1629eec9b17f1427e13035cc22c06e969152d86c55a11a8f72122b562fab0adff1c271afc02487421d44e220815a24881e942d2671c58362949e1856c1caa7d3056c7611dd9b982353f43e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855bd6b9c486bbde1ad5c9daae56002c6093a5a34546949a793efde7611dcc7f2ae664c7b818d517e6f1f0ebe79d6e012861713fbcbada5d9be2b273f422b2ef8996c8590239f9e52fdf2c7e3d714ef73ac68120445be0c3cb348383e9ca4b7604398a70dd6d6686280d099c54b72bd5f411cae7ded0a7db2f942ce0635104d4b95d1c2dcb93f7a5af00d32a7eb3222cabc61533573eee48b3aecc216a27c1862e556201c4e4b62c20b75d2d5282889fe2eb0e60a9c70ccdff06e635015ed87545b21486b9d2b58d16cd34c135103bee447b9e615fdca546a281ae8f264fe0b5127726d813156ae7c45a3a9e8b71e0cd5ba34815f374843dfde3c2a4558664d0e6d3b4502094809ef29f30547cefc5034340b21d7b91e083962cf81936cf26b1dbb9d4576b3530f920cc85d10763e2689495971fe01a3a05d902dca9e2696d2d563c110326af767acefd8dc9c8e76f0a6f0a977bfbb1a5bf5e5aedc986c9075a8b0037e0bcfae8df365e92014ca507d4f77fd4455a793bfe700ac1c31ae070ca10499f1ea268c9c3eb5b6a7d46dbf414ac467fb148c5a330852c8c5d242eaa693bdf033b6d555a6e977d1821014a1c87420497a63efb0d1629eec9b17f1427e1303675a774c1ab9aeec8c248c681b4bc39eedf56a9ec77cd9a337aa298068c4ea7a06a0122220a76d3ac0ad35fda873ec3c9e485fa9e5194ef38fb59397fd59d58fe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8559a997719fd4530fe48a337b45942274ea95c64c4cea89f016801688a2acaba6c32c087a71a0962b90c59d7dacbb63eaadff2ba74b6b693ccd480104a797fcbedf62e0499df63841e6c42d2e636712fb3c1ff4fbfd85de55b59319cc811e8f86a357904a87f1460fb017d3bf9a0240996fdfbffd92213b1c2426686f37f5b9186017f3aefe1a7b40fdb8eebf87f3510a42bec68feadf7371dd302371e89432a5399f1ea268c9c3eb5b6a7d46dbf414ac467fb148c5a330852c8c5d242eaa693bd7aa157073a7a9261531ca03df205fb4cb9ea97c1666a57c1c0899657a14ef3aee3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855ff8ffab8faee9c02b8027444f41da4408b39058c3260f3f20e6ad44479062fb8ac55cd068a7a702803a1025f1adf46a4a24d5f80d340f0c4c9c3487f8ece019c9dd72b29c5fcd73aaad9818c14610335c5b6428366710c3692088330cbb1dc7ff346240d55ed6717d6a61c97ca8df2eaba86bdbafc035e7e60fb4ec033f9e24718f44b568df3fe7b8cfb8d344ca43f86c7ed586f435da465cd32a5930490497a1efe63497223bd0a18e51608cf500520897eb7152e309efb0eb388777bf201bbabcc6909d2d9f9c80fd470823543061430f48bff58809e28cf1f070e8657a9a697b33e70d5c7edabe019c21c988fc60628f10a92cbbdb8f0ee4e41247b1a088f7c6392259657a6682f571b767d5e9bfddb9eaae50074e45b6d5dbf0e13e85fce6c83e89692929ae720c75662d44ef6b0b15764fa6dc3ce141d6397ac6a47dd37e53fe4ecce82956c2d9629614bb7b751eb388be6fdd64a404a4aca4f243e3210e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85543b1768f69efd1a3744866f3ffd8903e9cdf26eff218246a7a8fdca0bbc774cf8746bd073ee2adf5cf04f977bf09e28cb5dcdb932d6cfb5bfd52326ce935593db937982f2df854e8f5899c2775f63cd72416b0a5fb7d2c5595d599d9fb29ac4575e12b19c69979d741d11fc0aab8756d6657e942105d1d914878100b0049a52bc3f3944c8f4daf3a8a714a3e09e338d84f8355b9e12f2c1289e744f91e0722ba0407c6502ce4dbafd2eb1ae81249011efe3de676427f80e31478171399e81364e461f5308613cc571b09cb17a1295c9da0be71a8b7f9fe35c060140649b4e6fd73430769850bb19184abd8b84dc8872ef67ceb8e0311f1568fc9b9a962879e25f033b6d555a6e977d1821014a1c87420497a63efb0d1629eec9b17f1427e13034a4afaaa808fe3821f2a8f12fe0fb9afa6aeef274e7b2940e3d21e594d6cf7ace363eb839b03224ff82dad811a535532a1200f3ee1bde7e3eb6dc9f611ebcc65e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855285e44c0bc9d40df77a0adf5a9c43a1a97f51de2ab1d59172d2a946feb171f6a1f07f4527f7f6afe5b590c8ec4db6ee07b3586c14e9be65da82f5321be75680d695446b4685d24ac384fa80fddc7d1d183b05ef23254346a855653252effb3ca4257ddd80e7035d22852fde3df2aeccbd20f7adaf9539c409d914187a9988eff0258abb340d8bc2d7d19d71ef40c1ccd50dd0711814f731409d6caa37f2b6378d2864659d57e931cc6a984ac04b7c6642c4320790d182d91b9374629ed1de49881af880340bf000253b7980d1bdfeb66758b071add3eb020d4abc2bc2da2c5e93e6546476fa6c6fdfd29b2855d45c9bec4103971a64049e1e7612d8b75a3f69efee3ea2c1395cc1339c94bfa1708b7e677fc411b9706991767274aa4812320a81481683fd74986cc5f0ad5a870ed39a4895ea1e64142f53cb18043a6325931fb017f3aefe1a7b40fdb8eebf87f3510a42bec68feadf7371dd302371e89432a5399f1ea268c9c3eb5b6a7d46dbf414ac467fb148c5a330852c8c5d242eaa693bd7aa157073a7a9261531ca03df205fb4cb9ea97c1666a57c1c0899657a14ef3aefc7612879a5d310d03e4de50234962b9835f7a56fc2731a3c2b60699b95bdc03531afed487b828346766e02104818fa53377eab0c33a85d73d5ff4922d2105b8d510803cc0a8b567e83777a3e9b194331f9875932388dacab497e41c5532596fe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b7b8def68b206bbeb9f6a2637d7c0fc2125b9707c698f098fa01432e72634cc8d2457d96dcda00a8076db6e5087b60c647fcc2cab85340de5d65878566ee2ba7aa1b6cd62aaa3cd15ab59ee9f1f7e1f59147fe649ed30f0379cd158790918848c843356514031eb37d0e97b8dc38facb1278bea94bb3a460963e7a04697587403c8983d36dd41aa178b6ef98ed20db7c28dce5800817d413d2a067ddb94d55bea5fcd9482192fa3ebefdc59c93776663aea4ae0ec1ce9b4045780d9a32df805c9cb3ecdc94a54d95efa1e3f81206d448b401dc5b59cd53e951aa8475f99699b4cdeafdd5b5f4f3ca39056cd583492c86213a7bcbf0688803475077b2b3577b7481af880340bf000253b7980d1bdfeb66758b071add3eb020d4abc2bc2da2c5e933bd352544304bbcba7565bd9ae60331414241ad8d0a403f9a4b8a7ea1d2a91fa33651fe5cc612a25c3d8aa3ea548b8f6a814ee28b79f2610c8495939c0c2c9fba0b088a9d6f517a3feeb4377faa5bfe17aa8a6f1637bbefeada5a18c66abc5d463773bcf4ebc60d63a3017ad4edc4690fd41642a3c708cdc4495bee8600635c69217305be8978b78e16cc5e2479cd80975d3e2c19469d12c5058fb5f1c8642a017f3aefe1a7b40fdb8eebf87f3510a42bec68feadf7371dd302371e89432a53b3e8856ce60da6755692a1f18548d49b253037906d36306779c37e6d72cdd82766d2b8c7e0a07badd9b3e78766a4ddfdd83939ca7f4c5d9c324278253e53ecdc61bd402955781ead318dda2237df93e38a4f314a193c8d3396eded427aceb7cc9e0e1278df2170058d190475de0c520ded8908df47be5c4e54d3ae87a5f2f43e227bafe2805098685e3b2992a6f05b6dec25e7c539fbd9ef880132ee5f03640f976ca1be87903bdac7718ef253635458463c886026db479d861f7b105d0a0f82488ae508b3e4e9c7226dc54e68d90952942fbe33d856472bc9d5429b99f1f0db86cad064e6970cb33dfa7f4a2a7bc457f1d8d6e00897dcf893bac62245dc1613a38fb47d8e43eb0a331dfc81108f6e5f4ccc9898f064d7e1372e5e0700b26d0ba735e660237304a1309c96d5117218529f9e9419c19eafa46089a85c321eefebd42ccb7914bbdb0428de8ac6d394d65669974760289564a42d2dfd267c90669760b86351cfeca1ca82f5195f5cddce89c5bc3f305503421a594609226ffd592c79d998cbc9a68c6a465b7c204fed4326f26d548fcabe5075a18cb78e7ec8a669d0ef76982926a16f481679da6f03db107ce3d7742ee5f5f0a9cabb58798cb9374c827f25c22e6169a6690de2a716c663a4d1ac770c1dcbdc0b7bb12c1c9739d1f7f0a76174ae56c6a7fdac2ea862600bef19c6ea9caa7edcd4999705e783e57200b740758eb9a54516af235b2dbb18c179b396de056a73d962b0cc37dea499e14353f385d0a15b567bb8c201fee6b8f52d793f284f82dff043efec4c9baca88bc885e17f3ba23152885d8c6c3d5e71fe42e24d98a19078bb8b665482a41eb13f929f7cc460fa1fa5da3de2522e5ca90605fd9d58d7d42320e34c24a3cae88ac57367a4d97c92c88ba6de79600651c8bde87ea6cfdc186db7a5573284391f8ebd6fd1e79a0b26ba249b6e8f72ea63dd6ae273d7792a45e994341beb94083d4fef4f6575db201f7a6756fe9d987aed646743b33f74ef20fe11d1b295756c6fb1e15a8116c880121c345334781b51cdffc8642e95fe0c47684b065cef1317501648b70ade71605c0abb850c137028b96556b4a34322755d6b09ebff7c6d1e1c350f0241c245bf15678155919f6f57bc6c5ae4d81c3f710a8f184f12990d70f30fd9715f827f7032bf13c8230e4384e130b4a69efa325ba39396d15addeec543a11d22245011d6dc79c7a32b4e7a0a2d929213fa1f4062c393700420f9e21b884ff37143298354057be1b17cfcf5277cae474024de6eea10f8bf5b2afa39b1647d20c6b4cf52135446db905d06696bfcb174a3b23d54a829a8125ad2f3e9f62459a8067fa8062577fd10fbf5daad90e3551815472bb589eba185f917ed593815930995dacaaa785155a0f95e87a9a8010f46e64d92710217f4bf54c9f2039e5a2106ac3f2f57ae8dc499cd52bb5947935503ade57f0c9f8d08b514469eb88e66f8db89ff8046803214b1d2b3163e65aee1a825f2709858c9c1fe21aaa399bee331e3523023a5fe1a2d1918bbe0748c947a78a78af6bdd172a233b775d447edc158352beb198171c57fdfb6d231273d84f484defa8158010557451276084698658832f1284d4d383603e8cc85fe7057560ccb1a7fc17e83d3a8553f2c3d9b62cc8288487cc2b94b7ee6f3ba7de2e01bdc888c7d817d6cc060521d7bdc2ce93d90782688c76cb6082666b4010fa3becb59bf7fe5795c27b394319e655f45db6d987e2aee4b4c3a7357b32d22f629e46424c7034fa789457c7b912747f1a9ee84717a453c2e2b87877463dd1edc9b60eee64ca93f9c21a46a520cf45b27536e17e0084e072aeeb179ea48ded728a21fe66e1f825f9a21d93e24aec325dc27f58c1eabb6003b0ee2643106e4f562adceffa5bc2a203c82a07ad56c2136b1fb913b71df0f1913bc94df76ab5538bd4f056cb0c69ff95354f38734bceccfb2aaf187377e75f8e2ce218135ded84ecf3000db375d9b8d996921bfa7a9e9d58b480245619929831ef88fcfa31f29de6ff0573e9e679b24e5d25f9974af857750783e24b20167153434eb57c4d557dff59f4faa33ed436337a6aee17e78a6c9a78e130bdf6b10d9990270820110e1be579fe3e8442c7af96e9cec88e56b1304d0cdae720865778ea20ce3efe34a139416870483da8cd55640a1717ed556c5a0434347eb3f5c041e5341368c64f1931a666fa825ad412bb2f8dc339837cae15f6eacb591bd0157144d08395f428e7117d89e8fcb40ee5e78cc7e1eb03bb9c3f6321cb6997be5a30f810afdad52ac87a15a1e6107a1ce8b28bd48a98dd3dac5a07622039873c893dc4392a29f1cea776f144d8836b1e1ad817d7e67636c7b8b4ca35c0037544324cb5f552a99a4009597a45f064cb75f8aa0169fef0b4197f6ebc6ca5415d3752494727a48cd9e0cbe407e899ccaa9856521a59a3e3e758873519def7ad54e0933b81f696f376c02caeeb811a753a858d19fbbd4b8062e017738338749b4fecc457901297c8c7d3109d2762f3eeab1803532e3aef43213d8063fa781684cc61cc6c22b7f452d515598245e125e49dbfbe8ea54c3fd3caf478651e6b049f4ac676eaacfafd91718c7dbd9ed3deaea83e7a9076a7fd1a54e29e049e74079a9d7f0795b9b1fa8549770191e09f096130108e6fafd9b79bc784bb4401aef99c4cc4f50fccee0a8845a72f3bb9ef6280fc56061cfba9c1876ac2d7366d3d263e209f2368b390fa71fa54c26232f818830a80f197b378ad9156e45a10e6158faa9a5f94fa5ae3375e5cfec0cbde29f1c69a1a502e11dae26850d43cdb37a59ae5e1951f1c066298c131ba0badae9cfa8d15e2708d0ba4cfda41d71515f44196b5b03c65ba129989c0a2ee61c1bc9a2054998bd9f9263d86f3c96b7ef37dc25d93adecc716024e4f20875a634b545c7c31b81df388f8fab465dc5dfb91a939890489b90cf92c4bc9be3ccd770350df0a22250048b4a3c4f200cdce2a1cde7d721d2fa6adede583167a77a1da539420806ed581a98684b111fd01e5a7bb62ff400e2d6355ca569229377370a63737b925530a9af6ad2ae521e4cf92895b382fce1e04fd7f4489efa297638138df97539f7e4f431e0cebf77e736153a7c7281aac955bd7494eb774748ec1211dff57f014dbe83d44814728567cc8824e781ce2f7e76ca25c4f37eb19ac3503c2697534824b8af495c29fa81aeb5e25cfee282d65325da1ffa766650da3da5deff92e2f51711073ed2d61cf6d6956f65c5df1fc13916ff94ca525e7f56843016d9d056c457875bc55861bb577272af7ba50f87d60ad7684c06d3b238e376650eb24981e28ae367ff5a7c73661d94ee2ed597fb98d825df43776bfb8bd213255dc31eb9d727544a81c046a29902d9c32195a17436798067f087c330a0ea78acb38014560ac77f4a8f4c8264e4839cbd60c2a522866ba2449a8c54cf8199aac0a725a5a10613269a233ee6115b5145747bad6fbb74d6b7c8da3frootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython-ply-3.10-150000.3.5.1.src.rpmpython-ply-doc    python-plyrpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.103.0.4-14.6.0-14.0-15.2-14.14.1Ycl@X~@WiV @UPP!@Ot@Ot@O8@Mtoddrme2178@gmail.comrjschwei@suse.comtbechtold@suse.comhpj@urpla.netbenoit.monin@gmx.frtoddrme2178@gmail.comtoddrme2178@gmail.comhighwaystar.ru@gmail.comcoolo@suse.comsaschpe@suse.de- Fix wrong-script-interpreter rpmlint error.- Switch to single-spec build - Update to 3.10 * Changed grammar signature computation to not involve hashing functions. Parts are just combined into a big string.- update to 3.9: * Exposed the parser state number as the parser.state attribute in productions and error functions. * Fixed Issue #88. Python3 compatibility with ply/cpp. * Fixed Issue #93. Ply can crash if SyntaxError is raised inside a production. Not actually sure if the original implementation worked as documented at all. Yacc has been modified to follow the spec as outlined in the CHANGES noted for 11/27/07 below. * Fixed Issue #97. Failure with code validation when the original source files aren't present. Validation step now ignores the missing file. * Minor fixes to version numbers.- update to version 3.8: * Fixed issues related to Python 3.5. Patch contributed by Barry Warsaw. - update to version 3.7 * Fixed problems when reading table files from pickled data. * Fixed regression in handling of table modules if specified as module objects. See https://github.com/dabeaz/ply/issues/63 - clean up spec - add testing rig- update to version 3.6: * If PLY is unable to create the 'parser.out' or 'parsetab.py' files due to permission issues, it now just issues a warning message and continues to operate * Fixed some issues related to use of packages and table file modules - additional changes from version 3.5: * Added support for defaulted_states in the parser * Fixed debug logging in the parser * Added actions to be defined to character literals (Issue #32) * Import of the 'parsetab.py' file is now constrained to only consider the directory specified by the outputdir argument to yacc() * Changed default output directory to be the same as that in which the yacc grammar is defined * Changed the parsetab.py file signature slightly so that the parsetab won't regenerate if created on a different major version of Python * Fixed Issue #44 call_errorfunc() should return the result of errorfunc() * Support for versions of Python <2.7 is officially dropped * Fixed bug related to calling yacc(start=...) * Added skipped tests for PyPy and Java * Added filter to make unit tests pass under 'python -3' * Fixed CPP_INTEGER regex in ply/cpp.py (Issue 21) * Fixed yacc validation bugs when from __future__ import unicode_literals is being used * Added support for Travis-CI * Added a .gitignore file * Fixed validation problems for source files that include a different source code encoding specifier * Fixed unit tests for yacc to eliminate random failures due to dict hash value randomization in Python 3.3 * Fixed comment whitespace processing bugs in ply/cpp.py * Fixed token names in ply/ctokens.py to match rule names * Changes to functions available in panic mode error recover * Fixed some problems with line and position tracking and the use of error symbols * Change to doc string handling in lex module * Fixed issue #1: Fixed _tabversion. It should use __tabversion__ instead of __version__ * Fixed issue #8: Literals empty list causes IndexError * Fixed issue #12: Typo in code snippet in documentation * Fixed issue #10: Correctly escape t_XOREQUAL pattern. - clean the test and example directories - remove stray backup files in doc - remove unneeded executable bit of testlex.py - remove CFLAGS export: unneeded - do not drop executable bit of everything in test since it contains subdirectories - remove useless clean section - remove README from package: not provided anymore- Fix building on SLES- spec file cleanups- python3 package added- patch license to follow spdx.org standard- Update to 3.4: + Minor patch to make cpp.py compatible with Python 3. + Fixed setup.py trove classifiers to properly list PLY as Python 3 compatible. - License changed to BSD3c - Packaged more doc files - Moved important docs (README, ..) to base package - Fixed build for non-SUSE distrosh04-ch1d 1695728486  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~3.10-150000.3.5.1      !!!"!###$$$####%%%&%'''(((((''''''')))*)+++,,,,,,,+++++++++++python-ply-docdocinternal.htmlmakedoc.pyply.htmlexampleBASICREADMEbasic.pybasiclex.pybasiclog.pybasinterp.pybasparse.pydim.basfunc.basgcd.basgosub.bashello.baslinear.basmaxsin.baspowers.basrand.bassales.bassears.bassqrt1.bassqrt2.basGardenSnakeGardenSnake.pyREADMEREADMEansicREADMEclex.pycparse.pycalccalc.pycalcdebugcalc.pycalceofcalc.pyclasscalccalc.pycleanup.shclosurecalccalc.pyhedithedit.pynewclasscalccalc.pyoptcalcREADMEcalc.pyunicalccalc.pyyplyREADMEylex.pyyparse.pyyply.pytestREADME__pycache__calclex.cpython-36.pyclex_closure.cpython-36.pyclex_doc1.cpython-36.pyclex_dup1.cpython-36.pyclex_dup2.cpython-36.pyclex_dup3.cpython-36.pyclex_empty.cpython-36.pyclex_error1.cpython-36.pyclex_error2.cpython-36.pyclex_error3.cpython-36.pyclex_error4.cpython-36.pyclex_hedit.cpython-36.pyclex_ignore.cpython-36.pyclex_ignore2.cpython-36.pyclex_literal1.cpython-36.pyclex_literal2.cpython-36.pyclex_many_tokens.cpython-36.pyclex_module.cpython-36.pyclex_module_import.cpython-36.pyclex_object.cpython-36.pyclex_opt_alias.cpython-36.pyclex_optimize.cpython-36.pyclex_optimize2.cpython-36.pyclex_optimize3.cpython-36.pyclex_re1.cpython-36.pyclex_re2.cpython-36.pyclex_re3.cpython-36.pyclex_rule1.cpython-36.pyclex_rule2.cpython-36.pyclex_rule3.cpython-36.pyclex_state1.cpython-36.pyclex_state2.cpython-36.pyclex_state3.cpython-36.pyclex_state4.cpython-36.pyclex_state5.cpython-36.pyclex_state_noerror.cpython-36.pyclex_state_norule.cpython-36.pyclex_state_try.cpython-36.pyclex_token1.cpython-36.pyclex_token2.cpython-36.pyclex_token3.cpython-36.pyclex_token4.cpython-36.pyclex_token5.cpython-36.pyclex_token_dup.cpython-36.pycyacc_badargs.cpython-36.pycyacc_badid.cpython-36.pycyacc_badprec.cpython-36.pycyacc_badprec2.cpython-36.pycyacc_badprec3.cpython-36.pycyacc_badrule.cpython-36.pycyacc_badtok.cpython-36.pycyacc_dup.cpython-36.pycyacc_error1.cpython-36.pycyacc_error2.cpython-36.pycyacc_error3.cpython-36.pycyacc_error4.cpython-36.pycyacc_error5.cpython-36.pycyacc_error6.cpython-36.pycyacc_error7.cpython-36.pycyacc_inf.cpython-36.pycyacc_literal.cpython-36.pycyacc_misplaced.cpython-36.pycyacc_missing1.cpython-36.pycyacc_nested.cpython-36.pycyacc_nodoc.cpython-36.pycyacc_noerror.cpython-36.pycyacc_nop.cpython-36.pycyacc_notfunc.cpython-36.pycyacc_notok.cpython-36.pycyacc_prec1.cpython-36.pycyacc_rr.cpython-36.pycyacc_rr_unused.cpython-36.pycyacc_simple.cpython-36.pycyacc_sr.cpython-36.pycyacc_term1.cpython-36.pycyacc_unicode_literals.cpython-36.pycyacc_unused.cpython-36.pycyacc_unused_rule.cpython-36.pycyacc_uprec.cpython-36.pycyacc_uprec2.cpython-36.pyc_current_flavorcalclex.pycalclex.pyccleanup.shlex_closure.pylex_closure.pyclex_doc1.pylex_doc1.pyclex_dup1.pylex_dup1.pyclex_dup2.pylex_dup2.pyclex_dup3.pylex_dup3.pyclex_empty.pylex_empty.pyclex_error1.pylex_error1.pyclex_error2.pylex_error2.pyclex_error3.pylex_error3.pyclex_error4.pylex_error4.pyclex_hedit.pylex_hedit.pyclex_ignore.pylex_ignore.pyclex_ignore2.pylex_ignore2.pyclex_literal1.pylex_literal1.pyclex_literal2.pylex_literal2.pyclex_literal3.pylex_many_tokens.pylex_many_tokens.pyclex_module.pylex_module.pyclex_module_import.pylex_module_import.pyclex_object.pylex_object.pyclex_opt_alias.pylex_opt_alias.pyclex_optimize.pylex_optimize.pyclex_optimize2.pylex_optimize2.pyclex_optimize3.pylex_optimize3.pyclex_re1.pylex_re1.pyclex_re2.pylex_re2.pyclex_re3.pylex_re3.pyclex_rule1.pylex_rule1.pyclex_rule2.pylex_rule2.pyclex_rule3.pylex_rule3.pyclex_state1.pylex_state1.pyclex_state2.pylex_state2.pyclex_state3.pylex_state3.pyclex_state4.pylex_state4.pyclex_state5.pylex_state5.pyclex_state_noerror.pylex_state_noerror.pyclex_state_norule.pylex_state_norule.pyclex_state_try.pylex_state_try.pyclex_token1.pylex_token1.pyclex_token2.pylex_token2.pyclex_token3.pylex_token3.pyclex_token4.pylex_token4.pyclex_token5.pylex_token5.pyclex_token_dup.pylex_token_dup.pycparser.outpkg_test1__init__.py__init__.pyc__pycache____init__.cpython-36.pycparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalcparse.cpython-36.pyclextab.cpython-36.pycparsetab.cpython-36.pyccalclex.pycalclex.pyccalcparse.pycalcparse.pyclextab.pyparser.outparsetab.pypkg_test2__init__.py__init__.pyc__pycache____init__.cpython-36.pycparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalclextab.cpython-36.pyccalcparse.cpython-36.pyccalcparsetab.cpython-36.pyccalclex.pycalclex.pyccalclextab.pycalcparse.pycalcparse.pyccalcparsetab.pyparser.outpkg_test3__init__.py__init__.pyc__pycache____init__.cpython-36.pycgenerated__init__.py__init__.pyc__pycache____init__.cpython-36.pyclextab.cpython-36.pycparsetab.cpython-36.pyclextab.pyparser.outparsetab.pyparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalcparse.cpython-36.pyccalclex.pycalclex.pyccalcparse.pycalcparse.pycpkg_test4__init__.py__init__.pyc__pycache____init__.cpython-36.pycparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalcparse.cpython-36.pyccalclex.pycalclex.pyccalcparse.pycalcparse.pycpkg_test5__init__.py__init__.pyc__pycache____init__.cpython-36.pycparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalcparse.cpython-36.pyclextab.cpython-36.pycparsetab.cpython-36.pyccalclex.pycalclex.pyccalcparse.pycalcparse.pyclextab.pyparser.outparsetab.pypkg_test6__init__.py__init__.pyc__pycache____init__.cpython-36.pycparsing__init__.py__init__.pyc__pycache____init__.cpython-36.pyccalclex.cpython-36.pyccalcparse.cpython-36.pycexpression.cpython-36.pyclextab.cpython-36.pycparsetab.cpython-36.pycstatement.cpython-36.pyccalclex.pycalclex.pyccalcparse.pycalcparse.pycexpression.pyexpression.pyclextab.pyparser.outparsetab.pystatement.pystatement.pyctestlex.pytestyacc.pyyacc_badargs.pyyacc_badargs.pycyacc_badid.pyyacc_badid.pycyacc_badprec.pyyacc_badprec.pycyacc_badprec2.pyyacc_badprec2.pycyacc_badprec3.pyyacc_badprec3.pycyacc_badrule.pyyacc_badrule.pycyacc_badtok.pyyacc_badtok.pycyacc_dup.pyyacc_dup.pycyacc_error1.pyyacc_error1.pycyacc_error2.pyyacc_error2.pycyacc_error3.pyyacc_error3.pycyacc_error4.pyyacc_error4.pycyacc_error5.pyyacc_error5.pycyacc_error6.pyyacc_error6.pycyacc_error7.pyyacc_error7.pycyacc_inf.pyyacc_inf.pycyacc_literal.pyyacc_literal.pycyacc_misplaced.pyyacc_misplaced.pycyacc_missing1.pyyacc_missing1.pycyacc_nested.pyyacc_nested.pycyacc_nodoc.pyyacc_nodoc.pycyacc_noerror.pyyacc_noerror.pycyacc_nop.pyyacc_nop.pycyacc_notfunc.pyyacc_notfunc.pycyacc_notok.pyyacc_notok.pycyacc_prec1.pyyacc_prec1.pycyacc_rr.pyyacc_rr.pycyacc_rr_unused.pyyacc_rr_unused.pycyacc_simple.pyyacc_simple.pycyacc_sr.pyyacc_sr.pycyacc_term1.pyyacc_term1.pycyacc_unicode_literals.pyyacc_unicode_literals.pycyacc_unused.pyyacc_unused.pycyacc_unused_rule.pyyacc_unused_rule.pycyacc_uprec.pyyacc_uprec.pycyacc_uprec2.pyyacc_uprec2.pyc/usr/share/doc/packages//usr/share/doc/packages/python-ply-doc//usr/share/doc/packages/python-ply-doc/doc//usr/share/doc/packages/python-ply-doc/example//usr/share/doc/packages/python-ply-doc/example/BASIC//usr/share/doc/packages/python-ply-doc/example/GardenSnake//usr/share/doc/packages/python-ply-doc/example/ansic//usr/share/doc/packages/python-ply-doc/example/calc//usr/share/doc/packages/python-ply-doc/example/calcdebug//usr/share/doc/packages/python-ply-doc/example/calceof//usr/share/doc/packages/python-ply-doc/example/classcalc//usr/share/doc/packages/python-ply-doc/example/closurecalc//usr/share/doc/packages/python-ply-doc/example/hedit//usr/share/doc/packages/python-ply-doc/example/newclasscalc//usr/share/doc/packages/python-ply-doc/example/optcalc//usr/share/doc/packages/python-ply-doc/example/unicalc//usr/share/doc/packages/python-ply-doc/example/yply//usr/share/doc/packages/python-ply-doc/test//usr/share/doc/packages/python-ply-doc/test/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test1//usr/share/doc/packages/python-ply-doc/test/pkg_test1/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test1/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test1/parsing/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test2//usr/share/doc/packages/python-ply-doc/test/pkg_test2/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test2/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test2/parsing/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test3//usr/share/doc/packages/python-ply-doc/test/pkg_test3/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test3/generated//usr/share/doc/packages/python-ply-doc/test/pkg_test3/generated/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test3/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test3/parsing/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test4//usr/share/doc/packages/python-ply-doc/test/pkg_test4/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test4/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test4/parsing/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test5//usr/share/doc/packages/python-ply-doc/test/pkg_test5/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test5/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test5/parsing/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test6//usr/share/doc/packages/python-ply-doc/test/pkg_test6/__pycache__//usr/share/doc/packages/python-ply-doc/test/pkg_test6/parsing//usr/share/doc/packages/python-ply-doc/test/pkg_test6/parsing/__pycache__/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:30846/SUSE_SLE-15_Update/645fb9ea0a584421e5fbcfb64d47569c-python-ply.SUSE_SLE-15_Updatedrpmxz5noarch-suse-linux          directoryHTML document, ASCII textPython script, ASCII text executableASCII textObjective-C source, ASCII textPOSIX shell script, ASCII text executablepython 3.6 byte-compiledpython 2.7 byte-compiledemptyASCII text, with very long linesHOJ\(ng9)utf-84892649e33a7d3f716932c33dcb75631eed96948feef1463d14b93e731a7274d?P7zXZ !t/" /]"k%pa e%x>Iܜ8z {>y۸]3I=%o3brw*K{WOh!uLiMF yRnͿeGgtAh G5md`!t5_>C͔1( P Z#W4#njE F\t(F2]Xz34W#(S̜+P&A[3}D'vSFȻz$]+10!>O0w |k-s>z|?+$$8$iis[.ȐzomB[!YGy &VuϏo`Cg- w=Ti+ ؽ/AQQlO ݸ_Cox2>#rmfR*[ q+r P^c]|+o]?Z;K'O^.op!ǵ}=iH* w_._SLM-Evd;adrev>7e;l$t 'NQk,e^ΠHyAӵi2`m,{d mDAgHWBÝԗ GlNH2A>F0"bR>2]nU64Vek{0ٚE:[HNՁt/Rr kTNݨ |$}AT<¯& bFd{\\լWAܫc B_1wozq>NPB%=ZgfHh:BEE[?9R-UGzMyt=hA;1ZOtmٛ;XrV̭)3A^R牑 kui#p"qá -p"KV9$]32 fH\()V'k ¸>Sy3OJ6L*^f*lDE,a m. Q][SqrAa}>xݏR NtB'ˊ7} &_ \/\:#`#"I0MJи#A?g(>XH_ /ͤ[Ԗo*fz.1geֲ; B+ݨVslf$`q"Yg\Xo'zUa@E -̈́FJ~d} BqJ:H')FFc!o* FT[u/pcPf>备ȧ:3$?d)Mڨ_s#5Ѕ{9 9o D$`ڠm]1͍0 p,(fXrԕsucńޱ?X^nVBSQߊRfc" PoVԘ"3#"\T~ϖDL #149 z9Я2B,An?Dcjt@_"nzAzK:[k+ի'G(M,A!~[^8rhCw^S$DnV/n'ƃ&~_D e$2a!KQl}Ryk!lTptD%iCO( Rvʂ#LZ2*RޮF2_.>sܝ o]%]Bü CZ<~1I4bO@ 3)خc􁰍mϨ5b*xݩogA{ev/72"zdbAs A:N\t^]zٚY  .q7!N6ߡ|D`),  6;RieYN%1ov^IDhoBa50.j_ kF9|0K}`TF`2jȽsOB T$&4n͞NS-a8ԁ!{b&H=+0$2'yt6Usγϓ-5je{gT"7AdkvΘ?O;R2daK +EcФY$= J?QZ"j 8݃ɶ YZ