REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 48.40 KB
Close
/proc/thread-self/root/opt/alt/python37/lib64/python3.7/site-packages/numpy/ma/__pycache__/extras.cpython-37.pyc
Text
Base64
Qg0NCgAAAADB2EZkhNoAAOMAAAAAAAAAAAAAAAAsAAAAQAAAAHPOAwAAZABaAGQBZAJsAW0CWgJtA1oDbQRaBAEAZANkBGQFZAZkB2QIZAlkCmQLZAxkDWQOZA9kEGQRZBJkE2QUZBVkFmQXZBhkGWQaZBtkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmcsWgVkAWQvbAZaBmQBZC9sB1oHZDBkMWwIbQlaCgEAZDBkMmwJbQtaC20MWgxtDVoNbQ5aDm0PWg9tEFoQbRFaEW0SWhJtE1oTbRRaFG0VWhVtFloWbRdaF20YWhhtGVoZbRpaGm0bWhttHFocbR1aHW0eWh5tH1ofbSBaIAEAZAFkL2whWiJkAWQzbCFtI1ojbQ5aJAEAZAFkL2wlbQkCAAEAbSZaJgEAZAFkNGwnbShaKAEAZAFkNWwpbSpaKgEAZAFkNmwrbSxaLAEAZAFkN2wtbS5aLgEAZDhkOYQAWi9kc2Q6ZBCEAVowZTFmAWQ7ZCGEAVoyZDxkIoQAWjNHAGQ9ZD6EAGQ+gwJaNEcAZD9kQIQAZEBlNIMDWjVHAGRBZEKEAGRCZTSDA1o2RwBkQ2REhABkRGU0gwNaN0cAZEVkRoQAZEZlNIMDWjhlOGQFgwFaOWU4ZAaDAVo6ZThkB4MBWjtlNmQugwEEAFo8Wj1lNmQagwFaPmU2ZAuDAVo/ZTZkFYMBWkBlNWQZgwFaQWU1ZBODAVpCZEdkSIQAWkNkSWQDhABaRGUiakRqAGVEXwBkSmQEhABaRWVFagBkL2sJkAJyXGUiakVqAGQvZSJqRWoAoEZkS6EBhQIZAKBHoQBkTBcAZUVfAGR0ZE5kCIQBWkhkdWRPZCOEAVpJZHZkUGRRhAFaSmR3ZFJkDYQBWktkeGRTZA6EAVpMZFRkD4QAWk1kVWQMhABaTmR5ZFZkIIQBWk9kemRXZB6EAVpQZHtkWGQWhAFaUWR8ZFlkK4QBWlJkfWRaZB2EAVpTZH5kW2QqhAFaVGR/ZFxkHIQBWlVkgGRdZBuEAVpWZF5kLIQAWldkgWRfZCmEAVpYZIJkYWRihAFaWWSDZGNkEoQBWlpkL2RgZSJqW2RgZSJqW2YFZGRkEYQBWlxHAGRlZGaEAGRmZS6DA1pdRwBkZ2RohABkaGVdgwNaXmVegwBaX2RpZBiEAFpgZIRkamQmhAFaYWRrZBeEAFpiZIVkbGQlhAFaY2RtZG6EAFpkZG9kCoQAWmVkcGQJhABaZmSGZHFkLYQBWmdlCqBoZSJqZ2oAZWdqAKECZWdfAGSHZHJkJ4QBWmllCqBoZSJqaWoAZWlqAKECZWlfAGQvUwApiHrLCk1hc2tlZCBhcnJheXMgYWRkLW9ucy4KCkEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgZm9yIGBudW1weS5tYWAuCgo6YXV0aG9yOiBQaWVycmUgR2VyYXJkLU1hcmNoYW50Cjpjb250YWN0OiBwaWVycmVnbV9hdF91Z2FfZG90X2VkdQo6dmVyc2lvbjogJElkOiBleHRyYXMucHkgMzQ3MyAyMDA3LTEwLTI5IDE1OjE4OjEzWiBqYXJyb2QubWlsbG1hbiAkCgrpAAAAACkD2ghkaXZpc2lvbtoPYWJzb2x1dGVfaW1wb3J02g5wcmludF9mdW5jdGlvbtoQYXBwbHlfYWxvbmdfYXhpc9oPYXBwbHlfb3Zlcl9heGVz2gphdGxlYXN0XzFk2gphdGxlYXN0XzJk2gphdGxlYXN0XzNk2gdhdmVyYWdl2gxjbHVtcF9tYXNrZWTaDmNsdW1wX3VubWFza2Vk2gxjb2x1bW5fc3RhY2vaDWNvbXByZXNzX2NvbHPaC2NvbXByZXNzX25k2hBjb21wcmVzc19yb3djb2xz2g1jb21wcmVzc19yb3dz2gxjb3VudF9tYXNrZWTaCGNvcnJjb2Vm2gNjb3baCGRpYWdmbGF02gNkb3TaBmRzdGFja9oHZWRpZmYxZNoYZmxhdG5vdG1hc2tlZF9jb250aWd1b3Vz2hNmbGF0bm90bWFza2VkX2VkZ2Vz2gZoc3BsaXTaBmhzdGFja9oEaXNpbtoEaW4xZNoLaW50ZXJzZWN0MWTaCW1hc2tfY29sc9oMbWFza19yb3djb2xz2gltYXNrX3Jvd3PaCm1hc2tlZF9hbGzaD21hc2tlZF9hbGxfbGlrZdoGbWVkaWFu2gNtcl/aFG5vdG1hc2tlZF9jb250aWd1b3Vz2g9ub3RtYXNrZWRfZWRnZXPaB3BvbHlmaXTaCXJvd19zdGFja9oJc2V0ZGlmZjFk2ghzZXR4b3IxZNoGdW5pcXVl2gd1bmlvbjFk2gZ2YW5kZXLaBnZzdGFja07pAQAAACkB2gRjb3JlKRbaC01hc2tlZEFycmF52gdNQUVycm9y2gNhZGTaBWFycmF52gdhc2FycmF52gtjb25jYXRlbmF0ZdoGZmlsbGVk2gVjb3VudNoHZ2V0bWFza9oMZ2V0bWFza2FycmF52g9tYWtlX21hc2tfZGVzY3LaBm1hc2tlZNoMbWFza2VkX2FycmF52gdtYXNrX29y2gZub21hc2vaBG9uZXPaBHNvcnTaBXplcm9z2gdnZXRkYXRh2hNnZXRfbWFza2VkX3N1YmNsYXNzchYAAAByIQAAACkC2gduZGFycmF5cjYAAAApAdoUbm9ybWFsaXplX2F4aXNfaW5kZXgpAdoUbm9ybWFsaXplX2F4aXNfdHVwbGUpAdoIX3VyZWR1Y2UpAdoQQXhpc0NvbmNhdGVuYXRvcmMBAAAAAAAAAAEAAAAFAAAAQwAAAHMQAAAAdAB8AHQBdAJ0A2YDgwJTACkBejYKICAgIElzIHNlcSBhIHNlcXVlbmNlIChuZGFycmF5LCBsaXN0IG9yIHR1cGxlKT8KCiAgICApBNoKaXNpbnN0YW5jZXJHAAAA2gV0dXBsZdoEbGlzdCkB2gNzZXGpAHJQAAAA+kIvb3B0L2FsdC9weXRob24zNy9saWI2NC9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9udW1weS9tYS9leHRyYXMucHnaCmlzc2VxdWVuY2UtAAAAcwIAAAAABXJSAAAAYwIAAAAAAAAAAwAAAAMAAABDAAAAcxIAAAB0AHwAgwF9AnwCoAF8AaEBUwApAWGVBAAACiAgICBDb3VudCB0aGUgbnVtYmVyIG9mIG1hc2tlZCBlbGVtZW50cyBhbG9uZyB0aGUgZ2l2ZW4gYXhpcy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhcnIgOiBhcnJheV9saWtlCiAgICAgICAgQW4gYXJyYXkgd2l0aCAocG9zc2libHkpIG1hc2tlZCBlbGVtZW50cy4KICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBhbG9uZyB3aGljaCB0byBjb3VudC4gSWYgTm9uZSAoZGVmYXVsdCksIGEgZmxhdHRlbmVkCiAgICAgICAgdmVyc2lvbiBvZiB0aGUgYXJyYXkgaXMgdXNlZC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBjb3VudCA6IGludCwgbmRhcnJheQogICAgICAgIFRoZSB0b3RhbCBudW1iZXIgb2YgbWFza2VkIGVsZW1lbnRzIChheGlzPU5vbmUpIG9yIHRoZSBudW1iZXIKICAgICAgICBvZiBtYXNrZWQgZWxlbWVudHMgYWxvbmcgZWFjaCBzbGljZSBvZiB0aGUgZ2l2ZW4gYXhpcy4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIE1hc2tlZEFycmF5LmNvdW50IDogQ291bnQgbm9uLW1hc2tlZCBlbGVtZW50cy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQgbnVtcHkubWEgYXMgbWEKICAgID4+PiBhID0gbnAuYXJhbmdlKDkpLnJlc2hhcGUoKDMsMykpCiAgICA+Pj4gYSA9IG1hLmFycmF5KGEpCiAgICA+Pj4gYVsxLCAwXSA9IG1hLm1hc2tlZAogICAgPj4+IGFbMSwgMl0gPSBtYS5tYXNrZWQKICAgID4+PiBhWzIsIDFdID0gbWEubWFza2VkCiAgICA+Pj4gYQogICAgbWFza2VkX2FycmF5KGRhdGEgPQogICAgIFtbMCAxIDJdCiAgICAgWy0tIDQgLS1dCiAgICAgWzYgLS0gOF1dLAogICAgICAgICAgbWFzayA9CiAgICAgW1tGYWxzZSBGYWxzZSBGYWxzZV0KICAgICBbIFRydWUgRmFsc2UgIFRydWVdCiAgICAgW0ZhbHNlICBUcnVlIEZhbHNlXV0sCiAgICAgICAgICBmaWxsX3ZhbHVlPTk5OTk5OSkKICAgID4+PiBtYS5jb3VudF9tYXNrZWQoYSkKICAgIDMKCiAgICBXaGVuIHRoZSBgYXhpc2Aga2V5d29yZCBpcyB1c2VkIGFuIGFycmF5IGlzIHJldHVybmVkLgoKICAgID4+PiBtYS5jb3VudF9tYXNrZWQoYSwgYXhpcz0wKQogICAgYXJyYXkoWzEsIDEsIDFdKQogICAgPj4+IG1hLmNvdW50X21hc2tlZChhLCBheGlzPTEpCiAgICBhcnJheShbMCwgMiwgMV0pCgogICAgKQJyPAAAANoDc3VtKQPaA2FyctoEYXhpc9oBbXJQAAAAclAAAAByUQAAAHISAAAANQAAAHMEAAAAADMIAWMCAAAAAAAAAAMAAAAHAAAAQwAAAHMkAAAAdAB0AaACfAB8AaECdAGgA3wAdAR8AYMBoQJkAY0CfQJ8AlMAKQJh5wMAAAogICAgRW1wdHkgbWFza2VkIGFycmF5IHdpdGggYWxsIGVsZW1lbnRzIG1hc2tlZC4KCiAgICBSZXR1cm4gYW4gZW1wdHkgbWFza2VkIGFycmF5IG9mIHRoZSBnaXZlbiBzaGFwZSBhbmQgZHR5cGUsIHdoZXJlIGFsbCB0aGUKICAgIGRhdGEgYXJlIG1hc2tlZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBzaGFwZSA6IHR1cGxlCiAgICAgICAgU2hhcGUgb2YgdGhlIHJlcXVpcmVkIE1hc2tlZEFycmF5LgogICAgZHR5cGUgOiBkdHlwZSwgb3B0aW9uYWwKICAgICAgICBEYXRhIHR5cGUgb2YgdGhlIG91dHB1dC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBhIDogTWFza2VkQXJyYXkKICAgICAgICBBIG1hc2tlZCBhcnJheSB3aXRoIGFsbCBkYXRhIG1hc2tlZC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG1hc2tlZF9hbGxfbGlrZSA6IEVtcHR5IG1hc2tlZCBhcnJheSBtb2RlbGxlZCBvbiBhbiBleGlzdGluZyBhcnJheS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQgbnVtcHkubWEgYXMgbWEKICAgID4+PiBtYS5tYXNrZWRfYWxsKCgzLCAzKSkKICAgIG1hc2tlZF9hcnJheShkYXRhID0KICAgICBbWy0tIC0tIC0tXQogICAgIFstLSAtLSAtLV0KICAgICBbLS0gLS0gLS1dXSwKICAgICAgICAgIG1hc2sgPQogICAgIFtbIFRydWUgIFRydWUgIFRydWVdCiAgICAgWyBUcnVlICBUcnVlICBUcnVlXQogICAgIFsgVHJ1ZSAgVHJ1ZSAgVHJ1ZV1dLAogICAgICAgICAgZmlsbF92YWx1ZT0xZSsyMCkKCiAgICBUaGUgYGR0eXBlYCBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgdW5kZXJseWluZyBkYXRhIHR5cGUuCgogICAgPj4+IGEgPSBtYS5tYXNrZWRfYWxsKCgzLCAzKSkKICAgID4+PiBhLmR0eXBlCiAgICBkdHlwZSgnZmxvYXQ2NCcpCiAgICA+Pj4gYSA9IG1hLm1hc2tlZF9hbGwoKDMsIDMpLCBkdHlwZT1ucC5pbnQzMikKICAgID4+PiBhLmR0eXBlCiAgICBkdHlwZSgnaW50MzInKQoKICAgICkB2gRtYXNrKQVyPwAAANoCbnDaBWVtcHR5ckIAAAByPQAAACkD2gVzaGFwZdoFZHR5cGXaAWFyUAAAAHJQAAAAclEAAAByIwAAAGwAAABzBgAAAAAvDAEUAWMBAAAAAAAAAAIAAAAEAAAAQwAAAHMsAAAAdACgAXwAoQGgAnQDoQF9AXQAagR8AWoFdAZ8AWoHgwFkAY0CfAFfCHwBUwApAmF6BAAACiAgICBFbXB0eSBtYXNrZWQgYXJyYXkgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBhcnJheS4KCiAgICBSZXR1cm4gYW4gZW1wdHkgbWFza2VkIGFycmF5IG9mIHRoZSBzYW1lIHNoYXBlIGFuZCBkdHlwZSBhcwogICAgdGhlIGFycmF5IGBhcnJgLCB3aGVyZSBhbGwgdGhlIGRhdGEgYXJlIG1hc2tlZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhcnIgOiBuZGFycmF5CiAgICAgICAgQW4gYXJyYXkgZGVzY3JpYmluZyB0aGUgc2hhcGUgYW5kIGR0eXBlIG9mIHRoZSByZXF1aXJlZCBNYXNrZWRBcnJheS4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBhIDogTWFza2VkQXJyYXkKICAgICAgICBBIG1hc2tlZCBhcnJheSB3aXRoIGFsbCBkYXRhIG1hc2tlZC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgQXR0cmlidXRlRXJyb3IKICAgICAgICBJZiBgYXJyYCBkb2Vzbid0IGhhdmUgYSBzaGFwZSBhdHRyaWJ1dGUgKGkuZS4gbm90IGFuIG5kYXJyYXkpCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBtYXNrZWRfYWxsIDogRW1wdHkgbWFza2VkIGFycmF5IHdpdGggYWxsIGVsZW1lbnRzIG1hc2tlZC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQgbnVtcHkubWEgYXMgbWEKICAgID4+PiBhcnIgPSBucC56ZXJvcygoMiwgMyksIGR0eXBlPW5wLmZsb2F0MzIpCiAgICA+Pj4gYXJyCiAgICBhcnJheShbWyAwLiwgIDAuLCAgMC5dLAogICAgICAgICAgIFsgMC4sICAwLiwgIDAuXV0sIGR0eXBlPWZsb2F0MzIpCiAgICA+Pj4gbWEubWFza2VkX2FsbF9saWtlKGFycikKICAgIG1hc2tlZF9hcnJheShkYXRhID0KICAgICBbWy0tIC0tIC0tXQogICAgIFstLSAtLSAtLV1dLAogICAgICAgICAgbWFzayA9CiAgICAgW1sgVHJ1ZSAgVHJ1ZSAgVHJ1ZV0KICAgICBbIFRydWUgIFRydWUgIFRydWVdXSwKICAgICAgICAgIGZpbGxfdmFsdWU9MWUrMjApCgogICAgVGhlIGR0eXBlIG9mIHRoZSBtYXNrZWQgYXJyYXkgbWF0Y2hlcyB0aGUgZHR5cGUgb2YgYGFycmAuCgogICAgPj4+IGFyci5kdHlwZQogICAgZHR5cGUoJ2Zsb2F0MzInKQogICAgPj4+IG1hLm1hc2tlZF9hbGxfbGlrZShhcnIpLmR0eXBlCiAgICBkdHlwZSgnZmxvYXQzMicpCgogICAgKQFyWwAAACkJclgAAABaCmVtcHR5X2xpa2XaBHZpZXdyMwAAAHJCAAAAcloAAAByPQAAAHJbAAAA2gVfbWFzaykCclQAAAByXAAAAHJQAAAAclAAAAByUQAAAHIkAAAAoAAAAHMGAAAAADIQARgBYwAAAAAAAAAAAAAAAAIAAABAAAAAcygAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEZAWEAFoFZAZkB4QAWgZkCFMAKQnaD19mcm9tbnhmdW5jdGlvbmFWAgAACiAgICBEZWZpbmVzIGEgd3JhcHBlciB0byBhZGFwdCBOdW1QeSBmdW5jdGlvbnMgdG8gbWFza2VkIGFycmF5cy4KCgogICAgQW4gaW5zdGFuY2Ugb2YgYF9mcm9tbnhmdW5jdGlvbmAgY2FuIGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMKICAgIGFzIHRoZSB3cmFwcGVkIE51bVB5IGZ1bmN0aW9uLiBUaGUgZG9jc3RyaW5nIG9mIGBuZXdmdW5jYCBpcyBhZGFwdGVkIGZyb20KICAgIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIGFzIHdlbGwsIHNlZSBgZ2V0ZG9jYC4KCiAgICBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gSW5zdGVhZCwgb25lIG9mIGl0cyBleHRlbnNpb25zIHRoYXQKICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGEgc3BlY2lmaWMgdHlwZSBvZiBpbnB1dCBzaG91bGQgYmUgdXNlZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBmdW5jbmFtZSA6IHN0cgogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBhZGFwdGVkLiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlCiAgICAgICAgaW4gdGhlIE51bVB5IG5hbWVzcGFjZSAoaS5lLiBgYG5wLmZ1bmNuYW1lYGApLgoKICAgIGMCAAAAAAAAAAIAAAACAAAAQwAAAHMUAAAAfAF8AF8AfACgAaEAfABfAmQAUwApAU4pA9oIX19uYW1lX1/aBmdldGRvY9oHX19kb2NfXykC2gRzZWxm2ghmdW5jbmFtZXJQAAAAclAAAAByUQAAANoIX19pbml0X1/uAAAAcwQAAAAAAQYBehhfZnJvbW54ZnVuY3Rpb24uX19pbml0X19jAQAAAAAAAAAFAAAABQAAAEMAAABzRgAAAHQAdAF8AGoCZAGDA30BdAB8AWQCZAGDA30CfAJyQnwAagJ0A6AEfAGhARcAfQNkA30EZASgBXwDfAJ8BGYDoQFTAGQBUwApBWEgAgAACiAgICAgICAgUmV0cmlldmUgdGhlIGRvY3N0cmluZyBhbmQgc2lnbmF0dXJlIGZyb20gdGhlIGZ1bmN0aW9uLgoKICAgICAgICBUaGUgYGBfX2RvY19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBkb2NzdHJpbmcgZm9yCiAgICAgICAgdGhlIG5ldyBtYXNrZWQgYXJyYXkgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uIEEgbm90ZSBvbiBhcHBsaWNhdGlvbgogICAgICAgIG9mIHRoZSBmdW5jdGlvbiB0byB0aGUgbWFzayBpcyBhcHBlbmRlZC4KCiAgICAgICAgLi4gd2FybmluZzo6CiAgICAgICAgICBJZiB0aGUgZnVuY3Rpb24gZG9jc3RyaW5nIGFscmVhZHkgY29udGFpbmVkIGEgTm90ZXMgc2VjdGlvbiwgdGhlCiAgICAgICAgICBuZXcgZG9jc3RyaW5nIHdpbGwgaGF2ZSB0d28gTm90ZXMgc2VjdGlvbnMgaW5zdGVhZCBvZiBhcHBlbmRpbmcgYSBub3RlCiAgICAgICAgICB0byB0aGUgZXhpc3Rpbmcgc2VjdGlvbi4KCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICBOb25lCgogICAgICAgIE5yYgAAAHpMTm90ZXMKLS0tLS0KVGhlIGZ1bmN0aW9uIGlzIGFwcGxpZWQgdG8gYm90aCB0aGUgX2RhdGEgYW5kIHRoZSBfbWFzaywgaWYgYW55LtoBCikG2gdnZXRhdHRyclgAAAByYAAAANoCbWFaFGdldF9vYmplY3Rfc2lnbmF0dXJl2gRqb2luKQVyYwAAAFoGbnBmdW5j2gNkb2PaA3NpZ1oGbG9jZG9jclAAAAByUAAAAHJRAAAAcmEAAADyAAAAcw4AAAAAEg4BDAEEARABBAIQAXoWX2Zyb21ueGZ1bmN0aW9uLmdldGRvY2MBAAAAAAAAAAMAAAABAAAATwAAAHMEAAAAZABTACkBTnJQAAAAKQNyYwAAANoEYXJnc9oGcGFyYW1zclAAAAByUAAAAHJRAAAA2ghfX2NhbGxfXw0BAABzAgAAAAABehhfZnJvbW54ZnVuY3Rpb24uX19jYWxsX19OKQdyYAAAANoKX19tb2R1bGVfX9oMX19xdWFsbmFtZV9fcmIAAAByZQAAAHJhAAAAcm4AAAByUAAAAHJQAAAAclAAAAByUQAAAHJfAAAA2gAAAHMIAAAACBIEAggECBtyXwAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQXaFl9mcm9tbnhmdW5jdGlvbl9zaW5nbGV6sgogICAgQSB2ZXJzaW9uIG9mIGBfZnJvbW54ZnVuY3Rpb25gIHRoYXQgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJyYXkKICAgIGFyZ3VtZW50IGZvbGxvd2VkIGJ5IGF1eGlsaWFyeSBhcmdzIHRoYXQgYXJlIHBhc3NlZCB2ZXJiYXRpbSBmb3IKICAgIGJvdGggdGhlIGRhdGEgYW5kIG1hc2sgY2FsbHMuCiAgICBjAgAAAAAAAAAHAAAABAAAAE8AAABzhAAAAHQAdAF8AGoCgwJ9BHQDfAF0BIMCckp8BHwBoAWhAGYBfAKeAnwDjgF9BXwEdAZ8AYMBZgF8Ap4CfAOOAX0GdAd8BXwGZAGNAlMAfAR0AaAIfAGhAWYBfAKeAnwDjgF9BXwEdAZ8AYMBZgF8Ap4CfAOOAX0GdAd8BXwGZAGNAlMAZABTACkCTikBclcAAAApCXJnAAAAclgAAAByYAAAAHJMAAAAckcAAABaCV9fYXJyYXlfX3I8AAAAcj8AAAByNwAAACkHcmMAAADaAXhybAAAAHJtAAAA2gRmdW5j2gJfZNoCX21yUAAAAHJQAAAAclEAAABybgAAABcBAABzEAAAAAABDAEKARQBFAEMAhYBFAF6H19mcm9tbnhmdW5jdGlvbl9zaW5nbGUuX19jYWxsX19OKQVyYAAAAHJvAAAAcnAAAAByYgAAAHJuAAAAclAAAAByUAAAAHJQAAAAclEAAABycQAAABEBAABzBAAAAAgFBAFycQAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQXaE19mcm9tbnhmdW5jdGlvbl9zZXF6tgogICAgQSB2ZXJzaW9uIG9mIGBfZnJvbW54ZnVuY3Rpb25gIHRoYXQgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgc2VxdWVuY2UKICAgIG9mIGFycmF5cyBmb2xsb3dlZCBieSBhdXhpbGlhcnkgYXJncyB0aGF0IGFyZSBwYXNzZWQgdmVyYmF0aW0gZm9yCiAgICBib3RoIHRoZSBkYXRhIGFuZCBtYXNrIGNhbGxzLgogICAgYwIAAAAAAAAABwAAAAQAAABPAAAAc1QAAAB0AHQBfABqAoMCfQR8BHQDZAFkAoQAfAFEAIMBgwFmAXwCngJ8A44BfQV8BHQDZANkAoQAfAFEAIMBgwFmAXwCngJ8A44BfQZ0BHwFfAZkBI0CUwApBU5jAQAAAAAAAAACAAAABQAAAFMAAABzFgAAAGcAfABdDn0BdACgAXwBoQGRAnEEUwByUAAAACkCclgAAAByNwAAACkC2gIuMHJcAAAAclAAAAByUAAAAHJRAAAA+go8bGlzdGNvbXA+KwEAAHMCAAAABgB6MF9mcm9tbnhmdW5jdGlvbl9zZXEuX19jYWxsX18uPGxvY2Fscz4uPGxpc3Rjb21wPmMBAAAAAAAAAAIAAAAEAAAAUwAAAHMUAAAAZwB8AF0MfQF0AHwBgwGRAnEEUwByUAAAACkBcjwAAAApAnJ3AAAAclwAAAByUAAAAHJQAAAAclEAAAByeAAAACwBAABzAgAAAAYAKQFyVwAAACkFcmcAAAByWAAAAHJgAAAAck0AAAByPwAAACkHcmMAAABycgAAAHJsAAAAcm0AAABycwAAAHJ0AAAAcnUAAAByUAAAAHJQAAAAclEAAABybgAAACkBAABzCAAAAAABDAEeAR4BehxfZnJvbW54ZnVuY3Rpb25fc2VxLl9fY2FsbF9fTikFcmAAAABybwAAAHJwAAAAcmIAAABybgAAAHJQAAAAclAAAAByUAAAAHJRAAAAcnYAAAAjAQAAcwQAAAAIBQQBcnYAAABjAAAAAAAAAAAAAAAAAgAAAEAAAABzGAAAAGUAWgFkAFoCZAFaA2QCZAOEAFoEZARTACkF2hRfZnJvbW54ZnVuY3Rpb25fYXJnc2GZAQAACiAgICBBIHZlcnNpb24gb2YgYF9mcm9tbnhmdW5jdGlvbmAgdGhhdCBpcyBjYWxsZWQgd2l0aCBtdWx0aXBsZSBhcnJheQogICAgYXJndW1lbnRzLiBUaGUgZmlyc3Qgbm9uLWFycmF5LWxpa2UgaW5wdXQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXNzZWQgdmVyYmF0aW0gZm9yIGJvdGggdGhlIGRhdGEgYW5kIG1hc2sgY2FsbHMuCiAgICBBcnJheSBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCBpbmRlcGVuZGVudGx5IGFuZCB0aGUgcmVzdWx0cyBhcmUKICAgIHJldHVybmVkIGluIGEgbGlzdC4gSWYgb25seSBvbmUgYXJyYXkgaXMgZm91bmQsIHRoZSByZXR1cm4gdmFsdWUgaXMKICAgIGp1c3QgdGhlIHByb2Nlc3NlZCBhcnJheSBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGMBAAAAAAAAAAkAAAAHAAAATwAAAHOsAAAAdAB0AXwAagKDAn0DZwB9BHQDfAGDAX0BeCx0BHwBgwFkAWsEckR0BXwBZAEZAIMBckR8BKAGfAGgB2QBoQGhAQEAcRpXAGcAfQV4SHwERABdQH0GfAN0AaAIfAahAWYBfAGeAnwCjgF9B3wDdAl8BoMBZgF8AZ4CfAKOAX0IfAWgBnQKfAd8CGQCjQKhAQEAcVBXAHQEfASDAWQDawJyqHwFZAEZAFMAfAVTACkETnIBAAAAKQFyVwAAAHIxAAAAKQtyZwAAAHJYAAAAcmAAAAByTgAAANoDbGVuclIAAADaBmFwcGVuZNoDcG9wcjcAAAByPAAAAHI/AAAAKQlyYwAAAHJsAAAAcm0AAABycwAAANoGYXJyYXlz2gNyZXNycgAAAHJ0AAAAcnUAAAByUAAAAHJQAAAAclEAAABybgAAADkBAABzGgAAAAABDAEEAQgBGgEUAQQBCgEWARQBFgEMAQgBeh1fZnJvbW54ZnVuY3Rpb25fYXJncy5fX2NhbGxfX04pBXJgAAAAcm8AAABycAAAAHJiAAAAcm4AAAByUAAAAHJQAAAAclAAAAByUQAAAHJ5AAAAMAEAAHMEAAAACAgEAXJ5AAAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBdoXX2Zyb21ueGZ1bmN0aW9uX2FsbGFyZ3NhHAIAAAogICAgQSB2ZXJzaW9uIG9mIGBfZnJvbW54ZnVuY3Rpb25gIHRoYXQgaXMgY2FsbGVkIHdpdGggbXVsdGlwbGUgYXJyYXkKICAgIGFyZ3VtZW50cy4gU2ltaWxhciB0byBgX2Zyb21ueGZ1bmN0aW9uX2FyZ3NgIGV4Y2VwdCB0aGF0IGFsbCBhcmdzCiAgICBhcmUgY29udmVydGVkIHRvIGFycmF5cyBldmVuIGlmIHRoZXkgYXJlIG5vdCBzbyBhbHJlYWR5LiBUaGlzIG1ha2VzCiAgICBpdCBwb3NzaWJsZSB0byBwcm9jZXNzIHNjYWxhcnMgYXMgMS1EIGFycmF5cy4gT25seSBrZXl3b3JkIGFyZ3VtZW50cwogICAgYXJlIHBhc3NlZCB0aHJvdWdoIHZlcmJhdGltIGZvciB0aGUgZGF0YSBhbmQgbWFzayBjYWxscy4gQXJyYXlzCiAgICBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCBpbmRlcGVuZGVudGx5IGFuZCB0aGUgcmVzdWx0cyBhcmUgcmV0dXJuZWQKICAgIGluIGEgbGlzdC4gSWYgb25seSBvbmUgYXJnIGlzIHByZXNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMganVzdCB0aGUKICAgIHByb2Nlc3NlZCBhcnJheSBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGMBAAAAAAAAAAgAAAAHAAAATwAAAHNqAAAAdAB0AXwAagKDAn0DZwB9BHhAfAFEAF04fQV8A3QBoAN8BaEBZgF8Ao4BfQZ8A3QEfAWDAWYBfAKOAX0HfASgBXQGfAZ8B2QBjQKhAQEAcRZXAHQHfAGDAWQCawJyZnwEZAMZAFMAfARTACkETikBclcAAAByMQAAAHIBAAAAKQhyZwAAAHJYAAAAcmAAAAByNwAAAHI8AAAAcnsAAAByPwAAAHJ6AAAAKQhyYwAAAHJsAAAAcm0AAABycwAAAHJ+AAAAcnIAAABydAAAAHJ1AAAAclAAAAByUAAAAHJRAAAAcm4AAABUAQAAcxIAAAAAAQwBBAEKARIBEAEWAQwBCAF6IF9mcm9tbnhmdW5jdGlvbl9hbGxhcmdzLl9fY2FsbF9fTikFcmAAAABybwAAAHJwAAAAcmIAAABybgAAAHJQAAAAclAAAAByUAAAAHJRAAAAcn8AAABJAQAAcwQAAAAICgQBcn8AAABjAQAAAAAAAAACAAAABQAAAEMAAABzSgAAAGQBfQF4QHwBdAB8AIMBawNyRHgmdAF8AHwBGQBkAoMCcjh8AHwBGQB8AHwBfAFkAxcAhQI8AHEUVwB8AWQDNwB9AXEGVwB8AFMAKQR6HEZsYXR0ZW4gYSBzZXF1ZW5jZSBpbiBwbGFjZS5yAQAAANoIX19pdGVyX19yMQAAACkCcnoAAADaB2hhc2F0dHIpAnJPAAAA2gFrclAAAAByUAAAAHJRAAAA2g9mbGF0dGVuX2lucGxhY2VxAQAAcwwAAAAAAgQBDgEQARgBDAFygwAAAGMDAAAAAAAAABUAAAAIAAAATwAAAHOGAwAAdAB8AmQBZAJkA40DfQJ8AmoBfQV0AnwBfAWDAn0BZARnAXwFZAUYABQAfQZ0A6AEfAVkBqECfQd0BXQGfAWDAYMBfQh8CKAHfAGhAQEAdAhkB2QHgwJ8B3wBPAB0A6AJfAJqCqEBoAt8CKEBfQl8B6AMfAh8BqECAQB8B6ANoQB9CnwAfAJ0DnwHoA+hAIMBGQBmAXwDngJ8BI4BfQt0A6AQfAuhAX0MfAxz0nkMdBF8C4MBAQBXAG4YBAB0EmsKctABAAEAAQBkAn0MWQBuAlgAZwB9DXwMkAFy1HwNoBN0A6AJfAuhAWoUoQEBAHQEfAl0FYMCfQ58C3wOdA58BoMBPAB0A6AWfAmhAX0PZAV9EHi8fBB8D2sAkAFyznwGZAgFABkAZAU3AAMAPABkCH0ReEp8BnwRGQB8CXwRGQBrBZABcnx8EWQFfAUYAGsEkAFyfHwGfBFkBRgABQAZAGQFNwADADwAZAR8BnwRPAB8EWQFOAB9EZABcTRXAHwHoAx8CHwGoQIBAHwAfAJ0DnwHoA+hAIMBGQBmAXwDngJ8BI4BfQt8C3wOdA58BoMBPAB8DaATdAl8C4MBahShAQEAfBBkBTcAfRCQAXEUVwCQAW5mdAB8C2QBZAJkA40DfQt8B6ANoQB9CnQIZAdkB4MCZwF8C2oBFAB8CnwBPAB8CqAMfAh8BqECAQB0A6AWfAmhAX0PfAl9EnQFfAJqCoMBfQl8C2oKfAl8ATwAfA2gE3QJfAuDAWoUoQEBAHQXfAmDAX0JdAR8CXQVgwJ9DnwLfA50DnQXfAqgD6EAgwGDATwAZAV9EHjQfBB8D2sAkANyOHwGZAgFABkAZAU3AAMAPABkCH0ReEp8BnwRGQB8EnwRGQBrBZACctJ8EWQFfAUYAGsEkAJy0nwGfBFkBRgABQAZAGQFNwADADwAZAR8BnwRPAB8EWQFOAB9EZACcYpXAHwHoAx8CHwGoQIBAHwKoAx8CHwGoQIBAHwAfAJ0DnwHoA+hAIMBGQBmAXwDngJ8BI4BfQt8C3wOdA50F3wKoA+hAIMBgwE8AHwNoBN0CXwLgwFqFKEBAQB8EGQFNwB9EJACcWpXAHQDoBR0A6AJfA2hAaAYoQChAX0TdBl8AmQJgwKQA3NqdANqCXwOfBNkCo0CfRRuGHQJfA58E2QKjQJ9FHQaoBt8FKEBfBRfHHwUUwApC3owCiAgICAoVGhpcyBkb2NzdHJpbmcgc2hvdWxkIGJlIG92ZXJ3cml0dGVuKQogICAgRlQpAtoEY29wedoFc3Vib2tyAQAAAHIxAAAA2gFPTun/////cl4AAAApAXJbAAAAKR1yNgAAANoEbmRpbXJIAAAAclgAAAByRAAAAHJOAAAA2gVyYW5nZdoGcmVtb3Zl2gVzbGljZXI3AAAAcloAAADaBHRha2XaA3B1dHKEAAAAck0AAADaBnRvbGlzdFoIaXNzY2FsYXJyegAAANoJVHlwZUVycm9ycnsAAAByWwAAANoGb2JqZWN02gdwcm9kdWN0coMAAADaA21heHKBAAAAcmgAAABaEmRlZmF1bHRfZmlsbF92YWx1ZdoKZmlsbF92YWx1ZSkVWgZmdW5jMWRyVQAAAHJUAAAAcmwAAADaBmt3YXJnc9oCbmTaA2luZNoBaVoHaW5kbGlzdFoIb3V0c2hhcGXaAWpyfgAAAFoIYXNzY2FsYXJaBmR0eXBlc1oGb3V0YXJyWgROdG90coIAAADaAW5aCWhvbGRzaGFwZVoKbWF4X2R0eXBlc9oGcmVzdWx0clAAAAByUAAAAHJRAAAAcgUAAAB7AQAAc4oAAAAABA4BBgEKAQ4BDAEMAQoBDgESAQwBCAEcAgoBBAECAQwBDgEKBAQBBgESAQoBDAEKAQQBDAIQAQQBIgEUAQgBDgEMARwBDAEQARICDgEIARYBDAEKAQQBCgEKARABCAEKARQBBAEMAhABBAEiARQBCAEOAQwBDAEcARQBEAEOARQBDAEQAgwBDAFjAwAAAAAAAAAIAAAABQAAAEMAAABzjAAAAHQAfAGDAX0DfAFqAX0EdAJ8AoMBagFkAWsCciJ8AmYBfQJ4ZHwCRABdXH0FfAVkAWsAcjx8BHwFFwB9BXwDfAVmAn0GfAB8Bo4AfQd8B2oBfANqAWsCcl58B30DcSh0A6AEfAd8BaECfQd8B2oBfANqAWsCcnx8B30DcSh0BWQCgwGCAXEoVwB8A1MAKQN6LgogICAgKFRoaXMgZG9jc3RyaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4pCiAgICByAQAAAHo3ZnVuY3Rpb24gaXMgbm90IHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgY29ycmVjdCBzaGFwZSkGcjcAAAByiAAAAHI2AAAAcmgAAABaC2V4cGFuZF9kaW1z2gpWYWx1ZUVycm9yKQhycwAAAHJcAAAA2gRheGVz2gN2YWzaAU5yVQAAAHJsAAAAcn4AAAByUAAAAHJQAAAAclEAAAByBgAAAM8BAABzIAAAAAAECAEGAQ4BBgEKAQgBCAEIAQgBDAEGAgwBDAEGAgwCWgVOb3Rlc2HzAQAACgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gYSA9IG1hLmFyYW5nZSgyNCkucmVzaGFwZSgyLDMsNCkKICAgID4+PiBhWzosMCwxXSA9IG1hLm1hc2tlZAogICAgPj4+IGFbOiwxLDpdID0gbWEubWFza2VkCiAgICA+Pj4gcHJpbnQoYSkKICAgIFtbWzAgLS0gMiAzXQogICAgICBbLS0gLS0gLS0gLS1dCiAgICAgIFs4IDkgMTAgMTFdXQoKICAgICBbWzEyIC0tIDE0IDE1XQogICAgICBbLS0gLS0gLS0gLS1dCiAgICAgIFsyMCAyMSAyMiAyM11dXQogICAgPj4+IHByaW50KG1hLmFwcGx5X292ZXJfYXhlcyhtYS5zdW0sIGEsIFswLDJdKSkKICAgIFtbWzQ2XQogICAgICBbLS1dCiAgICAgIFsxMjRdXV0KCiAgICBUdXBsZSBheGlzIGFyZ3VtZW50cyB0byB1ZnVuY3MgYXJlIGVxdWl2YWxlbnQ6CgogICAgPj4+IHByaW50KG1hLnN1bShhLCBheGlzPSgwLDIpKS5yZXNoYXBlKCgxLC0xLDEpKSkKICAgIFtbWzQ2XQogICAgICBbLS1dCiAgICAgIFsxMjRdXV0KICAgIEZjBAAAAAAAAAAJAAAABQAAAEMAAABzYAEAAHQAfACDAX0AdAF8AIMBfQR8AmQBawhyNnwAoAJ8AaEBfQV8BWoDoAR8AKAFfAGhAaEBfQZu9HQGoAd8AqEBfQd0CHwAagNqBHQGagl0BmoKZgKDAnJqdAagC3wAagN8B2oDZAKhA30IbhB0BqALfABqA3wHagOhAn0IfABqDHwHagxrA3LsfAFkAWsIcpZ0DWQDgwGCAXwHag5kBGsDcqh0DWQFgwGCAXwHagxkBhkAfABqDHwBGQBrA3LEdA9kB4MBggF0BqAQfAd8AGoOZAQYAGQIFAB8B2oMFwChAn0HfAegEWQJfAGhAn0HfAR0EmsJkAFyAnwHfABqEw8AFAB9B3wHahR8AXwIZAqNAn0GdAZqFXwAfAd8CGQLjQOgFHwBoQF8BhsAfQV8A5ABclh8BmoMfAVqDGsDkAFyUHQGoBB8BnwFagyhAqAWoQB9BnwFfAZmAlMAfAVTAGQBUwApDGFzBwAACiAgICBSZXR1cm4gdGhlIHdlaWdodGVkIGF2ZXJhZ2Ugb2YgYXJyYXkgb3ZlciB0aGUgZ2l2ZW4gYXhpcy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIERhdGEgdG8gYmUgYXZlcmFnZWQuCiAgICAgICAgTWFza2VkIGVudHJpZXMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gdGhlIGNvbXB1dGF0aW9uLgogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIGFsb25nIHdoaWNoIHRvIGF2ZXJhZ2UgYGFgLiBJZiBgTm9uZWAsIGF2ZXJhZ2luZyBpcyBkb25lIG92ZXIKICAgICAgICB0aGUgZmxhdHRlbmVkIGFycmF5LgogICAgd2VpZ2h0cyA6IGFycmF5X2xpa2UsIG9wdGlvbmFsCiAgICAgICAgVGhlIGltcG9ydGFuY2UgdGhhdCBlYWNoIGVsZW1lbnQgaGFzIGluIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgYXZlcmFnZS4KICAgICAgICBUaGUgd2VpZ2h0cyBhcnJheSBjYW4gZWl0aGVyIGJlIDEtRCAoaW4gd2hpY2ggY2FzZSBpdHMgbGVuZ3RoIG11c3QgYmUKICAgICAgICB0aGUgc2l6ZSBvZiBgYWAgYWxvbmcgdGhlIGdpdmVuIGF4aXMpIG9yIG9mIHRoZSBzYW1lIHNoYXBlIGFzIGBhYC4KICAgICAgICBJZiBgYHdlaWdodHM9Tm9uZWBgLCB0aGVuIGFsbCBkYXRhIGluIGBhYCBhcmUgYXNzdW1lZCB0byBoYXZlIGEKICAgICAgICB3ZWlnaHQgZXF1YWwgdG8gb25lLiAgIElmIGB3ZWlnaHRzYCBpcyBjb21wbGV4LCB0aGUgaW1hZ2luYXJ5IHBhcnRzCiAgICAgICAgYXJlIGlnbm9yZWQuCiAgICByZXR1cm5lZCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYSB0dXBsZSBgYChyZXN1bHQsIHN1bSBvZiB3ZWlnaHRzKWBgCiAgICAgICAgc2hvdWxkIGJlIHJldHVybmVkIGFzIG91dHB1dCAoVHJ1ZSksIG9yIGp1c3QgdGhlIHJlc3VsdCAoRmFsc2UpLgogICAgICAgIERlZmF1bHQgaXMgRmFsc2UuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgYXZlcmFnZSwgW3N1bV9vZl93ZWlnaHRzXSA6ICh0dXBsZSBvZikgc2NhbGFyIG9yIE1hc2tlZEFycmF5CiAgICAgICAgVGhlIGF2ZXJhZ2UgYWxvbmcgdGhlIHNwZWNpZmllZCBheGlzLiBXaGVuIHJldHVybmVkIGlzIGBUcnVlYCwKICAgICAgICByZXR1cm4gYSB0dXBsZSB3aXRoIHRoZSBhdmVyYWdlIGFzIHRoZSBmaXJzdCBlbGVtZW50IGFuZCB0aGUgc3VtCiAgICAgICAgb2YgdGhlIHdlaWdodHMgYXMgdGhlIHNlY29uZCBlbGVtZW50LiBUaGUgcmV0dXJuIHR5cGUgaXMgYG5wLmZsb2F0NjRgCiAgICAgICAgaWYgYGFgIGlzIG9mIGludGVnZXIgdHlwZSBhbmQgZmxvYXRzIHNtYWxsZXIgdGhhbiBgZmxvYXQ2NGAsIG9yIHRoZQogICAgICAgIGlucHV0IGRhdGEtdHlwZSwgb3RoZXJ3aXNlLiBJZiByZXR1cm5lZCwgYHN1bV9vZl93ZWlnaHRzYCBpcyBhbHdheXMKICAgICAgICBgZmxvYXQ2NGAuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gYSA9IG5wLm1hLmFycmF5KFsxLiwgMi4sIDMuLCA0Ll0sIG1hc2s9W0ZhbHNlLCBGYWxzZSwgVHJ1ZSwgVHJ1ZV0pCiAgICA+Pj4gbnAubWEuYXZlcmFnZShhLCB3ZWlnaHRzPVszLCAxLCAwLCAwXSkKICAgIDEuMjUKCiAgICA+Pj4geCA9IG5wLm1hLmFyYW5nZSg2LikucmVzaGFwZSgzLCAyKQogICAgPj4+IHByaW50KHgpCiAgICBbWyAwLiAgMS5dCiAgICAgWyAyLiAgMy5dCiAgICAgWyA0LiAgNS5dXQogICAgPj4+IGF2Zywgc3Vtd2VpZ2h0cyA9IG5wLm1hLmF2ZXJhZ2UoeCwgYXhpcz0wLCB3ZWlnaHRzPVsxLCAyLCAzXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkPVRydWUpCiAgICA+Pj4gcHJpbnQoYXZnKQogICAgWzIuNjY2NjY2NjY2NjcgMy42NjY2NjY2NjY2N10KCiAgICBOWgJmOHo7QXhpcyBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHNoYXBlcyBvZiBhIGFuZCB3ZWlnaHRzIGRpZmZlci5yMQAAAHo4MUQgd2VpZ2h0cyBleHBlY3RlZCB3aGVuIHNoYXBlcyBvZiBhIGFuZCB3ZWlnaHRzIGRpZmZlci5yAQAAAHo1TGVuZ3RoIG9mIHdlaWdodHMgbm90IGNvbXBhdGlibGUgd2l0aCBzcGVjaWZpZWQgYXhpcy4pAXIxAAAAcocAAAApAnJVAAAAclsAAAApAXJbAAAAKRdyNwAAAHI7AAAA2gRtZWFuclsAAADaBHR5cGVyOgAAAHJYAAAA2gphc2FueWFycmF52gppc3N1YmNsYXNz2gdpbnRlZ2VyWgVib29sX1oLcmVzdWx0X3R5cGVyWgAAAHKPAAAAcogAAABymwAAAFoMYnJvYWRjYXN0X3RvWghzd2FwYXhlc3JBAAAAclcAAAByUwAAANoIbXVsdGlwbHlyhAAAACkJclwAAAByVQAAANoHd2VpZ2h0c1oIcmV0dXJuZWRyVgAAANoDYXZnWgNzY2xaA3dndFoMcmVzdWx0X2R0eXBlclAAAAByUAAAAHJRAAAAcgoAAAAHAgAAczwAAAAAMwgBCAQIAQoBFAIKAhYBFAIQAwwBCAECAQYCCgECAQYBFAECAQYDHAEMAgoBDAIOARoCBgEOARIBCAJjBQAAAAAAAAAIAAAABwAAAEMAAABzeAAAAHQAfABkAYMCc0x0AWoCdAN8AGQCZAONAnwBfAJ8A3wEZASNBX0FdAR8BXQBagWDAnJIZAV8BWoGawFySHQHfAVkBmQHjQJTAHwFUwB0CHwAdAl8AXwCfANkCI0FXAJ9Bn0HfARycHwGoAp8B6EBUwB8BlMAZAlTACkKYToJAAAKICAgIENvbXB1dGUgdGhlIG1lZGlhbiBhbG9uZyB0aGUgc3BlY2lmaWVkIGF4aXMuCgogICAgUmV0dXJucyB0aGUgbWVkaWFuIG9mIHRoZSBhcnJheSBlbGVtZW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5IG9yIG9iamVjdCB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkuCiAgICBheGlzIDogaW50LCBvcHRpb25hbAogICAgICAgIEF4aXMgYWxvbmcgd2hpY2ggdGhlIG1lZGlhbnMgYXJlIGNvbXB1dGVkLiBUaGUgZGVmYXVsdCAoTm9uZSkgaXMKICAgICAgICB0byBjb21wdXRlIHRoZSBtZWRpYW4gYWxvbmcgYSBmbGF0dGVuZWQgdmVyc2lvbiBvZiB0aGUgYXJyYXkuCiAgICBvdXQgOiBuZGFycmF5LCBvcHRpb25hbAogICAgICAgIEFsdGVybmF0aXZlIG91dHB1dCBhcnJheSBpbiB3aGljaCB0byBwbGFjZSB0aGUgcmVzdWx0LiBJdCBtdXN0CiAgICAgICAgaGF2ZSB0aGUgc2FtZSBzaGFwZSBhbmQgYnVmZmVyIGxlbmd0aCBhcyB0aGUgZXhwZWN0ZWQgb3V0cHV0CiAgICAgICAgYnV0IHRoZSB0eXBlIHdpbGwgYmUgY2FzdCBpZiBuZWNlc3NhcnkuCiAgICBvdmVyd3JpdGVfaW5wdXQgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZW4gYWxsb3cgdXNlIG9mIG1lbW9yeSBvZiBpbnB1dCBhcnJheSAoYSkgZm9yCiAgICAgICAgY2FsY3VsYXRpb25zLiBUaGUgaW5wdXQgYXJyYXkgd2lsbCBiZSBtb2RpZmllZCBieSB0aGUgY2FsbCB0bwogICAgICAgIG1lZGlhbi4gVGhpcyB3aWxsIHNhdmUgbWVtb3J5IHdoZW4geW91IGRvIG5vdCBuZWVkIHRvIHByZXNlcnZlCiAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbnB1dCBhcnJheS4gVHJlYXQgdGhlIGlucHV0IGFzIHVuZGVmaW5lZCwKICAgICAgICBidXQgaXQgd2lsbCBwcm9iYWJseSBiZSBmdWxseSBvciBwYXJ0aWFsbHkgc29ydGVkLiBEZWZhdWx0IGlzCiAgICAgICAgRmFsc2UuIE5vdGUgdGhhdCwgaWYgYG92ZXJ3cml0ZV9pbnB1dGAgaXMgVHJ1ZSwgYW5kIHRoZSBpbnB1dAogICAgICAgIGlzIG5vdCBhbHJlYWR5IGFuIGBuZGFycmF5YCwgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQuCiAgICBrZWVwZGltcyA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgSWYgdGhpcyBpcyBzZXQgdG8gVHJ1ZSwgdGhlIGF4ZXMgd2hpY2ggYXJlIHJlZHVjZWQgYXJlIGxlZnQKICAgICAgICBpbiB0aGUgcmVzdWx0IGFzIGRpbWVuc2lvbnMgd2l0aCBzaXplIG9uZS4gV2l0aCB0aGlzIG9wdGlvbiwKICAgICAgICB0aGUgcmVzdWx0IHdpbGwgYnJvYWRjYXN0IGNvcnJlY3RseSBhZ2FpbnN0IHRoZSBpbnB1dCBhcnJheS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xMC4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgbWVkaWFuIDogbmRhcnJheQogICAgICAgIEEgbmV3IGFycmF5IGhvbGRpbmcgdGhlIHJlc3VsdCBpcyByZXR1cm5lZCB1bmxlc3Mgb3V0IGlzCiAgICAgICAgc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGEgcmVmZXJlbmNlIHRvIG91dCBpcyByZXR1cm5lZC4KICAgICAgICBSZXR1cm4gZGF0YS10eXBlIGlzIGBmbG9hdDY0YCBmb3IgaW50ZWdlcnMgYW5kIGZsb2F0cyBz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c2tlZEFycmF5IHdpdGgKICAgICAgICBgbWFza2Agc2V0IHRvIGBub21hc2tgLiBNdXN0IGJlIGEgMkQgYXJyYXkuCiAgICBheGlzIDogaW50LCBvcHRpb25hbAogICAgICAgIEF4aXMgYWxvbmcgd2hpY2ggdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBEZWZhdWx0IGlzIE5vbmUuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgY29tcHJlc3NlZF9hcnJheSA6IG5kYXJyYXkKICAgICAgICBUaGUgY29tcHJlc3NlZCBhcnJheS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiB4ID0gbnAubWEuYXJyYXkobnAuYXJhbmdlKDkpLnJlc2hhcGUoMywgMyksIG1hc2s9W1sxLCAwLCAwXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAwLCAwXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAwLCAwXV0pCiAgICA+Pj4geAogICAgbWFza2VkX2FycmF5KGRhdGEgPQogICAgIFtbLS0gMSAyXQogICAgIFstLSA0IDVdCiAgICAgWzYgNyA4XV0sCiAgICAgICAgICAgICAgICAgbWFzayA9CiAgICAgW1sgVHJ1ZSBGYWxzZSBGYWxzZV0KICAgICBbIFRydWUgRmFsc2UgRmFsc2VdCiAgICAgW0ZhbHNlIEZhbHNlIEZhbHNlXV0sCiAgICAgICAgICAgZmlsbF92YWx1ZSA9IDk5OTk5OSkKCiAgICA+Pj4gbnAubWEuY29tcHJlc3Nfcm93Y29scyh4KQogICAgYXJyYXkoW1s3LCA4XV0pCiAgICA+Pj4gbnAubWEuY29tcHJlc3Nfcm93Y29scyh4LCAwKQogICAgYXJyYXkoW1s2LCA3LCA4XV0pCiAgICA+Pj4gbnAubWEuY29tcHJlc3Nfcm93Y29scyh4LCAxKQogICAgYXJyYXkoW1sxLCAyXSwKICAgICAgICAgICBbNCwgNV0sCiAgICAgICAgICAgWzcsIDhd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ZSBkZXRhaWxzIGFuZCBleGFtcGxlcywgc2VlIGBudW1weS5jb3ZgLgoKICAgIEJ5IGRlZmF1bHQsIG1hc2tlZCB2YWx1ZXMgYXJlIHJlY29nbml6ZWQgYXMgc3VjaC4gSWYgYHhgIGFuZCBgeWAgaGF2ZSB0aGUKICAgIHNhbWUgc2hhcGUsIGEgY29tbW9uIG1hc2sgaXMgYWxsb2NhdGVkOiBpZiBgYHhbaSxqXWBgIGlzIG1hc2tlZCwgdGhlbgogICAgYGB5W2ksal1gYCB3aWxsIGFsc28gYmUgbWFza2VkLgogICAgU2V0dGluZyBgYWxsb3dfbWFza2VkYCB0byBGYWxzZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB2YWx1ZXMgYXJlCiAgICBtaXNzaW5nIGluIGVpdGhlciBvZiB0aGUgaW5wdXQgYXJyYXlzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHggOiBhcnJheV9saWtlCiAgICAgICAgQSAxLUQgb3IgMi1EIGFycmF5IGNvbnRhaW5pbmcgbXVsdGlwbGUgdmFyaWFibGVzIGFuZCBvYnNlcnZhdGlvbnMuCiAgICAgICAgRWFjaCByb3cgb2YgYHhgIHJlcHJlc2VudHMgYSB2YXJpYWJsZSwgYW5kIGVhY2ggY29sdW1uIGEgc2luZ2xlCiAgICAgICAgb2JzZXJ2YXRpb24gb2YgYWxsIHRob3NlIHZhcmlhYmxlcy4gQWxzbyBzZWUgYHJvd3ZhcmAgYmVsb3cuCiAgICB5IDogYXJyYXlfbGlrZSwgb3B0aW9uYWwKICAgICAgICBBbiBhZGRpdGlvbmFsIHNldCBvZiB2YXJpYWJsZXMgYW5kIG9ic2VydmF0aW9ucy4gYHlgIGhhcyB0aGUgc2FtZQogICAgICAgIGZvcm0gYXMgYHhgLgogICAgcm93dmFyIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBgcm93dmFyYCBpcyBUcnVlIChkZWZhdWx0KSwgdGhlbiBlYWNoIHJvdyByZXByZXNlbnRzIGEKICAgICAgICB2YXJpYWJsZSwgd2l0aCBvYnNlcnZhdGlvbnMgaW4gdGhlIGNvbHVtbnMuIE90aGVyd2lzZSwgdGhlIHJlbGF0aW9uc2hpcAogICAgICAgIGlzIHRyYW5zcG9zZWQ6IGVhY2ggY29sdW1uIHJlcHJlc2VudHMgYSB2YXJpYWJsZSwgd2hpbGUgdGhlIHJvd3MKICAgICAgICBjb250YWluIG9ic2VydmF0aW9ucy4KICAgIGJpYXMgOiBib29sLCBvcHRpb25hbAogICAgICAgIERlZmF1bHQgbm9ybWFsaXphdGlvbiAoRmFsc2UpIGlzIGJ5IGBgKE4tMSlgYCwgd2hlcmUgYGBOYGAgaXMgdGhlCiAgICAgICAgbnVtYmVyIG9mIG9ic2VydmF0aW9ucyBnaXZlbiAodW5iaWFzZWQgZXN0aW1hdGUpLiBJZiBgYmlhc2AgaXMgVHJ1ZSwKICAgICAgICB0aGVuIG5vcm1hbGl6YXRpb24gaXMgYnkgYGBOYGAuIFRoaXMga2V5d29yZCBjYW4gYmUgb3ZlcnJpZGRlbiBieQogICAgICAgIHRoZSBrZXl3b3JkIGBgZGRvZmBgIGluIG51bXB5IHZlcnNpb25zID49IDEuNS4KICAgIGFsbG93X21hc2tlZCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgSWYgVHJ1ZSwgbWFza2VkIHZhbHVlcyBhcmUgcHJvcGFnYXRlZCBwYWlyLXdpc2U6IGlmIGEgdmFsdWUgaXMgbWFza2VkCiAgICAgICAgaW4gYHhgLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBtYXNrZWQgaW4gYHlgLgogICAgICAgIElmIEZhbHNlLCByYWlzZXMgYSBgVmFsdWVFcnJvcmAgZXhjZXB0aW9uIHdoZW4gc29tZSB2YWx1ZXMgYXJlIG1pc3NpbmcuCiAgICBkZG9mIDoge05vbmUsIGludH0sIG9wdGlvbmFsCiAgICAgICAgSWYgbm90IGBgTm9uZWBgIG5vcm1hbGl6YXRpb24gaXMgYnkgYGAoTiAtIGRkb2YpYGAsIHdoZXJlIGBgTmBgIGlzCiAgICAgICAgdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnM7IHRoaXMgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBpbXBsaWVkIGJ5CiAgICAgICAgYGBiaWFzYGAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjUKCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIFJhaXNlZCBpZiBzb21lIHZhbHVlcyBhcmUgbWlzc2luZyBhbmQgYGFsbG93X21hc2tlZGAgaXMgRmFsc2UuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5jb3YKCiAgICBOehdkZG9mIG11c3QgYmUgYW4gaW50ZWdlcnIBAAAAcjEAAABnAAAAAAAA8D9GKQHaBnN0cmljdCkIct0AAABymwAAAHLoAAAAclgAAAByFgAAANoBVNoEY29uatoHc3F1ZWV6ZSkJcnIAAABy4wAAAHLkAAAA2gRiaWFzcuUAAADaBGRkb2Zy5wAAANoEZmFjdHKaAAAAclAAAAByUAAAAHJRAAAAchQAAAAKBQAAcxoAAAAANhQBCAIIAQQBBgIEAhQBBAEWAR4CFgEcAWMGAAAAAAAAABAAAAAIAAAAQwAAAHMOAgAAZAF9BnwDdABqAWsJcxh8BXQAagFrCXIodAJqA3wGdARkAmQDjQMBAHQFfAB8AXwCfASDBFwDfQB9B30CfAJzcHQAoAZ8B2oHfAehAmQEFAB9CHQGfABqB3wAoAihAGQFZAaNA3wIGwCgCaEAfQluLnQAoAZ8B3wHagehAmQEFAB9CHQGfAB8AGoHoAihAGQFZAaNA3wIGwCgCaEAfQl5DnQKoAt8CaEBfQpXAG4UBAB0DGsKcsABAAEAAQBkB1MAWAB8B6ANoQBy4nQKoA50CmoPoBB8CnwKoQKhAX0LkAFuJHQRfAqDAX0LZAV8C18SfABqE2QHfAIYABkAfQx8ApABcn54dnQUfAxkBxgAgwFEAF1mfQ14XnQUfA1kBxcAfAyDAkQAXUx9DnQVdBZ8AHwNGQB8AHwOGQBmAoMBgwFqF2QHZAiNAX0PdAqgDnQKag+gGHwPoQGhAQQAfAt8DXwOZgI8AHwLfA58DWYCPACQAXEmVwCQAXESVwBuiHiGdBR8DGQHGACDAUQAXXZ9DXhudBR8DWQHFwB8DIMCRABdXH0OdBV0FnwAZAlkCYUCfA1mAhkAfABkCWQJhQJ8DmYCGQBmAoMBgwFqF2QHZAiNAX0PdAqgDnQKag+gGHwPoQGhAQQAfAt8DXwOZgI8AHwLfA58DWYCPACQAXGgVwCQAXGMVwB8CXwLGwBTACkKYTYHAAAKICAgIFJldHVybiBQZWFyc29uIHByb2R1Y3QtbW9tZW50IGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cy4KCiAgICBFeGNlcHQgZm9yIHRoZSBoYW5kbGluZyBvZiBtaXNzaW5nIGRhdGEgdGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzCiAgICBgbnVtcHkuY29ycmNvZWZgLiBGb3IgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcywgc2VlIGBudW1weS5jb3JyY29lZmAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UKICAgICAgICBBIDEtRCBvciAyLUQgYXJyYXkgY29udGFpbmluZyBtdWx0aXBsZSB2YXJpYWJsZXMgYW5kIG9ic2VydmF0aW9ucy4KICAgICAgICBFYWNoIHJvdyBvZiBgeGAgcmVwcmVzZW50cyBhIHZhcmlhYmxlLCBhbmQgZWFjaCBjb2x1bW4gYSBzaW5nbGUKICAgICAgICBvYnNlcnZhdGlvbiBvZiBhbGwgdGhvc2UgdmFyaWFibGVzLiBBbHNvIHNlZSBgcm93dmFyYCBiZWxvdy4KICAgIHkgOiBhcnJheV9saWtlLCBvcHRpb25hbAogICAgICAgIEFuIGFkZGl0aW9uYWwgc2V0IG9mIHZhcmlhYmxlcyBhbmQgb2JzZXJ2YXRpb25zLiBgeWAgaGFzIHRoZSBzYW1lCiAgICAgICAgc2hhcGUgYXMgYHhgLgogICAgcm93dmFyIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBgcm93dmFyYCBpcyBUcnVlIChkZWZhdWx0KSwgdGhlbiBlYWNoIHJvdyByZXByZXNlbnRzIGEKICAgICAgICB2YXJpYWJsZSwgd2l0aCBvYnNlcnZhdGlvbnMgaW4gdGhlIGNvbHVtbnMuIE90aGVyd2lzZSwgdGhlIHJlbGF0aW9uc2hpcAogICAgICAgIGlzIHRyYW5zcG9zZWQ6IGVhY2ggY29sdW1uIHJlcHJlc2VudHMgYSB2YXJpYWJsZSwgd2hpbGUgdGhlIHJvd3MKICAgICAgICBjb250YWluIG9ic2VydmF0aW9ucy4KICAgIGJpYXMgOiBfTm9WYWx1ZSwgb3B0aW9uYWwKICAgICAgICBIYXMgbm8gZWZmZWN0LCBkbyBub3QgdXNlLgoKICAgICAgICAuLiBkZXByZWNhdGVkOjogMS4xMC4wCiAgICBhbGxvd19tYXNrZWQgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIG1hc2tlZCB2YWx1ZXMgYXJlIHByb3BhZ2F0ZWQgcGFpci13aXNlOiBpZiBhIHZhbHVlIGlzIG1hc2tlZAogICAgICAgIGluIGB4YCwgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgbWFza2VkIGluIGB5YC4KICAgICAgICBJZiBGYWxzZSwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIEJlY2F1c2UgYGJpYXNgIGlzIGRlcHJlY2F0ZWQsIHRoaXMKICAgICAgICBhcmd1bWVudCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGtleXdvcmQgb25seSB0byBhdm9pZCBhIHdhcm5pbmcuCiAgICBkZG9mIDogX05vVmFsdWUsIG9wdGlvbmFsCiAgICAgICAgSGFzIG5vIGVmZmVjdCwgZG8gbm90IHVzZS4KCiAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDEuMTAuMAoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkuY29ycmNvZWYgOiBFcXVpdmFsZW50IGZ1bmN0aW9uIGluIHRvcC1sZXZlbCBOdW1QeSBtb2R1bGUuCiAgICBjb3YgOiBFc3RpbWF0ZSB0aGUgY292YXJpYW5jZSBtYXRyaXguCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYnV0IGRpc2NhcmRzIGFyZ3VtZW50cyBgYmlhc2AgYW5kIGBkZG9mYC4gIFRoaXMgaXMKICAgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24uICBUaGVzZQogICAgYXJndW1lbnRzIGhhZCBubyBlZmZlY3Qgb24gdGhlIHJldHVybiB2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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
bench.cpython-37.pyc
3.88 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
core.cpython-37.pyc
203.12 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
extras.cpython-37.pyc
48.40 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
mrecords.cpython-37.pyc
22.00 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-37.pyc
616 B
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
testutils.cpython-37.pyc
8.15 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
timer_comparison.cpython-37.pyc
10.96 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
version.cpython-37.pyc
648 B
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
1.61 KB
lrw-r--r--
2023-04-24 19:38: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).