diff --git a/addons/cetmix_tower_server/tests/test_jet_template_install_line_access.py b/addons/cetmix_tower_server/tests/test_jet_template_install_line_access.py new file mode 100644 index 0000000..10e1e82 --- /dev/null +++ b/addons/cetmix_tower_server/tests/test_jet_template_install_line_access.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjUgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmZyb20gb2Rvby5leGNlcHRpb25zIGltcG9ydCBBY2Nlc3NFcnJvcgoKZnJvbSAuY29tbW9uX2pldHMgaW1wb3J0IFRlc3RUb3dlckpldHNDb21tb24KCgpjbGFzcyBUZXN0VG93ZXJKZXRUZW1wbGF0ZUluc3RhbGxMaW5lQWNjZXNzKFRlc3RUb3dlckpldHNDb21tb24pOgogICAgIiIiCiAgICBUZXN0IGFjY2VzcyBydWxlcyBmb3IgSmV0IFRlbXBsYXRlIEluc3RhbGwgTGluZSBtb2RlbAogICAgIiIiCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgIHN1cGVyKCkuc2V0VXBDbGFzcygpCgogICAgICAgICMgQ3JlYXRlIGFkZGl0aW9uYWwgc2VydmVyIGZvciB0ZXN0aW5nCiAgICAgICAgY2xzLnNlcnZlcl90ZXN0XzIgPSBjbHMuU2VydmVyLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBTZXJ2ZXIgMiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3Rfc2VydmVyXzIiLAogICAgICAgICAgICAgICAgImlwX3Y0X2FkZHJlc3MiOiAiMTkyLjE2OC4xLjEwMiIsCiAgICAgICAgICAgICAgICAic3NoX3VzZXJuYW1lIjogImFkbWluIiwKICAgICAgICAgICAgICAgICJzc2hfcGFzc3dvcmQiOiAicGFzc3dvcmQiLAogICAgICAgICAgICAgICAgInNzaF9hdXRoX21vZGUiOiAicCIsCiAgICAgICAgICAgICAgICAib3NfaWQiOiBjbHMub3NfZGViaWFuXzEwLmlkLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgIGRlZiBfY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoCiAgICAgICAgc2VsZiwKICAgICAgICB0ZW1wbGF0ZT1Ob25lLAogICAgICAgIGxpbmVfdGVtcGxhdGU9Tm9uZSwKICAgICAgICBzZXJ2ZXI9Tm9uZSwKICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMiIsCiAgICAgICAgbGluZV90ZW1wbGF0ZV91c2VyX2lkcz1Ob25lLAogICAgICAgIHNlcnZlcl91c2VyX2lkcz1Ob25lLAogICAgICAgIHNlcnZlcl9tYW5hZ2VyX2lkcz1Ob25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIGpldCB0ZW1wbGF0ZSBpbnN0YWxsIGxpbmUgcmVjb3JkCgogICAgICAgIE5vdGU6IEluc3RhbGwgTGluZSBhY2Nlc3MgcnVsZXMgb25seSBjaGVjayBzZXJ2ZXJfaWQgYW5kIGxpbmUgdGVtcGxhdGUKICAgICAgICAoamV0X3RlbXBsYXRlX2lkKSwgbm90IHRoZSBwYXJlbnQgaW5zdGFsbCB0ZW1wbGF0ZS4gU28gd2Ugb25seSBuZWVkCiAgICAgICAgdG8gdmFyeSB0aGVzZSBwYXJhbWV0ZXJzIGZvciB0ZXN0aW5nLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICB0ZW1wbGF0ZTogVGVtcGxhdGUgZm9yIHRoZSBpbnN0YWxsIHJlY29yZCAocGFyZW50KQogICAgICAgICAgICAtIGRlZmF1bHRzIHRvIHNpbXBsZSB0ZW1wbGF0ZS4KICAgICAgICAgICAgbGluZV90ZW1wbGF0ZTogVGVtcGxhdGUgZm9yIHRoZSBpbnN0YWxsIGxpbmUKICAgICAgICAgICAgc2VydmVyOiBTZXJ2ZXIgZm9yIHRoZSBpbnN0YWxsIHJlY29yZAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbDogQWNjZXNzIGxldmVsIGZvciBsaW5lIHRlbXBsYXRlCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfdXNlcl9pZHM6IFVzZXIgSURzIGZvciBsaW5lIHRlbXBsYXRlCiAgICAgICAgICAgIHNlcnZlcl91c2VyX2lkczogVXNlciBJRHMgZm9yIHNlcnZlcgogICAgICAgICAgICBzZXJ2ZXJfbWFuYWdlcl9pZHM6IE1hbmFnZXIgSURzIGZvciBzZXJ2ZXIKICAgICAgICAiIiIKICAgICAgICBpZiBub3QgdGVtcGxhdGU6CiAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwgICMgRGVmYXVsdCwgZG9lc24ndCBhZmZlY3QgSW5zdGFsbCBMaW5lIGFjY2VzcwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCgogICAgICAgIGlmIG5vdCBsaW5lX3RlbXBsYXRlOgogICAgICAgICAgICBsaW5lX3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBMaW5lIFRlbXBsYXRlIiwKICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfbGluZV90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6IGxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsLAogICAgICAgICAgICAgICAgICAgICJ1c2VyX2lkcyI6IGxpbmVfdGVtcGxhdGVfdXNlcl9pZHMKICAgICAgICAgICAgICAgICAgICBpZiBsaW5lX3RlbXBsYXRlX3VzZXJfaWRzIGlzIG5vdCBOb25lCiAgICAgICAgICAgICAgICAgICAgZWxzZSBbKDUsIDAsIDApXSwKICAgICAgICAgICAgICAgICAgICAibWFuYWdlcl9pZHMiOiBbKDUsIDAsIDApXSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKQoKICAgICAgICBpZiBub3Qgc2VydmVyOgogICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl90ZXN0XzEKCiAgICAgICAgIyBVcGRhdGUgc2VydmVyIGFjY2VzcyBpZiBuZWVkZWQKICAgICAgICBpZiBzZXJ2ZXJfdXNlcl9pZHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlcnZlci53cml0ZSh7InVzZXJfaWRzIjogc2VydmVyX3VzZXJfaWRzfSkKICAgICAgICBpZiBzZXJ2ZXJfbWFuYWdlcl9pZHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlcnZlci53cml0ZSh7Im1hbmFnZXJfaWRzIjogc2VydmVyX21hbmFnZXJfaWRzfSkKCiAgICAgICAgIyBDcmVhdGUgaW5zdGFsbCByZWNvcmQKICAgICAgICBpbnN0YWxsX3JlY29yZCA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IHRlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgInNlcnZlcl9pZCI6IHNlcnZlci5pZCwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBDcmVhdGUgaW5zdGFsbCBsaW5lIHJlY29yZAogICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQgPSBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbExpbmUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2luc3RhbGxfaWQiOiBpbnN0YWxsX3JlY29yZC5pZCwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBsaW5lX3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgIm9yZGVyIjogMTAsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHJldHVybiB0ZW1wbGF0ZSwgbGluZV90ZW1wbGF0ZSwgc2VydmVyLCBpbnN0YWxsX3JlY29yZCwgaW5zdGFsbF9saW5lX3JlY29yZAoKICAgICMgPT09PT09PT09PT09PT09PT09PT09PQogICAgIyBNYW5hZ2VyIFJlYWQgQWNjZXNzIFRlc3RzCiAgICAjID09PT09PT09PT09PT09PT09PT09PT0KCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfc2VydmVyX3VzZXJfaWRzX2xpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsX21hbmFnZXIoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBSZWFkIHdoZW4gaW4gc2VydmVyIHVzZXJfaWRzCiAgICAgICAgYW5kIGxpbmUgdGVtcGxhdGUgYWNjZXNzX2xldmVsIDw9IDIuCiAgICAgICAgIiIiCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMiIsCiAgICAgICAgICAgIHNlcnZlcl91c2VyX2lkcz1bKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCBpbnN0YWxsX2xpbmVfcmVjb3JkLmlkKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHJlY29yZHMpLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgcmVhZCB3aGVuIGluIHNlcnZlciB1c2VyX2lkcyAiCiAgICAgICAgICAgICJhbmQgbGluZSB0ZW1wbGF0ZSBhY2Nlc3NfbGV2ZWwgPD0gMi4iLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfc2VydmVyX21hbmFnZXJfaWRzX2xpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsX21hbmFnZXIoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBSZWFkIHdoZW4gaW4gc2VydmVyIG1hbmFnZXJfaWRzCiAgICAgICAgYW5kIGxpbmUgdGVtcGxhdGUgYWNjZXNzX2xldmVsIDw9IDIuCiAgICAgICAgIiIiCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMiIsCiAgICAgICAgICAgIHNlcnZlcl9tYW5hZ2VyX2lkcz1bKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCBpbnN0YWxsX2xpbmVfcmVjb3JkLmlkKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHJlY29yZHMpLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgcmVhZCB3aGVuIGluIHNlcnZlciBtYW5hZ2VyX2lkcyIKICAgICAgICAgICAgIiBhbmQgbGluZSB0ZW1wbGF0ZSBhY2Nlc3NfbGV2ZWwgPD0gMiIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfcmVhZF9saW5lX3RlbXBsYXRlX3VzZXJfaWRzX292ZXJyaWRlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTWFuYWdlcjogUmVhZCB3aGVuIGluIGxpbmUgdGVtcGxhdGUgdXNlcl9pZHMgb3ZlcnJpZGVzIGFjY2Vzc19sZXZlbAogICAgICAgIChzZXJ2ZXIgdXNlcl9pZHMgb3IgbWFuYWdlcl9pZHMpLgogICAgICAgICIiIgogICAgICAgICMgVGVzdCB3aXRoIHNlcnZlciB1c2VyX2lkcwogICAgICAgIF8sIF8sIF8sIF8sIGluc3RhbGxfbGluZV9yZWNvcmQxID0gc2VsZi5fY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsPSIzIiwgICMgUm9vdCBsZXZlbCAtIG5vcm1hbGx5IG5vdCBhY2Nlc3NpYmxlCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfdXNlcl9pZHM9Wyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgKQoKICAgICAgICByZWNvcmRzID0gc2VsZi5KZXRUZW1wbGF0ZUluc3RhbGxMaW5lLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnNlYXJjaCgKICAgICAgICAgICAgWygiaWQiLCAiPSIsIGluc3RhbGxfbGluZV9yZWNvcmQxLmlkKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHJlY29yZHMpLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgcmVhZCB3aGVuIGluIGxpbmUgdGVtcGxhdGUgdXNlcl9pZHMiICIgYW5kIHNlcnZlciB1c2VyX2lkcyIsCiAgICAgICAgKQoKICAgICAgICAjIFRlc3Qgd2l0aCBzZXJ2ZXIgbWFuYWdlcl9pZHMKICAgICAgICBfLCBfLCBfLCBfLCBpbnN0YWxsX2xpbmVfcmVjb3JkMiA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMyIsICAjIFJvb3QgbGV2ZWwgLSBub3JtYWxseSBub3QgYWNjZXNzaWJsZQogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgICAgIHNlcnZlcl9tYW5hZ2VyX2lkcz1bKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCBpbnN0YWxsX2xpbmVfcmVjb3JkMi5pZCldCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihyZWNvcmRzKSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIHJlYWQgd2hlbiBpbiBsaW5lIHRlbXBsYXRlIHVzZXJfaWRzIgogICAgICAgICAgICAiIGFuZCBzZXJ2ZXIgbWFuYWdlcl9pZHMiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfbm9fYWNjZXNzX25vX3NlcnZlcl9hY2Nlc3Moc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBObyByZWFkIGFjY2VzcyB3aGVuIG5vdCBpbiBzZXJ2ZXIKICAgICAgICB1c2VyX2lkcyBhbmQgbWFuYWdlcl9pZHMuCiAgICAgICAgIiIiCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMSIsCiAgICAgICAgICAgIHNlcnZlcl91c2VyX2lkcz1bKDUsIDAsIDApXSwKICAgICAgICAgICAgc2VydmVyX21hbmFnZXJfaWRzPVsoNSwgMCwgMCldLAogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCBpbnN0YWxsX2xpbmVfcmVjb3JkLmlkKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHJlY29yZHMpLAogICAgICAgICAgICAwLAogICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgbm90IHJlYWQgd2hlbiBub3QgaW4gc2VydmVyIHVzZXJfaWRzIG9yIG1hbmFnZXJfaWRzIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfbWFuYWdlcl9yZWFkX25vX2FjY2Vzc19saW5lX3RlbXBsYXRlX3Jvb3RfbGV2ZWwoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBObyByZWFkIGFjY2VzcyB3aGVuIGxpbmUgdGVtcGxhdGUKICAgICAgICBhY2Nlc3NfbGV2ZWwgaXMgUm9vdCBhbmQgbm90IGluIGxpbmUgdGVtcGxhdGUgdXNlcl9pZHMuCiAgICAgICAgIiIiCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMyIsICAjIFJvb3QgbGV2ZWwKICAgICAgICAgICAgbGluZV90ZW1wbGF0ZV91c2VyX2lkcz1bKDUsIDAsIDApXSwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgKQoKICAgICAgICByZWNvcmRzID0gc2VsZi5KZXRUZW1wbGF0ZUluc3RhbGxMaW5lLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnNlYXJjaCgKICAgICAgICAgICAgWygiaWQiLCAiPSIsIGluc3RhbGxfbGluZV9yZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJNYW5hZ2VyIHNob3VsZCBub3QgcmVhZCB3aGVuIGxpbmUgdGVtcGxhdGUgYWNjZXNzX2xldmVsIgogICAgICAgICAgICAiIGlzIFJvb3QgYW5kIG5vdCBpbiBsaW5lIHRlbXBsYXRlIHVzZXJfaWRzIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfbWFuYWdlcl9yZWFkX25vX2FjY2Vzc19saW5lX3RlbXBsYXRlX21hbmFnZXJfbGV2ZWxfbm9fc2VydmVyX2FjY2VzcyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IE1hbmFnZXI6IE5vIHJlYWQgYWNjZXNzIHdoZW4gbGluZSB0ZW1wbGF0ZSBhY2Nlc3NfbGV2ZWwKICAgICAgICBpcyBNYW5hZ2VyIGJ1dCBub3QgaW4gc2VydmVyLgogICAgICAgICIiIgogICAgICAgIF8sIF8sIF8sIF8sIGluc3RhbGxfbGluZV9yZWNvcmQgPSBzZWxmLl9jcmVhdGVfaW5zdGFsbF9saW5lX3JlY29yZCgKICAgICAgICAgICAgbGluZV90ZW1wbGF0ZV9hY2Nlc3NfbGV2ZWw9IjIiLAogICAgICAgICAgICBzZXJ2ZXJfdXNlcl9pZHM9Wyg1LCAwLCAwKV0sCiAgICAgICAgICAgIHNlcnZlcl9tYW5hZ2VyX2lkcz1bKDUsIDAsIDApXSwKICAgICAgICApCgogICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbExpbmUud2l0aF91c2VyKHNlbGYubWFuYWdlcikuc2VhcmNoKAogICAgICAgICAgICBbKCJpZCIsICI9IiwgaW5zdGFsbF9saW5lX3JlY29yZC5pZCldCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihyZWNvcmRzKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIG5vdCByZWFkIHdoZW4gbm90IGluIHNlcnZlciIKICAgICAgICAgICAgIiBldmVuIGlmIGxpbmUgdGVtcGxhdGUgYWNjZXNzX2xldmVsIGlzIE1hbmFnZXIiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3dyaXRlX2ZvcmJpZGRlbihzZWxmKToKICAgICAgICAiIiJUZXN0IE1hbmFnZXI6IENhbm5vdCB3cml0ZS9jcmVhdGUvZGVsZXRlIHJlY29yZHMiIiIKICAgICAgICBfLCBfLCBfLCBfLCBpbnN0YWxsX2xpbmVfcmVjb3JkID0gc2VsZi5fY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsPSIyIiwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgKQoKICAgICAgICAjIE1hbmFnZXIgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHdyaXRlCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQud2l0aF91c2VyKHNlbGYubWFuYWdlcikud3JpdGUoeyJzdGF0ZSI6ICJkb25lIn0pCgogICAgICAgICMgTWFuYWdlciBzaG91bGQgbm90IGJlIGFibGUgdG8gY3JlYXRlCiAgICAgICAgdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTmV3IFRlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAibmV3X3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMiIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgbGluZV90ZW1wbGF0ZSA9IHNlbGYuSmV0VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOZXcgTGluZSBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIm5ld19saW5lX3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMiIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgc2VydmVyID0gc2VsZi5zZXJ2ZXJfdGVzdF8xCiAgICAgICAgc2VydmVyLndyaXRlKHsidXNlcl9pZHMiOiBbKDQsIHNlbGYubWFuYWdlci5pZCldfSkKCiAgICAgICAgaW5zdGFsbF9yZWNvcmQgPSBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbC5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiB0ZW1wbGF0ZS5pZCwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfaWQiOiBzZXJ2ZXIuaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbExpbmUud2l0aF91c2VyKHNlbGYubWFuYWdlcikuY3JlYXRlKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaW5zdGFsbF9pZCI6IGluc3RhbGxfcmVjb3JkLmlkLAogICAgICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBsaW5lX3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgICAgICJvcmRlciI6IDEwLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCgogICAgICAgICMgTWFuYWdlciBzaG91bGQgbm90IGJlIGFibGUgdG8gZGVsZXRlCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQud2l0aF91c2VyKHNlbGYubWFuYWdlcikudW5saW5rKCkKCiAgICAjID09PT09PT09PT09PT09PT09PT09PT0KICAgICMgUm9vdCBBY2Nlc3MgVGVzdHMKICAgICMgPT09PT09PT09PT09PT09PT09PT09PQoKICAgIGRlZiB0ZXN0X3Jvb3Rfd3JpdGVfYWNjZXNzKHNlbGYpOgogICAgICAgICIiIlRlc3QgUm9vdDogQ2FuIHdyaXRlIGFueSByZWNvcmQiIiIKICAgICAgICBfLCBfLCBfLCBfLCBpbnN0YWxsX2xpbmVfcmVjb3JkID0gc2VsZi5fY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoKQoKICAgICAgICAjIFJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUKICAgICAgICB0cnk6CiAgICAgICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQud2l0aF91c2VyKHNlbGYucm9vdCkud3JpdGUoeyJzdGF0ZSI6ICJkb25lIn0pCiAgICAgICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQuaW52YWxpZGF0ZV9yZWNvcmRzZXQoKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgaW5zdGFsbF9saW5lX3JlY29yZC5zdGF0ZSwgImRvbmUiLCAiUm9vdCBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUiCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgQWNjZXNzRXJyb3I6CiAgICAgICAgICAgIHNlbGYuZmFpbCgiUm9vdCBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgYW55IHJlY29yZCIpCgogICAgZGVmIHRlc3Rfcm9vdF9jcmVhdGVfYWNjZXNzKHNlbGYpOgogICAgICAgICIiIlRlc3QgUm9vdDogQ2FuIGNyZWF0ZSBhbnkgcmVjb3JkIiIiCiAgICAgICAgdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLnJvb3QpLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiUm9vdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInJvb3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIzIiwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICBsaW5lX3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5yb290KS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlJvb3QgTGluZSBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInJvb3RfbGluZV90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjMiLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHNlcnZlciA9IHNlbGYuc2VydmVyX3Rlc3RfMQoKICAgICAgICBpbnN0YWxsX3JlY29yZCA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IHRlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgInNlcnZlcl9pZCI6IHNlcnZlci5pZCwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBSb290IHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZQogICAgICAgIHRyeToKICAgICAgICAgICAgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoCiAgICAgICAgICAgICAgICBzZWxmLnJvb3QKICAgICAgICAgICAgKS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pbnN0YWxsX2lkIjogaW5zdGFsbF9yZWNvcmQuaWQsCiAgICAgICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IGxpbmVfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAgICAgIm9yZGVyIjogMTAsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKICAgICAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5yb290KS5zZWFyY2goCiAgICAgICAgICAgICAgICBbKCJpZCIsICI9IiwgaW5zdGFsbF9saW5lX3JlY29yZC5pZCldCiAgICAgICAgICAgICkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIDEsICJSb290IHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSIpCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoIlJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGFueSByZWNvcmQiKQoKICAgIGRlZiB0ZXN0X3Jvb3RfZGVsZXRlX2FjY2VzcyhzZWxmKToKICAgICAgICAiIiJUZXN0IFJvb3Q6IENhbiBkZWxldGUgYW55IHJlY29yZCIiIgogICAgICAgIF8sIF8sIF8sIF8sIGluc3RhbGxfbGluZV9yZWNvcmQgPSBzZWxmLl9jcmVhdGVfaW5zdGFsbF9saW5lX3JlY29yZCgpCgogICAgICAgICMgUm9vdCBzaG91bGQgYmUgYWJsZSB0byBkZWxldGUKICAgICAgICB0cnk6CiAgICAgICAgICAgIGluc3RhbGxfbGluZV9yZWNvcmQud2l0aF91c2VyKHNlbGYucm9vdCkudW5saW5rKCkKICAgICAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5yb290KS5zZWFyY2goCiAgICAgICAgICAgICAgICBbKCJpZCIsICI9IiwgaW5zdGFsbF9saW5lX3JlY29yZC5pZCldCiAgICAgICAgICAgICkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIDAsICJSb290IHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSIpCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoIlJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gZGVsZXRlIGFueSByZWNvcmQiKQoKICAgIGRlZiB0ZXN0X3Jvb3RfYWNjZXNzX2FsbF9zY2VuYXJpb3Moc2VsZik6CiAgICAgICAgIiIiVGVzdCBSb290IGNhbiBhY2Nlc3MgcmVjb3JkcyBpbiBhbGwgc2NlbmFyaW9zIiIiCiAgICAgICAgIyBUZXN0IHZhcmlvdXMgY29tYmluYXRpb25zCiAgICAgICAgc2NlbmFyaW9zID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibGluZV90ZW1wbGF0ZV9hY2Nlc3NfbGV2ZWwiOiAiMSIsCiAgICAgICAgICAgICAgICAic2VydmVyX3VzZXJfaWRzIjogWyg1LCAwLCAwKV0sCiAgICAgICAgICAgICAgICAic2VydmVyX21hbmFnZXJfaWRzIjogWyg1LCAwLCAwKV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfdXNlcl9pZHMiOiBbKDUsIDAsIDApXSwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfbWFuYWdlcl9pZHMiOiBbKDUsIDAsIDApXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsIjogIjMiLAogICAgICAgICAgICAgICAgInNlcnZlcl91c2VyX2lkcyI6IFsoNSwgMCwgMCldLAogICAgICAgICAgICAgICAgInNlcnZlcl9tYW5hZ2VyX2lkcyI6IFsoNSwgMCwgMCldLAogICAgICAgICAgICB9LAogICAgICAgIF0KCiAgICAgICAgZm9yIHNjZW5hcmlvIGluIHNjZW5hcmlvczoKICAgICAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICAgICAgKipzY2VuYXJpbwogICAgICAgICAgICApCiAgICAgICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbExpbmUud2l0aF91c2VyKHNlbGYucm9vdCkuc2VhcmNoKAogICAgICAgICAgICAgICAgWygiaWQiLCAiPSIsIGluc3RhbGxfbGluZV9yZWNvcmQuaWQpXQogICAgICAgICAgICApCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgZiJSb290IHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgcmVjb3JkIHdpdGggc2NlbmFyaW86IHtzY2VuYXJpb30iLAogICAgICAgICAgICApCgogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CiAgICAjIEVkZ2UgQ2FzZXMKICAgICMgPT09PT09PT09PT09PT09PT09PT09PQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfcmVhZF9tdWx0aXBsZV9zZXJ2ZXJzKHNlbGYpOgogICAgICAgICIiIlRlc3QgTWFuYWdlciBhY2Nlc3MgYWNyb3NzIG11bHRpcGxlIHNlcnZlcnMiIiIKICAgICAgICAjIE1hbmFnZXIgaW4gc2VydmVyIDEsIGxpbmUgdGVtcGxhdGUgYWNjZXNzaWJsZQogICAgICAgIF8sIGxpbmVfdGVtcGxhdGUxLCBfLCBfLCBpbnN0YWxsX2xpbmUxID0gc2VsZi5fY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsPSIyIiwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgKQoKICAgICAgICAjIE1hbmFnZXIgbm90IGluIHNlcnZlciAyLCBzYW1lIGxpbmUgdGVtcGxhdGUKICAgICAgICBfLCBfLCBfLCBfLCBpbnN0YWxsX2xpbmUyID0gc2VsZi5fY3JlYXRlX2luc3RhbGxfbGluZV9yZWNvcmQoCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGU9bGluZV90ZW1wbGF0ZTEsCiAgICAgICAgICAgIHNlcnZlcj1zZWxmLnNlcnZlcl90ZXN0XzIsCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfYWNjZXNzX2xldmVsPSIyIiwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNSwgMCwgMCldLAogICAgICAgICAgICBzZXJ2ZXJfbWFuYWdlcl9pZHM9Wyg1LCAwLCAwKV0sCiAgICAgICAgKQoKICAgICAgICAjIE1hbmFnZXIgc2hvdWxkIG9ubHkgc2VlIGluc3RhbGxfbGluZTEKICAgICAgICByZWNvcmRzID0gc2VsZi5KZXRUZW1wbGF0ZUluc3RhbGxMaW5lLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnNlYXJjaCgKICAgICAgICAgICAgWygiaWQiLCAiaW4iLCBbaW5zdGFsbF9saW5lMS5pZCwgaW5zdGFsbF9saW5lMi5pZF0pXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksIDEsICJNYW5hZ2VyIHNob3VsZCBvbmx5IHNlZSBhY2Nlc3NpYmxlIGluc3RhbGwgbGluZSIKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgcmVjb3Jkc1swXS5pZCwgaW5zdGFsbF9saW5lMS5pZCwgIk1hbmFnZXIgc2hvdWxkIHNlZSBpbnN0YWxsX2xpbmUxIgogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfbXVsdGlwbGVfbGluZV90ZW1wbGF0ZXMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBNYW5hZ2VyIGFjY2VzcyB3aXRoIG11bHRpcGxlIGxpbmUgdGVtcGxhdGVzIiIiCiAgICAgICAgIyBMaW5lIFRlbXBsYXRlIDE6IE1hbmFnZXIgbGV2ZWwsIE1hbmFnZXIgaW4gc2VydmVyCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lMSA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMiIsCiAgICAgICAgICAgIHNlcnZlcl91c2VyX2lkcz1bKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICkKCiAgICAgICAgIyBMaW5lIFRlbXBsYXRlIDI6IFJvb3QgbGV2ZWwsIE1hbmFnZXIgaW4gc2VydmVyIGJ1dCBsaW5lIHRlbXBsYXRlIHVzZXJfaWRzCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lMiA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICBsaW5lX3RlbXBsYXRlX2FjY2Vzc19sZXZlbD0iMyIsCiAgICAgICAgICAgIGxpbmVfdGVtcGxhdGVfdXNlcl9pZHM9Wyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgc2VydmVyX3VzZXJfaWRzPVsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgKQoKICAgICAgICAjIE1hbmFnZXIgc2hvdWxkIHNlZSBib3RoCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0VGVtcGxhdGVJbnN0YWxsTGluZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgImluIiwgW2luc3RhbGxfbGluZTEuaWQsIGluc3RhbGxfbGluZTIuaWRdKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIDIsICJNYW5hZ2VyIHNob3VsZCBzZWUgYm90aCBpbnN0YWxsIGxpbmVzIikKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfcGFyZW50X3RlbXBsYXRlX2RvZXNfbm90X2FmZmVjdF9hY2Nlc3Moc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBQYXJlbnQgaW5zdGFsbCB0ZW1wbGF0ZSBhY2Nlc3MgbGV2ZWwKICAgICAgICBkb2VzIG5vdCBhZmZlY3QgSW5zdGFsbCBMaW5lIGFjY2Vzcy4KICAgICAgICAiIiIKICAgICAgICAjIFZlcmlmeSB0aGF0IEluc3RhbGwgTGluZSBhY2Nlc3Mgb25seSBkZXBlbmRzIG9uIHNlcnZlcl9pZCBhbmQgbGluZSB0ZW1wbGF0ZSwKICAgICAgICAjIG5vdCB0aGUgcGFyZW50IGluc3RhbGwgdGVtcGxhdGUuCiAgICAgICAgIyBDcmVhdGUgYSBsaW5lIHdpdGggUm9vdC1sZXZlbCBwYXJlbnQgdGVtcGxhdGUsCiAgICAgICAgIyBidXQgYWNjZXNzaWJsZSBsaW5lIHRlbXBsYXRlIC0gc2hvdWxkIHN0aWxsIGJlIGFjY2Vzc2libGUuCiAgICAgICAgXywgXywgXywgXywgaW5zdGFsbF9saW5lX3JlY29yZCA9IHNlbGYuX2NyZWF0ZV9pbnN0YWxsX2xpbmVfcmVjb3JkKAogICAgICAgICAgICB0ZW1wbGF0ZT1zZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJSb290IFBhcmVudCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJyb290X3BhcmVudF90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIzIiwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgbGluZV90ZW1wbGF0ZV9hY2Nlc3NfbGV2ZWw9IjIiLCAgIyBNYW5hZ2VyIGxldmVsIC0gYWNjZXNzaWJsZQogICAgICAgICAgICBzZXJ2ZXJfdXNlcl9pZHM9Wyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICApCgogICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFRlbXBsYXRlSW5zdGFsbExpbmUud2l0aF91c2VyKHNlbGYubWFuYWdlcikuc2VhcmNoKAogICAgICAgICAgICBbKCJpZCIsICI9IiwgaW5zdGFsbF9saW5lX3JlY29yZC5pZCldCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihyZWNvcmRzKSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIHJlYWQgSW5zdGFsbCBMaW5lIHdoZW4gbGluZSB0ZW1wbGF0ZSAiCiAgICAgICAgICAgICJhbmQgc2VydmVyIGFyZSBhY2Nlc3NpYmxlLCAiCiAgICAgICAgICAgICJyZWdhcmRsZXNzIG9mIHBhcmVudCBpbnN0YWxsIHRlbXBsYXRlIGFjY2VzcyBsZXZlbCIsCiAgICAgICAgKQo= \ No newline at end of file