REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 63.73 KB
Close
//opt/alt/python38/lib64/python3.8/logging/__pycache__/__init__.cpython-38.opt-1.pyc
Text
Base64
VQ0NCgAAAAATadtmhDABAOMAAAAAAAAAAAAAAAAAAAAAKgAAAEAAAABzNgQAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWgpkAWQDbAttDFoMAQBkAWQEbAttDVoOAQBkBWQGZAdkCGQJZApkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5nKloPZAFkAmwQWhBkL1oRZDBaEmQxWhNkMloUZQOgA6EAWhVkM1oWZDNaF2QzWhhkM1oZZDRaGmUaWhtkNVocZDZaHWUdWh5kN1ofZDhaIGQBWiFlGmQHZRxkCWUdZBdlH2QPZSBkCGUhZBNpBloiZRplG2UcZR1lHWUfZSBlIWQ5nAhaI2Q6ZCGEAFokZDtkGIQAWiVlJmUBZDyDApABcmRkPWQ+hABaJ24IZD9kQIQAWidlAmoooCllJWoqaiuhAVosZEFkQoQAWi1lEKAuoQBaL2RDZESEAFowZEVkRoQAWjFlJmUCZEeDApABc7JkSGRJhABaMm4oZQigM6EAWjRkSmRJhABaMmRLZEyEAFo1ZQJqNmUwZTVlMWRNjQMBAEcAZE5kEIQAZBBlN4MDWjhlOGE5ZE9kLIQAWjpkUGQrhABaO2RRZCaEAFo8ZQ6DAFo9Ww5HAGRSZFOEAGRTZTeDA1o+RwBkVGRVhABkVWU+gwNaP0cAZFZkV4QAZFdlPoMDWkBkWFpBZT5lQWYCZT9kWWYCZUBkWmYCZFucA1pCRwBkXGQNhABkDWU3gwNaDWUNgwBaQ0cAZF1kBoQAZAZlN4MDWkRHAGReZAyEAGQMZTeDA1pFRwBkX2RghABkYGU3gwNaRmUIoEehAFpIZwBaSWRhZGKEAFpKZGNkZIQAWktHAGRlZA6EAGQOZUaDA1pMRwBkZmQVhABkFWVMgwNaTUcAZGdkC4QAZAtlTYMDWk5HAGRoZGmEAGRpZU2DA1pPZU9lHYMBWlBlUFpRRwBkamRrhABka2U3gwNaUmRsZCeEAFpTZG1kI4QAWlRHAGRuZG+EAGRvZTeDA1pVRwBkcGQRhABkEWVGgwNaVkcAZHFkcoQAZHJlVoMDWldlVmFYRwBkc2QShABkEmU3gwNaWWVXZR2DAVpaZVplVl9aZVVlVmpagwFlVl9bZHRkGYQAWlxkhWR1ZCKEAVpdZHZkG4QAWl5lXlpfZHdkHoQAWmBkM2R4nAFkeWQfhAJaYWR6ZCqEAFpiZHtkKYQAWmNkfGQkhABaZGR9ZByEAFplZH5kJYQAWmZlGmYBZH9kHYQBWmdlSWYBZIBkKIQBWmhkAWQCbGlaaWVpoGplaKEBAQBHAGSBZBSEAGQUZUyDA1prZAJhbGSGZIJkg4QBWm1khGQahABabmQCUwAph3rCCkxvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluCmNvbXAubGFuZy5weXRob24uCgpDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KClRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZycgYW5kIGxvZyBhd2F5IQrpAAAAAE4pAdoIVGVtcGxhdGUpAdoJRm9ybWF0dGVy2gxCQVNJQ19GT1JNQVTaEkJ1ZmZlcmluZ0Zvcm1hdHRlctoIQ1JJVElDQUzaBURFQlVH2gVFUlJPUtoFRkFUQUzaC0ZpbGVIYW5kbGVy2gZGaWx0ZXJyAwAAANoHSGFuZGxlctoESU5GT9oJTG9nUmVjb3Jk2gZMb2dnZXLaDUxvZ2dlckFkYXB0ZXLaBk5PVFNFVNoLTnVsbEhhbmRsZXLaDVN0cmVhbUhhbmRsZXLaBFdBUk7aB1dBUk5JTkfaDGFkZExldmVsTmFtZdoLYmFzaWNDb25maWfaD2NhcHR1cmVXYXJuaW5nc9oIY3JpdGljYWzaBWRlYnVn2gdkaXNhYmxl2gVlcnJvctoJZXhjZXB0aW9u2gVmYXRhbNoMZ2V0TGV2ZWxOYW1l2glnZXRMb2dnZXLaDmdldExvZ2dlckNsYXNz2gRpbmZv2gNsb2faDW1ha2VMb2dSZWNvcmTaDnNldExvZ2dlckNsYXNz2ghzaHV0ZG93btoEd2FybtoHd2FybmluZ9oTZ2V0TG9nUmVjb3JkRmFjdG9yedoTc2V0TG9nUmVjb3JkRmFjdG9yedoKbGFzdFJlc29ydNoPcmFpc2VFeGNlcHRpb25zeiZWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPloKcHJvZHVjdGlvbnoHMC41LjEuMnoQMDcgRmVicnVhcnkgMjAxMFTpMgAAAOkoAAAA6R4AAADpFAAAAOkKAAAAKQhyBgAAAHIJAAAAcggAAAByFAAAAHIVAAAAcg0AAAByBwAAAHIRAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHM0AAAAdACgAXwAoQF9AXwBZAFrCXIWfAFTAHQCoAF8AKEBfQF8AWQBawlyLHwBUwBkAnwAFgBTACkDYbQCAAAKICAgIFJldHVybiB0aGUgdGV4dHVhbCBvciBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZ2dpbmcgbGV2ZWwgJ2xldmVsJy4KCiAgICBJZiB0aGUgbGV2ZWwgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGxldmVscyAoQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLAogICAgSU5GTywgREVCVUcpIHRoZW4geW91IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuIElmIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIGxldmVscyB3aXRoIG5hbWVzIHVzaW5nIGFkZExldmVsTmFtZSB0aGVuIHRoZSBuYW1lIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIHdpdGggJ2xldmVsJyBpcyByZXR1cm5lZC4KCiAgICBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZAogICAgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyByZXR1cm5lZC4KCiAgICBJZiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGV2ZWwgaXMgcGFzc2VkIGluLCB0aGUgY29ycmVzcG9uZGluZwogICAgbnVtZXJpYyB2YWx1ZSBpcyByZXR1cm5lZC4KCiAgICBJZiBubyBtYXRjaGluZyBudW1lcmljIG9yIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSBz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dGhlIExvZ1JlY29yZCBhdHRyaWJ1dGVzIC0gZS5nLiB0aGUgZGVmYXVsdCB2YWx1ZSBtZW50aW9uZWQKICAgIGFib3ZlIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB1c2VyJ3MgbWVzc2FnZSBhbmQgYXJndW1lbnRzIGFyZSBwcmUtCiAgICBmb3JtYXR0ZWQgaW50byBhIExvZ1JlY29yZCdzIG1lc3NhZ2UgYXR0cmlidXRlLiBDdXJyZW50bHksIHRoZSB1c2VmdWwKICAgIGF0dHJpYnV0ZXMgaW4gYSBMb2dSZWNvcmQgYXJlIGRlc2NyaWJlZCBieToKCiAgICAlKG5hbWUpcyAgICAgICAgICAgIE5hbWUgb2YgdGhlIGxvZ2dlciAobG9nZ2luZyBjaGFubmVsKQogICAgJShsZXZlbG5vKXMgICAgICAgICBOdW1lcmljIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlIChERUJVRywgSU5GTywKICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORywgRVJST1IsIENSSVRJQ0FMKQogICAgJShsZXZlbG5hbWUpcyAgICAgICBUZXh0IGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlICgiREVCVUciLCAiSU5GTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HIiwgIkVSUk9SIiwgIkNSSVRJQ0FMIikKICAgICUocGF0aG5hbWUpcyAgICAgICAgRnVsbCBwYXRobmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIGxvZ2dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbCB3YXMgaXNzdWVkIChpZiBhdmFpbGFibGUpCiAgICAlKGZpbGVuYW1lKXMgICAgICAgIEZpbGVuYW1lIHBvcnRpb24gb2YgcGF0aG5hbWUKICAgICUobW9kdWxlKXMgICAgICAgICAgTW9kdWxlIChuYW1lIHBvcnRpb24gb2YgZmlsZW5hbWUpCiAgICAlKGxpbmVubylkICAgICAgICAgIFNvdXJjZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcyBpc3N1ZWQK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ZGMDAAAAAAAAAAAAAAAGAAAABAAAAEMAAABzQAAAAHwAoAB8AWoBoQF9A3wCch50AqADfAJ8A6ECfQRuHnQCoAN8AGoEfAOhAn0FfABqBXwFfAFqBmYCFgB9BHwEUwApAWElBAAACiAgICAgICAgUmV0dXJuIHRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgTG9nUmVjb3JkIGFzIGZvcm1hdHRlZCB0ZXh0LgoKICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gZm9ybWF0KCkgYnkgYSBmb3JtYXR0ZXIgd2hpY2gKICAgICAgICB3YW50cyB0byBtYWtlIHVzZSBvZiBhIGZvcm1hdHRlZCB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbgogICAgICAgIGluIGZvcm1hdHRlcnMgdG8gcHJvdmlkZSBmb3IgYW55IHNwZWNpZmljIHJlcXVpcmVtZW50LCBidXQgdGhlCiAgICAgICAgYmFzaWMgYmVoYXZpb3VyIGlzIGFzIGZvbGxvd3M6IGlmIGRhdGVmbXQgKGEgc3RyaW5nKSBpcyBzcGVjaWZpZWQsCiAgICAgICAgaXQgaXMgdXNlZCB3aXRoIHRpbWUuc3RyZnRpbWUoKSB0byBmb3JtYXQgdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlCiAgICAgICAgcmVjb3JkLiBPdGhlcndpc2UsIGFuIElTTzg2MDEtbGlrZSAob3IgUkZDIDMzMzktbGlrZSkgZm9ybWF0IGlzIHVzZWQuCiAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gdXNlcyBhIHVzZXItY29uZmlndXJhYmxlCiAgICAgICAgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgY3JlYXRpb24gdGltZSB0byBhIHR1cGxlLiBCeSBkZWZhdWx0LAogICAgICAgIHRpbWUubG9jYWx0aW1lKCkgaXMgdXNlZDsgdG8gY2hhbmdlIHRoaXMgZm9yIGEgcGFydGljdWxhciBmb3JtYXR0ZXIKICAgICAgICBpbnN0YW5jZSwgc2V0IHRoZSAnY29udmVydGVyJyBhdHRy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U3RyZWFtSGFuZGxlciB3aGljaCB3cml0ZXMgdG8KICAgIHN5cy5zdGRlcnIsIHNldCBhIGZvcm1hdHRlciB1c2luZyB0aGUgQkFTSUNfRk9STUFUIGZvcm1hdCBzdHJpbmcsIGFuZAogICAgYWRkIHRoZSBoYW5kbGVyIHRvIHRoZSByb290IGxvZ2dlci4KCiAgICBBIG51bWJlciBvZiBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBtYXkgYmUgc3BlY2lmaWVkLCB3aGljaCBjYW4gYWx0ZXIKICAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KCiAgICBmaWxlbmFtZSAgU3BlY2lmaWVzIHRoYXQgYSBGaWxlSGFuZGxlciBiZSBjcmVhdGVkLCB1c2luZyB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgZmlsZW5hbWUsIHJhdGhlciB0aGFuIGEgU3RyZWFtSGFuZGxlci4KICAgIGZpbGVtb2RlICBTcGVjaWZpZXMgdGhlIG1vZGUgdG8gb3BlbiB0aGUgZmlsZSwgaWYgZmlsZW5hbWUgaXMgc3BlY2lmaWVkCiAgICAgICAgICAgICAgKGlmIGZpbGVtb2RlIGlzIHVuc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAnYScpLgogICAgZm9ybWF0ICAgIFVzZSB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBoYW5kbGVyLgogICAgZGF0ZWZtdCAgIFVzZSB0aGUgc3BlY2lmaWVkIGRhdGUvdGltZSBmb3JtYXQuCiAgICBzdHlsZSAgICAgSWYgYSBmb3JtYXQgc3RyaW5nIGlzIHNwZWNpZmllZCwgdXNlIHRoaXMgdG8gc3BlY2lmeSB0aGUKICAgICAgICAgICAgICB0eXBlIG9mIGZvcm1hdCBzdHJpbmcgKHBvc3NpYmxlIHZhbHVlcyAnJScsICd7JywgJyQnLCBmb3IKICAgICAgICAgICAgICAlLWZvcm1hdHRpbmcsIDptZXRoOmBzdHIuZm9ybWF0YCBhbmQgOmNsYXNzOmBzdHJpbmcuVGVtcGxhdGVgCiAgICAgICAgICAgICAgLSBkZWZhdWx0cyB0byAnJScpLgogICAgbGV2ZWwgICAgIFNldCB0aGUgcm9vdCBsb2dnZXIgbGV2ZWwgdG8gdGhlIHNwZWNpZmllZCBsZXZlbC4KICAgIHN0cmVhbSAgICBVc2UgdGhlIHNwZWNpZmllZCBzdHJlYW0gdG8gaW5pdGlhbGl6ZSB0aGUgU3RyZWFtSGFuZGxlci4gTm90ZQogICAgICAgICAgICAgIHRoYXQgdGhpcyBhcmd1bWVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAnZmlsZW5hbWUnIC0gaWYgYm90aAogICAgICAgICAgICAgIGFyZSBwcmVzZW50LCAnc3RyZWFtJyBpcyBpZ25vcmVkLgogICAgaGFuZGxlcnMgIElmIHNwZWNpZmllZCwgdGhpcyBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgYWxyZWFkeSBjcmVhdGVkCiAgICAgICAgICAgICAgaGFuZGxlcnMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJvb3QgaGFuZGxlci4gQW55IGhhbmRsZXIKICAgICAgICAgICAgICBpbiB0aGUgbGlzdCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgZm9ybWF0dGVyIGFzc2lnbmVkIHdpbGwgYmUKICAgICAgICAgICAgICBhc3NpZ25lZCB0aGUgZm9ybWF0dGVyIGNyZWF0ZWQgaW4gdGhpcyBmdW5jdGlvbi4KICAgIGZvcmNlICAgICBJZiB0aGlzIGtleXdvcmQgIGlzIHNwZWNpZmllZCBhcyB0cnVlLCBhbnkgZXhpc3RpbmcgaGFuZGxlcnMKICAgICAgICAgICAgICBhdHRhY2hlZCB0byB0aGUgcm9vdCBsb2dnZXIgYXJlIHJlbW92ZWQgYW5kIGNsb3NlZCwgYmVmb3JlCiAgICAgICAgICAgICAgY2Fycnlpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUgb3RoZXIKICAgICAgICAgICAgICBhcmd1bWVudHMuCiAgICBOb3RlIHRoYXQgeW91IGNvdWxkIHNwZWNpZnkgYSBzdHJlYW0gY3JlYXRlZCB1c2luZyBvcGVuKGZpbGVuYW1lLCBtb2RlKQogICAgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUgZmlsZW5hbWUgYW5kIG1vZGUgaW4uIEhvd2V2ZXIsIGl0IHNob3VsZCBiZQogICAgcmVtZW1iZXJlZCB0aGF0IFN0cmVhbUhhbmRsZXIgZG9lcyBub3QgY2xvc2UgaXRzIHN0cmVhbSAoc2luY2UgaXQgbWF5IGJlCiAgICB1c2luZyBzeXMuc3Rkb3V0IG9yIHN5cy5zdGRlcnIpLCB3aGVyZWFzIEZpbGVIYW5kbGVyIGNsb3NlcyBpdHMgc3RyZWFtCiAgICB3aGVuIHRoZSBoYW5kbGVyIGlzIGNsb3NlZC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuOAogICAgICAgQWRkZWQgdGhlIGBgZm9yY2VgYCBwYXJhbWV0ZXIuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHRoZSBgYHN0eWxlYGAgcGFyYW1ldGVyLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCB0aGUgYGBoYW5kbGVyc2BgIHBhcmFtZXRlci4gQSBgYFZhbHVlRXJyb3JgYCBpcyBub3cgdGhyb3duIGZvcgogICAgICAgaW5jb21wYXRpYmxlIGFyZ3VtZW50cyAoZS5nLiBgYGhhbmRsZXJzYGAgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGgKICAgICAgIGBgZmlsZW5hbWVgYC9gYGZpbGVtb2RlYGAsIG9yIGBgZmlsZW5hbWVgYC9gYGZpbGVtb2RlYGAgc3BlY2lmaWVkCiAgICAgICB0b2dldGhlciB3aXRoIGBgc3RyZWFtYGAsIG9yIGBgaGFuZGxlcnNgYCBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aAogICAgICAgYGBzdHJlYW1gYC4KICAgINoFZm9yY2VGTnIBAAAAcvMAAAByFAEAAHJuAAAAejgnc3RyZWFtJyBhbmQgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCB0b2dldGhlcnpHJ3N0cmVhbScgb3IgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoICdoYW5kbGVycyfaCGZpbGVtb2RlchoBAAByxgAAAHLHAAAAcr4AAABywAAAAHLBAAAAcqUAAAByXwAAAHI1AAAAegIsIHocVW5yZWNvZ25pc2VkIGFyZ3VtZW50KHMpOiAlcykTcjkAAAByOgAAANoDcG9wci8BAABy8wAAAHJqAQAActYAAAByZAAAAHJJAAAAcgoAAAByEwAAAHLCAAAAcsMAAAByxAAAAHIDAAAAcvkAAAByBQEAAHJpAQAAcgEBAAApDXKEAAAAcnYBAADaAWhy8wAAAHJuAAAAch4BAAByFAEAAFoDZGZzcscAAABaAmZzcpkAAAByNQAAAHLEAAAAcjcAAAByNwAAAHI4AAAAchcAAAB0BwAAc1IAAAAAOwYBBAEMAQQBEgEKAQoBEAEMAQgBEAEKAxABCAIIAQwBDAEEAQwCDAEIAQYBDAEMAQoBCAEG/wgCFAEMAQgBDAEKAQ4BDAEKAQoBBgEOARACYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMYAAAAfAByEHQAagGgAnwAoQFTAHQDUwBkAVMAKQJ6ggogICAgUmV0dXJuIGEgbG9nZ2VyIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuCgogICAgSWYgbm8gbmFtZSBpcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgcm9vdCBsb2dnZXIuCiAgICBOKQRyDwAAAHI3AQAAciAAAAByLwEAACkBcmIAAAByNwAAAHI3AAAAcjgAAAByIAAAAOIHAABzBgAAAAAGBAEMAmMBAAAAAAAAAAAAAAADAAAAAwAAAE8AAABzKgAAAHQAdAFqAoMBZAFrAnIUdAODAAEAdAFqBHwAZgF8AZ4CfAKOAQEAZAJTACkDerIKICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnQ1JJVElDQUwnIG9uIHRoZSByb290IGxvZ2dlci4gSWYgdGhlIGxvZ2dlcgogICAgaGFzIG5vIGhhbmRsZXJzLCBjYWxsIGJhc2ljQ29uZmlnKCkgdG8gYWRkIGEgY29uc29sZSBoYW5kbGVyIHdpdGggYQogICAgcHJlLWRlZmluZWQgZm9ybWF0LgogICAgcgEAAABOKQVyZAAAAHIvAQAAcvMAAAByFwAAAHIZAAAAqQNyYwAAAHJoAAAAcoQAAAByNwAAAHI3AAAAcjgAAAByGQAAAO0HAABzBgAAAAAGDgEGAWMBAAAAAAAAAAAAAAADAAAAAwAAAE8AAABzKgAAAHQAdAFqAoMBZAFrAnIUdAODAAEAdAFqBHwAZgF8AZ4CfAKOAQEAZAJTACkDeq8KICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnRVJST1InIG9uIHRoZSByb290IGxvZ2dlci4gSWYgdGhlIGxvZ2dlciBoYXMKICAgIG5vIGhhbmRsZXJzLCBjYWxsIGJhc2ljQ29uZmlnKCkgdG8gYWRkIGEgY29uc29sZSBoYW5kbGVyIHdpdGggYSBwcmUtZGVmaW5lZAogICAgZm9ybWF0LgogICAgcgEAAABOKQVyZAAAAHIvAQAAcvMAAAByFwAAAHIcAAAAcnoBAAByNwAAAHI3AAAAcjgAAAByHAAAAPkHAABzBgAAAAAGDgEGAXJQAQAAYwEAAAAAAAAAAQAAAAQAAAAEAAAATwAAAHMcAAAAdAB8AGYBfAKeAmQBfAFpAXwDlwKOAQEAZAJTACkDetAKICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnRVJST1InIG9uIHRoZSByb290IGxvZ2dlciwgd2l0aCBleGNlcHRpb24KICAgIGluZm9ybWF0aW9uLiBJZiB0aGUgbG9nZ2VyIGhhcyBubyBoYW5kbGVycywgYmFzaWNDb25maWcoKSBpcyBjYWxsZWQgdG8gYWRkCiAgICBhIGNvbnNvbGUgaGFuZGxlciB3aXRoIGEgcHJlLWRlZmluZWQgZm9ybWF0LgogICAgckIAAABOclEBAAApBHJjAAAAckIAAAByaAAAAHKEAAAAcjcAAAByNwAAAHI4AAAAch0AAAADCAAAcwIAAAAABmMBAAAAAAAAAAAAAAADAAAAAwAAAE8AAABzKgAAAHQAdAFqAoMBZAFrAnIUdAODAAEAdAFqBHwAZgF8AZ4CfAKOAQEAZAJTACkDerEKICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnV0FSTklORycgb24gdGhlIHJvb3QgbG9nZ2VyLiBJZiB0aGUgbG9nZ2VyIGhhcwogICAgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkCiAgICBmb3JtYXQuCiAgICByAQAAAE4pBXJkAAAAci8BAABy8wAAAHIXAAAAcigAAAByegEAAHI3AAAAcjcAAAByOAAAAHIoAAAACwgAAHMGAAAAAAYOAQYBYwEAAAAAAAAAAAAAAAMAAAAFAAAATwAAAHMiAAAAdACgAWQBdAJkAqEDAQB0A3wAZgF8AZ4CfAKOAQEAZABTACkDTno4VGhlICd3YXJuJyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ3dhcm5pbmcnIGluc3RlYWRyQAAAAHJNAQAAcnoBAAByNwAAAHI3AAAAcjgAAAByJwAAABUIAABzCgAAAAABBgECAAL/BAJjAQAAAAAAAAAAAAAAAwAAAAMAAABPAAAAcyoAAAB0AHQBagKDAWQBawJyFHQDgwABAHQBagR8AGYBfAGeAnwCjgEBAGQCUwApA3quCiAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0lORk8nIG9uIHRoZSByb290IGxvZ2dlci4gSWYgdGhlIGxvZ2dlciBoYXMKICAgIG5vIGhhbmRsZXJzLCBjYWxsIGJhc2ljQ29uZmlnKCkgdG8gYWRkIGEgY29uc29sZSBoYW5kbGVyIHdpdGggYSBwcmUtZGVmaW5lZAogICAgZm9ybWF0LgogICAgcgEAAABOKQVyZAAAAHIvAQAAcvMAAAByFwAAAHIiAAAAcnoBAAByNwAAAHI3AAAAcjgAAAByIgAAABoIAABzBgAAAAAGDgEGAWMBAAAAAAAAAAAAAAADAAAAAwAAAE8AAABzKgAAAHQAdAFqAoMBZAFrAnIUdAODAAEAdAFqBHwAZgF8AZ4CfAKOAQEAZAJTACkDeq8KICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnREVCVUcnIG9uIHRoZSByb290IGxvZ2dlci4gSWYgdGhlIGxvZ2dlciBoYXMKICAgIG5vIGhhbmRsZXJzLCBjYWxsIGJhc2ljQ29uZmlnKCkgdG8gYWRkIGEgY29uc29sZSBoYW5kbGVyIHdpdGggYSBwcmUtZGVmaW5lZAogICAgZm9ybWF0LgogICAgcgEAAABOKQVyZAAAAHIvAQAAcvMAAAByFwAAAHIaAAAAcnoBAAByNwAAAHI3AAAAcjgAAAByGgAAACQIAABzBgAAAAAGDgEGAWMCAAAAAAAAAAAAAAAEAAAAAwAAAE8AAABzLAAAAHQAdAFqAoMBZAFrAnIUdAODAAEAdAFqBHwAfAFmAnwCngJ8A44BAQBkAlMAKQN6vgogICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHRoZSBpbnRlZ2VyIHNldmVyaXR5ICdsZXZlbCcgb24gdGhlIHJvb3QgbG9nZ2VyLiBJZgogICAgdGhlIGxvZ2dlciBoYXMgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIKICAgIHdpdGggYSBwcmUtZGVmaW5lZCBmb3JtYXQuCiAgICByAQAAAE4pBXJkAAAAci8BAABy8wAAAHIXAAAAciMAAAApBHI1AAAAcmMAAAByaAAAAHKEAAAAcjcAAAByNwAAAHI4AAAAciMAAAAuCAAAcwYAAAAABg4BBgFjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcxYAAAB8AHQAagFfAnQAagGgA6EAAQBkAVMAKQJ6QgogICAgRGlzYWJsZSBhbGwgbG9nZ2luZyBjYWxscyBvZiBzZXZlcml0eSAnbGV2ZWwnIGFuZCBiZWxvdy4KICAgIE4pBHIvAQAAcjcBAAByGwAAAHJFAQAAKQFyNQAAAHI3AAAAcjcAAAByOAAAAHIbAAAAOAgAAHMEAAAAAAQIAWMBAAAAAAAAAAAAAAADAAAACgAAAEMAAABzggAAAHQAfABkAWQBhQIZAIMBRABdbH0BelR8AYMAfQJ8AnJmejp6HHwCoAKhAAEAfAKgA6EAAQB8AqAEoQABAFcAbhgEAHQFdAZmAmsKclYBAAEAAQBZAG4CWABXADUAfAKgAaEAAQBYAFcAcRABAAEAAQB0B3J2ggBZAHEQWABxEGQBUwApAnqDCiAgICBQZXJmb3JtIGFueSBjbGVhbnVwIGFjdGlvbnMgaW4gdGhlIGxvZ2dpbmcgc3lzdGVtIChlLmcuIGZsdXNoaW5nCiAgICBidWZmZXJzKS4KCiAgICBTaG91bGQgYmUgY2FsbGVkIGF0IGFwcGxpY2F0aW9uIGV4aXQuCiAgICBOKQjaCHJldmVyc2Vkck8AAAByTgAAAHIGAQAActYAAAByDgEAAHJJAAAAciwAAAApA1oLaGFuZGxlckxpc3Ry8gAAAHJ5AQAAcjcAAAByNwAAAHI4AAAAciYAAAA/CAAAcxwAAAAABxQDAgEGAQQBBAEIAQgBDAESBQoCDgEGAQQBYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMoAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhTACkJchIAAABh2QEAAAogICAgVGhpcyBoYW5kbGVyIGRvZXMgbm90aGluZy4gSXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGF2b2lkIHRoZQogICAgIk5vIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgWFhYIiBvbmUtb2ZmIHdhcm5pbmcuIFRoaXMgaXMKICAgIGltcG9ydGFudCBmb3IgbGlicmFyeSBjb2RlLCB3aGljaCBtYXkgY29udGFpbiBjb2RlIHRvIGxvZyBldmVudHMuIElmIGEgdXNlcgogICAgb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgY29uZmlndXJlIGxvZ2dpbmcsIHRoZSBvbmUtb2ZmIHdhcm5pbmcgbWlnaHQgYmUKICAgIHByb2R1Y2VkOyB0byBhdm9pZCB0aGlzLCB0aGUgbGlicmFyeSBkZXZlbG9wZXIgc2ltcGx5IG5lZWRzIHRvIGluc3RhbnRpYXRlCiAgICBhIE51bGxIYW5kbGVyIGFuZCBhZGQgaXQgdG8gdGhlIHRvcC1sZXZlbCBsb2dnZXIgb2YgdGhlIGxpYnJhcnkgbW9kdWxlIG9yCiAgICBwYWNrYWdlLgogICAgYwIAAAAAAAAAAAAAAAIAAAABAAAAQwAAAHMEAAAAZAFTAKkCegVTdHViLk5yNwAAAHKgAAAAcjcAAAByNwAAAHI4AAAAcgQBAABtCAAAcwIAAAAAAXoSTnVsbEhhbmRsZXIuaGFuZGxlYwIAAAAAAAAAAAAAAAIAAAABAAAAQwAAAHMEAAAAZAFTAHJ8AQAAcjcAAAByoAAAAHI3AAAAcjcAAAByOAAAAHIDAQAAcAgAAHMCAAAAAAF6EE51bGxIYW5kbGVyLmVtaXRjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwoAAABkAHwAXwBkAFMAclEAAAApAXIAAQAAcocAAAByNwAAAHI3AAAAcjgAAAByWQAAAHMIAABzAgAAAAABehZOdWxsSGFuZGxlci5jcmVhdGVMb2NrTikHcooAAAByiwAAAHKMAAAAco0AAAByBAEAAHIDAQAAclkAAAByNwAAAHI3AAAAcjcAAAByOAAAAHISAAAAYwgAAHMIAAAACAEECQgDCANjBgAAAAAAAAAAAAAACAAAAAcAAABDAAAAc2AAAAB8BGQBawlyJHQAZAFrCXJcdAB8AHwBfAJ8A3wEfAWDBgEAbjh0AaACfAB8AXwCfAN8BaEFfQZ0A2QCgwF9B3wHagRzUHwHoAV0BoMAoQEBAHwHoAdkA3wGoQIBAGQBUwApBGGIAQAACiAgICBJbXBsZW1lbnRhdGlvbiBvZiBzaG93d2FybmluZ3Mgd2hpY2ggcmVkaXJlY3RzIHRvIGxvZ2dpbmcsIHdoaWNoIHdpbGwgZmlyc3QKICAgIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZSBwYXJhbWV0ZXIgaXMgTm9uZS4gSWYgYSBmaWxlIGlzIHNwZWNpZmllZCwgaXQgd2lsbAogICAgZGVsZWdhdGUgdG8gdGhlIG9yaWdpbmFsIHdhcm5pbmdzIGltcGxlbWVudGF0aW9uIG9mIHNob3d3YXJuaW5nLiBPdGhlcndpc2UsCiAgICBpdCB3aWxsIGNhbGwgd2FybmluZ3MuZm9ybWF0d2FybmluZyBhbmQgd2lsbCBsb2cgdGhlIHJlc3VsdGluZyBzdHJpbmcgdG8gYQogICAgd2FybmluZ3MgbG9nZ2VyIG5hbWVkICJweS53YXJuaW5ncyIgd2l0aCBsZXZlbCBsb2dnaW5nLldBUk5JTkcuCiAgICBOegtweS53YXJuaW5nc3oCJXMpCNoVX3dhcm5pbmdzX3Nob3d3YXJuaW5nck4BAADaDWZvcm1hdHdhcm5pbmdyIAAAAHLzAAAAcmkBAAByEgAAAHIoAAAAKQhy3AAAANoIY2F0ZWdvcnlybgAAAHJ0AAAAclgAAADaBGxpbmVyzAAAAHJEAQAAcjcAAAByNwAAAHI4AAAA2gxfc2hvd3dhcm5pbmd6CAAAcxAAAAAACAgBCAEUAhIBCAEGAQwBcoEBAABjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAczAAAAB8AHIadABkAWsIcix0AWoCYQB0A3QBXwJuEnQAZAFrCXIsdAB0AV8CZAFhAGQBUwApAnq/CiAgICBJZiBjYXB0dXJlIGlzIHRydWUsIHJlZGlyZWN0IGFsbCB3YXJuaW5ncyB0byB0aGUgbG9nZ2luZyBwYWNrYWdlLgogICAgSWYgY2FwdHVyZSBpcyBGYWxzZSwgZW5zdXJlIHRoYXQgd2FybmluZ3MgYXJlIG5vdCByZWRpcmVjdGVkIHRvIGxvZ2dpbmcKICAgIGJ1dCB0byB0aGVpciBvcmlnaW5hbCBkZXN0aW5hdGlvbnMuCiAgICBOKQRyfQEAAHJOAQAA2gtzaG93d2FybmluZ3KBAQAAKQFaB2NhcHR1cmVyNwAAAHI3AAAAcjgAAAByGAAAAIwIAABzDgAAAAAHBAEIAQYBCAIIAQYBKQFOKQJOTilvco0AAAByPQAAAHJrAAAAcmEAAABy0QAAAHKnAAAActMAAAByTgEAAHL1AAAAWg9jb2xsZWN0aW9ucy5hYmNyZQAAANoGc3RyaW5ncgIAAAByAwAAAFoMU3RyRm9ybWF0dGVy2gdfX2FsbF9fcnkAAADaCl9fYXV0aG9yX19aCl9fc3RhdHVzX1/aC19fdmVyc2lvbl9fWghfX2RhdGVfX3J3AAAAciwAAAByeAAAAHJ8AAAAcn4AAAByBgAAAHIJAAAAcggAAAByFQAAAHIUAAAAcg0AAAByBwAAAHIRAAAAcjIAAAByNAAAAHIfAAAAchYAAAByfwAAAHJFAAAAcmwAAAByVgEAANoIX19jb2RlX19yCgEAAHJXAQAAckwAAABy/wAAAHJNAAAAcjkAAAByOgAAAHJUAAAAWgdXZWFrU2V0clUAAAByXgAAAHJQAAAA2gZvYmplY3RyDgAAAHKPAAAAcioAAAByKQAAAHIkAAAAcq0AAABylQAAAHKqAAAAcrUAAAByBAAAAHLCAAAAcuAAAAByBQAAAHILAAAAcukAAABaE1dlYWtWYWx1ZURpY3Rpb25hcnly/QAAAHLxAAAAcvQAAABy9wAAAHIMAAAAchMAAAByCgAAAHIkAQAAWhJfZGVmYXVsdExhc3RSZXNvcnRyKwAAAHIlAQAAciUAAAByIQAAAHIuAQAAcg8AAABycwEAAHIsAQAAchAAAAByLwEAAHI3AQAAchcAAAByIAAAAHIZAAAAch4AAAByHAAAAHIdAAAAcigAAAByJwAAAHIiAAAAchoAAAByIwAAAHIbAAAAciYAAADaBmF0ZXhpdNoIcmVnaXN0ZXJyEgAAAHJ9AQAAcoEBAAByGAAAAHI3AAAAcjcAAAByNwAAAHI4AAAA2gg8bW9kdWxlPhEAAABzTgEAAAQJSAIMAQwDCgECAAIAAgACAAIAAgECAAIAAgACAAIBAgACAAIAAgACAQIAAgACAAIAAgECAAIAAgACAAIBAgACAAIAAgACAQIAAgACAAIBAgAC+AQKCAIEAQQCBAEECQgGBAUEBQQFBA0EAQQBBAEEAQQBBAEEAQQDAgACAQIAAgECAAIBAgACAQIAAgECAAL6BAkCAQIBAgECAQIBAgECAQL4BgsIGwgNDAEKAggTEAwIFwgCCAkICgwBCggIAggHCAwGAQIBAv4GCRBnBAIICggHCA8GAQIDEBwQHhAfBAMGAQYBBv0GBhB/ADEGAhAqECUQNAgBBAIIEQgKEH8APhBTEEUQEQgBBAYQFwgNCAYQfwACEH8AfwBkEA8EAhB/AA0IAQYBDAYIbgoLCAoEAggKDggICggFCAoICggKDAcMHwgBCgQQFQQCChI=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
config.cpython-38.opt-1.pyc
22.65 KB
lrw-r--r--
2024-09-23 11:26:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.opt-2.pyc
18.64 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-38.pyc
22.69 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-1.pyc
42.20 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.opt-2.pyc
23.93 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-38.pyc
42.20 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
63.73 KB
lrw-r--r--
2024-09-23 11:26:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-2.pyc
35.75 KB
lrw-r--r--
2024-09-23 11:26:27
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
63.76 KB
lrw-r--r--
2024-09-23 11:26:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).