REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 33.29 KB
Close
/proc/thread-self/root/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/ext/__pycache__/mutable.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdQHwAAOMAAAAAAAAAAAAAAAAFAAAAQAAAAHPkAAAAZABaAGQBZAJsAVoBZANkBGwCbQNaAwEAZANkBWwCbQRaBAEAZANkBmwFbQZaBgEAZANkB2wFbQdaBwEAZANkCGwFbQhaCAEAZANkCWwJbQpaCgEAZANkCmwLbQxaDAEAZANkC2wNbQ5aDgEARwBkDGQNhABkDWUPgwNaEEcAZA5kD4QAZA9lEIMDWhFHAGQQZBGEAGQRZRCDA1oSZBJkE4QAWhNlE4MAAQBHAGQUZBWEAGQVZRFlFIMEWhVHAGQWZBeEAGQXZRFlFoMEWhdHAGQYZBmEAGQZZRFlGIMEWhlkAlMAKRphKjIAAFByb3ZpZGUgc3VwcG9ydCBmb3IgdHJhY2tpbmcgb2YgaW4tcGxhY2UgY2hhbmdlcyB0byBzY2FsYXIgdmFsdWVzLAp3aGljaCBhcmUgcHJvcGFnYXRlZCBpbnRvIE9STSBjaGFuZ2UgZXZlbnRzIG9uIG93bmluZyBwYXJlbnQgb2JqZWN0cy4KCi4uIF9tdXRhYmxlX3NjYWxhcnM6CgpFc3RhYmxpc2hpbmcgTXV0YWJpbGl0eSBvbiBTY2FsYXIgQ29sdW1uIFZhbHVlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQSB0eXBpY2FsIGV4YW1wbGUgb2YgYSAibXV0YWJsZSIgc3RydWN0dXJlIGlzIGEgUHl0aG9uIGRpY3Rpb25hcnkuCkZvbGxvd2luZyB0aGUgZXhhbXBsZSBpbnRyb2R1Y2VkIGluIDpyZWY6YHR5cGVzX3RvcGxldmVsYCwgd2UKYmVnaW4gd2l0aCBhIGN1c3RvbSB0eXBlIHRoYXQgbWFyc2hhbHMgUHl0aG9uIGRpY3Rpb25hcmllcyBpbnRvCkpTT04gc3RyaW5ncyBiZWZvcmUgYmVpbmcgcGVyc2lzdGVkOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkudHlwZXMgaW1wb3J0IFR5cGVEZWNvcmF0b3IsIFZBUkNIQVIKICAgIGltcG9ydCBqc29uCgogICAgY2xhc3MgSlNPTkVuY29kZWREaWN0KFR5cGVEZWNvcmF0b3IpOgogICAgICAgICJSZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzdHJ1Y3R1cmUgYXMgYSBqc29uLWVuY29kZWQgc3RyaW5nLiIKCiAgICAgICAgaW1wbCA9IFZBUkNIQVIKCiAgICAgICAgZGVmIHByb2Nlc3NfYmluZF9wYXJhbShzZWxmLCB2YWx1ZSwgZGlhbGVjdCk6CiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgdmFsdWUgPSBqc29uLmR1bXBzKHZhbHVlKQogICAgICAgICAgICByZXR1cm4gdmFsdWUKCiAgICAgICAgZGVmIHByb2Nlc3NfcmVzdWx0X3ZhbHVlKHNlbGYsIHZhbHVlLCBkaWFsZWN0KToKICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzb24ubG9hZHModmFsdWUpCiAgICAgICAgICAgIHJldHVybiB2YWx1ZQoKVGhlIHVzYWdlIG9mIGBganNvbmBgIGlzIG9ubHkgZm9yIHRoZSBwdXJwb3NlcyBvZiBleGFtcGxlLiBUaGUKOm1vZDpgc3FsYWxjaGVteS5leHQubXV0YWJsZWAgZXh0ZW5zaW9uIGNhbiBiZSB1c2VkCndpdGggYW55IHR5cGUgd2hvc2UgdGFyZ2V0IFB5dGhvbiB0eXBlIG1heSBiZSBtdXRhYmxlLCBpbmNsdWRpbmcKOmNsYXNzOmAuUGlja2xlVHlwZWAsIDpjbGFzczpgLnBvc3RncmVzcWwuQVJSQVlgLCBldGMuCgpXaGVuIHVzaW5nIHRoZSA6bW9kOmBzcWxhbGNoZW15LmV4dC5tdXRhYmxlYCBleHRlbnNpb24sIHRoZSB2YWx1ZSBpdHNlbGYKdHJhY2tzIGFsbCBwYXJlbnRzIHdoaWNoIHJlZmVyZW5jZSBpdC4gIEJlbG93LCB3ZSBpbGx1c3RyYXRlIGEgc2ltcGxlCnZlcnNpb24gb2YgdGhlIDpjbGFzczpgLk11dGFibGVEaWN0YCBkaWN0aW9uYXJ5IG9iamVjdCwgd2hpY2ggYXBwbGllcwp0aGUgOmNsYXNzOmAuTXV0YWJsZWAgbWl4aW4gdG8gYSBwbGFpbiBQeXRob24gZGljdGlvbmFyeTo6CgogICAgZnJvbSBzcWxhbGNoZW15LmV4dC5tdXRhYmxlIGltcG9ydCBNdXRhYmxlCgogICAgY2xhc3MgTXV0YWJsZURpY3QoTXV0YWJsZSwgZGljdCk6CiAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgZGVmIGNvZXJjZShjbHMsIGtleSwgdmFsdWUpOgogICAgICAgICAgICAiQ29udmVydCBwbGFpbiBkaWN0aW9uYXJpZXMgdG8gTXV0YWJsZURpY3QuIgoKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIE11dGFibGVEaWN0KToKICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBNdXRhYmxlRGljdCh2YWx1ZSkKCiAgICAgICAgICAgICAgICAjIHRoaXMgY2FsbCB3aWxsIHJhaXNlIFZhbHVlRXJyb3IKICAgICAgICAgICAgICAgIHJldHVybiBNdXRhYmxlLmNvZXJjZShrZXksIHZhbHVlKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCgogICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgICAgIkRldGVjdCBkaWN0aW9uYXJ5IHNldCBldmVudHMgYW5kIGVtaXQgY2hhbmdlIGV2ZW50cy4iCgogICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCiAgICAgICAgICAgIHNlbGYuY2hhbmdlZCgpCgogICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAiRGV0ZWN0IGRpY3Rpb25hcnkgZGVsIGV2ZW50cyBhbmQgZW1pdCBjaGFuZ2UgZXZlbnRzLiIKCiAgICAgICAgICAgIGRpY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KQogICAgICAgICAgICBzZWxmLmNoYW5nZWQoKQoKVGhlIGFib3ZlIGRpY3Rpb25hcnkgY2xhc3MgdGFrZXMgdGhlIGFwcHJvYWNoIG9mIHN1YmNsYXNzaW5nIHRoZSBQeXRob24KYnVpbHQtaW4gYGBkaWN0YGAgdG8gcHJvZHVjZSBhIGRpY3QKc3ViY2xhc3Mgd2hpY2ggcm91dGVzIGFsbCBtdXRhdGlvbiBldmVudHMgdGhyb3VnaCBgYF9fc2V0aXRlbV9fYGAuICBUaGVyZSBhcmUKdmFyaWFudHMgb24gdGhpcyBhcHByb2FjaCwgc3VjaCBhcyBzdWJjbGFzc2luZyBgYFVzZXJEaWN0LlVzZXJEaWN0YGAgb3IKYGBjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZ2BgOyB0aGUgcGFydCB0aGF0J3MgaW1wb3J0YW50IHRvIHRoaXMgZXhhbXBsZSBpcwp0aGF0IHRoZSA6bWV0aDpgLk11dGFibGUuY2hhbmdlZGAgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBpbi1wbGFjZQpjaGFuZ2UgdG8gdGhlIGRhdGFzdHJ1Y3R1cmUgdGFrZXMgcGxhY2UuCgpXZSBhbHNvIHJlZGVmaW5lIHRoZSA6bWV0aDpgLk11dGFibGUuY29lcmNlYCBtZXRob2Qgd2hpY2ggd2lsbCBiZSB1c2VkIHRvCmNvbnZlcnQgYW55IHZhbHVlcyB0aGF0IGFyZSBub3QgaW5zdGFuY2VzIG9mIGBgTXV0YWJsZURpY3RgYCwgc3VjaAphcyB0aGUgcGxhaW4gZGljdGlvbmFyaWVzIHJldHVybmVkIGJ5IHRoZSBgYGpzb25gYCBtb2R1bGUsIGludG8gdGhlCmFwcHJvcHJpYXRlIHR5cGUuICBEZWZpbmluZyB0aGlzIG1ldGhvZCBpcyBvcHRpb25hbDsgd2UgY291bGQganVzdCBhcyB3ZWxsCmNyZWF0ZWQgb3VyIGBgSlNPTkVuY29kZWREaWN0YGAgc3VjaCB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIGFuIGluc3RhbmNlCm9mIGBgTXV0YWJsZURpY3RgYCwgYW5kIGFkZGl0aW9uYWxseSBlbnN1cmVkIHRoYXQgYWxsIGNhbGxpbmcgY29kZQp1c2VzIGBgTXV0YWJsZURpY3RgYCBleHBsaWNpdGx5LiAgV2hlbiA6bWV0aDpgLk11dGFibGUuY29lcmNlYCBpcyBub3QKb3ZlcnJpZGRlbiwgYW55IHZhbHVlcyBhcHBsaWVkIHRvIGEgcGFyZW50IG9iamVjdCB3aGljaCBhcmUgbm90IGluc3RhbmNlcwpvZiB0aGUgbXV0YWJsZSB0eXBlIHdpbGwgcmFpc2UgYSBgYFZhbHVlRXJyb3JgYC4KCk91ciBuZXcgYGBNdXRhYmxlRGljdGBgIHR5cGUgb2ZmZXJzIGEgY2xhc3MgbWV0aG9kCjptZXRoOmB+Lk11dGFibGUuYXNfbXV0YWJsZWAgd2hpY2ggd2UgY2FuIHVzZSB3aXRoaW4gY29sdW1uIG1ldGFkYXRhCnRvIGFzc29jaWF0ZSB3aXRoIHR5cGVzLiBUaGlzIG1ldGhvZCBncmFicyB0aGUgZ2l2ZW4gdHlwZSBvYmplY3Qgb3IKY2xhc3MgYW5kIGFzc29jaWF0ZXMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgZGV0ZWN0IGFsbCBmdXR1cmUgbWFwcGluZ3MKb2YgdGhpcyB0eXBlLCBhcHBseWluZyBldmVudCBsaXN0ZW5pbmcgaW5zdHJ1bWVudGF0aW9uIHRvIHRoZSBtYXBwZWQKYXR0cmlidXRlLiBTdWNoIGFzLCB3aXRoIGNsYXNzaWNhbCB0YWJsZSBtZXRhZGF0YTo6CgogICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBUYWJsZSwgQ29sdW1uLCBJbnRlZ2VyCgogICAgbXlfZGF0YSA9IFRhYmxlKCdteV9kYXRhJywgbWV0YWRhdGEsCiAgICAgICAgQ29sdW1uKCdpZCcsIEludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgIENvbHVtbignZGF0YScsIE11dGFibGVEaWN0LmFzX211dGFibGUoSlNPTkVuY29kZWREaWN0KSkKICAgICkKCkFib3ZlLCA6bWV0aDpgfi5NdXRhYmxlLmFzX211dGFibGVgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYGBKU09ORW5jb2RlZERpY3RgYAooaWYgdGhlIHR5cGUgb2JqZWN0IHdhcyBub3QgYW4gaW5zdGFuY2UgYWxyZWFkeSksIHdoaWNoIHdpbGwgaW50ZXJjZXB0IGFueQphdHRyaWJ1dGVzIHdoaWNoIGFyZSBtYXBwZWQgYWdhaW5zdCB0aGlzIHR5cGUuICBCZWxvdyB3ZSBlc3RhYmxpc2ggYSBzaW1wbGUKbWFwcGluZyBhZ2FpbnN0IHRoZSBgYG15X2RhdGFgYCB0YWJsZTo6CgogICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBtYXBwZXIKCiAgICBjbGFzcyBNeURhdGFDbGFzcyhvYmplY3QpOgogICAgICAgIHBhc3MKCiAgICAjIGFzc29jaWF0ZXMgbXV0YXRpb24gbGlzdGVuZXJzIHdpdGggTXlEYXRhQ2xhc3MuZGF0YQogICAgbWFwcGVyKE15RGF0YUNsYXNzLCBteV9kYXRhKQoKVGhlIGBgTXlEYXRhQ2xhc3MuZGF0YWBgIG1lbWJlciB3aWxsIG5vdyBiZSBub3RpZmllZCBvZiBpbiBwbGFjZSBjaGFuZ2VzCnRvIGl0cyB2YWx1ZS4KClRoZXJlJ3Mgbm8gZGlmZmVyZW5jZSBpbiB1c2FnZSB3aGVuIHVzaW5nIGRlY2xhcmF0aXZlOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlIGltcG9ydCBkZWNsYXJhdGl2ZV9iYXNlCgogICAgQmFzZSA9IGRlY2xhcmF0aXZlX2Jhc2UoKQoKICAgIGNsYXNzIE15RGF0YUNsYXNzKEJhc2UpOgogICAgICAgIF9fdGFibGVuYW1lX18gPSAnbXlfZGF0YScKICAgICAgICBpZCA9IENvbHVtbihJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQogICAgICAgIGRhdGEgPSBDb2x1bW4oTXV0YWJsZURpY3QuYXNfbXV0YWJsZShKU09ORW5jb2RlZERpY3QpKQoKQW55IGluLXBsYWNlIGNoYW5nZXMgdG8gdGhlIGBgTXlEYXRhQ2xhc3MuZGF0YWBgIG1lbWJlcgp3aWxsIGZsYWcgdGhlIGF0dHJpYnV0ZSBhcyAiZGlydHkiIG9uIHRoZSBwYXJlbnQgb2JqZWN0OjoKCiAgICA+Pj4gZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgU2Vzc2lvbgoKICAgID4+PiBzZXNzID0gU2Vzc2lvbigpCiAgICA+Pj4gbTEgPSBNeURhdGFDbGFzcyhkYXRhPXsndmFsdWUxJzonZm9vJ30pCiAgICA+Pj4gc2Vzcy5hZGQobTEpCiAgICA+Pj4gc2Vzcy5jb21taXQoKQoKICAgID4+PiBtMS5kYXRhWyd2YWx1ZTEnXSA9ICdiYXInCiAgICA+Pj4gYXNzZXJ0IG0xIGluIHNlc3MuZGlydHkKICAgIFRydWUKClRoZSBgYE11dGFibGVEaWN0YGAgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhbGwgZnV0dXJlIGluc3RhbmNlcwpvZiBgYEpTT05FbmNvZGVkRGljdGBgIGluIG9uZSBzdGVwLCB1c2luZwo6bWV0aDpgfi5NdXRhYmxlLmFzc29jaWF0ZV93aXRoYC4gIFRoaXMgaXMgc2ltaWxhciB0bwo6bWV0aDpgfi5NdXRhYmxlLmFzX211dGFibGVgIGV4Y2VwdCBpdCB3aWxsIGludGVyY2VwdCBhbGwgb2NjdXJyZW5jZXMKb2YgYGBNdXRhYmxlRGljdGBgIGluIGFsbCBtYXBwaW5ncyB1bmNvbmRpdGlvbmFsbHksIHdpdGhvdXQKdGhlIG5lZWQgdG8gZGVjbGFyZSBpdCBpbmRpdmlkdWFsbHk6OgoKICAgIE11dGFibGVEaWN0LmFzc29jaWF0ZV93aXRoKEpTT05FbmNvZGVkRGljdCkKCiAgICBjbGFzcyBNeURhdGFDbGFzcyhCYXNlKToKICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ215X2RhdGEnCiAgICAgICAgaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgICAgICBkYXRhID0gQ29sdW1uKEpTT05FbmNvZGVkRGljdCkKCgpTdXBwb3J0aW5nIFBpY2tsaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUga2V5IHRvIHRoZSA6bW9kOmBzcWxhbGNoZW15LmV4dC5tdXRhYmxlYCBleHRlbnNpb24gcmVsaWVzIHVwb24gdGhlCnBsYWNlbWVudCBvZiBhIGBgd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeWBgIHVwb24gdGhlIHZhbHVlIG9iamVjdCwgd2hpY2gKc3RvcmVzIGEgbWFwcGluZyBvZiBwYXJlbnQgbWFwcGVkIG9iamVjdHMga2V5ZWQgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lIHVuZGVyCndoaWNoIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZhbHVlLiBgYFdlYWtLZXlEaWN0aW9uYXJ5YGAgb2JqZWN0cyBhcmUKbm90IHBpY2tsYWJsZSwgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhleSBjb250YWluIHdlYWtyZWZzIGFuZCBmdW5jdGlvbgpjYWxsYmFja3MuIEluIG91ciBjYXNlLCB0aGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgaWYgdGhpcyBkaWN0aW9uYXJ5IHdlcmUKcGlja2xhYmxlLCBpdCBjb3VsZCBsZWFkIHRvIGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHBpY2tsZSBzaXplIGZvciBvdXIgdmFsdWUKb2JqZWN0cyB0aGF0IGFyZSBwaWNrbGVkIGJ5IHRoZW1zZWx2ZXMgb3V0c2lkZSBvZiB0aGUgY29udGV4dCBvZiB0aGUgcGFyZW50LgpUaGUgZGV2ZWxvcGVyIHJlc3BvbnNpYmlsaXR5IGhlcmUgaXMgb25seSB0byBwcm92aWRlIGEgYGBfX2dldHN0YXRlX19gYCBtZXRob2QKdGhhdCBleGNsdWRlcyB0aGUgOm1ldGg6YH5NdXRhYmxlQmFzZS5fcGFyZW50c2AgY29sbGVjdGlvbiBmcm9tIHRoZSBwaWNrbGUKc3RyZWFtOjoKCiAgICBjbGFzcyBNeU11dGFibGVUeXBlKE11dGFibGUpOgogICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICAgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQogICAgICAgICAgICBkLnBvcCgnX3BhcmVudHMnLCBOb25lKQogICAgICAgICAgICByZXR1cm4gZAoKV2l0aCBvdXIgZGljdGlvbmFyeSBleGFtcGxlLCB3ZSBuZWVkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGRpY3QgaXRzZWxmCihhbmQgYWxzbyByZXN0b3JlIHRoZW0gb24gX19zZXRzdGF0ZV9fKTo6CgogICAgY2xhc3MgTXV0YWJsZURpY3QoTXV0YWJsZSwgZGljdCk6CiAgICAgICAgIyAuLi4uCgogICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICAgICAgICAgIHJldHVybiBkaWN0KHNlbGYpCgogICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICAgICBzZWxmLnVwZGF0ZShzdGF0ZSkKCkluIHRoZSBjYXNlIHRoYXQgb3VyIG11dGFibGUgdmFsdWUgb2JqZWN0IGlzIHBpY2tsZWQgYXMgaXQgaXMgYXR0YWNoZWQgdG8gb25lCm9yIG1vcmUgcGFyZW50IG9iamVjdHMgdGhhdCBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBwaWNrbGUsIHRoZSA6Y2xhc3M6YC5NdXRhYmxlYAptaXhpbiB3aWxsIHJlLWVzdGFibGlzaCB0aGUgOmF0dHI6YC5NdXRhYmxlLl9wYXJlbnRzYCBjb2xsZWN0aW9uIG9uIGVhY2ggdmFsdWUKb2JqZWN0IGFzIHRoZSBvd25pbmcgcGFyZW50cyB0aGVtc2VsdmVzIGFyZSB1bnBpY2tsZWQuCgpSZWNlaXZpbmcgRXZlbnRzCi0tLS0tLS0tLS0tLS0tLS0KClRoZSA6bWV0aDpgLkF0dHJpYnV0ZUV2ZW50cy5tb2RpZmllZGAgZXZlbnQgaGFuZGxlciBtYXkgYmUgdXNlZCB0byByZWNlaXZlCmFuIGV2ZW50IHdoZW4gYSBtdXRhYmxlIHNjYWxhciBlbWl0cyBhIGNoYW5nZSBldmVudC4gIFRoaXMgZXZlbnQgaGFuZGxlcgppcyBjYWxsZWQgd2hlbiB0aGUgOmZ1bmM6YC5hdHRyaWJ1dGVzLmZsYWdfbW9kaWZpZWRgIGZ1bmN0aW9uIGlzIGNhbGxlZApmcm9tIHdpdGhpbiB0aGUgbXV0YWJsZSBleHRlbnNpb246OgoKICAgIGZyb20gc3FsYWxjaGVteS5leHQuZGVjbGFyYXRpdmUgaW1wb3J0IGRlY2xhcmF0aXZlX2Jhc2UKICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgZXZlbnQKCiAgICBCYXNlID0gZGVjbGFyYXRpdmVfYmFzZSgpCgogICAgY2xhc3MgTXlEYXRhQ2xhc3MoQmFzZSk6CiAgICAgICAgX190YWJsZW5hbWVfXyA9ICdteV9kYXRhJwogICAgICAgIGlkID0gQ29sdW1uKEludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCiAgICAgICAgZGF0YSA9IENvbHVtbihNdXRhYmxlRGljdC5hc19tdXRhYmxlKEpTT05FbmNvZGVkRGljdCkpCgogICAgQGV2ZW50Lmxpc3RlbnNfZm9yKE15RGF0YUNsYXNzLmRhdGEsICJtb2RpZmllZCIpCiAgICBkZWYgbW9kaWZpZWRfanNvbihpbnN0YW5jZSk6CiAgICAgICAgcHJpbnQoImpzb24gdmFsdWUgbW9kaWZpZWQ6IiwgaW5zdGFuY2UuZGF0YSkKCi4uIF9tdXRhYmxlX2NvbXBvc2l0ZXM6CgpFc3RhYmxpc2hpbmcgTXV0YWJpbGl0eSBvbiBDb21wb3NpdGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBvc2l0ZXMgYXJlIGEgc3BlY2lhbCBPUk0gZmVhdHVyZSB3aGljaCBhbGxvdyBhIHNpbmdsZSBzY2FsYXIgYXR0cmlidXRlIHRvCmJlIGFzc2lnbmVkIGFuIG9iamVjdCB2YWx1ZSB3aGljaCByZXByZXNlbnRzIGluZm9ybWF0aW9uICJjb21wb3NlZCIgZnJvbSBvbmUKb3IgbW9yZSBjb2x1bW5zIGZyb20gdGhlIHVuZGVybHlpbmcgbWFwcGVkIHRhYmxlLiBUaGUgdXN1YWwgZXhhbXBsZSBpcyB0aGF0IG9mCmEgZ2VvbWV0cmljICJwb2ludCIsIGFuZCBpcyBpbnRyb2R1Y2VkIGluIDpyZWY6YG1hcHBlcl9jb21wb3NpdGVgLgoKQXMgaXMgdGhlIGNhc2Ugd2l0aCA6Y2xhc3M6YC5NdXRhYmxlYCwgdGhlIHVzZXItZGVmaW5lZCBjb21wb3NpdGUgY2xhc3MKc3ViY2xhc3NlcyA6Y2xhc3M6YC5NdXRhYmxlQ29tcG9zaXRlYCBhcyBhIG1peGluLCBhbmQgZGV0ZWN0cyBhbmQgZGVsaXZlcnMKY2hhbmdlIGV2ZW50cyB0byBpdHMgcGFyZW50cyB2aWEgdGhlIDptZXRoOmAuTXV0YWJsZUNvbXBvc2l0ZS5jaGFuZ2VkYCBtZXRob2QuCkluIHRoZSBjYXNlIG9mIGEgY29tcG9zaXRlIGNsYXNzLCB0aGUgZGV0ZWN0aW9uIGlzIHVzdWFsbHkgdmlhIHRoZSB1c2FnZSBvZgpQeXRob24gZGVzY3JpcHRvcnMgKGkuZS4gYGBAcHJvcGVydHlgYCksIG9yIGFsdGVybmF0aXZlbHkgdmlhIHRoZSBzcGVjaWFsClB5dGhvbiBtZXRob2QgYGBfX3NldGF0dHJfXygpYGAuIEJlbG93IHdlIGV4cGFuZCB1cG9uIHRoZSBgYFBvaW50YGAgY2xhc3MKaW50cm9kdWNlZCBpbiA6cmVmOmBtYXBwZXJfY29tcG9zaXRlYCB0byBzdWJjbGFzcyA6Y2xhc3M6YC5NdXRhYmxlQ29tcG9zaXRlYAphbmQgdG8gYWxzbyByb3V0ZSBhdHRyaWJ1dGUgc2V0IGV2ZW50cyB2aWEgYGBfX3NldGF0dHJfX2BgIHRvIHRoZQo6bWV0aDpgLk11dGFibGVDb21wb3NpdGUuY2hhbmdlZGAgbWV0aG9kOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkuZXh0Lm11dGFibGUgaW1wb3J0IE11dGFibGVDb21wb3NpdGUKCiAgICBjbGFzcyBQb2ludChNdXRhYmxlQ29tcG9zaXRlKToKICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgICAgIHNlbGYueCA9IHgKICAgICAgICAgICAgc2VsZi55ID0geQoKICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgICAgICJJbnRlcmNlcHQgc2V0IGV2ZW50cyIKCiAgICAgICAgICAgICMgc2V0IHRoZSBhdHRyaWJ1dGUKICAgICAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIGtleSwgdmFsdWUpCgogICAgICAgICAgICAjIGFsZXJ0IGFsbCBwYXJlbnRzIHRvIHRoZSBjaGFuZ2UKICAgICAgICAgICAgc2VsZi5jaGFuZ2VkKCkKCiAgICAgICAgZGVmIF9fY29tcG9zaXRlX3ZhbHVlc19fKHNlbGYpOgogICAgICAgICAgICByZXR1cm4gc2VsZi54LCBzZWxmLnkKCiAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBQb2ludCkgYW5kIFwKICAgICAgICAgICAgICAgIG90aGVyLnggPT0gc2VsZi54IGFuZCBcCiAgICAgICAgICAgICAgICBvdGhlci55ID09IHNlbGYueQoKICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKClRoZSA6Y2xhc3M6YC5NdXRhYmxlQ29tcG9zaXRlYCBjbGFzcyB1c2VzIGEgUHl0aG9uIG1ldGFjbGFzcyB0byBhdXRvbWF0aWNhbGx5CmVzdGFibGlzaCBsaXN0ZW5lcnMgZm9yIGFueSB1c2FnZSBvZiA6ZnVuYzpgLm9ybS5jb21wb3NpdGVgIHRoYXQgc3BlY2lmaWVzIG91cgpgYFBvaW50YGAgdHlwZS4gQmVsb3csIHdoZW4gYGBQb2ludGBgIGlzIG1hcHBlZCB0byB0aGUgYGBWZXJ0ZXhgYCBjbGFzcywKbGlzdGVuZXJzIGFyZSBlc3RhYmxpc2hlZCB3aGljaCB3aWxsIHJvdXRlIGNoYW5nZSBldmVudHMgZnJvbSBgYFBvaW50YGAKb2JqZWN0cyB0byBlYWNoIG9mIHRoZSBgYFZlcnRleC5zdGFydGBgIGFuZCBgYFZlcnRleC5lbmRgYCBhdHRyaWJ1dGVzOjoKCiAgICBmcm9tIHNxbGFsY2hlbXkub3JtIGltcG9ydCBjb21wb3NpdGUsIG1hcHBlcgogICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBUYWJsZSwgQ29sdW1uCgogICAgdmVydGljZXMgPSBUYWJsZSgndmVydGljZXMnLCBtZXRhZGF0YSwKICAgICAgICBDb2x1bW4oJ2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgQ29sdW1uKCd4MScsIEludGVnZXIpLAogICAgICAgIENvbHVtbigneTEnLCBJbnRlZ2VyKSwKICAgICAgICBDb2x1bW4oJ3gyJywgSW50ZWdlciksCiAgICAgICAgQ29sdW1uKCd5MicsIEludGVnZXIpLAogICAgICAgICkKCiAgICBjbGFzcyBWZXJ0ZXgob2JqZWN0KToKICAgICAgICBwYXNzCgogICAgbWFwcGVyKFZlcnRleCwgdmVydGljZXMsIHByb3BlcnRpZXM9ewogICAgICAgICdzdGFydCc6IGNvbXBvc2l0ZShQb2ludCwgdmVydGljZXMuYy54MSwgdmVydGljZXMuYy55MSksCiAgICAgICAgJ2VuZCc6IGNvbXBvc2l0ZShQb2ludCwgdmVydGljZXMuYy54MiwgdmVydGljZXMuYy55MikKICAgIH0pCgpBbnkgaW4tcGxhY2UgY2hhbmdlcyB0byB0aGUgYGBWZXJ0ZXguc3RhcnRgYCBvciBgYFZlcnRleC5lbmRgYCBtZW1iZXJzCndpbGwgZmxhZyB0aGUgYXR0cmlidXRlIGFzICJkaXJ0eSIgb24gdGhlIHBhcmVudCBvYmplY3Q6OgoKICAgID4+PiBmcm9tIHNxbGFsY2hlbXkub3JtIGltcG9ydCBTZXNzaW9uCgogICAgPj4+IHNlc3MgPSBTZXNzaW9uKCkKICAgID4+PiB2MSA9IFZlcnRleChzdGFydD1Qb2ludCgzLCA0KSwgZW5kPVBvaW50KDEyLCAxNSkpCiAgICA+Pj4gc2Vzcy5hZGQodjEpCiAgICA+Pj4gc2Vzcy5jb21taXQoKQoKICAgID4+PiB2MS5lbmQueCA9IDgKICAgID4+PiBhc3NlcnQgdjEgaW4gc2Vzcy5kaXJ0eQogICAgVHJ1ZQoKQ29lcmNpbmcgTXV0YWJsZSBDb21wb3NpdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIDptZXRoOmAuTXV0YWJsZUJhc2UuY29lcmNlYCBtZXRob2QgaXMgYWxzbyBzdXBwb3J0ZWQgb24gY29tcG9zaXRlIHR5cGVzLgpJbiB0aGUgY2FzZSBvZiA6Y2xhc3M6YC5NdXRhYmxlQ29tcG9zaXRlYCwgdGhlIDptZXRoOmAuTXV0YWJsZUJhc2UuY29lcmNlYAptZXRob2QgaXMgb25seSBjYWxsZWQgZm9yIGF0dHJpYnV0ZSBzZXQgb3BlcmF0aW9ucywgbm90IGxvYWQgb3BlcmF0aW9ucy4KT3ZlcnJpZGluZyB0aGUgOm1ldGg6YC5NdXRhYmxlQmFzZS5jb2VyY2VgIG1ldGhvZCBpcyBlc3NlbnRpYWxseSBlcXVpdmFsZW50CnRvIHVzaW5nIGEgOmZ1bmM6YC52YWxpZGF0ZXNgIHZhbGlkYXRpb24gcm91dGluZSBmb3IgYWxsIGF0dHJpYnV0ZXMgd2hpY2gKbWFrZSB1c2Ugb2YgdGhlIGN1c3RvbSBjb21wb3NpdGUgdHlwZTo6CgogICAgY2xhc3MgUG9pbnQoTXV0YWJsZUNvbXBvc2l0ZSk6CiAgICAgICAgIyBvdGhlciBQb2ludCBtZXRob2RzCiAgICAgICAgIyAuLi4KCiAgICAgICAgZGVmIGNvZXJjZShjbHMsIGtleSwgdmFsdWUpOgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CiAgICAgICAgICAgICAgICB2YWx1ZSA9IFBvaW50KCp2YWx1ZSkKICAgICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgUG9pbnQpOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidHVwbGUgb3IgUG9pbnQgZXhwZWN0ZWQiKQogICAgICAgICAgICByZXR1cm4gdmFsdWUKClN1cHBvcnRpbmcgUGlja2xpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFzIGlzIHRoZSBjYXNlIHdpdGggOmNsYXNzOmAuTXV0YWJsZWAsIHRoZSA6Y2xhc3M6YC5NdXRhYmxlQ29tcG9zaXRlYCBoZWxwZXIKY2xhc3MgdXNlcyBhIGBgd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeWBgIGF2YWlsYWJsZSB2aWEgdGhlCjptZXRoOmBNdXRhYmxlQmFzZS5fcGFyZW50c2AgYXR0cmlidXRlIHdoaWNoIGlzbid0IHBpY2tsYWJsZS4gSWYgd2UgbmVlZCB0bwpwaWNrbGUgaW5zdGFuY2VzIG9mIGBgUG9pbnRgYCBvciBpdHMgb3duaW5nIGNsYXNzIGBgVmVydGV4YGAsIHdlIGF0IGxlYXN0IG5lZWQKdG8gZGVmaW5lIGEgYGBfX2dldHN0YXRlX19gYCB0aGF0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgYGBfcGFyZW50c2BgIGRpY3Rpb25hcnkuCkJlbG93IHdlIGRlZmluZSBib3RoIGEgYGBfX2dldHN0YXRlX19gYCBhbmQgYSBgYF9fc2V0c3RhdGVfX2BgIHRoYXQgcGFja2FnZSB1cAp0aGUgbWluaW1hbCBmb3JtIG9mIG91ciBgYFBvaW50YGAgY2xhc3M6OgoKICAgIGNsYXNzIFBvaW50KE11dGFibGVDb21wb3NpdGUpOgogICAgICAgICMgLi4uCgogICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICAgICAgICAgIHJldHVybiBzZWxmLngsIHNlbGYueQoKICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSBzdGF0ZQoKQXMgd2l0aCA6Y2xhc3M6YC5NdXRhYmxlYCwgdGhlIDpjbGFzczpgLk11dGFibGVDb21wb3NpdGVgIGF1Z21lbnRzIHRoZQpwaWNrbGluZyBwcm9jZXNzIG9mIHRoZSBwYXJlbnQncyBvYmplY3QtcmVsYXRpb25hbCBzdGF0ZSBzbyB0aGF0IHRoZQo6bWV0aDpgTXV0YWJsZUJhc2UuX3BhcmVudHNgIGNvbGxlY3Rpb24gaXMgcmVzdG9yZWQgdG8gYWxsIGBgUG9pbnRgYCBvYmplY3RzLgoK6QAAAABO6QIAAAApAdoFZXZlbnQpAdoFdHlwZXMpAdoGTWFwcGVyKQHaBm1hcHBlcikB2g1vYmplY3RfbWFwcGVyKQHaDWZsYWdfbW9kaWZpZWQpAdoRU2NoZW1hRXZlbnRUYXJnZXQpAdoRbWVtb2l6ZWRfcHJvcGVydHljAAAAAAAAAAAAAAAAAwAAAEAAAABzQAAAAGUAWgFkAFoCZAFaA2UEZAJkA4QAgwFaBWUGZARkBYQAgwFaB2UGZAZkB4QAgwFaCGUGZAhkCYQAgwFaCWQKUwApC9oLTXV0YWJsZUJhc2V6UENvbW1vbiBiYXNlIGNsYXNzIHRvIDpjbGFzczpgLk11dGFibGVgCiAgICBhbmQgOmNsYXNzOmAuTXV0YWJsZUNvbXBvc2l0ZWAuCgogICAgYwEAAAAAAAAAAQAAAAIAAABDAAAAcwgAAAB0AKABoQBTACkBYSEBAABEaWN0aW9uYXJ5IG9mIHBhcmVudCBvYmplY3QtPmF0dHJpYnV0ZSBuYW1lIG9uIHRoZSBwYXJlbnQuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGEgc28tY2FsbGVkICJtZW1vaXplZCIgcHJvcGVydHkuICBJdCBpbml0aWFsaXplcwogICAgICAgIGl0c2VsZiB3aXRoIGEgbmV3IGBgd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeWBgIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgaXQgaXMgYWNjZXNzZWQsIHJldHVybmluZyB0aGUgc2FtZSBvYmplY3QgdXBvbiBzdWJzZXF1ZW50IGFjY2Vzcy4KCiAgICAgICAgKQLaB3dlYWtyZWbaEVdlYWtLZXlEaWN0aW9uYXJ5KQHaBHNlbGapAHIPAAAA+kkvb3B0L2FsdC9weXRob24zNy9saWI2NC9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9zcWxhbGNoZW15L2V4dC9tdXRhYmxlLnB52ghfcGFyZW50c3cBAABzAgAAAAAKehRNdXRhYmxlQmFzZS5fcGFyZW50c2MDAAAAAAAAAAQAAAAFAAAAQwAAAHMoAAAAfAJkAWsIcgxkAVMAZAJ9A3QAfAN8AXQBfAKDAWYCFgCDAYIBZAFTACkDYaADAABHaXZlbiBhIHZhbHVlLCBjb2VyY2UgaXQgaW50byB0aGUgdGFyZ2V0IHR5cGUuCgogICAgICAgIENhbiBiZSBvdmVycmlkZGVuIGJ5IGN1c3RvbSBzdWJjbGFzc2VzIHRvIGNvZXJjZSBpbmNvbWluZwogICAgICAgIGRhdGEgaW50byBhIHBhcnRpY3VsYXIgdHlwZS4KCiAgICAgICAgQnkgZGVmYXVsdCwgcmFpc2VzIGBgVmFsdWVFcnJvcmBgLgoKICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gZGlmZmVyZW50IHNjZW5hcmlvcyBkZXBlbmRpbmcgb24gaWYKICAgICAgICB0aGUgcGFyZW50IGNsYXNzIGlzIG9mIHR5cGUgOmNsYXNzOmAuTXV0YWJsZWAgb3Igb2YgdHlwZQogICAgICAgIDpjbGFzczpgLk11dGFibGVDb21wb3NpdGVgLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIGZvcm1lciwgaXQgaXMgY2FsbGVkCiAgICAgICAgZm9yIGJvdGggYXR0cmlidXRlLXNldCBvcGVyYXRpb25zIGFzIHdlbGwgYXMgZHVyaW5nIE9STSBsb2FkaW5nCiAgICAgICAgb3BlcmF0aW9ucy4gIEZvciB0aGUgbGF0dGVyLCBpdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgYXR0cmlidXRlLXNldAogICAgICAgIG9wZXJhdGlvbnM7IHRoZSBtZWNoYW5pY3Mgb2YgdGhlIDpmdW5jOmAuY29tcG9zaXRlYCBjb25zdHJ1Y3QKICAgICAgICBoYW5kbGUgY29lcmNpb24gZHVyaW5nIGxvYWQgb3BlcmF0aW9ucy4KCgogICAgICAgIDpwYXJhbSBrZXk6IHN0cmluZyBuYW1lIG9mIHRoZSBPUk0tbWFwcGVkIGF0dHJpYnV0ZSBiZWluZyBzZXQuCiAgICAgICAgOnBhcmFtIHZhbHVlOiB0aGUgaW5jb21pbmcgdmFsdWUuCiAgICAgICAgOnJldHVybjogdGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSBjb2VyY2VkIHZhbHVlLCBvciByYWlzZQogICAgICAgICBgYFZhbHVlRXJyb3JgYCBpZiB0aGUgY29lcmNpb24gY2Fubm90IGJlIGNvbXBsZXRlZC4KCiAgICAgICAgTnoxQXR0cmlidXRlICclcycgZG9lcyBub3QgYWNjZXB0IG9iamVjdHMgb2YgdHlwZSAlcykC2gpWYWx1ZUVycm9y2gR0eXBlKQTaA2Nsc9oDa2V52gV2YWx1ZdoDbXNncg8AAAByDwAAAHIQAAAA2gZjb2VyY2WDAQAAcwgAAAAAGAgBBAEEAXoSTXV0YWJsZUJhc2UuY29lcmNlYwIAAAAAAAAAAgAAAAEAAABDAAAAcwgAAAB8AWoAaAFTACkBYREDAABHaXZlbiBhIGRlc2NyaXB0b3IgYXR0cmlidXRlLCByZXR1cm4gYSBgYHNldCgpYGAgb2YgdGhlIGF0dHJpYnV0ZQogICAgICAgIGtleXMgd2hpY2ggaW5kaWNhdGUgYSBjaGFuZ2UgaW4gdGhlIHN0YXRlIG9mIHRoaXMgYXR0cmlidXRlLgoKICAgICAgICBUaGlzIGlzIG5vcm1hbGx5IGp1c3QgYGBzZXQoW2F0dHJp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YmxlKFBpY2tsZVR5cGUpKQogICAgICAgICAgICApCgogICAgICAgIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdHlwZSBpcyBhbHdheXMgYW4gaW5zdGFuY2UsIGV2ZW4gaWYgYSBjbGFzcwogICAgICAgIGlzIGdpdmVuLCBhbmQgdGhhdCBvbmx5IGNvbHVtbnMgd2hpY2ggYXJlIGRlY2xhcmVkIHNwZWNpZmljYWxseSB3aXRoCiAgICAgICAgdGhhdCB0eXBlIGluc3RhbmNlIHJlY2VpdmUgYWRkaXRpb25hbCBpbnN0cnVtZW50YXRpb24uCgogICAgICAgIFRvIGFzc29jaWF0ZSBhIHBhcnRpY3VsYXIgbXV0YWJsZSB0eXBlIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIGEKICAgICAgICBwYXJ0aWN1bGFyIHR5cGUsIHVzZSB0aGUgOm1ldGg6YC5NdXRhYmxlLmFzc29jaWF0ZV93aXRoYCBjbGFzc21ldGhvZAogICAgICAgIG9mIHRoZSBwYXJ0aWN1bGFyIDpjbGFzczpgLk11dGFibGVgIHN1YmNsYXNzIHRvIGVzdGFibGlzaCBhIGdsb2JhbAogICAgICAgIGFzc29jaWF0aW9uLgoKICAgICAgICAuLiB3YXJuaW5nOjoKCiAgICAgICAgICAgVGhlIGxpc3RlbmVycyBlc3RhYmxpc2hlZCBieSB0aGlzIG1ldGhvZCBhcmUgKmdsb2JhbCoKICAgICAgICAgICB0byBhbGwgbWFwcGVycywgYW5kIGFyZSAqbm90KiBnYXJiYWdlIGNvbGxlY3RlZC4gICBPbmx5IHVzZQogICAgICAgICAgIDptZXRoOmAuYXNfbXV0YWJsZWAgZm9yIHR5cGVzIHRoYXQgYXJlIHBlcm1hbmVudCB0byBhbiBhcHBsaWNhdGlvbiwKICAgICAgICAgICBub3Qgd2l0aCBhZC1ob2MgdHlwZXMgZWxzZSB0aGlzIHdpbGwgY2F1c2UgdW5ib3VuZGVkIGdyb3d0aAogICAgICAgICAgIGluIG1lbW9yeSB1c2FnZS4KCiAgICAgICAgWhRiZWZvcmVfcGFyZW50X2F0dGFjaGMCAAAAAAAAAAIAAAADAAAAUwAAAHMOAAAAfAB8AWoAZAE8AGQA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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 12
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
associationproxy.cpython-37.pyc
48.46 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
automap.cpython-37.pyc
34.41 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
baked.cpython-37.pyc
19.92 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
compiler.cpython-37.pyc
16.01 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
horizontal_shard.cpython-37.pyc
7.37 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hybrid.cpython-37.pyc
40.16 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
indexable.cpython-37.pyc
10.51 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
instrumentation.cpython-37.pyc
13.83 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
mutable.cpython-37.pyc
33.29 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
orderinglist.cpython-37.pyc
13.85 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
serializer.cpython-37.pyc
4.78 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
257 B
lrw-r--r--
2023-11-14 14:32:36
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).