IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KCiIiIgpSdW4gYSBQeXRob24gc2NyaXB0IHVuZGVyIGhvdHNob3QncyBjb250cm9sLgoKQWRhcHRlZCBmcm9tIGEgcG9zdGluZyBvbiBweXRob24tZGV2IGJ5IFdhbHRlciBE9nJ3YWxkCgp1c2FnZSAlcHJvZyBbICVwcm9nIGFyZ3MgXSBmaWxlbmFtZSBbIGZpbGVuYW1lIGFyZ3MgXQoKQW55IGFyZ3VtZW50cyBhZnRlciB0aGUgZmlsZW5hbWUgYXJlIHVzZWQgYXMgc3lzLmFyZ3YgZm9yIHRoZSBmaWxlbmFtZS4KIiIiCgppbXBvcnQgc3lzCmltcG9ydCBvcHRwYXJzZQppbXBvcnQgb3MKaW1wb3J0IGhvdHNob3QKaW1wb3J0IGhvdHNob3Quc3RhdHMKClBST0ZJTEUgPSAiaG90c2hvdC5wcm9mIgoKZGVmIHJ1bl9ob3RzaG90KGZpbGVuYW1lLCBwcm9maWxlLCBhcmdzKToKICAgIHByb2YgPSBob3RzaG90LlByb2ZpbGUocHJvZmlsZSkKICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpKQogICAgc3lzLmFyZ3YgPSBbZmlsZW5hbWVdICsgYXJncwogICAgcHJvZi5ydW4oImV4ZWNmaWxlKCVyKSIgJSBmaWxlbmFtZSkKICAgIHByb2YuY2xvc2UoKQogICAgc3RhdHMgPSBob3RzaG90LnN0YXRzLmxvYWQocHJvZmlsZSkKICAgIHN0YXRzLnNvcnRfc3RhdHMoInRpbWUiLCAiY2FsbHMiKQoKICAgICMgcHJpbnRfc3RhdHMgdXNlcyB1bmFkb3JuZWQgcHJpbnQgc3RhdGVtZW50cywgc28gdGhlIG9ubHkgd2F5CiAgICAjIHRvIGZvcmNlIG91dHB1dCB0byBzdGRlcnIgaXMgdG8gcmVhc3NpZ24gc3lzLnN0ZG91dCB0ZW1wb3JhcmlseQogICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgogICAgc3RhdHMucHJpbnRfc3RhdHMoKQogICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CgogICAgcmV0dXJuIDAKCmRlZiBtYWluKGFyZ3MpOgogICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKF9fZG9jX18pCiAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCiAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9UFJPRklMRSwKICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InByb2ZpbGUiLCBoZWxwPSdTcGVjaWZ5IHByb2ZpbGUgZmlsZSB0byB1c2UnKQogICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKCiAgICBpZiBsZW4oYXJncykgPT0gMDoKICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgibWlzc2luZyBzY3JpcHQgdG8gZXhlY3V0ZSIpCiAgICAgICAgcmV0dXJuIDEKCiAgICBmaWxlbmFtZSA9IGFyZ3NbMF0KICAgIHJldHVybiBydW5faG90c2hvdChmaWxlbmFtZSwgb3B0aW9ucy5wcm9maWxlLCBhcmdzWzE6XSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCg==