1 line
12 KiB
Python
1 line
12 KiB
Python
ZnJvbSBvZG9vLmV4Y2VwdGlvbnMgaW1wb3J0IEFjY2Vzc0Vycm9yCgpmcm9tIC5jb21tb24gaW1wb3J0IFRlc3RUb3dlckNvbW1vbgoKCmNsYXNzIFRlc3RDeFRvd2VyRmlsZVRlbXBsYXRlQWNjZXNzUnVsZXMoVGVzdFRvd2VyQ29tbW9uKToKICAgIGRlZiB0ZXN0X3VzZXJfbm9fYWNjZXNzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFZlcmlmeSB0aGF0IGEgdXNlciBpbiB0aGUgVXNlciBncm91cCBoYXMgbm8gYWNjZXNzCiAgICAgICAgdG8gYW55IGZpbGUgdGVtcGxhdGUgcmVjb3Jkcy4KICAgICAgICAiIiIKICAgICAgICAjIENyZWF0ZSBhIGZpbGUgdGVtcGxhdGUgcmVjb3JkIGFzIGFkbWluLgogICAgICAgIHJlY29yZCA9IHNlbGYuRmlsZVRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVtcGxhdGUgMSIsCiAgICAgICAgICAgICAgICAiZmlsZV9uYW1lIjogInRlbXBsYXRlMS50eHQiLAogICAgICAgICAgICAgICAgImNvZGUiOiAiU2FtcGxlIGNvZGUiLAogICAgICAgICAgICAgICAgInNlcnZlcl9kaXIiOiAiL3RlbXBsYXRlcyIsCiAgICAgICAgICAgICAgICAiZmlsZV90eXBlIjogInRleHQiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJ0b3dlciIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgIyBBcyB0aGUgdXNlciwgc2VhcmNoIGZvciB0aGUgcmVjb3JkIOKAkyBleHBlY3Qgbm8gcmVjb3Jkcy4KICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFjY2Vzc0Vycm9yKToKICAgICAgICAgICAgc2VsZi5GaWxlVGVtcGxhdGUud2l0aF91c2VyKHNlbGYudXNlcikuc2VhcmNoKFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXSkKCiAgICAgICAgIyBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIHJlY29yZCBhcyBhIHVzZXIgc2hvdWxkIHJhaXNlIGFuIEFjY2Vzc0Vycm9yLgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICBzZWxmLkZpbGVUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi51c2VyKS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVtcGxhdGUgMiIsCiAgICAgICAgICAgICAgICAgICAgImZpbGVfbmFtZSI6ICJ1c2VyX3RlbXBsYXRlLnR4dCIsCiAgICAgICAgICAgICAgICAgICAgImNvZGUiOiAiVXNlciBjb2RlIiwKICAgICAgICAgICAgICAgICAgICAic2VydmVyX2RpciI6ICIvdGVtcGxhdGVzIiwKICAgICAgICAgICAgICAgICAgICAiZmlsZV90eXBlIjogInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzb3VyY2UiOiAidG93ZXIiLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCgogICAgZGVmIHRlc3RfbWFuYWdlcl9yZWFkX2FjY2VzcyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBWZXJpZnkgdGhhdCBhIG1hbmFnZXIgY2FuIHJlYWQgZmlsZSB0ZW1wbGF0ZSByZWNvcmRzCiAgICAgICAgaWYgaGUgaXMgbm90IGluIHVzZXJfaWRzIG9yIG1hbmFnZXJfaWRzLgogICAgICAgICIiIgogICAgICAgICMgQ3JlYXRlIGEgcmVjb3JkIHdpdGggdGhlIG1hbmFnZXIgaW4gbWFuYWdlcl9pZHMuCiAgICAgICAgcmVjMSA9IHNlbGYuRmlsZVRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVtcGxhdGUgMSIsCiAgICAgICAgICAgICAgICAiZmlsZV9uYW1lIjogInRlbXBsYXRlX21hbmFnZXIudHh0IiwKICAgICAgICAgICAgICAgICJjb2RlIjogIk1hbmFnZXIgY29kZSIsCiAgICAgICAgICAgICAgICAic2VydmVyX2RpciI6ICIvdGVtcGxhdGVzIiwKICAgICAgICAgICAgICAgICJmaWxlX3R5cGUiOiAidGV4dCIsCiAgICAgICAgICAgICAgICAic291cmNlIjogInRvd2VyIiwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IFsoNiwgMCwgW3NlbGYubWFuYWdlci5pZF0pXSwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICAjIENyZWF0ZSBhIHJlY29yZCB3aXRoIHRoZSBtYW5hZ2VyIGluIHVzZXJfaWRzLgogICAgICAgIHJlYzIgPSBzZWxmLkZpbGVUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlbXBsYXRlIDIiLAogICAgICAgICAgICAgICAgImZpbGVfbmFtZSI6ICJ0ZW1wbGF0ZV91c2VyLnR4dCIsCiAgICAgICAgICAgICAgICAiY29kZSI6ICJVc2VyIGNvZGUiLAogICAgICAgICAgICAgICAgInNlcnZlcl9kaXIiOiAiL3RlbXBsYXRlcyIsCiAgICAgICAgICAgICAgICAiZmlsZV90eXBlIjogInRleHQiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJ0b3dlciIsCiAgICAgICAgICAgICAgICAidXNlcl9pZHMiOiBbKDYsIDAsIFtzZWxmLm1hbmFnZXIuaWRdKV0sCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgIyBDcmVhdGUgYSByZWNvcmQgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBtYW5hZ2VyLgogICAgICAgIHJlYzMgPSBzZWxmLkZpbGVUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlbXBsYXRlIDMiLAogICAgICAgICAgICAgICAgImZpbGVfbmFtZSI6ICJ0ZW1wbGF0ZV9ub25lLnR4dCIsCiAgICAgICAgICAgICAgICAiY29kZSI6ICJOb25lIGNvZGUiLAogICAgICAgICAgICAgICAgInNlcnZlcl9kaXIiOiAiL3RlbXBsYXRlcyIsCiAgICAgICAgICAgICAgICAiZmlsZV90eXBlIjogInRleHQiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJ0b3dlciIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmVjcyA9IHNlbGYuRmlsZVRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnNlYXJjaChbXSkKICAgICAgICBzZWxmLmFzc2VydEluKHJlYzEsIHJlY3MsICJNYW5hZ2VyIHNob3VsZCByZWFkIHJlY29yZHMgaWYgaW4gbWFuYWdlcl9pZHMuIikKICAgICAgICBzZWxmLmFzc2VydEluKHJlYzIsIHJlY3MsICJNYW5hZ2VyIHNob3VsZCByZWFkIHJlY29yZHMgaWYgaW4gdXNlcl9pZHMuIikKICAgICAgICBzZWxmLmFzc2VydE5vdEluKAogICAgICAgICAgICByZWMzLAogICAgICAgICAgICByZWNzLAogICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgbm90IHNlZSByZWNvcmRzIGlmIG5vdCBpbiB1c2VyX2lkcyBvciBtYW5hZ2VyX2lkcy4iLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3dyaXRlX2NyZWF0ZV9hY2Nlc3Moc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVmVyaWZ5IHRoYXQgYSBtYW5hZ2VyIGNhbiB3cml0ZSBhbmQgY3JlYXRlIGZpbGUgdGVtcGxhdGUgcmVjb3JkcwogICAgICAgIG9ubHkgaWYgaGUgaXMgaW4gbWFuYWdlcl9pZHMuCiAgICAgICAgIiIiCiAgICAgICAgIyBDcmVhdGUgYSByZWNvcmQgd2l0aCBtYW5hZ2VyX2lkcyBpbmNsdWRpbmcgdGhlIG1hbmFnZXIuCiAgICAgICAgcmVjID0gc2VsZi5GaWxlVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZW1wbGF0ZSAxIiwKICAgICAgICAgICAgICAgICJmaWxlX25hbWUiOiAidGVtcGxhdGVfZm9yX3VwZGF0ZS50eHQiLAogICAgICAgICAgICAgICAgImNvZGUiOiAiSW5pdGlhbCBjb2RlIiwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfZGlyIjogIi90ZW1wbGF0ZXMiLAogICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAidG93ZXIiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg2LCAwLCBbc2VsZi5tYW5hZ2VyLmlkXSldLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgICMgTWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgdGhlIHJlY29yZC4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlYy53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS53cml0ZSh7ImZpbGVfbmFtZSI6ICJ0ZW1wbGF0ZV91cGRhdGVkLnR4dCJ9KQogICAgICAgIGV4Y2VwdCBBY2Nlc3NFcnJvcjoKICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIGJlIGFibGUgdG8gdXBkYXRlIHRoZSByZWNvcmQgd2hlbiBpbiBtYW5hZ2VyX2lkcy4iCiAgICAgICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYy53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5maWxlX25hbWUsICJ0ZW1wbGF0ZV91cGRhdGVkLnR4dCIpCgogICAgICAgICMgTWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSByZWNvcmQgaWYgaW5jbHVkZWQgaW4gbWFuYWdlcl9pZHMuCiAgICAgICAgcmVjMiA9IHNlbGYuRmlsZVRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVtcGxhdGUgMiIsCiAgICAgICAgICAgICAgICAiZmlsZV9uYW1lIjogIm1hbmFnZXJfY3JlYXRlZF90ZW1wbGF0ZS50eHQiLAogICAgICAgICAgICAgICAgImNvZGUiOiAiTWFuYWdlciBjcmVhdGVkIiwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfZGlyIjogIi90ZW1wbGF0ZXMiLAogICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAidG93ZXIiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg2LCAwLCBbc2VsZi5tYW5hZ2VyLmlkXSldLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgcmVjMiwKICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgcmVjb3JkIHdoZW4gaW5jbHVkZWQgaW4gbWFuYWdlcl9pZHMuIiwKICAgICAgICApCgogICAgICAgICMgQ3JlYXRpbmcgYSByZWNvcmQgd2l0aG91dCBpbmNsdWRpbmcgdGhlIG1hbmFnZXIgc2hvdWxkIHJhaXNlIGFuIEFjY2Vzc0Vycm9yLgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICBzZWxmLkZpbGVUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVtcGxhdGUgMyIsCiAgICAgICAgICAgICAgICAgICAgImZpbGVfbmFtZSI6ICJpbnZhbGlkX3RlbXBsYXRlLnR4dCIsCiAgICAgICAgICAgICAgICAgICAgImNvZGUiOiAiSW52YWxpZCIsCiAgICAgICAgICAgICAgICAgICAgInNlcnZlcl9kaXIiOiAiL3RlbXBsYXRlcyIsCiAgICAgICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic291cmNlIjogInRvd2VyIiwKICAgICAgICAgICAgICAgICAgICAibWFuYWdlcl9pZHMiOiBbKDUsIDAsIDApXSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfdW5saW5rX2FjY2VzcyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBWZXJpZnkgdGhhdCBhIG1hbmFnZXIgY2FuIGRlbGV0ZSBhIGZpbGUgdGVtcGxhdGUgcmVjb3JkIG9ubHkgaWYKICAgICAgICBoZSBpcyBpbiBtYW5hZ2VyX2lkcyBhbmQgaXMgdGhlIGNyZWF0b3IuCiAgICAgICAgIiIiCiAgICAgICAgIyBTY2VuYXJpbyAxOiBSZWNvcmQgY3JlYXRlZCBieSB0aGUgbWFuYWdlci4KICAgICAgICByZWMgPSBzZWxmLkZpbGVUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlbXBsYXRlIDEiLAogICAgICAgICAgICAgICAgImZpbGVfbmFtZSI6ICJ0ZW1wbGF0ZV90b19kZWxldGUudHh0IiwKICAgICAgICAgICAgICAgICJjb2RlIjogIkNvZGUgdG8gZGVsZXRlIiwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfZGlyIjogIi90ZW1wbGF0ZXMiLAogICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAidG93ZXIiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg2LCAwLCBbc2VsZi5tYW5hZ2VyLmlkXSldLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmVjLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnVubGluaygpCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAiTWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byBkZWxldGUgYSByZWNvcmQgIgogICAgICAgICAgICAgICAgImhlIGNyZWF0ZWQgd2hlbiBpbiBtYW5hZ2VyX2lkcy4iCiAgICAgICAgICAgICkKICAgICAgICAjIFNjZW5hcmlvIDI6IFJlY29yZCBjcmVhdGVkIGJ5IGFkbWluIChvciBhbm90aGVyIHVzZXIpCiAgICAgICAgIyBldmVuIHRob3VnaCBtYW5hZ2VyX2lkcyBpbmNsdWRlcyB0aGUgbWFuYWdlci4KICAgICAgICByZWMyID0gc2VsZi5GaWxlVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZW1wbGF0ZSAyIiwKICAgICAgICAgICAgICAgICJmaWxlX25hbWUiOiAidGVtcGxhdGVfbm90X2RlbGV0YWJsZS50eHQiLAogICAgICAgICAgICAgICAgImNvZGUiOiAiQWRtaW4gY3JlYXRlZCBjb2RlIiwKICAgICAgICAgICAgICAgICJzZXJ2ZXJfZGlyIjogIi90ZW1wbGF0ZXMiLAogICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAidG93ZXIiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg2LCAwLCBbc2VsZi5tYW5hZ2VyLmlkXSldLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICByZWMyLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnVubGluaygpCgogICAgZGVmIHRlc3Rfcm9vdF91bnJlc3RyaWN0ZWRfYWNjZXNzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFZlcmlmeSB0aGF0IGEgdXNlciBpbiB0aGUgUm9vdCBncm91cCBoYXMgdW5saW1pdGVkIGFjY2VzcwogICAgICAgIHRvIGFsbCBmaWxlIHRlbXBsYXRlIHJlY29yZHMuCiAgICAgICAgIiIiCiAgICAgICAgIyBDcmVhdGUgYSBmaWxlIHRlbXBsYXRlIHJlY29yZCAod2l0aCBubyBwYXJ0aWN1bGFyIHJlc3RyaWN0aW9ucykuCiAgICAgICAgcmVjID0gc2VsZi5GaWxlVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZW1wbGF0ZSAxIiwKICAgICAgICAgICAgICAgICJmaWxlX25hbWUiOiAidGVtcGxhdGVfZm9yX3Jvb3QudHh0IiwKICAgICAgICAgICAgICAgICJjb2RlIjogIlJvb3QgY29kZSIsCiAgICAgICAgICAgICAgICAic2VydmVyX2RpciI6ICIvdGVtcGxhdGVzIiwKICAgICAgICAgICAgICAgICJmaWxlX3R5cGUiOiAidGV4dCIsCiAgICAgICAgICAgICAgICAic291cmNlIjogInRvd2VyIiwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICAjIEFzIHRoZSByb290IHVzZXIsIHRoZSByZWNvcmQgc2hvdWxkIGJlIHZpc2libGUuCiAgICAgICAgcmVjcyA9IHNlbGYuRmlsZVRlbXBsYXRlLndpdGhfdXNlcihzZWxmLnJvb3QpLnNlYXJjaChbKCJpZCIsICI9IiwgcmVjLmlkKV0pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlY3MsICJSb290IHNob3VsZCBzZWUgdGhlIHJlY29yZCByZWdhcmRsZXNzIG9mIHJlc3RyaWN0aW9ucy4iKQogICAgICAgICMgUm9vdCBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgdGhlIHJlY29yZC4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlYy53aXRoX3VzZXIoc2VsZi5yb290KS53cml0ZSh7ImZpbGVfbmFtZSI6ICJyb290X3VwZGF0ZWRfdGVtcGxhdGUudHh0In0pCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoIlJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gdXBkYXRlIHRoZSByZWNvcmQgd2l0aG91dCByZXN0cmljdGlvbnMuIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICByZWMud2l0aF91c2VyKHNlbGYucm9vdCkuZmlsZV9uYW1lLCAicm9vdF91cGRhdGVkX3RlbXBsYXRlLnR4dCIKICAgICAgICApCiAgICAgICAgIyBSb290IHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIHJlY29yZC4KICAgICAgICByZWMyID0gc2VsZi5GaWxlVGVtcGxhdGUud2l0aF91c2VyKHNlbGYucm9vdCkuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZW1wbGF0ZSAyIiwKICAgICAgICAgICAgICAgICJmaWxlX25hbWUiOiAicm9vdF9jcmVhdGVkX3RlbXBsYXRlLnR4dCIsCiAgICAgICAgICAgICAgICAiY29kZSI6ICJDcmVhdGVkIGJ5IHJvb3QiLAogICAgICAgICAgICAgICAgInNlcnZlcl9kaXIiOiAiL3RlbXBsYXRlcyIsCiAgICAgICAgICAgICAgICAiZmlsZV90eXBlIjogInRleHQiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJ0b3dlciIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICByZWMyLCAiUm9vdCBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSByZWNvcmQgd2l0aG91dCByZXN0cmljdGlvbnMuIgogICAgICAgICkKICAgICAgICAjIFJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gZGVsZXRlIGEgcmVjb3JkLgogICAgICAgIHJlYzIud2l0aF91c2VyKHNlbGYucm9vdCkudW5saW5rKCkKICAgICAgICByZWNzX2FmdGVyID0gc2VsZi5GaWxlVGVtcGxhdGUud2l0aF91c2VyKHNlbGYucm9vdCkuc2VhcmNoKAogICAgICAgICAgICBbKCJpZCIsICI9IiwgcmVjMi5pZCldCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCiAgICAgICAgICAgIHJlY3NfYWZ0ZXIsICJSb290IHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSB0aGUgcmVjb3JkIHdpdGhvdXQgcmVzdHJpY3Rpb25zLiIKICAgICAgICApCg== |