REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 69.78 KB
Close
/opt/hc_python/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/__pycache__/session.cpython-312.pyc
Text
Base64
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dXRlT3B0aW9uc1BhcmFtZXRlcikB2gpkaXNwYXRjaGVyKQHaEF9JZGVudGl0eUtleVR5cGUpAdoCX08pAdoaT3JtRXhlY3V0ZU9wdGlvbnNQYXJhbWV0ZXIpAdoLSWRlbnRpdHlNYXApAdoJT1JNT3B0aW9uKQHaDl9CaW5kQXJndW1lbnRzKQHaDl9FbnRpdHlCaW5kS2V5KQHaE19QS0lkZW50aXR5QXJndW1lbnQpAdoMX1Nlc3Npb25CaW5kKQHaD19TZXNzaW9uQmluZEtleSkB2glfSW5mb1R5cGUpAdoKRXhlY3V0YWJsZSkB2gpVcGRhdGVCYXNlKQHaDUNsYXVzZUVsZW1lbnQpAdoSRm9yVXBkYXRlUGFyYW1ldGVyKQHaEFR5cGVkUmV0dXJuc1Jvd3MpAnIoAAAAcicAAADaAl9Q2gJfVCkB2gVib3VuZNoOcHJlYnVmZmVyX3Jvd3NU2g5zdHJlYW1fcmVzdWx0c2MAAAAAAAAAAAAAAAAEAAAAAAAAAfM2AAAAlwBlAFoBZABaAmQBWgMCAEcAZAKEAGQDqwIAAAAAAABaBGUFZAZkBIQEqwAAAAAAAABaBnkFKQfaCkFzeW5jQXR0cnNhMAgAAE1peGluIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGFuIGF3YWl0YWJsZSBhY2Nlc3NvciBmb3IgYWxsIGF0dHJpYnV0ZXMuCgogICAgRS5nLjo6CgogICAgICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCiAgICAgICAgZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBGb3JlaWduS2V5CiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBmdW5jCiAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBBc3luY0F0dHJzCiAgICAgICAgZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgRGVjbGFyYXRpdmVCYXNlCiAgICAgICAgZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgTWFwcGVkCiAgICAgICAgZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgbWFwcGVkX2NvbHVtbgogICAgICAgIGZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IHJlbGF0aW9uc2hpcAoKCiAgICAgICAgY2xhc3MgQmFzZShBc3luY0F0dHJzLCBEZWNsYXJhdGl2ZUJhc2UpOgogICAgICAgICAgICBwYXNzCgoKICAgICAgICBjbGFzcyBBKEJhc2UpOgogICAgICAgICAgICBfX3RhYmxlbmFtZV9fID0gImEiCgogICAgICAgICAgICBpZDogTWFwcGVkW2ludF0gPSBtYXBwZWRfY29sdW1uKHByaW1hcnlfa2V5PVRydWUpCiAgICAgICAgICAgIGRhdGE6IE1hcHBlZFtzdHJdCiAgICAgICAgICAgIGJzOiBNYXBwZWRbTGlzdFtCXV0gPSByZWxhdGlvbnNoaXAoKQoKCiAgICAgICAgY2xhc3MgQihCYXNlKToKICAgICAgICAgICAgX190YWJsZW5hbWVfXyA9ICJiIgogICAgICAgICAgICBpZDogTWFwcGVkW2ludF0gPSBtYXBwZWRfY29sdW1uKHByaW1hcnlfa2V5PVRydWUpCiAgICAgICAgICAgIGFfaWQ6IE1hcHBlZFtpbnRdID0gbWFwcGVkX2NvbHVtbihGb3JlaWduS2V5KCJhLmlkIikpCiAgICAgICAgICAgIGRhdGE6IE1hcHBlZFtzdHJdCgogICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jQXR0cnNgIG1peGluIGlzIGFwcGxpZWQgdG8KICAgIHRoZSBkZWNsYXJhdGl2ZSBgYEJhc2VgYCBjbGFzcyB3aGVyZSBpdCB0YWtlcyBlZmZlY3QgZm9yIGFsbCBzdWJjbGFzc2VzLgogICAgVGhpcyBtaXhpbiBhZGRzIGEgc2luZ2xlIG5ldyBhdHRyaWJ1dGUKICAgIDphdHRyOmBfYXN5bmNpby5Bc3luY0F0dHJzLmF3YWl0YWJsZV9hdHRyc2AgdG8gYWxsIGNsYXNzZXMsIHdoaWNoIHdpbGwKICAgIHlpZWxkIHRoZSB2YWx1ZSBvZiBhbnkgYXR0cmlidXRlIGFzIGFuIGF3YWl0YWJsZS4gVGhpcyBhbGxvd3MgYXR0cmlidXRlcwogICAgd2hpY2ggbWF5IGJlIHN1YmplY3QgdG8gbGF6eSBsb2FkaW5nIG9yIGRlZmVycmVkIC8gdW5leHBpcnkgbG9hZGluZyB0byBiZQogICAgYWNjZXNzZWQgc3VjaCB0aGF0IElPIGNhbiBzdGlsbCBiZSBlbWl0dGVkOjoKCiAgICAgICAgYTEgPSAoYXdhaXQgYXN5bmNfc2Vzc2lvbi5zY2FsYXJzKHNlbGVjdChBKS53aGVyZShBLmlkID09IDUpKSkub25lKCkKCiAgICAgICAgIyB1c2UgdGhlIGxhenkgbG9hZGVyIG9uIGBgYTEuYnNgYCB2aWEgdGhlIGBgLmF3YWl0YWJsZV9hdHRyc2BgCiAgICAgICAgIyBpbnRlcmZhY2UsIHNvIHRoYXQgaXQgbWF5IGJlIGF3YWl0ZWQKICAgICAgICBmb3IgYjEgaW4gYXdhaXQgYTEuYXdhaXRhYmxlX2F0dHJzLmJzOgogICAgICAgICAgICBwcmludChiMSkKCiAgICBUaGUgOmF0dHI6YF9hc3luY2lvLkFzeW5jQXR0cnMuYXdhaXRhYmxlX2F0dHJzYCBwZXJmb3JtcyBhIGNhbGwgYWdhaW5zdCB0aGUKICAgIGF0dHJpYnV0ZSB0aGF0IGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0byB1c2luZyB0aGUKICAgIDptZXRoOmBfYXN5bmNpby5Bc3luY1Nlc3Npb24ucnVuX3N5bmNgIG1ldGhvZCwgZS5nLjo6CgogICAgICAgIGZvciBiMSBpbiBhd2FpdCBhc3luY19zZXNzaW9uLnJ1bl9zeW5jKGxhbWJkYSBzZXNzOiBhMS5icyk6CiAgICAgICAgICAgIHByaW50KGIxKQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMC4xMwoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6cmVmOmBhc3luY2lvX29ybV9hdm9pZF9sYXp5bG9hZHNgCgogICAgYwAAAAAAAAAAAAAAAAIAAAAAAAAB8yAAAACXAGUAWgFkAFoCZAFaA2QFZAKEBFoEZAZkA4QEWgV5BCkH+hxBc3luY0F0dHJzLl9Bc3luY0F0dHJHZXRpdGVt2glfaW5zdGFuY2VjAgAAAAAAAAAAAAAAAgAAAAMAAAHzEgAAAJcAfAF8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aGUgZmlyc3QKICAgICAgICBhcmd1bWVudC4KCiAgICAgICAgVGhpcyBtZXRob2QgYWxsb3dzIHRyYWRpdGlvbmFsIHN5bmNocm9ub3VzIFNRTEFsY2hlbXkgZnVuY3Rpb25zIHRvCiAgICAgICAgcnVuIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBhc3luY2lvIGFwcGxpY2F0aW9uLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIGRlZiBzb21lX2J1c2luZXNzX21ldGhvZChzZXNzaW9uOiBTZXNzaW9uLCBwYXJhbTogc3RyKSAtPiBzdHI6CiAgICAgICAgICAgICAgICAiIiJBIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBhd2FpdGluZwoKICAgICAgICAgICAgICAgIDpwYXJhbSBzZXNzaW9uOiBhIFNRTEFsY2hlbXkgU2Vzc2lvbiwgdXNlZCBzeW5jaHJvbm91c2x5CgogICAgICAgICAgICAgICAgOnJldHVybjogYW4gb3B0aW9uYWwgcmV0dXJuIHZhbHVlIGlzIHN1cHBvcnRlZAoKICAgICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgICAgc2Vzc2lvbi5hZGQoTXlPYmplY3QocGFyYW09cGFyYW0pKQogICAgICAgICAgICAgICAgc2Vzc2lvbi5mbHVzaCgpCiAgICAgICAgICAgICAgICByZXR1cm4gInN1Y2Nlc3MiCgoKICAgICAgICAgICAgYXN5bmMgZGVmIGRvX3NvbWV0aGluZ19hc3luYyhhc3luY19lbmdpbmU6IEFzeW5jRW5naW5lKSAtPiBOb25lOgogICAgICAgICAgICAgICAgIiIiYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCB1c2VzIGF3YWl0aW5nIiIiCgogICAgICAgICAgICAgICAgd2l0aCBBc3luY1Nlc3Npb24oYXN5bmNfZW5naW5lKSBhcyBhc3luY19zZXNzaW9uOgogICAgICAgICAgICAgICAgICAgICMgcnVuIHNvbWVfYnVzaW5lc3NfbWV0aG9kKCkgd2l0aCBhIHN5bmMtc3R5bGUKICAgICAgICAgICAgICAgICAgICAjIFNlc3Npb24sIHByb3hpZWQgaW50byBhbiBhd2FpdGFibGUKICAgICAgICAgICAgICAgICAgICByZXR1cm5fY29kZSA9IGF3YWl0IGFzeW5jX3Nlc3Npb24ucnVuX3N5bmMoCiAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVfYnVzaW5lc3NfbWV0aG9kLCBwYXJhbT0icGFyYW0xIgogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICBwcmludChyZXR1cm5fY29kZSkKCiAgICAgICAgVGhpcyBtZXRob2QgbWFpbnRhaW5zIHRoZSBhc3luY2lvIGV2ZW50IGxvb3AgYWxsIHRoZSB3YXkgdGhyb3VnaAogICAgICAgIHRvIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGJ5IHJ1bm5pbmcgdGhlIGdpdmVuIGNhbGxhYmxlIGluIGEKICAgICAgICBzcGVjaWFsbHkgaW5zdHJ1bWVudGVkIGdyZWVubGV0LgoKICAgICAgICAuLiB0aXA6OgoKICAgICAgICAgICAgVGhlIHByb3ZpZGVkIGNhbGxhYmxlIGlzIGludm9rZWQgaW5saW5lIHdpdGhpbiB0aGUgYXN5bmNpbyBldmVudAogICAgICAgICAgICBsb29wLCBhbmQgd2lsbCBibG9jayBvbiB0cmFkaXRpb25hbCBJTyBjYWxscy4gIElPIHdpdGhpbiB0aGlzCiAgICAgICAgICAgIGNhbGxhYmxlIHNob3VsZCBvbmx5IGNhbGwgaW50byBTUUxBbGNoZW15J3MgYXN5bmNpbyBkYXRhYmFzZQogICAgICAgICAgICBBUElzIHdoaWNoIHdpbGwgYmUgcHJvcGVybHkgYWRhcHRlZCB0byB0aGUgZ3JlZW5sZXQgY29udGV4dC4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6Y2xhc3M6YC5Bc3luY0F0dHJzYCAgLSBhIG1peGluIGZvciBPUk0gbWFwcGVkIGNsYXNzZXMgdGhhdCBwcm92aWRlcwogICAgICAgICAgICBhIHNpbWlsYXIgZmVhdHVyZSBtb3JlIHN1Y2NpbmN0bHkgb24gYSBwZXItYXR0cmlidXRlIGJhc2lzCgogICAgICAg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OmBfb3JtLlNlc3Npb24uZ2V0X2JpbmRgIHNjaGVtZXMgdGhhdCB3b3JrIHdpdGgKICAgICAgICAgICAgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCBhbmQgOmNsYXNzOmAuQXN5bmNFbmdpbmVgLgoKICAgICAgICBUaGUgcGF0dGVybiBpbnRyb2R1Y2VkIGF0IDpyZWY6YHNlc3Npb25fY3VzdG9tX3BhcnRpdGlvbmluZ2AKICAgICAgICBpbGx1c3RyYXRlcyBob3cgdG8gYXBwbHkgYSBjdXN0b20gYmluZC1sb29rdXAgc2NoZW1lIHRvIGEKICAgICAgICA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgZ2l2ZW4gYSBzZXQgb2YgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgb2JqZWN0cy4KICAgICAgICBUbyBhcHBseSBhIGNvcnJlc3BvbmRpbmcgOm1ldGg6YF9vcm0uU2Vzc2lvbi5nZXRfYmluZGAgaW1wbGVtZW50YXRpb24KICAgICAgICBmb3IgdXNlIHdpdGggYSA6Y2xhc3M6YC5Bc3luY1Nlc3Npb25gIGFuZCA6Y2xhc3M6YC5Bc3luY0VuZ2luZWAKICAgICAgICBvYmplY3RzLCBjb250aW51ZSB0byBzdWJjbGFzcyA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgYW5kIGFwcGx5IGl0IHRvCiAgICAgICAgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCB1c2luZwogICAgICAgIDpwYXJhbXJlZjpgLkFzeW5jU2Vzc2lvbi5zeW5jX3Nlc3Npb25fY2xhc3NgLiBUaGUgaW5uZXIgbWV0aG9kIG11c3QKICAgICAgICBjb250aW51ZSB0byByZXR1cm4gOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUKICAgICAgICBhY3F1aXJlZCBmcm9tIGEgOmNsYXNzOmBfYXN5bmNpby5Bc3luY0VuZ2luZWAgdXNpbmcgdGhlCiAgICAgICAgOmF0dHI6YF9hc3luY2lvLkFzeW5jRW5naW5lLnN5bmNfZW5naW5lYCBhdHRyaWJ1dGU6OgoKICAgICAgICAgICAgIyB1c2luZyBleGFtcGxlIGZyb20gIkN1c3RvbSBWZXJ0aWNhbCBQYXJ0aXRpb25pbmciCgoKICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBBc3luY1Nlc3Npb24KICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBjcmVhdGVfYXN5bmNfZW5naW5lCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5leHQuYXN5bmNpbyBpbXBvcnQgYXN5bmNfc2Vzc2lvbm1ha2VyCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IFNlc3Npb24KCiAgICAgICAgICAgICMgY29uc3RydWN0IGFzeW5jIGVuZ2luZXMgdy8gYXN5bmMgZHJpdmVycwogICAgICAgICAgICBlbmdpbmVzID0gewogICAgICAgICAgICAgICAgImxlYWRlciI6IGNyZWF0ZV9hc3luY19lbmdpbmUoInNxbGl0ZSthaW9zcWxpdGU6Ly8vbGVhZGVyLmRiIiksCiAgICAgICAgICAgICAgICAib3RoZXIiOiBjcmVhdGVfYXN5bmNfZW5naW5lKCJzcWxpdGUrYWlvc3FsaXRlOi8vL290aGVyLmRiIiksCiAgICAgICAgICAgICAgICAiZm9sbG93ZXIxIjogY3JlYXRlX2FzeW5jX2VuZ2luZSgic3FsaXRlK2Fpb3NxbGl0ZTovLy9mb2xsb3dlcjEuZGIiKSwKICAgICAgICAgICAgICAgICJmb2xsb3dlcjIiOiBjcmVhdGVfYXN5bmNfZW5naW5lKCJzcWxpdGUrYWlvc3FsaXRlOi8vL2ZvbGxvd2VyMi5kYiIpLAogICAgICAgICAgICB9CgoKICAgICAgICAgICAgY2xhc3MgUm91dGluZ1Nlc3Npb24oU2Vzc2lvbik6CiAgICAgICAgICAgICAgICBkZWYgZ2V0X2JpbmQoc2VsZiwgbWFwcGVyPU5vbmUsIGNsYXVzZT1Ob25lLCAqKmt3KToKICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiBnZXRfYmluZCgpLCByZXR1cm4gc3luYyBlbmdpbmVzCiAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVyIGFuZCBpc3N1YmNsYXNzKG1hcHBlci5jbGFzc18sIE15T3RoZXJDbGFzcyk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWyJvdGhlciJdLnN5bmNfZW5naW5lCiAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9mbHVzaGluZyBvciBpc2luc3RhbmNlKGNsYXVzZSwgKFVwZGF0ZSwgRGVsZXRlKSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWyJsZWFkZXIiXS5zeW5jX2VuZ2luZQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVzWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLmNob2ljZShbImZvbGxvd2VyMSIsICJmb2xsb3dlcjIiXSkKICAgICAgICAgICAgICAgICAgICAgICAgXS5zeW5jX2VuZ2luZQoKCiAgICAgICAgICAgICMgYXBwbHkgdG8gQXN5bmNTZXNzaW9uIHVzaW5nIHN5bmNfc2Vzc2lvbl9jbGFzcwogICAgICAgICAgICBBc3luY1Nlc3Npb25NYWtlciA9IGFzeW5jX3Nlc3Npb25tYWtlcihzeW5jX3Nlc3Npb25fY2xhc3M9Um91dGluZ1Nlc3Npb24pCgogICAgICAgIFRoZSA6bWV0aDpgX29ybS5TZXNzaW9uLmdldF9iaW5kYCBtZXRob2QgaXMgY2FsbGVkIGluIGEgbm9uLWFzeW5jaW8sCiAgICAgICAgaW1wbGljaXRseSBub24tYmxvY2tpbmcgY29udGV4dCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgT1JNIGV2ZW50IGhvb2tzCiAgICAgICAgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZva2VkIHZpYSA6bWV0aDpgLkFzeW5jU2Vzc2lvbi5ydW5fc3luY2AsIHNvCiAgICAgICAgcm91dGluZXMgdGhhdCB3aXNoIHRvIHJ1biBTUUwgY29tbWFuZHMgaW5zaWRlIG9mCiAgICAgICAgOm1ldGg6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bWFsbHkgb2NjdXIgd2hlbiB0aGUgc2Vzc2lvbi1sZXZlbAogICAgICAgIHRyYW5zYWN0aW9uIGlzIGJlZ3VuLCBhcyBkYXRhYmFzZSB0cmFuc2FjdGlvbnMgYmVnaW4gb24gYW4KICAgICAgICBvbi1kZW1hbmQgYmFzaXMuICBIb3dldmVyLCB0aGUgYmVnaW4gYmxvY2sgaXMgYXN5bmMgdG8gYWNjb21tb2RhdGUKICAgICAgICBmb3IgYSA6bWV0aDpgX29ybS5TZXNzaW9uRXZlbnRzLmFmdGVyX3RyYW5zYWN0aW9uX2NyZWF0ZWAKICAgICAgICBldmVudCBob29rIHRoYXQgbWF5IHBlcmZvcm0gSU8uCgogICAgICAgIEZvciBhIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgT1JNIGJlZ2luLCBzZWUKICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmJlZ2luYC4KCiAgICAgICAgqQFy3AAAAHJgAAAAcwEAAAAgclAAAADaBWJlZ2luehJBc3luY1Nlc3Npb24uYmVnaW63AwAAcw8AAACAAPQqABAnoHTTDyzQCCxyUgAAAGMBAAAAAAAAAAAAAAAEAAAAAwAAAfMcAAAAlwB0AQAAAAAAAAAAfABkAawCqwIAAAAAAABTACkDYfsBAABSZXR1cm4gYW4gOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25UcmFuc2FjdGlvbmAgb2JqZWN0CiAgICAgICAgd2hpY2ggd2lsbCBiZWdpbiBhICJuZXN0ZWQiIHRyYW5zYWN0aW9uLCBlLmcuIFNBVkVQT0lOVC4KCiAgICAgICAgQmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiA6bWV0aDpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uLmJlZ2luYC4KCiAgICAgICAgRm9yIGEgZ2VuZXJhbCBkZXNjcmlwdGlvbiBvZiBPUk0gYmVnaW4gbmVzdGVkLCBzZWUKICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmJlZ2luX25lc3RlZGAuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgYWlvc3FsaXRlX3NlcmlhbGl6YWJsZWAgLSBzcGVjaWFs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Y29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgY2xhc3Mgb24KICAgICAgICAgICAgYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIE9iamVjdHMgdGhhdCBhcmUgaW4gdGhlIDp0ZXJtOmB0cmFuc2llbnRgIHN0YXRlIHdoZW4gcGFzc2VkIHRvIHRoZQogICAgICAgIDptZXRoOmBfb3JtLlNlc3Npb24uYWRkYCBtZXRob2Qgd2lsbCBtb3ZlIHRvIHRoZQogICAgICAgIDp0ZXJtOmBwZW5kaW5nYCBzdGF0ZSwgdW50aWwgdGhlIG5leHQgZmx1c2gsIGF0IHdoaWNoIHBvaW50IHRoZXkKICAgICAgICB3aWxsIG1vdmUgdG8gdGhlIDp0ZXJtOmBwZXJzaXN0ZW50YCBzdGF0ZS4KCiAgICAgICAgT2JqZWN0cyB0aGF0IGFyZSBpbiB0aGUgOnRlcm06YGRldGFjaGVkYCBzdGF0ZSB3aGVuIHBhc3NlZCB0byB0aGUKICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmFkZGAgbWV0aG9kIHdpbGwgbW92ZSB0byB0aGUgOnRlcm06YHBlcnNpc3RlbnRgCiAgICAgICAgc3RhdGUgZGlyZWN0bHkuCgogICAgICAgIElmIHRoZSB0cmFuc2FjdGlvbiB1c2VkIGJ5IHRoZSA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgaXMgcm9sbGVkIGJhY2ssCiAgICAgICAgb2JqZWN0cyB3aGljaCB3ZXJlIHRyYW5zaWVudCB3aGVuIHRoZXkgd2VyZSBwYXNzZWQgdG8KICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmFkZGAgd2lsbCBiZSBtb3ZlZCBiYWNrIHRvIHRoZQogICAgICAgIDp0ZXJtOmB0cmFuc2llbnRgIHN0YXRlLCBhbmQgd2lsbCBubyBsb25nZXIgYmUgcHJlc2VudCB3aXRoaW4gdGhpcwogICAgICAgIDpjbGFzczpgX29ybS5TZXNzaW9uYC4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX29ybS5TZXNzaW9uLmFkZF9hbGxgCgogICAgICAgICAgICA6cmVmOmBzZXNzaW9uX2FkZGluZ2AgLSBhdCA6cmVmOmBzZXNzaW9uX2Jhc2ljc2AKCgogICAgICAgICkB2gVfd2FybikCcoYAAAByZwAAACkDck8AAABylQAAAHIPAQAAcwMAAAAgICByUAAAAHJnAAAAehBBc3luY1Nlc3Npb24uYWRkYgQAAHMfAAAAgADwQAEAEBSPfYl91w8g0Q8goBiwFdAPINMPN9AIN3JSAAAAYwIAAAAAAAAAAAAAAAMAAAADAAAB8zgAAACXAHwAagAAAAAAAAAAAAAAAAAAAAAAAABqAwAAAAAAAAAAAAAAAAAAAAAAAHwBqwEAAAAAAABTACkBYdMBAABBZGQgdGhlIGdpdmVuIGNvbGxlY3Rpb24gb2YgaW5zdGFuY2VzIHRvIHRoaXMgOmNsYXNzOmBfb3JtLlNlc3Npb25gLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX29ybS5TZXNzaW9uYCBjbGFzcyBvbgogICAgICAgICAgICBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciA6bWV0aDpgX29ybS5TZXNzaW9uLmFkZGAgZm9yIGEgZ2VuZXJhbAogICAgICAgIGJlaGF2aW9yYWwgZGVzY3JpcHRpb24uCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9vcm0uU2Vzc2lvbi5hZGRgCgogICAgICAgICAgICA6cmVmOmBzZXNzaW9uX2FkZGluZ2AgLSBhdCA6cmVmOmBzZXNzaW9uX2Jhc2ljc2AKCgogICAgICAgICkCcoYAAAByaAAAACkCck8AAADaCWluc3RhbmNlc3MCAAAAICByUAAAAHJoAAAAehRBc3luY1Nlc3Npb24uYWRkX2FsbIQEAABzGQAAAIAA8CgAEBSPfYl91w8k0Q8koFnTDy/QCC9yUgAAAGMDAAAAAAAAAAAAAAAEAAAAAwAAAfM8AAAAlwB8AGoAAAAAAAAAAAAAAAAAAAAAAAAAagMAAAAAAAAAAAAAAAAAAAAAAAB8AXwCrAGrAgAAAAAAAFMAKQJhYQYAAEV4cGlyZSB0aGUgYXR0cmlidXRlcyBvbiBhbiBpbnN0YW5jZS4KCiAgICAgICAgLi4gY29udGFpbmVyOjogY2xhc3NfYmFzZXMKCiAgICAgICAgICAgIFByb3hpZWQgZm9yIHRoZSA6Y2xhc3M6YF9vcm0uU2Vzc2lvbmAgY2xhc3Mgb24KICAgICAgICAgICAgYmVoYWxmIG9mIHRoZSA6Y2xhc3M6YF9hc3luY2lvLkFzeW5jU2Vzc2lvbmAgY2xhc3MuCgogICAgICAgIE1hcmtzIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGluc3RhbmNlIGFzIG91dCBvZiBkYXRlLiBXaGVuIGFuIGV4cGlyZWQKICAgICAgICBhdHRyaWJ1dGUgaXMgbmV4dCBhY2Nlc3NlZCwgYSBxdWVyeSB3aWxsIGJlIGlzc3VlZCB0byB0aGUKICAgICAgICA6Y2xhc3M6YC5TZXNzaW9uYCBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uYWwgY29udGV4dCBpbiBvcmRlciB0bwogICAgICAgIGxvYWQgYWxsIGV4cGlyZWQgYXR0cmlidXRlcyBmb3IgdGhlIGdpdmVuIGluc3RhbmNlLiAgIE5vdGUgdGhhdAogICAgICAgIGEgaGlnaGx5IGlzb2xhdGVkIHRyYW5zYWN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlcyBhcyB3ZXJlCiAgICAgICAgcHJldmlvdXNseSByZWFkIGluIHRoYXQgc2FtZSB0cmFuc2FjdGlvbiwgcmVnYXJkbGVzcyBvZiBjaGFuZ2VzCiAgICAgICAgaW4gZGF0YWJhc2Ugc3RhdGUgb3V0c2lkZSBvZiB0aGF0IHRyYW5zYWN0aW9uLgoKICAgICAgICBUbyBleHBpcmUgYWxsIG9iamVjdHMgaW4gdGhlIDpjbGFzczpgLlNlc3Npb25gIHNpbXVsdGFuZW91c2x5LAogICAgICAgIHVzZSA6bWV0aDpgU2Vzc2lvbi5leHBpcmVfYWxsYC4KCiAgICAgICAgVGhlIDpjbGFzczpgLlNlc3Npb25gIG9iamVjdCdzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8KICAgICAgICBleHBpcmUgYWxsIHN0YXRlIHdoZW5ldmVyIHRoZSA6bWV0aDpgU2Vzc2lvbi5yb2xsYmFja2AKICAgICAgICBvciA6bWV0aDpgU2Vzc2lvbi5jb21taXRgIG1ldGhvZHMgYXJlIGNhbGxlZCwgc28gdGhhdCBuZXcKICAgICAgICBzdGF0ZSBjYW4gYmUgbG9hZGVkIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAgIEZvciB0aGlzIHJlYXNvbiwKICAgICAgICBjYWxsaW5nIDptZXRoOmBTZXNzaW9uLmV4cGlyZWAgb25seSBtYWtlcyBzZW5zZSBmb3IgdGhlIHNwZWNpZmljCiAgICAgICAgY2FzZSB0aGF0IGEgbm9uLU9STSBTUUwgc3RhdGVtZW50IHdhcyBlbWl0dGVkIGluIHRoZSBjdXJyZW50CiAgICAgICAgdHJhbnNhY3Rpb24uCgogICAgICAgIDpwYXJhbSBpbnN0YW5jZTogVGhlIGluc3RhbmNlIHRvIGJlIHJlZnJlc2hlZC4KICAgICAgICA6cGFyYW0gYXR0cmlidXRlX25hbWVzOiBvcHRpb25hbCBsaXN0IG9mIHN0cmluZyBhdHRyaWJ1dGUgbmFtZXMKICAgICAgICAgIGluZGljYXRpbmcgYSBzdWJzZXQgb2YgYXR0cmlidXRlcyB0byBiZSBleHBpcmVkLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YHNlc3Npb25fZXhwaXJlYCAtIGludHJvZHVjdG9yeSBtYXRlcmlhbAoKICAgICAgICAgICAgOm1ldGg6YC5TZXNzaW9uLmV4cGlyZWAKCiAgICAgICAgICAgIDptZXRoOmAuU2Vzc2lvbi5yZWZyZXNoYAoKICAgICAgICAgICAgOm1ldGg6YF9vcm0uUXVlcnkucG9wdWxhdGVfZXhpc3RpbmdgCgoKICAgICAgICApAXKSAAAAKQJyhgAAAHJpAAAAKQNyTwAAAHKVAAAAcpIAAABzAwAAACAgIHJQAAAAcmkAAAB6E0FzeW5jU2Vzc2lvbi5leHBpcmWaBAAAcx8AAACAAPBcAQAQFI99iX3XDyPRDyOgSLhv0A8j0w9O0AhOclIAAABjAQAAAAAAAAAAAAAAAgAAAAMAAAHzNgAAAJcAfABqAAAAAAAAAAAAAAAAAAAAAAAAAGoDAAAAAAAAAAAAAAAAAAAAAAAAqwAAAAAAAABTACkBYWsFAABFeHBpcmVzIGFsbCBwZXJzaXN0ZW50IGluc3RhbmNlcyB3aXRoaW4gdGhpcyBTZXNzaW9uLgoKICAgICAgICAuLiBjb250YWluZXI6OiBjbGFzc19iYXNlcwoKICAgICAgICAgICAgUHJveGllZCBmb3IgdGhlIDpjbGFzczpgX29ybS5TZXNzaW9uYCBjbGFzcyBvbgogICAgICAgICAgICBiZWhhbGYgb2YgdGhlIDpjbGFzczpgX2FzeW5jaW8uQXN5bmNTZXNzaW9uYCBjbGFzcy4KCiAgICAgICAgV2hlbiBhbnkgYXR0cmlidXRlcyBvbiBhIHBlcnNpc3RlbnQgaW5zdGFuY2UgaXMgbmV4dCBhY2Nlc3NlZCwKICAgICAgICBhIHF1ZXJ5IHdpbGwgYmUgaXNzdWVkIHVzaW5nIHRoZQogICAgICAgIDpjbGFzczpgLlNlc3Npb25gIG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb25hbCBjb250ZXh0IGluIG9yZGVyIHRvCiAgICAgICAgbG9hZCBhbGwgZXhwaXJlZCBhdHRyaWJ1dGVzIGZvciB0aGUgZ2l2ZW4gaW5zdGFuY2UuICAgTm90ZSB0aGF0CiAgICAgICAgYSBoaWdobHkgaXNvbGF0ZWQgdHJhbnNhY3Rpb24gd2lsbCByZXR1cm4gdGhlIHNhbWUgdmFsdWVzIGFzIHdlcmUKICAgICAgICBwcmV2aW91c2x5IHJlYWQgaW4gdGhhdCBzYW1lIHRyYW5zYWN0aW9uLCByZWdhcmRsZXNzIG9mIGNoYW5nZXMKICAgICAgICBpbiBkYXRhYmFzZSBzdGF0ZSBvdXRzaWRlIG9mIHRoYXQgdHJhbnNhY3Rpb24uCgogICAgICAgIFRvIGV4cGlyZSBpbmRpdmlkdWFsIG9iamVjdHMgYW5kIGluZGl2aWR1YWwgYXR0cmlidXRlcwogICAgICAgIG9uIHRob3NlIG9iamVj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AAAAAAAAAAAAAAAAAABqAwAAAAAAAAAAAAAAAAAAAAAAAHwBfAKsAasCAAAAAAAAUwApAmHlCgAAUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBnaXZlbiBpbnN0YW5jZSBoYXMgbG9jYWxseQogICAgICAgIG1vZGlmaWVkIGF0dHJpYnV0ZXMuCgogICAgICAgIC4uIGNvbnRhaW5lcjo6IGNsYXNzX2Jhc2VzCgogICAgICAgICAgICBQcm94aWVkIGZvciB0aGUgOmNsYXNzOmBfb3JtLlNlc3Npb25gIGNsYXNzIG9uCiAgICAgICAgICAgIGJlaGFsZiBvZiB0aGUgOmNsYXNzOmBfYXN5bmNpby5Bc3luY1Nlc3Npb25gIGNsYXNzLgoKICAgICAgICBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGhpc3RvcnkgZm9yIGVhY2ggaW5zdHJ1bWVudGVkCiAgICAgICAgYXR0cmlidXRlIG9uIHRoZSBpbnN0YW5jZSBhbmQgcGVyZm9ybXMgYSBjb21wYXJpc29uIG9mIHRoZSBjdXJyZW50CiAgICAgICAgdmFsdWUgdG8gaXRzIHByZXZpb3VzbHkgZmx1c2hlZCBvciBjb21taXR0ZWQgdmFsdWUsIGlmIGFueS4KCiAgICAgICAgSXQgaXMgaW4gZWZmZWN0IGEgbW9yZSBleHBlbnNpdmUgYW5kIGFjY3VyYXRlCiAgICAgICAgdmVyc2lvbiBvZiBjaGVja2luZyBmb3IgdGhlIGdpdmVuIGluc3RhbmNlIGluIHRoZQogICAgICAgIDphdHRyOmAuU2Vzc2lvbi5kaXJ0eWAgY29sbGVjdGlvbjsgYSBmdWxsIHRlc3QgZm9yCiAgICAgICAgZWFjaCBhdHRyaWJ1dGUncyBuZXQgImRpcnR5IiBzdGF0dXMgaXMgcGVyZm9ybWVkLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmlzX21vZGlmaWVkKHNvbWVvYmplY3QpCgogICAgICAgIEEgZmV3IGNhdmVhdHMgdG8gdGhpcyBtZXRob2QgYXBwbHk6CgogICAgICAgICogSW5zdGFuY2VzIHByZXNlbnQgaW4gdGhlIDphdHRyOmAuU2Vzc2lvbi5kaXJ0eWAgY29sbGVjdGlvbiBtYXkKICAgICAgICAgIHJlcG9ydCBgYEZhbHNlYGAgd2hlbiB0ZXN0ZWQgd2l0aCB0aGlzIG1ldGhvZC4gIFRoaXMgaXMgYmVjYXVzZQogICAgICAgICAgdGhlIG9iamVjdCBtYXkgaGF2ZSByZWNlaXZlZCBjaGFuZ2UgZXZlbnRzIHZpYSBhdHRyaWJ1dGUgbXV0YXRpb24sCiAgICAgICAgICB0aHVzIHBsYWNpbmcgaXQgaW4gOmF0dHI6YC5TZXNzaW9uLmRpcnR5YCwgYnV0IHVsdGltYXRlbHkgdGhlIHN0YXRlCiAgICAgICAgICBpcyB0aGUgc2FtZSBhcyB0aGF0IGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgcmVzdWx0aW5nIGluIG5vIG5ldAogICAgICAgICAgY2hhbmdlIGhlcmUuCiAgICAgICAgKiBTY2FsYXIgYXR0cmlidXRlcyBtYXkgbm90IGhhdmUgcmVjb3JkZWQgdGhlIHByZXZpb3VzbHkgc2V0CiAgICAgICAgICB2YWx1ZSB3aGVuIGEgbmV3IHZhbHVlIHdhcyBhcHBsaWVkLCBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgbG9hZGVkLAogICAgICAgICAgb3Igd2FzIGV4cGlyZWQsIGF0IHRoZSB0aW1lIHRoZSBuZXcgdmFsdWUgd2FzIHJlY2VpdmVkIC0gaW4gdGhlc2UKICAgICAgICAgIGNhc2VzLCB0aGUgYXR0cmlidXRlIGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGNoYW5nZSwgZXZlbiBpZiB0aGVyZSBpcwogICAgICAgICAgdWx0aW1hdGVseSBubyBuZXQgY2hhbmdlIGFnYWluc3QgaXRzIGRhdGFiYXNlIHZhbHVlLiBTUUxBbGNoZW15IGluCiAgICAgICAgICBtb3N0IGNhc2VzIGRvZXMgbm90IG5lZWQgdGhlICJvbGQiIHZhbHVlIHdoZW4gYSBzZXQgZXZlbnQgb2NjdXJzLCBzbwogICAgICAgICAgaXQgc2tpcHMgdGhlIGV4cGVuc2Ugb2YgYSBTUUwgY2FsbCBpZiB0aGUgb2xkIHZhbHVlIGlzbid0IHByZXNlbnQsCiAgICAgICAgICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFuIFVQREFURSBvZiB0aGUgc2NhbGFyIHZhbHVlIGlzCiAgICAgICAgICB1c3VhbGx5IG5lZWRlZCwgYW5kIGluIHRob3NlIGZldyBjYXNlcyB3aGVyZSBpdCBpc24ndCwgaXMgbGVzcwogICAgICAgICAgZXhwZW5zaXZlIG9uIGF2ZXJhZ2UgdGhhbiBpc3N1aW5nIGEgZGVmZW5zaXZlIFNFTEVDVC4KCiAgICAgICAgICBUaGUgIm9sZCIgdmFsdWUgaXMgZmV0Y2hlZCB1bmNvbmRpdGlvbmFsbHkgdXBvbiBzZXQgb25seSBpZiB0aGUKICAgICAgICAgIGF0dHJpYnV0ZSBjb250YWluZXIgaGFzIHRoZSBgYGFjdGl2ZV9oaXN0b3J5YGAgZmxhZyBzZXQgdG8gYGBUcnVlYGAuCiAgICAgICAgICBUaGlzIGZsYWcgaXMgc2V0IHR5cGljYWxseSBmb3IgcHJpbWFyeSBrZXkgYXR0cmlidXRlcyBhbmQgc2NhbGFyCiAgICAgICAgICBvYmplY3QgcmVmZXJlbmNlcyB0aGF0IGFyZSBub3QgYSBzaW1wbGUgbWFueS10by1vbmUuICBUbyBzZXQgdGhpcwogICAgICAgICAgZmxhZyBmb3IgYW55IGFyYml0cmFyeSBtYXBwZWQgY29sdW1uLCB1c2UgdGhlIGBgYWN0aXZlX2hpc3RvcnlgYAogICAgICAgICAgYXJndW1lbnQgd2l0aCA6ZnVuYzpgLmNvbHVtbl9wcm9wZXJ0eWAuCgogICAgICAgIDpwYXJhbSBpbnN0YW5jZTogbWFwcGVkIGluc3RhbmNlIHRvIGJlIHRlc3RlZCBmb3IgcGVuZGluZyBjaGFuZ2VzLgogICAgICAgIDpwYXJhbSBpbmNsdWRlX2NvbGxlY3Rpb25zOiBJbmRpY2F0ZXMgaWYgbXVsdGl2YWx1ZWQgY29sbGVjdGlvbnMKICAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvcGVyYXRpb24uICBTZXR0aW5nIHRoaXMgdG8gYGBGYWxzZWBgIGlzIGEKICAgICAgICAgd2F5IHRvIGRldGVjdCBvbmx5IGxvY2FsLWNvbHVtbiBiYXNlZCBwcm9w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U2Vzc2lvbmAKICAgIG9iamVjdHMgd2hlbiBjYWxsZWQsIGNyZWF0aW5nIHRoZW0gZ2l2ZW4KICAgIHRoZSBjb25maWd1cmF0aW9uYWwgYXJndW1lbnRzIGVzdGFibGlzaGVkIGhlcmUuCgogICAgZS5nLjo6CgogICAgICAgIGZyb20gc3FsYWxjaGVteS5leHQuYXN5bmNpbyBpbXBvcnQgY3JlYXRlX2FzeW5jX2VuZ2luZQogICAgICAgIGZyb20gc3FsYWxjaGVteS5leHQuYXN5bmNpbyBpbXBvcnQgQXN5bmNTZXNzaW9uCiAgICAgICAgZnJvbSBzcWxhbGNoZW15LmV4dC5hc3luY2lvIGltcG9ydCBhc3luY19zZXNzaW9ubWFrZXIKCgogICAgICAgIGFzeW5jIGRlZiBydW5fc29tZV9zcWwoCiAgICAgICAgICAgIGFzeW5jX3Nlc3Npb246IGFzeW5jX3Nlc3Npb25tYWtlcltBc3luY1Nlc3Npb25dLAogICAgICAgICkgLT4gTm9uZToKICAgICAgICAgICAgYXN5bmMgd2l0aCBhc3luY19zZXNzaW9uKCkgYXMgc2Vzc2lvbjoKICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkKFNvbWVPYmplY3QoZGF0YT0ib2JqZWN0IikpCiAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZChTb21lT3RoZXJPYmplY3QobmFtZT0ib3RoZXIgb2JqZWN0IikpCiAgICAgICAgICAgICAgICBhd2FpdCBzZXNzaW9uLmNvbW1pdCgpCgoKICAgICAgICBhc3luYyBkZWYgbWFpbigpIC0+IE5vbmU6CiAgICAgICAgICAgICMgYW4gQXN5bmNFbmdpbmUsIHdoaWNoIHRoZSBBc3luY1Nlc3Npb24gd2lsbCB1c2UgZm9yIGNvbm5lY3Rpb24KICAgICAgICAgICAgIyByZXNvdXJjZXMKICAgICAgICAgICAgZW5naW5lID0gY3JlYXRlX2FzeW5jX2VuZ2luZSgKICAgICAgICAgICAgICAgICJwb3N0Z3Jlc3FsK2FzeW5jcGc6Ly9zY290dDp0aWdlckBsb2NhbGhvc3QvIgogICAgICAgICAgICApCgogICAgICAgICAgICAjIGNyZWF0ZSBhIHJldXNhYmxlIGZhY3RvcnkgZm9yIG5ldyBBc3luY1Nlc3Npb24gaW5zdGFuY2VzCiAgICAgICAgICAgIGFzeW5jX3Nlc3Npb24gPSBhc3luY19zZXNzaW9ubWFrZXIoZW5naW5lKQoKICAgICAgICAgICAgYXdhaXQgcnVuX3NvbWVfc3FsKGFzeW5jX3Nlc3Npb24pCgogICAgICAgICAgICBhd2FpdCBlbmdpbmUuZGlzcG9zZSgpCgogICAgVGhlIDpjbGFzczpgLmFzeW5jX3Nlc3Npb25tYWtlcmAgaXMgdXNlZnVsIHNvIHRoYXQgZGlmZmVyZW50IHBhcnRzCiAgICBvZiBhIHByb2dyYW0gY2FuIGNyZWF0ZSBuZXcgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCBvYmplY3RzIHdpdGggYQogICAgZml4ZWQgY29uZmlndXJhdGlvbiBlc3RhYmxpc2hlZCB1cCBmcm9udC4gIE5vdGUgdGhhdCA6Y2xhc3M6YC5Bc3luY1Nlc3Npb25gCiAgICBvYmplY3RzIG1heSBhbHNvIGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSB3aGVuIG5vdCB1c2luZwogICAgOmNsYXNzOmAuYXN5bmNfc2Vzc2lvbm1ha2VyYC4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjAgIDpjbGFzczpgLmFzeW5jX3Nlc3Npb25tYWtlcmAgcHJvdmlkZXMgYQogICAgICAgOmNsYXNzOmAuc2Vzc2lvbm1ha2VyYCBjbGFzcyB0aGF0J3MgZGVkaWNhdGVkIHRvIHRoZQogICAgICAgOmNsYXNzOmAuQXN5bmNTZXNzaW9uYCBvYmplY3QsIGluY2x1ZGluZyBwZXAtNDg0IHR5cGluZyBzdXBwb3J0LgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6cmVmOmBhc3luY2lvX29ybWAgLSBzaG93cyBleGFtcGxlIHVzZQoKICAgICAgICA6Y2xhc3M6YC5zZXNzaW9ubWFrZXJgICAtIGdlbmVyYWwgb3ZlcnZpZXcgb2YgdGhlCiAgICAgICAgIDpjbGFzczpgLnNlc3Npb25tYWtlcmAgYXJjaGl0ZWN0dXJlCgoKICAgICAgICA6cmVmOmBzZXNzaW9u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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 7
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-312.pyc
10.92 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
engine.cpython-312.pyc
56.03 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
exc.cpython-312.pyc
1015 B
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
result.cpython-312.pyc
36.60 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
scoping.cpython-312.pyc
55.65 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
session.cpython-312.pyc
69.78 KB
lrw-r--r--
2025-04-04 08:02:02
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-312.pyc
955 B
lrw-r--r--
2025-04-04 08:02:02
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).