REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 27.13 KB
Close
/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/ext/declarative/__pycache__/api.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdI2wAAOMAAAAAAAAAAAAAAAAIAAAAQAAAAHPmAQAAZABaAGQBZAJsAVoBZAFkAmwCWgJkA2QEbANtBFoEAQBkA2QFbANtBVoFAQBkA2QGbANtBloGAQBkA2QHbANtB1oHAQBkA2QIbANtCFoIAQBkA2QJbAltCloKAQBkCmQLbAttDFoMAQBkCmQMbAttDVoNAQBkCmQNbAttDloOAQBkCmQObA9tEFoQAQBkCmQPbA9tEVoRAQBkCmQLbA9tDFoSAQBkCmQQbA9tE1oTAQBkCmQRbA9tFFoUAQBkCmQSbA9tFVoWAQBkCmQTbBdtGFoYAQBkCmQUbBdtGVoZAQBkCmQVbBptG1obAQBkCmQWbBxtHVodAQBkCmQXbBxtHloeAQBkCmQYbA5tH1ofAQBkCmQZbA5tIFogAQBkCmQabA5tIVohAQBkG2QchABaImQdZB6EAFojRwBkH2QghABkIGUkgwNaJWQ3ZCJkI4QBWiZkJGQlhABaJ0cAZCZkJ4QAZCdlE2ooZSmDBFoqRwBkKGQphABkKWUqgwNaK2QCZAJkAmUsZCplBmQCZSVmCGQrZCyEAVotZC1kLoQAWi5HAGQvZDCEAGQwZSyDA1ovRwBkMWQyhABkMmUvgwNaMEcAZDNkNIQAZDRlLIMDWjFlDaAyZSWhAWQ1ZDaEAIMBWjNkAlMAKTh6MVB1YmxpYyBBUEkgZnVuY3Rpb25zIGFuZCBoZWxwZXJzIGZvciBkZWNsYXJhdGl2ZS7pAAAAAE7pAQAAACkB2g5fYWRkX2F0dHJpYnV0ZSkB2g9fYXNfZGVjbGFyYXRpdmUpAdoYX2RlY2xhcmF0aXZlX2NvbnN0cnVjdG9yKQHaFV9EZWZlcnJlZE1hcHBlckNvbmZpZykB2g5fZGVsX2F0dHJpYnV0ZSkB2g9fY2xhc3NfcmVzb2x2ZXLpAwAAACkB2gNleGMpAdoKaW5zcGVjdGlvbikB2gR1dGlsKQHaCmF0dHJpYnV0ZXMpAdoTY29tcGFyYWJsZV9wcm9wZXJ0eSkB2gppbnRlcmZhY2VzKQHaCnByb3BlcnRpZXMpAdoHc3lub255bSkB2hVfaW5zcGVjdF9tYXBwZWRfY2xhc3MpAdoPX21hcHBlcl9vcl9ub25lKQHaEXBvbHltb3JwaGljX3VuaW9uKQHaCE1ldGFEYXRhKQHaBVRhYmxlKQHaDGh5YnJpZG1ldGhvZCkB2g5oeWJyaWRwcm9wZXJ0eSkB2gtPcmRlcmVkRGljdGMDAAAAAAAAAAMAAAAEAAAAQwAAAHM4AAAAZAF8AGoAawZyGHQBoAJkAnwAFgChAYIBfAF8AF8DfAJ8AF8EdAV8AHwAagZ8AGoAgwMBAGQDUwApBHqLR2l2ZW4gYSBjbGFzcywgY29uZmlndXJlIHRoZSBjbGFzcyBkZWNsYXJhdGl2ZWx5LAogICAgdXNpbmcgdGhlIGdpdmVuIHJlZ2lzdHJ5LCB3aGljaCBjYW4gYmUgYW55IGRpY3Rpb25hcnksIGFuZAogICAgTWV0YURhdGEgb2JqZWN0LgoKICAgINoUX2RlY2xfY2xhc3NfcmVnaXN0cnl6NENsYXNzICVyIGFscmVhZHkgaGFzIGJlZW4gaW5zdHJ1bWVudGVkIGRlY2xhcmF0aXZlbHlOKQfaCF9fZGljdF9fcgoAAABaE0ludmFsaWRSZXF1ZXN0RXJyb3JyGgAAANoIbWV0YWRhdGFyBAAAANoIX19uYW1lX18pA9oDY2xz2ghyZWdpc3RyeXIcAAAAqQByIAAAAPpRL29wdC9hbHQvcHl0aG9uMzcvbGliNjQvcHl0aG9uMy43L3NpdGUtcGFja2FnZXMvc3FsYWxjaGVteS9leHQvZGVjbGFyYXRpdmUvYXBpLnB52hZpbnN0cnVtZW50X2RlY2xhcmF0aXZlJgAAAHMMAAAAAAYKAQQBCgIGAQYBciIAAABjAQAAAAAAAAACAAAABQAAAEMAAABzMAAAAHgqfABqAGQBZAKFAhkARABdGH0BdAF8AWQDZAKDA2QCawlyEGQEUwBxEFcAZAVTACkGYUsBAABHaXZlbiBhIGNsYXNzLCByZXR1cm4gVHJ1ZSBpZiBhbnkgb2YgdGhlIGNsYXNzZXMgaXQgaW5oZXJpdHMgZnJvbSBoYXMgYQogICAgbWFwcGVkIHRhYmxlLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgoKICAgIFRoaXMgaXMgdXNlZCBpbiBkZWNsYXJhdGl2ZSBtaXhpbnMgdG8gYnVpbGQgYXR0cmlidXRlcyB0aGF0IGJlaGF2ZQogICAgZGlmZmVyZW50bHkgZm9yIHRoZSBiYXNlIGNsYXNzIHZzLiBhIHN1YmNsYXNzIGluIGFuIGluaGVyaXRhbmNlCiAgICBoaWVyYXJjaHkuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpyZWY6YGRlY2xfbWl4aW5faW5oZXJpdGFuY2VgCgogICAgcgIAAABOWglfX3RhYmxlX19URikC2gdfX21yb19f2gdnZXRhdHRyKQJyHgAAANoGY2xhc3NfciAAAAByIAAAAHIhAAAA2hNoYXNfaW5oZXJpdGVkX3RhYmxlNQAAAHMIAAAAAA0UARABCAFyJgAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMkAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVkBoQAWgVkB1MAKQjaD0RlY2xhcmF0aXZlTWV0YWMEAAAAAAAAAAQAAAAGAAAAQwAAAHMsAAAAZAF8AGoAawdyGHQBfAB8AXwAagCDAwEAdAKgA3wAfAF8AnwDoQQBAGQAUwApAk5yGgAAACkEchsAAAByBAAAANoEdHlwZdoIX19pbml0X18pBHIeAAAA2gljbGFzc25hbWXaBWJhc2VzWgVkaWN0X3IgAAAAciAAAAByIQAAAHIpAAAASQAAAHMGAAAAAAEKAQ4BehhEZWNsYXJhdGl2ZU1ldGEuX19pbml0X19jAwAAAAAAAAADAAAABAAAAEMAAABzEAAAAHQAfAB8AXwCgwMBAGQAUwApAU4pAXIDAAAAKQNyHgAAANoDa2V52gV2YWx1ZXIgAAAAciAAAAByIQAAANoLX19zZXRhdHRyX19OAAAAcwIAAAAAAXobRGVjbGFyYXRpdmVNZXRhLl9fc2V0YXR0cl9fYwIAAAAAAAAAAgAAAAMAAABDAAAAcw4AAAB0AHwAfAGDAgEAZABTACkBTikBcgcAAAApAnIeAAAAciwAAAByIAAAAHIgAAAAciEAAADaC19fZGVsYXR0cl9fUQAAAHMCAAAAAAF6G0RlY2xhcmF0aXZlTWV0YS5fX2RlbGF0dHJfX04pBnIdAAAA2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX19yKQAAAHIuAAAAci8AAAByIAAAAHIgAAAAciAAAAByIQAAAHInAAAASAAAAHMGAAAACAEIBQgDcicAAABGYwIAAAAAAAAAAwAAAAMAAAADAAAAcxIAAACHAIcBZgJkAWQChAh9AnwCUwApA2EPBAAARGVjb3JhdG9yIHRoYXQgcHJvZHVjZXMgYW4gOmZ1bmM6YC5vcm0uc3lub255bWAgYXR0cmlidXRlIGluIGNvbmp1bmN0aW9uCiAgICB3aXRoIGEgUHl0aG9uIGRlc2NyaXB0b3IuCgogICAgVGhlIGZ1bmN0aW9uIGJlaW5nIGRlY29yYXRlZCBpcyBwYXNzZWQgdG8gOmZ1bmM6YC5vcm0uc3lub255bWAgYXMgdGhlCiAgICA6cGFyYW1yZWY6YC5vcm0uc3lub255bS5kZXNjcmlwdG9yYCBwYXJhbWV0ZXI6OgoKICAgICAgICBjbGFzcyBNeUNsYXNzKEJhc2UpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ215X3RhYmxlJwoKICAgICAgICAgICAgaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgICAgICAgICAgX2pvYl9zdGF0dXMgPSBDb2x1bW4oImpvYl9zdGF0dXMiLCBTdHJpbmcoNTApKQoKICAgICAgICAgICAgQHN5bm9ueW1fZm9yKCJqb2Jfc3RhdHVzIikKICAgICAgICAgICAgQHByb3BlcnR5CiAgICAgICAgICAgIGRlZiBqb2Jfc3RhdHVzKHNlbGYpOgogICAgICAgICAgICAgICAgcmV0dXJuICJTdGF0dXM6ICVzIiAlIHNlbGYuX2pvYl9zdGF0dXMKCiAgICBUaGUgOnJlZjpgaHlicmlkIHByb3BlcnRpZXMgPG1hcHBlcl9oeWJyaWRzPmAgZmVhdHVyZSBvZiBTUUxBbGNoZW15CiAgICBpcyB0eXBpY2FsbHkgcHJlZmVycmVkIGluc3RlYWQgb2Ygc3lub255bXMsIHdoaWNoIGlzIGEgbW9yZSBsZWdhY3kKICAgIGZlYXR1cmUuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpyZWY6YHN5bm9ueW1zYCAtIE92ZXJ2aWV3IG9mIHN5bm9ueW1zCgogICAgICAgIDpmdW5jOmAub3JtLnN5bm9ueW1gIC0gdGhlIG1hcHBlci1sZXZlbCBmdW5jdGlvbgoKICAgICAgICA6cmVmOmBtYXBwZXJfaHlicmlkc2AgLSBUaGUgSHlicmlkIEF0dHJpYnV0ZSBleHRlbnNpb24gcHJvdmlkZXMgYW4KICAgICAgICB1cGRhdGVkIGFwcHJvYWNoIHRvIGF1Z21lbnRpbmcgYXR0cmlidXRlIGJlaGF2aW9yIG1vcmUgZmxleGlibHkgdGhhbgogICAgICAgIGNhbiBiZSBhY2hpZXZlZCB3aXRoIHN5bm9ueW1zLgoKICAgIGMBAAAAAAAAAAEAAAAFAAAAEwAAAHMOAAAAdACIAYgAfABkAY0DUwApAk4pAtoKbWFwX2NvbHVtbloKZGVzY3JpcHRvcikB2gxfb3JtX3N5bm9ueW0pAdoCZm4pAnIyAAAA2gRuYW1lciAAAAByIQAAANoIZGVjb3JhdGV3AAAAcwIAAAAAAXodc3lub255bV9mb3IuPGxvY2Fscz4uZGVjb3JhdGVyIAAAACkDcjUAAAByMgAAAHI2AAAAciAAAAApAnIyAAAAcjUAAAByIQAAANoLc3lub255bV9mb3JVAAAAcwQAAAAAIg4DcjcAAABjAQAAAAAAAAACAAAAAwAAAAMAAABzEAAAAIcAZgFkAWQChAh9AXwBUwApA2EoAgAARGVjb3JhdG9yLCBhbGxvdyBhIFB5dGhvbiBAcHJvcGVydHkgdG8gYmUgdXNlZCBpbiBxdWVyeSBjcml0ZXJpYS4KCiAgICBUaGlzIGlzIGEgIGRlY29yYXRvciBmcm9udCBlbmQgdG8KICAgIDpmdW5jOmB+c3FsYWxjaGVteS5vcm0uY29tcGFyYWJsZV9wcm9wZXJ0eWAgdGhhdCBwYXNzZXMKICAgIHRocm91Z2ggdGhlIGNvbXBhcmF0b3JfZmFjdG9yeSBhbmQgdGhlIGZ1bmN0aW9uIGJlaW5nIGRlY29yYXRlZDo6CgogICAgICBAY29tcGFyYWJsZV91c2luZyhNeUNvbXBhcmF0b3JUeXBlKQogICAgICBAcHJvcGVydHkKICAgICAgZGVmIHByb3Aoc2VsZik6CiAgICAgICAgICByZXR1cm4gJ3NwZWNpYWwgc2F1Y2UnCgogICAgVGhlIHJlZ3VsYXIgYGBjb21wYXJhYmxlX3Byb3BlcnR5KClgYCBpcyBhbHNvIHVzYWJsZSBkaXJlY3RseSBpbiBhCiAgICBkZWNsYXJhdGl2ZSBzZXR0aW5nIGFuZCBtYXkgYmUgY29udmVuaWVudCBmb3IgcmVhZC93cml0ZSBwcm9wZXJ0aWVzOjoKCiAgICAgIHByb3AgPSBjb21wYXJhYmxlX3Byb3BlcnR5KE15Q29tcGFyYXRvclR5cGUpCgogICAgYwEAAAAAAAAAAQAAAAMAAAATAAAAcwoAAAB0AIgAfACDAlMAKQFOKQFyDgAAACkBcjQAAAApAdoSY29tcGFyYXRvcl9mYWN0b3J5ciAAAAByIQAAAHI2AAAAkAAAAHMCAAAAAAF6ImNvbXBhcmFibGVfdXNpbmcuPGxvY2Fscz4uZGVjb3JhdGVyIAAAACkCcjgAAAByNgAAAHIgAAAAKQFyOAAAAHIhAAAA2hBjb21wYXJhYmxlX3VzaW5nfQAAAHMEAAAAABMMA3I5AAAAYwAAAAAAAAAAAAAAAAQAAAAAAAAAc0IAAABlAFoBZABaAmQBWgNkC4cAZgFkA2QEhAlaBGQFZAaEAFoFZQZkB2QIhACDAVoHZQhkCWQKhACDAVoJhwAEAFoKUwApDNoNZGVjbGFyZWRfYXR0cmFGBgAATWFyayBhIGNsYXNzLWxldmVsIG1ldGhvZCBhcyByZXByZXNlbnRpbmcgdGhlIGRlZmluaXRpb24gb2YKICAgIGEgbWFwcGVkIHByb3BlcnR5IG9yIHNwZWNpYWwgZGVjbGFyYXRpdmUgbWVtYmVyIG5hbWUuCgogICAgQGRlY2xhcmVkX2F0dHIgdHVybnMgdGhlIGF0dHJpYnV0ZSBpbnRvIGEgc2NhbGFyLWxpa2UKICAgIHByb3BlcnR5IHRoYXQgY2FuIGJlIGludm9rZWQgZnJvbSB0aGUgdW5pbnN0YW50aWF0ZWQgY2xhc3MuCiAgICBEZWNsYXJhdGl2ZSB0cmVhdHMgYXR0cmlidXRlcyBzcGVjaWZpY2FsbHkgbWFya2VkIHdpdGgKICAgIEBkZWNsYXJlZF9hdHRyIGFzIHJldHVybmluZyBhIGNvbnN0cnVjdCB0aGF0IGlzIHNwZWNpZmljCiAgICB0byBtYXBwaW5nIG9yIGRlY2xhcmF0aXZlIHRhYmxlIGNvbmZpZ3VyYXRpb24uICBUaGUgbmFtZQogICAgb2YgdGhlIGF0dHJpYnV0ZSBpcyB0aGF0IG9mIHdoYXQgdGhlIG5vbi1keW5hbWljIHZlcnNpb24KICAgIG9mIHRoZSBhdHRyaWJ1dGUgd291bGQgYmUuCgogICAgQGRlY2xhcmVkX2F0dHIgaXMgbW9yZSBvZnRlbiB0aGFuIG5vdCBhcHBsaWNhYmxlIHRvIG1peGlucywKICAgIHRvIGRlZmluZSByZWxhdGlvbnNoaXBzIHRoYXQgYXJlIHRvIGJlIGFwcGxpZWQgdG8gZGlmZmVyZW50CiAgICBpbXBsZW1lbnRvcnMgb2YgdGhlIGNsYXNzOjoKCiAgICAgICAgY2xhc3MgUHJvdmlkZXNVc2VyKG9iamVjdCk6CiAgICAgICAgICAgICJBIG1peGluIHRoYXQgYWRkcyBhICd1c2VyJyByZWxhdGlvbnNoaXAgdG8gY2xhc3Nlcy4iCgogICAgICAgICAgICBAZGVjbGFyZWRfYXR0cgogICAgICAgICAgICBkZWYgdXNlcihzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGlvbnNoaXAoIlVzZXIiKQoKICAgIEl0IGFsc28gY2FuIGJlIGFwcGxpZWQgdG8gbWFwcGVkIGNsYXNzZXMsIHN1Y2ggYXMgdG8gcHJvdmlkZQogICAgYSAicG9seW1vcnBoaWMiIHNjaGVtZSBmb3IgaW5oZXJpdGFuY2U6OgoKICAgICAgICBjbGFzcyBFbXBsb3llZShCYXNlKToKICAgICAgICAgICAgaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgICAgICAgICAgdHlwZSA9IENvbHVtbihTdHJpbmcoNTApLCBudWxsYWJsZT1GYWxzZSkKCiAgICAgICAgICAgIEBkZWNsYXJlZF9hdHRyCiAgICAgICAgICAgIGRlZiBfX3RhYmxlbmFtZV9fKGNscyk6CiAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmFtZV9fLmxvd2VyKCkKCiAgICAgICAgICAgIEBkZWNsYXJlZF9hdHRyCiAgICAgICAgICAgIGRlZiBfX21hcHBlcl9hcmdzX18oY2xzKToKICAgICAgICAgICAgICAgIGlmIGNscy5fX25hbWVfXyA9PSAnRW1wbG95ZWUnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9seW1vcnBoaWNfb24iOmNscy50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvbHltb3JwaGljX2lkZW50aXR5IjoiRW1wbG95ZWUiCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4geyJwb2x5bW9ycGhpY19pZGVudGl0eSI6Y2xzLl9fbmFtZV9ffQoKICAgIEZjAwAAAAAAAAADAAAAAwAAAAMAAABzIgAAAHQAdAF8AIMCoAJ8AaEBAQB8AWoDfABfA3wCfABfBGQAUwApAU4pBdoFc3VwZXJyOgAAAHIpAAAA2gdfX2RvY19fWgpfY2FzY2FkaW5nKQPaBHNlbGbaBGZnZXTaCWNhc2NhZGluZykB2glfX2NsYXNzX19yIAAAAHIhAAAAcikAAADEAAAAcwYAAAAAARABCAF6FmRlY2xhcmVkX2F0dHIuX19pbml0X19jAwAAAAAAAAAFAAAABQAAAEMAAABzgAAAAHwCagCgAWQBZAChAn0DfANkAGsIclZ0AqADZAJ8AGoEagWhAnNMdAagB3wCoQFkAGsIckx0CKAJZAN8AGoEagV8AmoFZgIWAKEBAQB8AKAEfAKhAVMAfAB8A2sGcmZ8A3wAGQBTAHwAoAR8AqEBBAB8A3wAPAB9BHwEUwBkAFMAKQROWhVfc2FfZGVjbGFyZWRfYXR0cl9yZWd6CF5fXy4rX18kekVVbm1hbmFnZWQgYWNjZXNzIG9mIGRlY2xhcmF0aXZlIGF0dHJpYnV0ZSAlcyBmcm9tIG5vbi1tYXBwZWQgY2xhc3MgJXMpCnIbAAAA2gNnZXTaAnJl2gVtYXRjaHI+AAAAch0AAAByDQAAAFoQbWFuYWdlcl9vZl9jbGFzc3IMAAAA2gR3YXJuKQXaBGRlc2NyPQAAAHIeAAAAWgNyZWfaA29ianIgAAAAciAAAAByIQAAANoHX19nZXRfX8kAAABzGAAAAAABDgEIAhABDgIEAQIBEgIKAQgBCAISAXoVZGVjbGFyZWRfYXR0ci5fX2dldF9fYwEAAAAAAAAAAgAAAAMAAABLAAAAcwoAAAB0AGYAfAGOAVMAKQFOKQHaF19zdGF0ZWZ1bF9kZWNsYXJlZF9hdHRyKQJyHgAAANoCa3dyIAAAAHIgAAAAciEAAADaCV9zdGF0ZWZ1bNsAAABzAgAAAAACehdkZWNsYXJlZF9hdHRyLl9zdGF0ZWZ1bGMBAAAAAAAAAAEAAAADAAAAQwAAAHMMAAAAfABqAGQBZAKNAVMAKQNhZggAAE1hcmsgYSA6Y2xhc3M6YC5kZWNsYXJlZF9hdHRyYCBhcyBjYXNjYWRpbmcuCgogICAgICAgIFRoaXMgaXMgYSBzcGVjaWFsLXVzZSBtb2RpZmllciB3aGljaCBpbmRpY2F0ZXMgdGhhdCBhIGNvbHVtbgogICAgICAgIG9yIE1hcHBlclByb3BlcnR5LWJhc2VkIGRlY2xhcmVkIGF0dHJpYnV0ZSBzaG91bGQgYmUgY29uZmlndXJlZAogICAgICAgIGRpc3RpbmN0bHkgcGVyIG1hcHBlZCBzdWJjbGFzcywgd2l0aGluIGEgbWFwcGVkLWluaGVyaXRhbmNlIHNjZW5hcmlvLgoKICAgICAgICAuLiB3YXJuaW5nOjoKCiAgICAgICAgICAgIFRoZSA6YXR0cjpgLmRlY2xhcmVkX2F0dHIuY2FzY2FkaW5nYCBtb2RpZmllciBoYXMgc2V2ZXJhbAogICAgICAgICAgICBsaW1pdGF0aW9uczoKCiAgICAgICAgICAgICogVGhlIGZsYWcgKipvbmx5KiogYXBwbGllcyB0byB0aGUgdXNlIG9mIDpjbGFzczpgLmRlY2xhcmVkX2F0dHJgCiAgICAgICAgICAgICAgb24gZGVjbGFyYXRpdmUgbWl4aW4gY2xhc3NlcyBhbmQgYGBfX2Fic3RyYWN0X19gYCBjbGFzc2VzOyBpdAogICAgICAgICAgICAgIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IHdoZW4gdXNlZCBvbiBhIG1hcHBlZCBjbGFzcyBkaXJlY3RseS4KCiAgICAgICAgICAgICogVGhlIGZsYWcgKipvbmx5KiogYXBwbGllcyB0byBub3JtYWxseS1uYW1lZCBhdHRyaWJ1dGVzLCBlLmcuCiAgICAgICAgICAgICAgbm90IGFueSBzcGVjaWFsIHVuZGVyc2NvcmUgYXR0cmlidXRlcyBzdWNoIGFzIGBgX190YWJsZW5hbWVfX2BgLgogICAgICAgICAgICAgIE9uIHRoZXNlIGF0dHJpYnV0ZXMgaXQgaGFzICoqbm8qKiBlZmZlY3QuCgogICAgICAgICAgICAqIFRoZSBmbGFnIGN1cnJlbnRseSAqKmRvZXMgbm90IGFsbG93IGZ1cnRoZXIgb3ZlcnJpZGVzKiogZG93bgogICAgICAgICAgICAgIHRoZSBjbGFzcyBoaWVyYXJjaHk7IGlmIGEgc3ViY2xhc3MgdHJpZXMgdG8gb3ZlcnJpZGUgdGhlCiAgICAgICAgICAgICAgYXR0cmlidXRlLCBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhbmQgdGhlIG92ZXJyaWRkZW4gYXR0cmlidXRlCiAgICAgICAgICAgICAgaXMgc2tpcHBlZC4gIFRoaXMgaXMgYSBsaW1pdGF0aW9uIHRoYXQgaXQgaXMgaG9wZWQgd2lsbCBiZQogICAgICAgICAgICAgIHJlc29sdmVkIGF0IHNvbWUgcG9pbnQuCgogICAgICAgIEJlbG93LCBib3RoIE15Q2xhc3MgYXMgd2VsbCBhcyBNeVN1YkNsYXNzIHdpbGwgaGF2ZSBhIGRpc3RpbmN0CiAgICAgICAgYGBpZGBgIENvbHVtbiBvYmplY3QgZXN0YWJsaXNoZWQ6OgoKICAgICAgICAgICAgY2xhc3MgSGFzSWRNaXhpbihvYmplY3QpOgogICAgICAgICAgICAgICAgQGRlY2xhcmVkX2F0dHIuY2FzY2FkaW5nCiAgICAgICAgICAgICAgICBkZWYgaWQoY2xzKToKICAgICAgICAgICAgICAgICAgICBpZiBoYXNfaW5oZXJpdGVkX3RhYmxlKGNscyk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlaWduS2V5KCdteWNsYXNzLmlkJyksIHByaW1hcnlfa2V5PVRydWUpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtbihJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQoKICAgICAgICAgICAgY2xhc3MgTXlDbGFzcyhI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OiBBbiBvcHRpb25hbAogICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LmVuZ2luZS5Db25uZWN0YWJsZWAsIHdpbGwgYmUgYXNzaWduZWQKICAgICAgdGhlIGBgYmluZGBgIGF0dHJpYnV0ZSBvbiB0aGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuTWV0YURhdGFgCiAgICAgIGluc3RhbmNlLgoKICAgIDpwYXJhbSBtZXRhZGF0YToKICAgICAgQW4gb3B0aW9uYWwgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuTWV0YURhdGFgIGluc3RhbmNlLiAgQWxsCiAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3RzIGltcGxpY2l0bHkgZGVjbGFyZWQgYnkKICAgICAgc3ViY2xhc3NlcyBvZiB0aGUgYmFzZSB3aWxsIHNoYXJlIHRoaXMgTWV0YURhdGEuICBBIE1ldGFEYXRhIGluc3RhbmNlCiAgICAgIHdpbGwgYmUgY3JlYXRlZCBpZiBub25lIGlzIHByb3ZpZGVkLiAgVGhlCiAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLk1ldGFEYXRhYCBpbnN0YW5jZSB3aWxsIGJlIGF2YWlsYWJsZSB2aWEgdGhlCiAgICAgIGBtZXRhZGF0YWAgYXR0cmlidXRlIG9mIHRoZSBnZW5lcmF0ZWQgZGVjbGFyYXRpdmUgYmFzZSBjbGFzcy4KCiAgICA6cGFyYW0gbWFwcGVyOgogICAgICBBbiBvcHRpb25hbCBjYWxsYWJsZSwgZGVmYXVsdHMgdG8gOmZ1bmM6YH5zcWxhbGNoZW15Lm9ybS5tYXBwZXJgLiBXaWxsCiAgICAgIGJlIHVzZWQgdG8gbWFwIHN1YmNsYXNzZXMgdG8gdGhlaXIgVGFibGVzLgoKICAgIDpwYXJhbSBjbHM6CiAgICAgIERlZmF1bHRzIHRvIDpjbGFzczpgb2JqZWN0YC4gQSB0eXBlIHRvIHVzZSBhcyB0aGUgYmFzZSBmb3IgdGhlIGdlbmVyYXRlZAogICAgICBkZWNsYXJhdGl2ZSBiYXNlIGNsYXNzLiBNYXkgYmUgYSBjbGFzcyBvciB0dXBsZSBvZiBjbGFzc2VzLgoKICAgIDpwYXJhbSBuYW1lOgogICAgICBEZWZhdWx0cyB0byBgYEJhc2VgYC4gIFRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBnZW5lcmF0ZWQKICAgICAgY2xhc3MuICBDdXN0b21pemluZyB0aGlzIGlzIG5vdCByZXF1aXJlZCwgYnV0IGNhbiBpbXByb3ZlIGNsYXJpdHkgaW4KICAgICAgdHJhY2ViYWNrcyBhbmQgZGVidWdnaW5nLgoKICAgIDpwYXJhbSBjb25zdHJ1Y3RvcjoKICAgICAgRGVmYXVsdHMgdG8KICAgICAgOmZ1bmM6YH5zcWxhbGNoZW15LmV4dC5kZWNsYXJhdGl2ZS5iYXNlLl9kZWNsYXJhdGl2ZV9jb25zdHJ1Y3RvcmAsIGFuCiAgICAgIF9faW5pdF9fIGltcGxlbWVudGF0aW9uIHRoYXQgYXNzaWducyBcKiprd2FyZ3MgZm9yIGRlY2xhcmVkCiAgICAgIGZpZWxkcyBhbmQgcmVsYXRpb25zaGlwcyB0byBhbiBpbnN0YW5jZS4gIElmIGBgTm9uZWBgIGlzIHN1cHBsaWVkLAogICAgICBubyBfX2luaXRfXyB3aWxsIGJlIHByb3ZpZGVkIGFuZCBjb25zdHJ1Y3Rpb24gd2lsbCBmYWxsIGJhY2sgdG8KICAgICAgY2xzLl9faW5pdF9fIGJ5IHdheSBvZiB0aGUgbm9ybWFsIFB5dGhvbiBzZW1hbnRpY3MuCgogICAgOnBhcmFtIGNsYXNzX3JlZ2lzdHJ5OiBvcHRpb25hbCBkaWN0aW9uYXJ5IHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUKICAgICAgcmVnaXN0cnkgb2YgY2xhc3MgbmFtZXMtPiBtYXBwZWQgY2xhc3NlcyB3aGVuIHN0cmluZyBuYW1lcwogICAgICBhcmUgdXNlZCB0byBpZGVudGlmeSBjbGFzc2VzIGluc2lkZSBvZiA6ZnVuYzpgLnJlbGF0aW9uc2hpcGAKICAgICAgYW5kIG90aGVycy4gIEFsbG93cyB0d28gb3IgbW9yZSBkZWNsYXJhdGl2ZSBiYXNlIGNsYXNzZXMKICAgICAgdG8gc2hhcmUgdGhlIHNhbWUgcmVnaXN0cnkgb2YgY2xhc3MgbmFtZXMgZm9yIHNpbXBsaWZpZWQKICAgICAgaW50ZXItYmFzZSByZWxhdGlvbnNoaXBzLgoKICAgIDpwYXJhbSBtZXRhY2xhc3M6CiAgICAgIERlZmF1bHRzIHRvIDpjbGFzczpgLkRlY2xhcmF0aXZlTWV0YWAuICBBIG1ldGFjbGFzcyBvciBfX21ldGFjbGFzc19fCiAgICAgIGNvbXBhdGlibGUgY2FsbGFibGUgdG8gdXNlIGFzIHRoZSBtZXRhIHR5cGUgb2YgdGhlIGdlbmVyYXRlZAogICAgICBkZWNsYXJhdGl2ZSBiYXNlIGNsYXNzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xIGlmIDpwYXJhbXJlZjpgLmRlY2xhcmF0aXZlX2Jhc2UuY2xzYCBpcyBhCiAgICAgICAgIHNpbmdsZSBjbGFzcyAocmF0aGVyIHRoYW4gYSB0dXBsZSksIHRoZSBjb25zdHJ1Y3RlZCBiYXNlIGNsYXNzIHdpbGwKICAgICAgICAgaW5oZXJpdCBpdHMgZG9jc3RyaW5nLgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6ZnVuYzpgLmFzX2RlY2xhcmF0aXZlYAoKICAgIE4pAnIaAAAAchwAAAByPAAAAHIpAAAAWg5fX21hcHBlcl9jbHNfXykJchUAAADaBGJpbmTaB3dlYWtyZWbaE1dlYWtWYWx1ZURpY3Rpb25hcnnaCmlzaW5zdGFuY2XaBXR1cGxl2gRkaWN0cigAAAByPAAAACkLck8AAAByHAAAANoGbWFwcGVych4AAAByNQAAANoLY29uc3RydWN0b3JaDmNsYXNzX3JlZ2lzdHJ52gltZXRhY2xhc3NaDGxjbF9tZXRhZGF0YXIrAAAA2gpjbGFzc19kaWN0ciAAAAByIAAAAHIhAAAA2hBkZWNsYXJhdGl2ZV9iYXNlKgEAAHMeAAAAAEkKAQQBBgIIAQgCFgECAQoDCgEKAgQBCAEEAQgCclkAAABjAAAAAAAAAAACAAAAAwAAAAsAAABzEAAAAIcAZgFkAWQChAh9AXwBUwApA2HbAgAACiAgICBDbGFzcyBkZWNvcmF0b3IgZm9yIDpmdW5jOmAuZGVjbGFyYXRpdmVfYmFzZWAuCgogICAgUHJvdmlkZXMgYSBzeW50YWN0aWNhbCBzaG9ydGN1dCB0byB0aGUgYGBjbHNgYCBhcmd1bWVudAogICAgc2VudCB0byA6ZnVuYzpgLmRlY2xhcmF0aXZlX2Jhc2VgLCBhbGxvd2luZyB0aGUgYmFzZSBjbGFzcwogICAgdG8gYmUgY29udmVydGVkIGluLXBsYWNlIHRvIGEgImRlY2xhcmF0aXZlIiBiYXNlOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5kZWNsYXJhdGl2ZSBpbXBvcnQgYXNfZGVjbGFyYXRpdmUKCiAgICAgICAgQGFzX2RlY2xhcmF0aXZlKCkKICAgICAgICBjbGFzcyBCYXNlKG9iamVjdCk6CiAgICAgICAgICAgIEBkZWNsYXJlZF9hdHRyCiAgICAgICAgICAgIGRlZiBfX3RhYmxlbmFtZV9fKGNscyk6CiAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmFtZV9fLmxvd2VyKCkKICAgICAgICAgICAgaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKCiAgICAgICAgY2xhc3MgTXlNYXBwZWRDbGFzcyhCYXNlKToKICAgICAgICAgICAgIyAuLi4KCiAgICBBbGwga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIDpmdW5jOmAuYXNfZGVjbGFyYXRpdmVgIGFyZSBwYXNzZWQKICAgIGFsb25nIHRvIDpmdW5jOmAuZGVjbGFyYXRpdmVfYmFzZWAuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpmdW5jOmAuZGVjbGFyYXRpdmVfYmFzZWAKCiAgICBjAQAAAAAAAAABAAAAAwAAABMAAABzHAAAAHwAiABkATwAfABqAIgAZAI8AHQBZgCIAI4BUwApA05yHgAAAHI1AAAAKQJyHQAAAHJZAAAAKQFyHgAAACkBckkAAAByIAAAAHIhAAAAcjYAAACnAQAAcwYAAAAAAQgBCgF6IGFzX2RlY2xhcmF0aXZlLjxsb2NhbHM+LmRlY29yYXRlciAAAAApAnJJAAAAcjYAAAByIAAAACkBckkAAAByIQAAANoOYXNfZGVjbGFyYXRpdmWKAQAAcwQAAAAAHQwFcloAAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzKAAAAGUAWgFkAFoCZAFaA2UEZAJkA4QAgwFaBWUEZARkBYQAgwFaBmQGUwApB9oMQ29uY3JldGVCYXNlYW8FAABBIGhlbHBlciBjbGFzcyBmb3IgJ2NvbmNyZXRlJyBkZWNsYXJhdGl2ZSBtYXBwaW5ncy4KCiAgICA6Y2xhc3M6YC5Db25jcmV0ZUJhc2VgIHdpbGwgdXNlIHRoZSA6ZnVuYzpgLnBvbHltb3JwaGljX3VuaW9uYAogICAgZnVuY3Rpb24gYXV0b21hdGljYWxseSwgYWdhaW5zdCBhbGwgdGFibGVzIG1hcHBlZCBhcyBhIHN1YmNsYXNzCiAgICB0byB0aGlzIGNsYXNzLiAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIHRoZQogICAgYGBfX2RlY2xhcmVfbGFzdF9fKClgYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXNzZW50aWFsbHkKICAgIGEgaG9vayBmb3IgdGhlIDptZXRoOmAuYWZ0ZXJfY29uZmlndXJlZGAgZXZlbnQuCgogICAgOmNsYXNzOmAuQ29uY3JldGVCYXNlYCBwcm9kdWNlcyBhIG1hcHBlZAogICAgdGFibGUgZm9yIHRoZSBjbGFzcyBpdHNlbGYuICBDb21wYXJlIHRvIDpjbGFzczpgLkFic3RyYWN0Q29uY3JldGVCYXNlYCwKICAgIHdoaWNoIGRvZXMgbm90LgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlIGltcG9ydCBDb25jcmV0ZUJhc2UKCiAgICAgICAgY2xhc3MgRW1wbG95ZWUoQ29uY3JldGVCYXNlLCBCYXNlKToKICAgICAgICAgICAgX190YWJsZW5hbWVfXyA9ICdlbXBsb3llZScKICAgICAgICAgICAgZW1wbG95ZWVfaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgICAgICAgICAgbmFtZSA9IENvbHVtbihTdHJpbmcoNTApKQogICAgICAgICAgICBfX21hcHBlcl9hcmdzX18gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9seW1vcnBoaWNfaWRlbnRpdHknOidlbXBs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Om1ldGg6YC5hZnRlcl9jb25maWd1cmVkYCBldmVudC4KCiAgICA6Y2xhc3M6YC5BYnN0cmFjdENvbmNyZXRlQmFzZWAgZG9lcyBwcm9kdWNlIGEgbWFwcGVkIGNsYXNzCiAgICBmb3IgdGhlIGJhc2UgY2xhc3MsIGhvd2V2ZXIgaXQgaXMgbm90IHBlcnNpc3RlZCB0byBhbnkgdGFibGU7IGl0CiAgICBpcyBpbnN0ZWFkIG1hcHBlZCBkaXJlY3RseSB0byB0aGUgInBvbHltb3JwaGljIiBzZWxlY3RhYmxlIGRpcmVjdGx5CiAgICBhbmQgaXMgb25seSB1c2VkIGZvciBzZWxlY3RpbmcuICBDb21wYXJlIHRvIDpjbGFzczpgLkNvbmNyZXRlQmFzZWAsCiAgICB3aGljaCBkb2VzIGNyZWF0ZSBhIHBlcnNpc3RlZCB0YWJsZSBmb3IgdGhlIGJhc2UgY2xhc3MuCgogICAgLi4gbm90ZTo6CgogICAgICAgIFRoZSA6Y2xhc3M6YC5BYnN0cmFjdENvbmNyZXRlQmFzZWAgY2xhc3MgZG9lcyBub3QgaW50ZW5kIHRvIHNldCB1cCAgdGhlCiAgICAgICAgbWFwcGluZyBmb3IgdGhlIGJhc2UgY2xhc3MgdW50aWwgYWxsIHRoZSBzdWJjbGFzc2VzIGhhdmUgYmVlbiBkZWZpbmVkLAogICAgICAgIGFzIGl0IG5lZWRzIHRvIGNyZWF0ZSBhIG1hcHBpbmcgYWdhaW5zdCBhIHNlbGVjdGFibGUgdGhhdCB3aWxsIGluY2x1ZGUKICAgICAgICBhbGwgc3ViY2xhc3MgdGFibGVzLiAgSW4gb3JkZXIgdG8gYWNoaWV2ZSB0aGlzLCBpdCB3YWl0cyBmb3IgdGhlCiAgICAgICAgKiptYXBwZXIgY29uZmlndXJhdGlvbiBldmVudCoqIHRvIG9jY3VyLCBhdCB3aGljaCBwb2ludCBpdCBzY2FucwogICAgICAgIHRocm91Z2ggYWxsIHRoZSBjb25maWd1cmVkIHN1YmNsYXNzZXMgYW5kIHNldHMgdXAgYSBtYXBwaW5nIHRoYXQgd2lsbAogICAgICAgIHF1ZXJ5IGFnYWluc3QgYWxsIHN1YmNsYXNzZXMgYXQgb25jZS4KCiAgICAgICAgV2hpbGUgdGhpcyBldmVudCBpcyBub3JtYWxseSBpbnZva2VkIGF1dG9tYXRpY2FsbHksIGluIHRoZSBjYXNlIG9mCiAgICAgICAgOmNsYXNzOmAuQWJzdHJhY3RDb25jcmV0ZUJhc2VgLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGludm9rZSBpdAogICAgICAgIGV4cGxpY2l0bHkgYWZ0ZXIgKiphbGwqKiBzdWJjbGFzcyBtYXBwaW5ncyBhcmUgZGVmaW5lZCwgaWYgdGhlIGZpcnN0CiAgICAgICAgb3BlcmF0aW9uIGlzIHRvIGJlIGEgcXVlcnkgYWdhaW5zdCB0aGlzIGJhc2UgY2xhc3MuICBUbyBkbyBzbywgaW52b2tlCiAgICAgICAgOmZ1bmM6YC5jb25maWd1cmVfbWFwcGVyc2Agb25jZSBhbGwgdGhlIGRlc2lyZWQgY2xhc3NlcyBoYXZlIGJlZW4KICAgICAgICBjb25maWd1cmVkOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IGNvbmZpZ3VyZV9tYXBwZXJzCgogICAgICAgICAgICBjb25maWd1cmVfbWFwcGVycygpCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOmZ1bmM6YC5vcm0uY29uZmlndXJlX21hcHBlcnNgCgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlIGltcG9ydCBBYnN0cmFjdENvbmNyZXRlQmFzZQoKICAgICAgICBjbGFzcyBFbXBsb3llZShBYnN0cmFjdENvbmNyZXRlQmFzZSwgQmFzZSk6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgY2xhc3MgTWFuYWdlcihFbXBsb3llZSk6CiAgICAgICAgICAgIF9fdGFibGVuYW1lX18gPSAnbWFuYWdlcicKICAgICAgICAgICAgZW1wbG95ZWVfaWQgPSBDb2x1bW4oSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgICAgICAgICAgbmFtZSA9IENvbHVtbihTdHJpbmcoNTApKQogICAgICAgICAgICBtYW5hZ2VyX2RhdGEgPSBDb2x1bW4oU3RyaW5nKDQwKSkKCiAgICAgICAgICAgIF9fbWFwcGVyX2FyZ3NfXyA9IHsKICAgICAgICAgICAgICAgICdwb2x5bW9ycGhpY19pZGVudGl0eSc6J21hbmFnZXInLAogICAgICAgICAgICAgICAgJ2NvbmNyZXRlJzpUcnVlfQoKICAgICAgICBjb25maWd1cmVfbWFwcGVycygpCgogICAgVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgaXMgaGFuZGxlZCBieSBkZWNsYXJhdGl2ZSBpbiBhIHNwZWNpYWwgd2F5OwogICAgYXQgY2xhc3MgY29uZmlndXJhdGlvbiB0aW1lLCBpdCBiZWhhdmVzIGxpa2UgYSBkZWNsYXJhdGl2ZSBtaXhpbgogICAgb3IgYW4gYGBfX2Fic3RyYWN0X19gYCBiYXNlIGNsYXNzLiAgIE9uY2UgY2xhc3NlcyBhcmUgY29uZmlndXJlZAogICAgYW5kIG1hcHBpbmdzIGFyZSBwcm9kdWNlZCwgaXQgdGhlbiBnZXRzIG1hcHBlZCBpdHNlbGYsIGJ1dAogICAgYWZ0ZXIgYWxsIG9mIGl0cyBkZXNjZW5kYW50cy4gIFRoaXMgaXMgYSB2ZXJ5IHVuaXF1ZSBzeXN0ZW0gb2YgbWFwcGluZwogICAgbm90IGZvdW5kIGluIGFueSBvdGhlciBTUUxBbGNoZW15IHN5c3RlbS4KCiAgICBVc2luZyB0aGlzIGFwcHJvYWNoLCB3ZSBjYW4gc3BlY2lmeSBjb2x1bW5zIGFuZCBwcm9wZXJ0aWVzCiAgICB0aGF0IHdpbGwgdGFrZSBwbGFjZSBvbiBtYXBwZWQgc3ViY2xhc3NlcywgaW4gdGhlIHdheSB0aGF0CiAgICB3ZSBub3JtYWxseSBkbyBhcyBpbiA6cmVmOmBkZWNsYXJhdGl2ZV9taXhpbnNgOjoKCiAgICAgICAgY2xhc3MgQ29tcGFueShCYXNlKToKICAgICAgICAgICAgX190YWJsZW5hbWVfXyA9ICdjb21wYW55JwogICAgICAgICAgICBpZCA9IENvbHVtbihJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQoKICAgICAgICBjbGFzcyBFbXBsb3llZShBYnN0cmFjdENvbmNyZXRlQmFzZSwgQmFzZSk6CiAgICAgICAgICAgIGVtcGxveWVlX2lkID0gQ29sdW1uKEludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCgogICAgICAgICAgICBAZGVjbGFyZWRfYXR0cgogICAgICAgICAgICBkZWYgY29tcGFueV9pZChjbHMpOgogICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtbihGb3JlaWduS2V5KCdjb21wYW55LmlkJykpCgogICAgICAgICAgICBAZGVjbGFyZWRfYXR0cgogICAgICAgICAgICBkZWYgY29tcGFueShjbHMpOgogICAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcCgiQ29tcGFueSIpCgogICAgICAgIGNsYXNzIE1hbmFnZXIoRW1wbG95ZWUpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ21hbmFnZXInCgogICAgICAgICAgICBuYW1lID0gQ29sdW1uKFN0cmluZyg1MCkpCiAgICAgICAgICAgIG1hbmFnZXJfZGF0YSA9IENvbHVtbihTdHJpbmcoNDApKQoKICAgICAgICAgICAgX19tYXBwZXJfYXJnc19fID0gewogICAgICAgICAgICAgICAgJ3BvbHltb3JwaGljX2lkZW50aXR5JzonbWFuYWdlcicsCiAgICAgICAgICAgICAgICAnY29uY3JldGUnOlRydWV9CgogICAgICAgIGNvbmZpZ3VyZV9tYXBwZXJzKCkKCiAgICBXaGVuIHdlIG1ha2UgdXNlIG9mIG91ciBtYXBwaW5ncyBob3dldmVyLCBib3RoIGBgTWFuYWdlcmBgIGFuZAogICAgYGBFbXBsb3llZWBgIHdpbGwgaGF2ZSBhbiBpbmRlcGVuZGVudGx5IHVzYWJsZSBgYC5jb21wYW55YGAgYXR0cmlidXRlOjoKCiAgICAgICAgc2Vzc2lvbi5xdWVyeShFbXBsb3llZSkuZmlsdGVyKEVtcGxveWVlLmNvbXBhbnkuaGFzKGlkPTUpKQoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4wLjAgLSBUaGUgbWVjaGFuaWNzIG9mIDpjbGFzczpgLkFic3RyYWN0Q29uY3JldGVCYXNlYAogICAgICAgaGF2ZSBiZWVuIHJld29ya2VkIHRvIHN1cHBvcnQgcmVsYXRpb25zaGlwcyBlc3RhYmxpc2hlZCBkaXJlY3RseQogICAgICAgb24gdGhlIGFic3RyYWN0IGJhc2UsIHdpdGhvdXQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbmFsIHN0ZXBzLgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6Y2xhc3M6YC5Db25jcmV0ZUJhc2VgCgogICAgICAgIDpyZWY6YGNvbmNyZXRlX2luaGVyaXRhbmNlYAoKICAgICAgICA6cmVmOmBpbmhlcml0YW5jZV9jb25jcmV0ZV9oZWxwZXJzYAoKICAgIFRjAQAAAAAAAAABAAAAAgAAAEMAAABzDAAAAHwAoAChAAEAZABTACkBTikB2hpfc2FfZGVjbF9wcmVwYXJlX25vY2FzY2FkZSkBch4AAAByIAAAAHIgAAAAciEAAAByaAAAAGkCAABzAgAAAAACeiZBYnN0cmFjdENvbmNyZXRlQmFzZS5fX2RlY2xhcmVfZmlyc3RfX2MBAAAAAAAAAA0AAAAEAAAAAwAAAHMWAQAAdAB8AGQBZACDA3IQZABTAHQBoAJ8AKEBfQFnAH0CdAN8AKAEoQCDAX0DeDh8A3JifAOgBaEAfQR8A6AGfASgBKEAoQEBAHQHfASDAX0FfAVkAGsJcix8AqAIfAWhAQEAcSxXAHwAoAl8AqEBiQF0CnwBaguDAX0GeDR0A3wBagygDaEAgwFEAF0iXAJ9B30IfAh8BmsGcoiIAWoOfAhqDxkAfAFqDHwHPABxiFcAiAF8AV8QfAFqEXC8dBKJAIcAhwFmAmQCZAOECH0JfAl8AV8RfAGgE6EAfQp4NnwAoAShAEQAXSp9C3QHfAuDAX0MfAxy5HwMahRy5HwAfAtqFWsGcuR8DKAWfAqhAQEAceRXAGQAUwApBE5yZAAAAGMAAAAAAAAAAAEAAAADAAAAEwAAAHMWAAAAiACDAH0AiAFqAGoBfABkATwAfABTACkCTloOcG9seW1vcnBoaWNfb24pAnJmAAAAcigAAAApAdoEYXJncykC2gZtX2FyZ3NyYAAAAHIgAAAAciEAAADaC21hcHBlcl9hcmdzkQIAAHMGAAAAAAEGAQwBekRBYnN0cmFjdENvbmNyZXRlQmFzZS5fc2FfZGVjbF9wcmVwYXJlX25vY2FzY2FkZS48bG9jYWxzPi5tYXBwZXJfYXJncykXciQAAAByBgAAAFoOY29uZmlnX2Zvcl9jbHNyZQAAANoOX19zdWJjbGFzc2VzX1/aA3BvcNoGZXh0ZW5kchMAAADaBmFwcGVuZHJiAAAA2gNzZXRaEGRlY2xhcmVkX2NvbHVtbnNyEAAAANoFaXRlbXNyZgAAAHIsAAAAclwAAABaDm1hcHBlcl9hcmdzX2ZuclQAAADaA21hcFoIY29uY3JldGXaCV9fYmFzZXNfX1oSX3NldF9jb25jcmV0ZV9iYXNlKQ1yHgAAANoGdG9fbWFwcmEAAADaBXN0YWNr2gVrbGFzc1oCbW5aDWRlY2xhcmVkX2NvbHPaAWvaAXZybgAAAHJnAAAAWgRzY2xzWgJzbXIgAAAAKQJybQAAAHJgAAAAciEAAAByawAAAG0CAABzMgAAAAACDAEEAgoGBAEMAQYBCAEOAQgBCAEOAQoICgEYAQgBFgIGAgoCDgUGAggCDgEIARQBei9BYnN0cmFjdENvbmNyZXRlQmFzZS5fc2FfZGVjbF9wcmVwYXJlX25vY2FzY2FkZWMBAAAAAAAAAAEAAAAGAAAAQwAAAHMcAAAAdABqAXwAZAF0AKACfAChARYAZAKNAoIBZABTACkDTnrtQ2xhc3MgJXMgaXMgYSBzdWJjbGFzcyBvZiBBYnN0cmFjdENvbmNyZXRlQmFzZSBhbmQgaGFzIGEgbWFwcGluZyBwZW5kaW5nIHVudGlsIGFsbCBzdWJjbGFzc2VzIGFyZSBkZWZpbmVkLiBDYWxsIHRoZSBzcWxhbGNoZW15Lm9ybS5jb25maWd1cmVfbWFwcGVycygpIGZ1bmN0aW9uIGFmdGVyIGFsbCBzdWJjbGFzc2VzIGhhdmUgYmVlbiBkZWZpbmVkIHRvIGNvbXBsZXRlIHRoZSBtYXBwaW5nIG9mIHRoaXMgY2xhc3MuKQHaA21zZykD2gdvcm1fZXhj2hJVbm1hcHBlZENsYXNzRXJyb3LaDl9zYWZlX2Nsc19uYW1lKQFyHgAAAHIgAAAAciAAAAByIQAAANoZX3NhX3JhaXNlX2RlZmVycmVkX2NvbmZpZ58CAABzCAAAAAACBAECAQIFei5BYnN0cmFjdENvbmNyZXRlQmFzZS5fc2FfcmFpc2VfZGVmZXJyZWRfY29uZmlnTikJch0AAAByMAAAAHIxAAAAcjwAAABaDF9fbm9fdGFibGVfX3JpAAAAcmgAAAByawAAAHKAAAAAciAAAAByIAAAAHIgAAAAciEAAAByagAAAPIBAABzCgAAAAhzBAIEAgwEDDJyagAAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHNMAAAAZQBaAWQAWgJkAVoDZQRkAmQDhACDAVoFZQRkBGQFhACDAVoGZQRkBmQHhACDAVoHZQRkCGQJhACDAVoIZQRkCmQLhACDAVoJZAxTACkN2hJEZWZlcnJlZFJlZmxlY3Rpb25hlAkAAEEgaGVscGVyIGNsYXNzIGZvciBjb25zdHJ1Y3Rpb24gb2YgbWFwcGluZ3MgYmFzZWQgb24KICAgIGEgZGVmZXJyZWQgcmVmbGVjdGlvbiBzdGVwLgoKICAgIE5vcm1hbGx5LCBkZWNsYXJhdGl2ZSBjYW4gYmUgdXNlZCB3aXRoIHJlZmxlY3Rpb24gYnkKICAgIHNldHRpbmcgYSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0IHVzaW5nIGF1dG9sb2FkPVRydWUKICAgIGFzIHRoZSBgYF9fdGFibGVfX2BgIGF0dHJpYnV0ZSBvbiBhIGRlY2xhcmF0aXZlIGNsYXNzLgogICAgVGhlIGNhdmVhdCBpcyB0aGF0IHRoZSA6Y2xhc3M6YC5UYWJsZWAgbXVzdCBiZSBmdWxseQogICAgcmVmbGVjdGVkLCBvciBhdCB0aGUgdmVyeSBsZWFzdCBoYXZlIGEgcHJpbWFyeSBrZXkgY29sdW1uLAogICAgYXQgdGhlIHBvaW50IGF0IHdoaWNoIGEgbm9ybWFsIGRlY2xhcmF0aXZlIG1hcHBpbmcgaXMKICAgIGNvbnN0cnVjdGVkLCBtZWFuaW5nIHRoZSA6Y2xhc3M6YC5FbmdpbmVgIG11c3QgYmUgYXZhaWxhYmxlCiAgICBhdCBjbGFzcyBkZWNsYXJhdGlvbiB0aW1lLgoKICAgIFRoZSA6Y2xhc3M6YC5EZWZlcnJlZFJlZmxlY3Rpb25gIG1peGluIG1vdmVzIHRoZSBjb25zdHJ1Y3Rpb24KICAgIG9mIG1hcHBlcnMgdG8gYmUgYXQgYSBsYXRlciBwb2ludCwgYWZ0ZXIgYSBzcGVjaWZpYwogICAgbWV0aG9kIGlzIGNhbGxlZCB3aGljaCBmaXJzdCByZWZsZWN0cyBhbGwgOmNsYXNzOmAuVGFibGVgCiAgICBvYmplY3RzIGNyZWF0ZWQgc28gZmFyLiAgIENsYXNzZXMgY2FuIGRlZmluZSBpdCBhcyBzdWNoOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5kZWNsYXJhdGl2ZSBpbXBvcnQgZGVjbGFyYXRpdmVfYmFzZQogICAgICAgIGZyb20gc3FsYWxjaGVteS5leHQuZGVjbGFyYXRpdmUgaW1wb3J0IERlZmVycmVkUmVmbGVjdGlvbgogICAgICAgIEJhc2UgPSBkZWNsYXJhdGl2ZV9iYXNlKCkKCiAgICAgICAgY2xhc3MgTXlDbGFzcyhEZWZlcnJlZFJlZmxlY3Rpb24sIEJhc2UpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ215dGFibGUnCgogICAgQWJvdmUsIGBgTXlDbGFzc2BgIGlzIG5vdCB5ZXQgbWFwcGVkLiAgIEFmdGVyIGEgc2VyaWVzIG9mCiAgICBjbGFzc2VzIGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBhYm92ZSBmYXNoaW9uLCBhbGwgdGFibGVzCiAgICBjYW4gYmUgcmVmbGVjdGVkIGFuZCBtYXBwaW5ncyBjcmVhdGVkIHVzaW5nCiAgICA6bWV0aDpgLnByZXBhcmVgOjoKCiAgICAgICAgZW5naW5lID0gY3JlYXRlX2VuZ2luZSgic29tZWVuZ2luZTovLy4uLiIpCiAgICAgICAgRGVmZXJyZWRSZWZsZWN0aW9uLnByZXBhcmUoZW5naW5lKQoKICAgIFRoZSA6Y2xhc3M6YC5EZWZlcnJlZFJlZmxlY3Rpb25gIG1peGluIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwKICAgIGNsYXNzZXMsIHVzZWQgYXMgdGhlIGJhc2UgZm9yIHRoZSBkZWNsYXJhdGl2ZSBiYXNlIGl0c2VsZiwKICAgIG9yIHVzZWQgaW4gYSBjdXN0b20gYWJzdHJhY3QgY2xhc3MuICAgVXNpbmcgYW4gYWJzdHJhY3QgYmFzZQogICAgYWxsb3dzIHRoYXQgb25seSBhIHN1YnNldCBvZiBjbGFzc2VzIHRvIGJlIHByZXBhcmVkIGZvciBhCiAgICBwYXJ0aWN1bGFyIHByZXBhcmUgc3RlcCwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBhcHBsaWNhdGlvbnMKICAgIHRoYXQgdXNlIG1vcmUgdGhhbiBvbmUgZW5naW5lLiAgRm9yIGV4YW1wbGUsIGlmIGFuIGFwcGxpY2F0aW9uCiAgICBoYXMgdHdvIGVuZ2luZXMsIHlvdSBtaWdodCB1c2UgdHdvIGJhc2VzLCBhbmQgcHJlcGFyZSBlYWNoCiAgICBzZXBhcmF0ZWx5LCBlLmcuOjoKCiAgICAgICAgY2xhc3MgUmVmbGVjdGVkT25lKERlZmVycmVkUmVmbGVjdGlvbiwgQmFzZSk6CiAgICAgICAgICAgIF9fYWJzdHJhY3RfXyA9IFRydWUKCiAgICAgICAgY2xhc3MgUmVmbGVjdGVkVHdvKERlZmVycmVkUmVmbGVjdGlvbiwgQmFzZSk6CiAgICAgICAgICAgIF9fYWJzdHJhY3RfXyA9IFRydWUKCiAgICAgICAgY2xhc3MgTXlDbGFzcyhSZWZsZWN0ZWRPbmUpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ215dGFibGUnCgogICAgICAgIGNsYXNzIE15T3RoZXJDbGFzcyhSZWZsZWN0ZWRPbmUpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gJ215b3RoZXJ0YWJsZScKCiAgICAgICAgY2xhc3MgWWV0QW5vdGhlckNsYXNzKFJlZmxlY3RlZFR3byk6CiAgICAgICAgICAgIF9fdGFibGVuYW1lX18gPSAneWV0YW5vdGhlcnRhYmxlJwoKICAgICAgICAjIC4uLiBldGMuCgogICAgQWJvdmUsIHRoZSBjbGFzcyBoaWVyYXJjaGllcyBmb3IgYGBSZWZsZWN0ZWRPbmVgYCBhbmQKICAgIGBgUmVmbGVjdGVkVHdvYGAgY2FuIGJlIGNvbmZpZ3VyZWQgc2VwYXJhdGVseTo6CgogICAgICAgIFJlZmxlY3RlZE9uZS5wcmVwYXJlKGVuZ2luZV9vbmUpCiAgICAgICAgUmVmbGVjdGVkVHdvLnByZXBhcmUoZW5naW5lX3R3bykKCiAgICBjAgAAAAAAAAAHAAAACAAAAEMAAABzrgAAAHQAoAF8AKEBfQJ4nnwCRABdln0DfACgAnwDagN8AaECAQB8A6AEoQABAHwDagVqBn0EfARqB2oIfQV4anwEagmgCqEARABdXH0GdAt8BnQMag2DAnJGfAZqDmQBawlyRnQLfAZqDnQPgwJyfHwAoBB8BmoOfAGhAgEAcUZ0C3wGag50EYMCckZ8BmoOBABqEnwAoBN8AXwFoQJmATcAAgBfEnFGVwBxEFcAZAFTACkCemNSZWZsZWN0IGFsbCA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cyBmb3IgYWxsIGN1cnJlbnQKICAgICAgICA6Y2xhc3M6YC5EZWZlcnJlZFJlZmxlY3Rpb25gIHN1YmNsYXNzZXNOKRRyBgAAAFoQY2xhc3Nlc19mb3JfYmFzZdoQX3NhX2RlY2xfcHJlcGFyZXJcAAAAcnUAAAByHgAAAHJkAAAAciUAAAByHAAAAFoGX3Byb3Bz2gZ2YWx1ZXNyUgAAAHIQAAAAWhRSZWxhdGlvbnNoaXBQcm9wZXJ0eVoJc2Vjb25kYXJ5chYAAADaDl9yZWZsZWN0X3RhYmxlcggAAABaCl9yZXNvbHZlcnPaG19zYV9kZWZlcnJlZF90YWJsZV9yZXNvbHZlcikHch4AAADaBmVuZ2luZXJ3AAAAWgZ0aGluZ3lyVQAAAHIcAAAA2gNyZWxyIAAAAHIgAAAAciEAAADaB3ByZXBhcmXvAgAAcxwAAAAABQoBCgEOAQgBCAEIARACDAEKAgwBEAEMAQgBehpEZWZlcnJlZFJlZmxlY3Rpb24ucHJlcGFyZWMDAAAAAAAAAAQAAAADAAAAAwAAAHMUAAAAhwCHAYcCZgNkAWQChAh9A3wDUwApA05jAQAAAAAAAAACAAAABAAAABMAAABzGgAAAHQAfACIAoMCfQGIAKABfAGIAaECAQB8AVMAKQFOKQJyFgAAAHKEAAAAKQJyLAAAANoCdDEpA3IeAAAAcoYAAAByHAAAAHIgAAAAciEAAADaCF9yZXNvbHZlCAMAAHMGAAAAAAEKAQwBekBEZWZlcnJlZFJlZmxlY3Rpb24uX3NhX2RlZmVycmVkX3RhYmxlX3Jlc29sdmVyLjxsb2NhbHM+Ll9yZXNvbHZlciAAAAApBHIeAAAAcoYAAAByHAAAAHKKAAAAciAAAAApA3IeAAAAcoYAAAByHAAAAHIhAAAAcoUAAAAGAwAAcwQAAAAAAhAFei5EZWZlcnJlZFJlZmxlY3Rpb24uX3NhX2RlZmVycmVkX3RhYmxlX3Jlc29sdmVyYwMAAAAAAAAAAwAAAAQAAABDAAAAcxgAAAB8AWQAawlyFHwAoAB8AXwCoQIBAGQAUwApAU4pAXKEAAAAKQNyHgAAAHJcAAAAcoYAAAByIAAAAHIgAAAAciEAAAByggAAAA8DAABzBAAAAAAGCAF6I0RlZmVycmVkUmVmbGVjdGlvbi5fc2FfZGVjbF9wcmVwYXJlYwEAAAAAAAAAAQAAAAYAAABDAAAAcxwAAAB0AGoBfABkAXQAoAJ8AKEBFgBkAo0CggFkAFMAKQNOeoZDbGFzcyAlcyBpcyBhIHN1YmNsYXNzIG9mIERlZmVycmVkUmVmbGVjdGlvbi4gIE1hcHBpbmdzIGFyZSBub3QgcHJvZHVjZWQgdW50aWwgdGhlIC5wcmVwYXJlKCkgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY2xhc3MgaGllcmFyY2h5LikBcnwAAAApA3J9AAAAcn4AAAByfwAAACkBch4AAAByIAAAAHIgAAAAciEAAABygAAAABgDAABzCAAAAAACBAECAQIDeixEZWZlcnJlZFJlZmxlY3Rpb24uX3NhX3JhaXNlX2RlZmVycmVkX2NvbmZpZ2MDAAAAAAAAAAMAAAAJAAAAQwAAAHMgAAAAdAB8AWoBfAFqAmQBZAJkAXwCfAFqA2QDjQcBAGQAUwApBE5URikFWg9leHRlbmRfZXhpc3RpbmdaEGF1dG9sb2FkX3JlcGxhY2VaCGF1dG9sb2FkWg1hdXRvbG9hZF93aXRo2gZzY2hlbWEpBHIWAAAAcjUAAAByHAAAAHKLAAAAKQNyHgAAANoFdGFibGVyhgAAAHIgAAAAciAAAAByIQAAAHKEAAAAIgMAAHMQAAAAAAICAQQBBAECAQIBAgECAXohRGVmZXJyZWRSZWZsZWN0aW9uLl9yZWZsZWN0X3RhYmxlTikKch0AAAByMAAAAHIxAAAAcjwAAAByaQAAAHKIAAAAcoUAAAByggAAAHKAAAAAcoQAAAByIAAAAHIgAAAAciAAAAByIQAAAHKBAAAArAIAAHMMAAAACEEEAgwXDAkMCQwKcoEAAABjAQAAAAAAAAACAAAABgAAAEMAAABzQAAAAHQAfACDAX0BfAFkAGsIcjx0AaACfAChAXI8dAGgA3wAoQEBAHQEagV8AGQBdASgBnwAoQEWAGQCjQKCAXwBUwApA056T0NsYXNzICVzIGhhcyBhIGRlZmVycmVkIG1hcHBpbmcgb24gaXQuICBJdCBpcyBub3QgeWV0IHVzYWJsZSBhcyBhIG1hcHBlZCBjbGFzcy4pAXJ8AAAAKQdyEgAAAHIGAAAAWgdoYXNfY2xzWhZyYWlzZV91bm1hcHBlZF9mb3JfY2xzcn0AAAByfgAAAHJ/AAAAKQJyHgAAAHJeAAAAciAAAAByIAAAAHIhAAAA2hJfaW5zcGVjdF9kZWNsX21ldGEvAwAAcxIAAAAAAggBCAEKAQoBBAECAQIBEAJyjQAAACkBRik0cjwAAAByQgAAAHJQAAAA2gRiYXNlcgMAAAByBAAAAHIFAAAAcgYAAAByBwAAAFoLY2xzcmVnaXN0cnlyCAAAANoAcgoAAAByCwAAAHIMAAAAWgNvcm1yDQAAAHIOAAAAcn0AAAByDwAAAHIQAAAAchEAAAByMwAAAFoIb3JtLmJhc2VyEgAAAHITAAAAWghvcm0udXRpbHIUAAAAcosAAAByFQAAAHIWAAAAchcAAAByGAAAAHIZAAAAciIAAAByJgAAAHIoAAAAcicAAAByNwAAAHI5AAAAWhBfTWFwcGVkQXR0cmlidXRl2ghwcm9wZXJ0eXI6AAAAckgAAADaBm9iamVjdHJZAAAAcloAAAByWwAAAHJqAAAAcoEAAABaCV9pbnNwZWN0c3KNAAAAciAAAAByIAAAAHIgAAAAciEAAADaCDxtb2R1bGU+BwAAAHNgAAAABAMIAQgCDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAwgPCBMQDQooCBkUfwAIEA4CAQIBAgECAQIBAgECAQxYCCUQQxB/ADsQfwAE
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
api.cpython-37.pyc
27.13 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
base.cpython-37.pyc
18.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
clsregistry.cpython-37.pyc
9.82 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
719 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).