REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 59.03 KB
Close
/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/polynomial/__pycache__/legendre.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9pXskAAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPOqAQAAlwBkAFoAZAFkAmwBWgJkAWQCbANtBFoFAQBkAWQDbAZtB1oHAQBkBGQFbAhtCVoKAQBkBGQGbAttDFoMAQBnAGQHogFaDWUKag4AAAAAAAAAAFoPZAiEAFoQZAmEAFoRAgBlAmoSAAAAAAAAAABkCmQEZwKmAQAAqwEAAAAAAAAAAFoTAgBlAmoSAAAAAAAAAABkAWcBpgEAAKsBAAAAAAAAAABaFAIAZQJqEgAAAAAAAAAAZARnAaYBAACrAQAAAAAAAAAAWhUCAGUCahIAAAAAAAAAAGQBZARnAqYBAACrAQAAAAAAAAAAWhZkC4QAWhdkDIQAWhhkDYQAWhlkDoQAWhpkD4QAWhtkEIQAWhxkEYQAWh1kJ2QThAFaHmQoZBSEAVofZARnAGQBZARkAWYFZBWEAVogZClkF4QBWiFkGIQAWiJkGYQAWiNkGoQAWiRkG4QAWiVkHIQAWiZkHYQAWidkHoQAWihkKmQghAFaKWQhhABaKmQihABaK2QjhABaLGQkhABaLQIARwBkJYQAZCZlDKYDAACrAwAAAAAAAAAAWi5kAlMAKSthwQQAAAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpMZWdlbmRyZSBTZXJpZXMgKDptb2Q6YG51bXB5LnBvbHlub21pYWwubGVnZW5kcmVgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyAobW9zdGx5IGZ1bmN0aW9ucykgdXNlZnVsIGZvcgpkZWFsaW5nIHdpdGggTGVnZW5kcmUgc2VyaWVzLCBpbmNsdWRpbmcgYSBgTGVnZW5kcmVgIGNsYXNzIHRoYXQKZW5jYXBzdWxhdGVzIHRoZSB1c3VhbCBhcml0aG1ldGljIG9wZXJhdGlvbnMuICAoR2VuZXJhbCBpbmZvcm1hdGlvbgpvbiBob3cgdGhpcyBtb2R1bGUgcmVwcmVzZW50cyBhbmQgd29ya3Mgd2l0aCBzdWNoIHBvbHlub21pYWxzIGlzIGluIHRoZQpkb2NzdHJpbmcgZm9yIGl0cyAicGFyZW50IiBzdWItcGFja2FnZSwgYG51bXB5LnBvbHlub21pYWxgKS4KCkNsYXNzZXMKLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICAgTGVnZW5kcmUKCkNvbnN0YW50cwotLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGxlZ2RvbWFpbgogICBsZWd6ZXJvCiAgIGxlZ29uZQogICBsZWd4CgpBcml0aG1ldGljCi0tLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGxlZ2FkZAogICBsZWdzdWIKICAgbGVnbXVseAogICBsZWdtdWwKICAgbGVnZGl2CiAgIGxlZ3BvdwogICBsZWd2YWwKICAgbGVndmFsMmQKICAgbGVndmFsM2QKICAgbGVnZ3JpZDJkCiAgIGxlZ2dyaWQzZAoKQ2FsY3VsdXMKLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGxlZ2RlcgogICBsZWdpbnQKCk1pc2MgRnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tCgouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBsZWdmcm9tcm9vdHMKICAgbGVncm9vdHMKICAgbGVndmFuZGVyCiAgIGxlZ3ZhbmRlcjJkCiAgIGxlZ3ZhbmRlcjNkCiAgIGxlZ2dhdXNzCiAgIGxlZ3dlaWdodAogICBsZWdjb21wYW5pb24KICAgbGVnZml0CiAgIGxlZ3RyaW0KICAgbGVnbGluZQogICBsZWcycG9seQogICBwb2x5MmxlZwoKU2VlIGFsc28KLS0tLS0tLS0KbnVtcHkucG9seW5vbWlhbAoK6QAAAABOKQHaFG5vcm1hbGl6ZV9heGlzX2luZGV46QEAAAApAdoJcG9seXV0aWxzKQHaC0FCQ1BvbHlCYXNlKR/aB2xlZ3plcm/aBmxlZ29uZdoEbGVneNoJbGVnZG9tYWlu2gdsZWdsaW5l2gZsZWdhZGTaBmxlZ3N1YtoHbGVnbXVseNoGbGVnbXVs2gZsZWdkaXbaBmxlZ3Bvd9oGbGVndmFs2gZsZWdkZXLaBmxlZ2ludNoIbGVnMnBvbHnaCHBvbHkybGVn2gxsZWdmcm9tcm9vdHPaCWxlZ3ZhbmRlctoGbGVnZml02gdsZWd0cmlt2ghsZWdyb290c9oITGVnZW5kcmXaCGxlZ3ZhbDJk2ghsZWd2YWwzZNoJbGVnZ3JpZDJk2glsZWdncmlkM2TaC2xlZ3ZhbmRlcjJk2gtsZWd2YW5kZXIzZNoMbGVnY29tcGFuaW9u2ghsZWdnYXVzc9oJbGVnd2VpZ2h0YwEAAAAAAAAAAAAAAAYAAAADAAAA88oAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB8AGcBpgEAAKsBAAAAAAAAAABcAQAAfQB0BQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAZAF6CgAAfQFkAn0CdAcAAAAAAAAAAAAAfAFkA2QDpgMAAKsDAAAAAAAAAABEAF0lfQN0CQAAAAAAAAAAAAB0CwAAAAAAAAAAAAB8AqYBAACrAQAAAAAAAAAAfAB8AxkAAAAAAAAAAACmAgAAqwIAAAAAAAAAAH0CjCZ8AlMAKQRhLgQAAAogICAgQ29udmVydCBhIHBvbHlub21pYWwgdG8gYSBMZWdlbmRyZSBzZXJpZXMuCgogICAgQ29udmVydCBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIGNvZWZmaWNpZW50cyBvZiBhIHBvbHlub21pYWwgKHJlbGF0aXZlCiAgICB0byB0aGUgInN0YW5kYXJkIiBiYXNpcykgb3JkZXJlZCBmcm9tIGxvd2VzdCBkZWdyZWUgdG8gaGlnaGVzdCwgdG8gYW4KICAgIGFycmF5IG9mIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgTGVnZW5kcmUgc2VyaWVzLCBvcmRlcmVkCiAgICBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGRlZ3JlZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBwb2wgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBvbHlub21pYWwgY29l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LCB0aGVuIGByb290c2AgbG9va3Mgc29tZXRoaW5nIGxpa2UgWzIsIDIsIDIsIDMsIDNdLiBUaGUKICAgIHJvb3RzIGNhbiBhcHBlYXIgaW4gYW55IG9yZGVyLgoKICAgIElmIHRoZSByZXR1cm5lZCBjb2VmZmljaWVudHMgYXJlIGBjYCwgdGhlbgoKICAgIC4uIG1hdGg6OiBwKHgpID0gY18wICsgY18xICogTF8xKHgpICsgLi4uICsgIGNfbiAqIExfbih4KQoKICAgIFRoZSBjb2VmZmljaWVudCBvZiB0aGUgbGFzdCB0ZXJtIGlzIG5vdCBnZW5lcmFsbHkgMSBmb3IgbW9uaWMKICAgIHBvbHlub21pYWxzIGluIExlZ2VuZHJlIGZvcm0uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcm9vdHMgOiBhcnJheV9saWtlCiAgICAgICAgU2VxdWVuY2UgY29udGFpbmluZyB0aGUgcm9vdHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIDEtRCBhcnJheSBvZiBjb2VmZmljaWVudHMuICBJZiBhbGwgcm9vdHMgYXJlIHJlYWwgdGhlbiBgb3V0YCBpcyBhCiAgICAgICAgcmVhbCBhcnJheSwgaWYgc29tZSBvZiB0aGUgcm9vdHMgYXJlIGNvbXBsZXgsIHRoZW4gYG91dGAgaXMgY29tcGxleAogICAgICAgIGV2ZW4gaWYgYWxsIHRoZSBjb2VmZmljaWVudHMgaW4gdGhlIHJlc3VsdCBhcmUgcmVhbCAoc2VlIEV4YW1wbGVzCiAgICAgICAgYmVsb3cpLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkucG9seW5vbWlhbC5wb2x5bm9taWFsLnBvbHlmcm9tcm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwuY2hlYnlzaGV2LmNoZWJmcm9tcm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwubGFndWVycmUubGFnZnJvbXJvb3RzCiAgICBudW1weS5wb2x5bm9taWFsLmhlcm1pdGUuaGVybWZyb21yb290cwogICAgbnVtcHkucG9seW5v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IHRoZSBkaWZmZXJlbmNlIG9mIHR3byBMZWdlbmRyZSBzZXJpZXMgYGMxYCAtIGBjMmAuICBUaGUKICAgIHNlcXVlbmNlcyBvZiBjb2VmZmljaWVudHMgYXJlIGZyb20gbG93ZXN0IG9yZGVyIHRlcm0gdG8gaGlnaGVzdCwgaS5lLiwKICAgIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzIGBgUF8wICsgMipQXzEgKyAzKlBfMmBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMxLCBjMiA6IGFycmF5X2xpa2UKICAgICAgICAxLUQgYXJyYXlzIG9mIExlZ2VuZHJlIHNlcmllcyBjb2VmZmljaWVudHMgb3JkZXJlZCBmcm9tIGxvdyB0bwogICAgICAgIGhpZ2guCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIE9mIExlZ2VuZHJlIHNlcmllcyBjb2VmZmljaWVudHMgcmVwcmVzZW50aW5nIHRoZWlyIGRpZmZlcmVuY2UuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsZWdhZGQsIGxlZ211bHgsIGxlZ211bCwgbGVnZGl2LCBsZWdwb3cKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFVubGlrZSBtdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIGV0Yy4sIHRoZSBkaWZmZXJlbmNlIG9mIHR3byBMZWdlbmRyZQogICAgc2VyaWVzIGlzIGEgTGVnZW5kcmUgc2VyaWVzICh3aXRob3V0IGhhdmluZyB0byAicmVwcm9qZWN0IiB0aGUgcmVzdWx0CiAgICBvbnRvIHRoZSBiYXNpcyBzZXQpIHNvIHN1YnRyYWN0aW9uLCBqdXN0IGxpa2UgdGhhdCBvZiAic3RhbmRhcmQiCiAgICBwb2x5bm9taWFscywgaXMgc2ltcGx5ICJjb21wb25lbnQtd2lzZS4iCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5bm9taWFsIGltcG9ydCBsZWdlbmRyZSBhcyBMCiAgICA+Pj4gYzEgPSAoMSwyLDMpCiAg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ZXJtIiB0byBoaWdoZXN0LAogICAgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMgYGBQXzAgKyAyKlBfMSArIDMqUF8yYGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYzEsIGMyIDogYXJyYXlfbGlrZQogICAgICAgIDEtRCBhcnJheXMgb2YgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93IHRvCiAgICAgICAgaGlnaC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgT2YgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50cyByZXByZXNlbnRpbmcgdGhlaXIgcHJvZHVjdC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ2FkZCwgbGVnc3ViLCBsZWdtdWx4LCBsZWdkaXYsIGxlZ3BvdwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgSW4gZ2VuZXJhbCwgdGhlIChwb2x5bm9taWFsKSBwcm9kdWN0IG9mIHR3byBDLXNlcmllcyByZXN1bHRzIGluIHRlcm1zCiAgICB0aGF0IGFyZSBub3QgaW4gdGhlIExlZ2VuZHJlIHBvbHlub21pYWwgYmFzaXMgc2V0LiAgVGh1cywgdG8gZXhwcmVzcwogICAgdGhlIHByb2R1Y3QgYXMgYSBMZWdlbmRyZSBzZXJpZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byAicmVwcm9qZWN0IiB0aGUKICAgIHByb2R1Y3Qgb250byBzYWlkIGJhc2lzIHNldCwgd2hpY2ggbWF5IHByb2R1Y2UgInVuaW50dWl0aXZlIiAoYnV0CiAgICBjb3JyZWN0KSByZXN1bHRzOyBzZWUgRXhhbXBsZXMgc2VjdGlvbiBiZWxvdy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwgaW1wb3J0IGxlZ2VuZHJlIGFzIEwKICAgID4+PiBjMSA9ICgxLDIsMykKICAgID4+PiBjMiA9ICgzLDIpCiAgICA+Pj4gTC5sZWdtdWwoYzEsYzIpICMgbXVsdGlwbGljYXRpb24gcmVxdWlyZXMgInJlcHJvamVjdGlvbiIKICAgIGFycmF5KFsgIDQuMzMzMzMzMzMsICAxMC40ICAgICAgICwgIDExLjY2NjY2NjY3LCAgIDMuNiAgICAgICBdKSAjIG1heSB2YXJ5CgogICAgcgQAAAByAgAAAHI4AAAAcjcAAAByJwAAAHI2AAAAKQdyKAAAAHIpAAAAcioAAAByKwAAAHINAAAAcgwAAAByDgAAACkIcj0AAABySgAAAHI6AAAA2gJ4c3I8AAAA2gJuZHIvAAAAcj4AAABzCAAAACAgICAgICAgcjAAAAByDwAAAHIPAAAA0AEAAHNSAQAAgAD1UgEAEBKMfJhSoBKYSNEPJdQPJYFIgFKIEuUHCogygXeEd5UTkFKRF5QX0gcY0AcY2AwOiAHYDQ+IAogC4AwOiAHYDQ+IAuUHCogxgXaEdpARgnuAe9gNDohxjFSQIolXiALYDQ6IAogC3QkMiFGJFowWkDGKG4gb2A0OiHGMVJAiiVeIAtgNDohxjFSQIolXiAKIAuUNEJARiVaMVogC2A0OiHKMVZAyiViIAtgNDohyjFWQMolYiALdERaQcZ0jmGGZJpwmoDGZKtERJdQRJfAABAk68AAECTqIQdgSFIhD2BETkGGRFohC3REXmAGYMZginAWYYpkIoDKgcqhBoXahO7AC0SIy0REz1BEziELdEReYA51noGKZa5xrqDGoUqk0sCGpONEeNLBi0R040RE51BE5iEKIQt0LEZAilWeYYpFrlGvRCyLUCyLQBCJyMQAAAGMCAAAAAAAAAAAAAAAFAAAAAwAAAPM4AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAB8AaYDAACrAwAAAAAAAAAAUwApAWGNBQAACiAgICBEaXZpZGUgb25lIExlZ2VuZHJlIHNlcmllcyBieSBhbm90aGVyLgoKICAgIFJldHVybnMgdGhlIHF1b3RpZW50LXdpdGgtcmVtYWluZGVyIG9mIHR3byBMZWdlbmRyZSBzZXJpZXMKICAgIGBjMWAgLyBgYzJgLiAgVGhlIGFyZ3VtZW50cyBhcmUgc2VxdWVuY2VzIG9mIGNvZWZmaWNpZW50cyBmcm9tIGxvd2VzdAogICAgb3JkZXIgInRlcm0iIHRvIGhpZ2hlc3QsIGUuZy4sIFsxLDIsM10gcmVwcmVzZW50cyB0aGUgc2VyaWVzCiAgICBgYFBfMCArIDIqUF8xICsgMypQXzJgYC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjMSwgYzIgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5cyBvZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8KICAgICAgICBoaWdoLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHF1bywgcmVtIDogbmRhcnJheXMKICAgICAgICBPZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzIHJlcHJlc2VudGluZyB0aGUgcXVvdGllbnQgYW5kCiAgICAgICAgcmVtYWluZGVyLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVnYWRkLCBsZWdzdWIsIGxlZ211bHgsIGxlZ211bCwgbGVncG93CgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBJbiBnZW5lcmFsLCB0aGUgKHBvbHlub21pYWwpIGRpdmlzaW9uIG9mIG9uZSBMZWdlbmRyZSBzZXJpZXMgYnkgYW5vdGhlcgogICAgcmVzdWx0cyBpbiBxdW90aWVudCBhbmQgcmVtYWluZGVyIHRlcm1zIHRoYXQgYXJlIG5vdCBpbiB0aGUgTGVnZW5kcmUKICAgIHBvbHlub21pYWwgYmFzaXMgc2V0LiAgVGh1cywgdG8gZXhwcmVzcyB0aGVzZSByZXN1bHRzIGFzIGEgTGVnZW5kcmUKICAgIHNlcmllcywgaXQgaXMgbmVjZXNzYXJ5IHRvICJyZXByb2plY3QiIHRoZSByZXN1bHRzIG9udG8gdGhlIExlZ2VuZHJlCiAgICBiYXNpcyBzZXQsIHdoaWNoIG1heSBwcm9kdWNlICJ1bmludHVpdGl2ZSIgKGJ1dCBjb3JyZWN0KSByZXN1bHRzOyBzZWUKICAgIEV4YW1wbGVzIHNlY3Rpb24gYmVsb3cuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5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ICAgMipMXzAoeCkqTF8xKHkpICsgMipMXzEoeCkqTF8xKHkpYGAgaWYgYXhpcz0wIGlzIGBgeGBgIGFuZCBheGlzPTEgaXMKICAgIGBgeWBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50cy4gSWYgYyBpcyBtdWx0aWRpbWVuc2lvbmFsIHRoZQogICAgICAgIGRpZmZlcmVudCBheGlzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50IHZhcmlhYmxlcyB3aXRoIHRoZSBkZWdyZWUgaW4KICAgICAgICBlYWNoIGF4aXMgZ2l2ZW4gYnkgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXguCiAgICBtIDogaW50LCBvcHRpb25hbAogICAgICAgIE51bWJlciBvZiBkZXJpdmF0aXZlcyB0YWtlbiwgbXVzdCBiZSBub24tbmVnYXRpdmUuIChEZWZhdWx0OiAxKQogICAgc2NsIDogc2NhbGFyLCBvcHRpb25hbAogICAgICAgIEVhY2ggZGlmZmVyZW50aWF0aW9uIGlzIG11bHRpcGxpZWQgYnkgYHNjbGAuICBUaGUgZW5kIHJlc3VsdCBpcwogICAgICAgIG11bHRpcGxpY2F0aW9uIGJ5IGBgc2NsKiptYGAuICBUaGlzIGlzIGZvciB1c2UgaW4gYSBsaW5lYXIgY2hhbmdlIG9mCiAgICAgICAgdmFyaWFibGUuIChEZWZhdWx0OiAxKQogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdGhlIGRlcml2YXRpdmUgaXMgdGFrZW4uIChEZWZhdWx0OiAwKS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkZXIgOiBuZGFycmF5CiAgICAgICAgTGVnZW5kcmUgc2VyaWVzIG9mIHRoZSBkZXJpdmF0aXZlLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVnaW50CgogICAgTm90ZXMKICAgIC0t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eSBvZiBMZWdlbmRyZSBzZXJpZXMgY29lZmZpY2llbnRzLiBJZiBjIGlzIG11bHRpZGltZW5zaW9uYWwgdGhlCiAgICAgICAgZGlmZmVyZW50IGF4aXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgdmFyaWFibGVzIHdpdGggdGhlIGRlZ3JlZSBpbgogICAgICAgIGVhY2ggYXhpcyBnaXZlbiBieSB0aGUgY29ycmVzcG9uZGluZyBpbmRleC4KICAgIG0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgT3JkZXIgb2YgaW50ZWdyYXRpb24sIG11c3QgYmUgcG9zaXRpdmUuIChEZWZhdWx0OiAxKQogICAgayA6IHtbXSwgbGlzdCwgc2NhbGFyfSwgb3B0aW9uYWwKICAgICAgICBJbnRlZ3JhdGlvbiBjb25zdGFudChzKS4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW50ZWdyYWwgYXQKICAgICAgICBgYGxibmRgYCBpcyB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlIGxpc3QsIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kCiAgICAgICAgaW50ZWdyYWwgYXQgYGBsYm5kYGAgaXMgdGhlIHNlY29uZCB2YWx1ZSwgZXRjLiAgSWYgYGBrID09IFtdYGAgKHRoZQogICAgICAgIGRlZmF1bHQpLCBhbGwgY29uc3RhbnRzIGFyZSBzZXQgdG8gemVyby4gIElmIGBgbSA9PSAxYGAsIGEgc2luZ2xlCiAgICAgICAgc2NhbGFyIGNhbiBiZSBnaXZlbiBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGxibmQgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBpbnRlZ3JhbC4gKERlZmF1bHQ6IDApCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRm9sbG93aW5nIGVhY2ggaW50ZWdyYXRpb24gdGhlIHJlc3VsdCBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAKICAgICAgICBiZWZvcmUgdGhlIGludGVncmF0aW9uIGNvbnN0YW50IGlzIGFkZGVkLiAoRGVmYXVsdDogMSkKICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRoZSBpbnRlZ3JhbCBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIFMgOiBuZGFycmF5CiAgICAgICAgTGVnZW5kcmUgc2VyaWVzIGNvZWZmaWNpZW50IGFycmF5IG9mIHRoZSBpbnRlZ3JhbC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBgbSA8IDBgYCwgYGBsZW4oaykgPiBtYGAsIGBgbnAubmRpbShsYm5kKSAhPSAwYGAsIG9yCiAgICAgICAgYGBucC5uZGltKHNjbCkgIT0gMGBgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVnZGVyCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBOb3RlIHRoYXQgdGhlIHJlc3VsdCBvZiBlYWNoIGludGVncmF0aW9uIGlzICptdWx0aXBsaWVkKiBieSBgc2NsYC4KICAgIFdoeSBpcyB0aGlzIGltcG9ydGFudCB0byBub3RlPyAgU2F5IG9uZSBpcyBtYWtpbmcgYSBsaW5lYXIgY2hhbmdlIG9mCiAgICB2YXJpYWJsZSA6bWF0aDpgdSA9IGF4ICsgYmAgaW4gYW4gaW50ZWdyYWwgcmVsYXRpdmUgdG8gYHhgLiAgVGhlbgogICAgOm1hdGg6YGR4ID0gZHUvYWAsIHNvIG9uZSB3aWxsIG5lZWQgdG8gc2V0IGBzY2xgIGVxdWFsIHRvCiAgICA6bWF0aDpgMS9hYCAtIHBlcmhhcHMgbm90IHdoYXQgb25lIHdvdWxkIGhhdmUgZmlyc3QgdGhvdWdodC4KCiAgICBBbHNvIG5vdGUgdGhhdCwgaW4gZ2VuZXJhbCwgdGhlIHJlc3VsdCBvZiBpbnRlZ3JhdGluZyBhIEMtc2VyaWVzIG5lZWRzCiAgICB0byBiZSAicmVwcm9qZWN0ZWQiIG9udG8gdGhlIEMtc2VyaWVzIGJhc2lzIHNldC4gIFRodXMsIHR5cGljYWxseSwKICAgIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyAidW5pbnR1aXRpdmUsIiBhbGJlaXQgY29ycmVjdDsgc2VlCiAgICBFeGFtcGxlcyBzZWN0aW9uIGJlbG93LgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbCBpbXBvcnQgbGVnZW5kcmUgYXMgTAogICAgPj4+IGMgPSAoMSwyLDMpCiAgICA+Pj4gTC5sZWdpbnQoYykKICAgIGFycmF5KFsgMC4zMzMzMzMzMywgIDAuNCAgICAgICAsICAwLjY2NjY2NjY3LCAgMC42ICAgICAgIF0pICMgbWF5IHZhcnkKICAgID4+PiBMLmxlZ2ludChjLCAzKQogICAgYXJyYXkoWyAgMS42NjY2NjY2N2UtMDIsICAtMS43ODU3MTQyOWUtMDIsICAgNC43NjE5MDQ3NmUtMDIsICMgbWF5IHZhcnkKICAgICAgICAgICAgIC0xLjczNDcyMzQ4ZS0xOCwgICAxLjkwNDc2MTkwZS0wMiwgICA5LjUyMzgwOTUyZS0wM10pCiAgICA+Pj4gTC5sZWdpbnQoYywgaz0zKQogICAgIGFycmF5KFsgMy4zMzMzMzMzMywgIDAuNCAgICAgICAsICAwLjY2NjY2NjY3LCAgMC42ICAgICAgIF0pICMgbWF5IHZhcnkKICAgID4+PiBMLmxlZ2ludChjLCBsYm5kPS0yKQogICAgYXJyYXkoWyA3LjMzMzMzMzMzLCAgMC40ICAgICAgICwgIDAuNjY2NjY2NjcsICAwLjYgICAgICAgXSkgIyBtYXkgdmFyeQogICAgPj4+IEwubGVnaW50KGMsIHNjbD0yKQogICAgYXJyYXkoWyAwLjY2NjY2NjY3LCAgMC44ICAgICAgICwgIDEuMzMzMzMzMzMsICAxLjIgICAgICAgXSkgIyBtYXkgdmFyeQoKICAgIHIEAAAAVHJgAAAAcmMAAAB6GHRoZSBvcmRlciBvZiBpbnRlZ3JhdGlvbnJkAAAAcgIAAAB6LVRoZSBvcmRlciBvZiBpbnRlZ3JhdGlvbiBtdXN0IGJlIG5vbi1uZWdhdGl2ZXoeVG9vIG1hbnkgaW50ZWdyYXRpb24gY29uc3RhbnRzehZsYm5kIG11c3QgYmUgYSBzY2FsYXIuehVzY2wgbXVzdCBiZSBhIHNjYWxhci5Ock4AAAByNgAAAHI4AAAAKRRyQAAAAHJBAAAAck8AAAByZQAAAHJmAAAAcmcAAADaCGl0ZXJhYmxlcigAAAByaAAAAHJpAAAAcioAAAByagAAAHIDAAAAcmsAAADaBGxpc3RyKwAAANoDYWxsclAAAABybAAAAHISAAAAKQ1yOgAAAHJtAAAAclMAAADaBGxibmRyQwAAAHJuAAAAcm8AAABycAAAAHIvAAAAcjsAAAByPgAAAHJSAAAA2gF0cw0AAAAgICAgICAgICAgICAgcjAAAAByFAAAAHIUAAAAwAIAAHOoAgAAgAD1agIACQuMCJARmCGgJNAIJ9EIJ9QIJ4BB2AcIhHeEfJB/0Acm0Acm2AwNj0iKSJVSlFnRDB/UDB+IAd0LDYw7kHGJPow+8AABBRDYDQ6IQ4gB3QoM1AoemHHQIjzRCj3UCj2AQ90MDtQMIKAUoHrRDDLUDDKARdgHCohRgneAd90OGNAZSNEOSdQOSdAISd0HCogxgXaEdpADgnyAfN0OGNAZOdEOOtQOOtAIOt0HCYR3iHSBfYR9mAHSBxnQBxndDhjQGTHRDjLUDjLQCDLdBwmEd4hzgXyEfJBx0gcY0AcY3Q4Y0Bkw0Q4x1A4x0Agx3QwgoBWoAawG0Qwv1AwvgEXgBwqIYYJ4gHjYDxCICOUICowLkEGQdZhh0Qgg1AgggEHdCAyIUYkHjAeQMZAjkHOdU6ARmVacVpF80RIk0QgkgEHdDRKQM4lajFrwABAFFPEAEAUUiAHdDA+QAYlGjEaIAdgICYhTiQiIAdgLDJABijaINpVilGaYUZhxnFSgUZpZ0RYn1BYniDbYDA2IYYhEiESMRJBBkGGURIlMiESIRIlEiETlEhSUKJhBoAGZRZg4oGGkZ6hhqGKoYqRr0RsxuBG8F9ASQdESQdQSQYhD2BUWkHGUVJghkVaIQ5ABiUbYFRaQcZRUiEOQAYlG2A8QkDGKdYh12BkamDGcFJhhmRaQA5BBkQbdFRqYMZhhkVuUW/AAAw0g8AADDSCQAdgUFZBhlESYIZhBmSOgAZknkU6QAdgdHpADkEGYAZFFkQrYEBOQQZgBkUWQCpAKlAqYYZEPkAqQCpEKkArYDA+QAYhGiEaMRpBhmAGUZJ1WoESoI9EdLtQdLtEWLtEMLohGiEaJRtgQE4hBiUHdCAqMC5BBkHGYJdEIINQIIIBB2AsMgEhyMQAAAFRjAwAAAAAAAAAAAAAABgAAAAMAAADz5AIAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwBZAFkAqwDpgMAAKsDAAAAAAAAAAB9AXwBagIAAAAAAAAAAGoDAAAAAAAAAABkBHYAch98AaAEAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAABqBQAAAAAAAAAApgEAAKsBAAAAAAAAAAB9AXQNAAAAAAAAAAAAAHwAdA4AAAAAAAAAAAAAdBAAAAAAAAAAAAAAZgKmAgAAqwIAAAAAAAAAAHIUdAEAAAAAAAAAAAAAagkAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9AHQNAAAAAAAAAAAAAHwAdAAAAAAAAAAAAAAAagoAAAAAAAAAAKYCAACrAgAAAAAAAAAAcid8AnIlfAGgCwAAAAAAAAAAAAAAAAAAAAAAAAAAfAFqDAAAAAAAAAAAZAV8AGoNAAAAAAAAAAB6BQAAegAAAKYBAACrAQAAAAAAAAAAfQF0HQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAZAFrAgAAAAByC3wBZAYZAAAAAAAAAAAAfQNkBn0EbpZ0HQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAZAdrAgAAAAByEXwBZAYZAAAAAAAAAAAAfQN8AWQBGQAAAAAAAAAAAH0EbnJ0HQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAfQV8AWQIGQAAAAAAAAAAAH0DfAFkCRkAAAAAAAAAAAB9BHQfAAAAAAAAAAAAAGQKdB0AAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAGQBegAAAKYCAACrAgAAAAAAAAAARABdMn0GfAN9B3wFZAF6CgAAfQV8AXwGCwAZAAAAAAAAAAAAfAR8BWQBegoAAHoFAAB8BXoLAAB6CgAAfQN8B3wEfAB6BQAAZAd8BXoFAABkAXoKAAB6BQAAfAV6CwAAegAAAH0EjDN8A3wEfAB6BQAAegAAAFMAKQthRwkAAAogICAgRXZhbHVhdGUgYSBMZWdlbmRyZSBzZXJpZXMgYXQgcG9pbnRzIHguCgogICAgSWYgYGNgIGlzIG9mIGxlbmd0aCBgbiArIDFgLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlOgoKICAgIC4uIG1hdGg6OiBwKHgpID0gY18wICogTF8wKHgpICsgY18xICogTF8xKHgpICsgLi4uICsgY19uICogTF9uKHgpCgogICAgVGhlIHBhcmFtZXRlciBgeGAgaXMgY29udmVydGVkIHRvIGFuIGFycmF5IG9ubHkgaWYgaXQgaXMgYSB0dXBsZSBvciBhCiAgICBsaXN0LCBvdGhlcndpc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4gSW4gZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAKICAgIG9yIGl0cyBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24gYW5kIGFkZGl0aW9uIGJvdGggd2l0aAogICAgdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBpcyBhIDEtRCBhcnJheSwgdGhlbiBgcCh4KWAgd2lsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIGB4YC4gIElmCiAgICBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbCwgdGhlbiB0aGUgc2hhcGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZQogICAgdmFsdWUgb2YgYHRlbnNvcmAuIElmIGB0ZW5zb3JgIGlzIHRydWUgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0gKwogICAgeC5zaGFwZS4gSWYgYHRlbnNvcmAgaXMgZmFsc2UgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0uIE5vdGUgdGhhdAogICAgc2NhbGFycyBoYXZlIHNoYXBlICgsKS4KCiAgICBUcmFpbGluZyB6ZXJvcyBpbiB0aGUgY29lZmZpY2llbnRzIHdpbGwgYmUgdXNlZCBpbiB0aGUgZXZhbHVhdGlvbiwgc28KICAgIHRoZXkgc2hvdWxkIGJlIGF2b2lkZWQgaWYgZWZmaWNpZW5jeSBpcyBhIGNvbmNlcm4uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgSWYgYHhgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZQogICAgICAgIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCB0cmVhdGVkIGFzIGEgc2NhbGFyLiBJbiBlaXRoZXIgY2FzZSwgYHhgCiAgICAgICAgb3IgaXRzIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBhZGRpdGlvbiBhbmQgbXVsdGlwbGljYXRpb24gd2l0aAogICAgICAgIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnRzIGZvciB0ZXJtcyBvZgogICAgICAgIGRlZ3JlZSBuIGFyZSBjb250YWluZWQgaW4gY1tuXS4gSWYgYGNgIGlzIG11bHRpZGltZW5zaW9uYWwgdGhlCiAgICAgICAgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlIHBvbHlub21pYWxzLiBJbiB0aGUgdHdvCiAgICAgICAgZGltZW5zaW9uYWwgY2FzZSB0aGUgY29lZmZpY2llbnRzIG1heSBiZSB0aG91Z2h0IG9mIGFzIHN0b3JlZCBpbgogICAgICAgIHRoZSBjb2x1bW5zIG9mIGBjYC4KICAgIHRlbnNvciA6IGJvb2xlYW4sIG9wdGlvbmFsCiAgICAgICAgSWYgVHJ1ZSwgdGhlIHNoYXBlIG9mIHRoZSBjb2VmZmljaWVudCBhcnJheSBpcyBleHRlbmRlZCB3aXRoIG9uZXMKICAgICAgICBvbiB0aGUgcmlnaHQsIG9uZSBmb3IgZWFjaCBkaW1lbnNpb24gb2YgYHhgLiBTY2FsYXJzIGhhdmUgZGltZW5zaW9uIDAKICAgICAgICBmb3IgdGhpcyBhY3Rpb24uIFRoZSByZXN1bHQgaXMgdGhhdCBldmVyeSBjb2x1bW4gb2YgY29lZmZpY2llbnRzIGluCiAgICAgICAgYGNgIGlzIGV2YWx1YXRlZCBmb3Ig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aGFwZSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUgYy5zaGFwZVsyOl0gKyB4LnNoYXBlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdHMKICAgICAgICBUaGUgdHdvIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBgKHgsIHkpYCwKICAgICAgICB3aGVyZSBgeGAgYW5kIGB5YCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUuIElmIGB4YCBvciBgeWAgaXMgYSBsaXN0CiAgICAgICAgb3IgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UgaXQgaXMgbGVmdAogICAgICAgIHVuY2hhbmdlZCBhbmQgaWYgaXQgaXNuJ3QgYW4gbmRhcnJheSBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybQogICAgICAgIG9mIG11bHRpLWRlZ3JlZSBpLGogaXMgY29udGFpbmVkIGluIGBgY1tpLGpdYGAuIElmIGBjYCBoYXMKICAgICAgICBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIHR3byB0aGUgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlCiAgICAgICAgc2V0cyBvZiBjb2VmZmljaWVudHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFsdWVzIDogbmRhcnJheSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBUaGUgdmFsdWVzIG9mIHRoZSB0d28gZGltZW5zaW9uYWwgTGVnZW5kcmUgc2VyaWVzIGF0IHBvaW50cyBmb3JtZWQKICAgICAgICBmcm9tIHBhaXJzIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gYHhgIGFuZCBgeWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBsZWd2YWwsIGxlZ2dyaWQyZCwgbGVndmFsM2QsIGxlZ2dyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoGX3ZhbG5kchIAAACpA3J+AAAA2gF5cjoAAABzAwAAACAgIHIwAAAAch0AAAByHQAAAJUDAABzGwAAAIAA9VwBAAwOjDmVVphRoAGgMdELJdQLJdAEJXIxAAAAYwMAAAAAAAAAAAAAAAYAAAADAAAA8zoAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8AnwAfAGmBAAAqwQAAAAAAAAAAFMAKQFh4wYAAAogICAgRXZhbHVhdGUgYSAyLUQgTGVnZW5kcmUgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4IGFuZCB5LgoKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVzOgoKICAgIC4uIG1hdGg6OiBwKGEsYikgPSBcc3VtX3tpLGp9IGNfe2ksan0gKiBMX2koYSkgKiBMX2ooYikKCiAgICB3aGVyZSB0aGUgcG9pbnRzIGAoYSwgYilgIGNvbnNpc3Qgb2YgYWxsIHBhaXJzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCBhbmQgYGJgIGZyb20gYHlgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtIGEgZ3JpZCB3aXRoCiAgICBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiBhbmQgYHlgIGluIHRoZSBzZWNvbmQuCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgIGFuZCBgeWAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZiB0aGV5IGFyZQogICAgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycy4gSW4gZWl0aGVyCiAgICBjYXNlLCBlaXRoZXIgYHhgIGFuZCBgeWAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0IG11bHRpcGxpY2F0aW9uCiAgICBhbmQgYWRkaXRpb24gYm90aCB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdHdvIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8KICAgIGl0cyBzaGFwZSB0byBtYWtlIGl0IDItRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzI6XSArCiAgICB4LnNoYXBlICsgeS5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgaW4gdGhlCiAgICAgICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWAuICBJZiBgeGAgb3IgYHlgIGlzIGEgbGlzdCBvcgogICAgICAgIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQKICAgICAgICB1bmNoYW5nZWQgYW5kLCBpZiBpdCBpc24ndCBhbiBuZGFycmF5LCBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybSBvZgogICAgICAgIG11bHRpLWRlZ3JlZSBpLGogaXMgY29udGFpbmVkIGluIGBjW2ksal1gLiBJZiBgY2AgaGFzIGRpbWVuc2lvbgogICAgICAgIGdyZWF0ZXIgdGhhbiB0d28gdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIENoZWJ5c2hldiBzZXJpZXMgYXQgcG9pbnRzIGluIHRoZQogICAgICAgIENhcnRlc2lhbiBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVndmFsLCBsZWd2YWwyZCwgbGVndmFsM2QsIGxlZ2dyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyKAAAANoHX2dyaWRuZHISAAAAcoMAAABzAwAAACAgIHIwAAAAch8AAAByHwAAAMYDAABzGwAAAIAA9WQBAAwOjDqVZphhoBGgQdELJtQLJtAEJnIxAAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8zwAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8A3wAfAF8AqYFAACrBQAAAAAAAAAAUwApAWGeBgAACiAgICBFdmFsdWF0ZSBhIDMtRCBMZWdlbmRyZSBzZXJpZXMgYXQgcG9pbnRzICh4LCB5LCB6KS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcCh4LHkseikgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogTF9pKHgpICogTF9qKHkpICogTF9rKHopCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgLCBgeWAsIGFuZCBgemAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZgogICAgdGhleSBhcmUgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycyBhbmQKICAgIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFmdGVyIGNvbnZlcnNpb24uIEluIGVpdGhlciBjYXNlLCBlaXRoZXIKICAgIGB4YCwgYHlgLCBhbmQgYHpgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbiBhbmQKICAgIGFkZGl0aW9uIGJvdGggd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIDMgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0byBpdHMKICAgIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cwogICAgICAgIGAoeCwgeSwgeilgLCB3aGVyZSBgeGAsIGB5YCwgYW5kIGB6YCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUuICBJZgogICAgICAgIGFueSBvZiBgeGAsIGB5YCwgb3IgYHpgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkCiAgICAgICAgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCBpZiBpdCBpc24ndCBhbgogICAgICAgIG5kYXJyYXkgaXQgaXMgIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtIG9mCiAgICAgICAgbXVsdGktZGVncmVlIGksaixrIGlzIGNvbnRhaW5lZCBpbiBgYGNbaSxqLGtdYGAuIElmIGBjYCBoYXMgZGltZW5zaW9uCiAgICAgICAgZ3JlYXRlciB0aGFuIDMgdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZSBzZXRzIG9mCiAgICAgICAgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgbXVsdGlkaW1lbnNpb25hbCBwb2x5bm9taWFsIG9uIHBvaW50cyBmb3JtZWQgd2l0aAogICAgICAgIHRyaXBsZXMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAsIGB5YCwgYW5kIGB6YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGxlZ3ZhbCwgbGVndmFsMmQsIGxlZ2dyaWQyZCwgbGVnZ3JpZDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICBygQAAAKkEcn4AAAByhAAAANoBenI6AAAAcwQAAAAgICAgcjAAAAByHgAAAHIeAAAA+wMAAHMdAAAAgAD1YAEADA6MOZVWmFGgAaAxoGHRCyjUCyjQBChyMQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPM8AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAN8AHwBfAKmBQAAqwUAAAAAAAAAAFMAKQFhSwcAAAogICAgRXZhbHVhdGUgYSAzLUQgTGVnZW5kcmUgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4LCB5LCBhbmQgei4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIsYykgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogTF9pKGEpICogTF9qKGIpICogTF9rKGMpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIsIGMpYCBjb25zaXN0IG9mIGFsbCB0cmlwbGVzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCwgYGJgIGZyb20gYHlgLCBhbmQgYGNgIGZyb20gYHpgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtCiAgICBhIGdyaWQgd2l0aCBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiwgYHlgIGluIHRoZSBzZWNvbmQsIGFuZCBgemAgaW4KICAgIHRoZSB0aGlyZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkKICAgIGFyZSB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbgogICAgZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQKICAgIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMKICAgIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdGhyZWUgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUgKyB5LnNoYXBlICsgei5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBpbiB0aGUKICAgICAgICBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBgeGAsIGB5YCwgYW5kIGB6YC4gIElmIGB4YCxgeWAsIG9yIGB6YCBpcyBhCiAgICAgICAgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcwogICAgICAgIGxlZnQgdW5jaGFuZ2VkIGFuZCwgaWYgaXQgaXNuJ3QgYW4gbmRhcnJheSwgaXQg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IHNoYXBlCiAgICAoeGRlZyArIDEsIHlkZWcgKyAxKSBpbiB0aGUgb3JkZXIKCiAgICAuLiBtYXRoOjogY197MDB9LCBjX3swMX0sIGNfezAyfSAuLi4gLCBjX3sxMH0sIGNfezExfSwgY197MTJ9IC4uLgoKICAgIGFuZCBgYG5wLmRvdChWLCBjLmZsYXQpYGAgYW5kIGBgbGVndmFsMmQoeCwgeSwgYylgYCB3aWxsIGJlIHRoZSBzYW1lCiAgICB1cCB0byByb3VuZG9mZi4gVGhpcyBlcXVpdmFsZW5jZSBpcyB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcwogICAgZml0dGluZyBhbmQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIDItRCBMZWdlbmRyZQogICAgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZXMgYW5kIHNhbXBsZSBwb2ludHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheXMgb2YgcG9pbnQgY29vcmRpbmF0ZXMsIGFsbCBvZiB0aGUgc2FtZSBzaGFwZS4gVGhlIGR0eXBlcwogICAgICAgIHdpbGwgYmUgY29udmVydGVkIHRvIGVpdGhlciBmbG9hdDY0IG9yIGNvbXBsZXgxMjggZGVwZW5kaW5nIG9uCiAgICAgICAgd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBTY2FsYXJzIGFyZSBjb252ZXJ0ZWQgdG8KICAgICAgICAxLUQgYXJyYXlzLgogICAgZGVnIDogbGlzdCBvZiBpbnRzCiAgICAgICAgTGlzdCBvZiBtYXhpbXVtIGRlZ3JlZXMgb2YgdGhlIGZvcm0gW3hfZGVnLCB5X2RlZ10uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFuZGVyMmQgOiBuZGFycmF5CiAgICAgICAgVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMgYGB4LnNoYXBlICsgKG9yZGVyLClgYCwgd2hlcmUKICAgICAgICA6bWF0aDpgb3JkZXIgPSAoZGVnWzBdKzEpKihkZWdbMV0rMSlgLiAgVGhlIGR0eXBlIHdpbGwgYmUgdGhlIHNhbWUKICAgICAgICBhcyB0aGUgY29udmVydGVkIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVndmFuZGVyLCBsZWd2YW5kZXIzZCwgbGVndmFsMmQsIGxlZ3ZhbDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICCpA3IoAAAA2g9fdmFuZGVyX25kX2ZsYXRyGAAAACkDcn4AAAByhAAAAHItAAAAcwMAAAAgICByMAAAAHIhAAAAciEAAACbBAAAcyMAAACAAPVkAQAMDtQLHZ15rSnQHjSwcbghsGa4Y9ELQtQLQtAEQnIxAAAAYwQAAAAAAAAAAAAAAAYAAAADAAAA81gAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB0BAAAAAAAAAAAAAB0BAAAAAAAAAAAAABmA3wAfAF8AmYDfAOmAwAAqwMAAAAAAAAAAFMAKQFhFQcAAFBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZ2l2ZW4gZGVncmVlcy4KCiAgICBSZXR1cm5zIHRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IG9mIGRlZ3JlZXMgYGRlZ2AgYW5kIHNhbXBsZQogICAgcG9pbnRzIGAoeCwgeSwgeilgLiBJZiBgbCwgbSwgbmAgYXJlIHRoZSBnaXZlbiBkZWdyZWVzIGluIGB4LCB5LCB6YCwKICAgIHRoZW4gVGhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggaXMgZGVmaW5lZCBieQoKICAgIC4uIG1hdGg6OiBWWy4uLiwgKG0rMSkobisxKWkgKyAobisxKWogKyBrXSA9IExfaSh4KSpMX2ooeSkqTF9rKHopLAoKICAgIHdoZXJlIGAwIDw9IGkgPD0gbGAsIGAwIDw9IGogPD0gbWAsIGFuZCBgMCA8PSBqIDw9IG5gLiAgVGhlIGxlYWRpbmcKICAgIGluZGljZXMgb2YgYFZgIGluZGV4IHRoZSBwb2ludHMgYCh4LCB5LCB6KWAgYW5kIHRoZSBsYXN0IGluZGV4IGVuY29kZXMKICAgIHRoZSBkZWdyZWVzIG9mIHRoZSBMZWdlbmRyZSBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBsZWd2YW5kZXIzZCh4LCB5LCB6LCBbeGRlZywgeWRlZywgemRlZ10pYGAsIHRoZW4gdGhlIGNvbHVtbnMKICAgIG9mIGBWYCBjb3JyZXNwb25kIHRvIHRoZSBlbGVtZW50cyBvZiBhIDMtRCBjb2VmZmljaWVudCBhcnJheSBgY2Agb2YKICAgIHNoYXBlICh4ZGVnICsgMSwgeWRlZyArIDEsIHpkZWcgKyAxKSBpbiB0aGUgb3JkZXIKCiAgICAuLiBtYXRoOjogY197MDAwfSwgY197MDAxfSwgY197MDAyfSwuLi4gLCBjX3swMTB9LCBjX3swMTF9LCBjX3swMTJ9LC4uLgoKICAgIGFuZCBgYG5wLmRvdChWLCBjLmZsYXQpYGAgYW5kIGBgbGVndmFsM2QoeCwgeSwgeiwgYylgYCB3aWxsIGJlIHRoZQogICAgc2FtZSB1cCB0byByb3VuZG9mZi4gVGhpcyBlcXVpdmFsZW5jZSBpcyB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcwogICAgZml0dGluZyBhbmQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIDMtRCBMZWdlbmRyZQogICAgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZXMgYW5kIHNhbXBsZSBwb2ludHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheXMgb2YgcG9pbnQgY29vcmRpbmF0ZXMsIGFsbCBvZiB0aGUgc2FtZSBzaGFwZS4gVGhlIGR0eXBlcyB3aWxsCiAgICAgICAgYmUgY29udmVydGVkIHRvIGVpdGhlciBmbG9hdDY0IG9yIGNvbXBsZXgxMjggZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgICAgICBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBTY2FsYXJzIGFyZSBjb252ZXJ0ZWQgdG8gMS1ECiAgICAgICAgYXJyYXlzLgogICAgZGVnIDogbGlzdCBvZiBpbnRzCiAgICAgICAgTGlzdCBvZiBtYXhpbXVtIGRlZ3JlZXMgb2YgdGhlIGZvcm0gW3hfZGVnLCB5X2RlZywgel9kZWddLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlcjNkIDogbmRhcnJheQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuZWQgbWF0cml4IGlzIGBgeC5zaGFwZSArIChvcmRlciwpYGAsIHdoZXJlCiAgICAgICAgOm1hdGg6YG9yZGVyID0gKGRlZ1swXSsxKSooZGVnWzFdKzEpKihkZWdbMl0rMSlgLiAgVGhlIGR0eXBlIHdpbGwKICAgICAgICBiZSB0aGUgc2FtZSBhcyB0aGUgY29udmVydGVkIGB4YCwgYHlgLCBhbmQgYHpgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbGVndmFuZGVyLCBsZWd2YW5kZXIzZCwgbGVndmFsMmQsIGxlZ3ZhbDNkCgogICAgTm90ZXMKICAgIC0tLS0tCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS43LjAKCiAgICBykwAAACkEcn4AAAByhAAAAHKKAAAAci0AAABzBAAAACAgICByMAAAAHIiAAAAciIAAADQBAAAcycAAACAAPVmAQAMDtQLHZ15rSm1WdAeP8AhwFHIAcAZyEPRC1DUC1DQBFByMQAAAEZjBgAAAAAAAAAAAAAACQAAAAMAAADzQAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHwAfAF8AnwDfAR8BaYHAACrBwAAAAAAAAAAUwApAWGxFAAACiAgICBMZWFzdCBzcXVhcmVzIGZpdCBvZiBMZWdlbmRyZSBzZXJpZXMgdG8gZGF0YS4KCiAgICBSZXR1cm4gdGhlIGNvZWZmaWNpZW50cyBvZiBhIExlZ2VuZHJlIHNlcmllcyBvZiBkZWdyZWUgYGRlZ2AgdGhhdCBpcyB0aGUKICAgIGxlYXN0IHNxdWFyZXMgZml0IHRvIHRoZSBkYXRhIHZhbHVlcyBgeWAgZ2l2ZW4gYXQgcG9pbnRzIGB4YC4gSWYgYHlgIGlzCiAgICAxLUQgdGhlIHJldHVybmVkIGNvZWZmaWNpZW50cyB3aWxsIGFsc28gYmUgMS1ELiBJZiBgeWAgaXMgMi1EIG11bHRpcGxlCiAgICBmaXRzIGFyZSBkb25lLCBvbmUgZm9yIGVhY2ggY29sdW1uIG9mIGB5YCwgYW5kIHRoZSByZXN1bHRpbmcKICAgIGNvZWZmaWNpZW50cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbnMgb2YgYSAyLUQgcmV0dXJuLgogICAgVGhlIGZpdHRlZCBwb2x5bm9taWFsKHMpIGFyZSBpbiB0aGUgZm9ybQoKICAgIC4uIG1hdGg6OiAgcCh4KSA9IGNfMCArIGNfMSAqIExfMSh4KSArIC4uLiArIGNfbiAqIExfbih4KSwKCiAgICB3aGVyZSBgbmAgaXMgYGRlZ2AuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UsIHNoYXBlIChNLCkKICAgICAgICB4LWNvb3JkaW5hdGVzIG9mIHRoZSBNIHNhbXBsZSBwb2ludHMgYGAoeFtpXSwgeVtpXSlgYC4KICAgIHkgOiBhcnJheV9saWtlLCBzaGFwZSAoTSwpIG9yIChNLCBLKQogICAgICAgIHktY29vcmRpbmF0ZXMgb2YgdGhlIHNhbXBsZSBwb2ludHMuIFNldmVyYWwgZGF0YSBzZXRzIG9mIHNhbXBsZQogICAgICAgIHBvaW50cyBzaGFyaW5nIHRoZSBzYW1lIHgtY29vcmRpbmF0ZXMgY2FuIGJlIGZpdHRlZCBhdCBvbmNlIGJ5CiAgICAgICAgcGFzc2luZyBpbiBhIDJELWFycmF5IHRoYXQgY29udGFpbnMgb25lIGRhdGFzZXQgcGVyIGNvbHVtbi4KICAgIGRlZyA6IGludCBvciAxLUQgYXJyYXlfbGlrZQogICAgICAgIERlZ3JlZShzKSBvZiB0aGUgZml0dGluZyBwb2x5bm9taWFscy4gSWYgYGRlZ2AgaXMgYSBzaW5nbGUgaW50ZWdlcgogICAgICAgIGFsbCB0ZXJtcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBgZGVnYCd0aCB0ZXJtIGFyZSBpbmNsdWRlZCBpbiB0aGUKICAgICAgICBmaXQuIEZvciBOdW1QeSB2ZXJzaW9ucyA+PSAxLjExLjAgYSBsaXN0IG9mIGludGVnZXJzIHNwZWNpZnlpbmcgdGhlCiAgICAgICAgZGVncmVlcyBvZiB0aGUgdGVybXMgdG8gaW5jbHVkZSBtYXkgYmUgdXNlZCBpbnN0ZWFkLgogICAgcmNvbmQgOiBmbG9hdCwgb3B0aW9uYWwKICAgICAgICBSZWxhdGl2ZSBjb25kaXRpb24gbnVtYmVyIG9mIHRoZSBmaXQuIFNpbmd1bGFyIHZhbHVlcyBzbWFsbGVyIHRoYW4KICAgICAgICB0aGlzIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXN0IHNpbmd1bGFyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhlCiAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBsZW4oeCkqZXBzLCB3aGVyZSBlcHMgaXMgdGhlIHJlbGF0aXZlIHByZWNpc2lvbiBvZgogICAgICAgIHRoZSBmbG9hdCB0eXBlLCBhYm91dCAyZS0xNiBpbiBtb3N0IGNhc2VzLgogICAgZnVsbCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgU3dpdGNoIGRldGVybWluaW5nIG5hdHVyZSBvZiByZXR1cm4gdmFsdWUuIFdoZW4gaXQgaXMgRmFsc2UgKHRoZQogICAgICAgIGRlZmF1bHQpIGp1c3QgdGhlIGNvZWZmaWNpZW50cyBhcmUgcmV0dXJuZWQsIHdoZW4gVHJ1ZSBkaWFnbm9zdGljCiAgICAgICAgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbiBpcyBhbHNvIHJldHVybmVkLgogICAgdyA6IGFycmF5X2xpa2UsIHNoYXBlIChgTWAsKSwgb3B0aW9uYWwKICAgICAgICBXZWlnaHRzLiBJZiBub3QgTm9uZSwgdGhlIHdlaWdodCBgYHdbaV1gYCBhcHBsaWVzIHRvIHRoZSB1bnNxdWFyZWQKICAgICAgICByZXNpZHVhbCBgYHlbaV0gLSB5X2hhdFtpXWBgIGF0IGBgeFtpXWBgLiBJZGVhbGx5IHRoZSB3ZWlnaHRzIGFyZQogICAgICAgIGNob3NlbiBzbyB0aGF0IHRoZSBlcnJvcnMgb2YgdGhlIHByb2R1Y3RzIGBgd1tpXSp5W2ldYGAgYWxsIGhhdmUgdGhlCiAgICAgICAgc2FtZSB2YXJpYW5jZS4gIFdoZW4gdXNpbmcgaW52ZXJzZS12YXJpYW5jZSB3ZWlnaHRpbmcsIHVzZQogICAgICAgIGBgd1tpXSA9IDEvc2lnbWEoeVtpXSlgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNS4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgY29lZiA6IG5kYXJyYXksIHNoYXBlIChNLCkgb3IgKE0sIEspCiAgICAgICAgTGVnZW5kcmUgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8gaGlnaC4gSWYgYHlgIHdhcwogICAgICAgIDItRCwgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIGRhdGEgaW4gY29sdW1uIGsgb2YgYHlgIGFyZSBpbgogICAgICAgIGNvbHVtbiBga2AuIElmIGBkZWdgIGlzIHNwZWNpZmllZCBhcyBhIGxpc3QsIGNvZWZmaWNpZW50cyBmb3IKICAgICAgICB0ZXJtcyBub3QgaW5jbHVkZWQgaW4gdGhlIGZpdCBhcmUgc2V0IGVxdWFsIHRvIHplcm8gaW4gdGhlCiAgICAgICAgcmV0dXJuZWQgYGNvZWZgLgoKICAgIFtyZXNpZHVhbHMsIHJhbmssIHNpbmd1bGFyX3ZhbHVlcywgcmNvbmRdIDogbGlzdAogICAgICAgIFRoZXNlIHZhbHVlcyBhcmUgb25seSByZXR1cm5lZCBpZiBgYGZ1bGwgPT0gVHJ1ZWBgCgogICAgICAgIC0gcmVzaWR1YWxzIC0tIHN1bSBvZiBzcXVhcmVkIHJlc2lkdWFscyBvZiB0aGUgbGVhc3Qgc3F1YXJlcyBmaXQKICAgICAgICAtIHJhbmsgLS0gdGhlIG51bWVyaWNhbCByYW5rIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSBzaW5ndWxhcl92YWx1ZXMgLS0gc2luZ3VsYXIgdmFsdWVzIG9mIHRoZSBzY2FsZWQgVmFuZGVybW9uZGUgbWF0cml4CiAgICAgICAgLSByY29uZCAtLSB2YWx1ZSBvZiBgcmNvbmRgLgoKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgYG51bXB5LmxpbmFsZy5sc3RzcWAuCgogICAgV2FybnMKICAgIC0tLS0tCiAgICBSYW5rV2FybmluZwogICAgICAgIFRoZSByYW5rIG9mIHRoZSBjb2VmZmljaWVudCBtYXRyaXggaW4gdGhlIGxlYXN0LXNxdWFyZXMgZml0IGlzCiAgICAgICAgZGVmaWNpZW50LiBUaGUgd2FybmluZyBpcyBvbmx5IHJhaXNlZCBpZiBgYGZ1bGwgPT0gRmFsc2VgYC4gIFRoZQogICAgICAgIHdhcm5pbmdzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5CgogICAgICAgID4+PiBpbXBvcnQgd2FybmluZ3MKICAgICAgICA+Pj4gd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBucC5SYW5rV2FybmluZykKCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LnBvbHlub21pYWwucG9seW5vbWlhbC5wb2x5Zml0CiAgICBudW1weS5wb2x5bm9taWFsLmNoZWJ5c2hldi5jaGViZml0CiAgICBudW1weS5wb2x5bm9taWFsLmxhZ3VlcnJlLmxhZ2ZpdAogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1maXQKICAgIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lLmhlcm1lZml0CiAgICBsZWd2YWwgOiBFdmFsdWF0ZXMgYSBMZWdlbmRyZSBzZXJpZXMuCiAgICBsZWd2YW5kZXIgOiBWYW5kZXJtb25kZSBtYXRyaXggb2YgTGVnZW5kcmUgc2VyaWVzLgogICAgbGVnd2VpZ2h0IDogTGVnZW5kcmUgd2VpZ2h0IGZ1bmN0aW9uICg9IDEpLgogICAgbnVtcHkubGluYWxnLmxzdHNxIDogQ29tcHV0ZXMgYSBsZWFzdC1zcXVhcmVzIGZpdCBmcm9tIHRoZSBtYXRyaXguCiAgICBzY2lweS5pbnRlcnBvbGF0ZS5Vbml2YXJpYXRlU3BsaW5lIDogQ29tcHV0ZXMgc3BsaW5lIGZpdHMuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgc29sdXRpb24gaXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgTGVnZW5kcmUgc2VyaWVzIGBwYCB0aGF0CiAgICBtaW5pbWl6ZXMgdGhlIHN1bSBvZiB0aGUgd2VpZ2h0ZWQgc3F1YXJlZCBlcnJvcnMKCiAgICAuLiBtYXRoOjogRSA9IFxzdW1faiB3X2peMiAqIHx5X2ogLSBwKHhfail8XjIsCgogICAgd2hlcmUgOm1hdGg6YHdfamAgYXJlIHRoZSB3ZWlnaHRzLiBUaGlzIHByb2JsZW0gaXMgc29sdmVkIGJ5IHNldHRpbmcgdXAKICAgIGFzIHRoZSAodHlwaWNhbGx5KSBvdmVyZGV0ZXJtaW5lZCBtYXRyaXggZXF1YXRpb24KCiAgICAuLiBtYXRoOjogVih4KSAqIGMgPSB3ICogeSwKCiAgICB3aGVyZSBgVmAgaXMgdGhlIHdlaWdodGVkIHBzZXVkbyBWYW5kZXJtb25kZSBtYXRyaXggb2YgYHhgLCBgY2AgYXJlIHRoZQogICAgY29lZmZpY2llbnRzIHRvIGJlIHNvbHZlZCBmb3IsIGB3YCBhcmUgdGhlIHdlaWdodHMsIGFuZCBgeWAgYXJlIHRoZQogICAgb2JzZXJ2ZWQgdmFsdWVzLiAgVGhpcyBlcXVhdGlvbiBpcyB0aGVuIHNvbHZlZCB1c2luZyB0aGUgc2luZ3VsYXIgdmFsdWUKICAgIGRlY29tcG9zaXRpb24gb2YgYFZgLgoKICAgIElmIHNvbWUgb2YgdGhlIHNpbmd1bGFyIHZhbHVlcyBvZiBgVmAgYXJlIHNvIHNtYWxsIHRoYXQgdGhleSBhcmUKICAgIG5lZ2xlY3RlZCwgdGhlbiBhIGBSYW5rV2FybmluZ2Agd2lsbCBiZSBpc3N1ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUKICAgIGNvZWZmaWNpZW50IHZhbHVlcyBtYXkgYmUgcG9vcmx5IGRldGVybWluZWQuIFVzaW5nIGEgbG93ZXIgb3JkZXIgZml0CiAgICB3aWxsIHVzdWFsbHkgZ2V0IHJpZCBvZiB0aGUgd2FybmluZy4gIFRoZSBgcmNvbmRgIHBhcmFtZXRlciBjYW4gYWxzbyBiZQog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ICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LnBvbHlub21pYWwucG9seW5vbWlhbC5wb2x5cm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwuY2hlYnlzaGV2LmNoZWJyb290cwogICAgbnVtcHkucG9seW5vbWlhbC5sYWd1ZXJyZS5sYWdyb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UuaGVybWVyb290cwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHJvb3QgZXN0aW1hdGVzIGFyZSBvYnRhaW5lZCBhcyB0aGUgZWlnZW52YWx1ZXMgb2YgdGhlIGNvbXBhbmlvbgogICAgbWF0cml4LCBSb290cyBmYXIgZnJvbSB0aGUgb3JpZ2luIG9mIHRoZSBjb21wbGV4IHBsYW5lIG1heSBoYXZlIGxhcmdlCiAgICBlcnJvcnMgZHVlIHRvIHRoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgb2YgdGhlIHNlcmllcyBmb3Igc3VjaCB2YWx1ZXMuCiAgICBSb290cyB3aXRoIG11bHRpcGxpY2l0eSBncmVhdGVyIHRoYW4gMSB3aWxsIGFsc28gc2hvdyBsYXJnZXIgZXJyb3JzIGFzCiAgICB0aGUgdmFsdWUgb2YgdGhlIHNlcmllcyBuZWFyIHN1Y2ggcG9pbnRzIGlzIHJlbGF0aXZlbHkgaW5zZW5zaXRpdmUgdG8KICAgIGVycm9ycyBpbiB0aGUgcm9vdHMuIElzb2xhdGVkIHJvb3RzIG5lYXIgdGhlIG9yaWdpbiBjYW4gYmUgaW1wcm92ZWQgYnkKICAgIGEgZmV3IGl0ZXJhdGlvbnMgb2YgTmV3dG9uJ3MgbWV0aG9kLgoKICAgIFRoZSBMZWdlbmRyZSBzZXJpZXMgYmFzaXMgcG9seW5vbWlhbHMgYXJlbid0IHBvd2VycyBvZiBgYHhgYCBzbyB0aGUKICAgIHJlc3VsdHMgb2YgdGhpcyBmdW5jdGlvbiBtYXkgc2VlbSB1bmludHVpdGl2ZS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
chebyshev.cpython-311.pyc
72.84 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite.cpython-311.pyc
60.65 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite_e.cpython-311.pyc
60.42 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
laguerre.cpython-311.pyc
58.41 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
legendre.cpython-311.pyc
59.03 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polynomial.cpython-311.pyc
55.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polyutils.cpython-311.pyc
32.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
873 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_polybase.cpython-311.pyc
48.85 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
7.02 KB
lrw-r--r--
2026-02-06 08:07:28
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).