eval(atob('d2luZG93Ll9fU0lHTkVEX01BUF9fID0geyIxOTQ3NWU4NDYzZTMxN2FkZGYxNjE3NTg5YzcxYmUyNiI6Imh0dHBzOi8vaW1hZ2UuanFtY3kuY2xvdWQvMjAyNS8wNy8xMS8xOTQ3NWU4NDYzZTMxN2FkZGYxNjE3NTg5YzcxYmUyNi5qcGc/RXhwaXJlcz0xNzUyODA1NTUzJlNpZ25hdHVyZT1rN3FWVTJYTHQ4X1pUWkliTnJMU3pPMzItUEdIblRXQU9UbUdaSVZoQW9lbV9nQVc5MEVBaVkweC00UlVsfnBBblFLTmhLY1BhTmYyZ1YtTldFWC5+Ymhsa0JCfjFXNV9vSHI0cC5CRUFJUjMxWnF5cjBSanBFYjB5WkpaNlVacU1CfjkxMEx2dGxuRi5oa1FxVVY4M3RmS1QzeWFWVlY0TElWN19iUXF3MkliM3FCZH42RTVCZktXSWtPY2QuJktleS1QYWlyLUlkPUtKWlZLREIxWk9HWVYiLCIwZjg0NmYyOTVhOTkxYTlmMWI3MDZhZDFhYmQ1ZjYxNiI6Imh0dHBzOi8vaW1hZ2UuanFtY3kuY2xvdWQvMjAyNS8wNy8xNC8wZjg0NmYyOTVhOTkxYTlmMWI3MDZhZDFhYmQ1ZjYxNi5qcGc/RXhwaXJlcz0xNzUyODA1NTUzJlNpZ25hdHVyZT05d2liVUF0VnZOVG00cUlTRC5reWlkSnJBSms4NExQTmp3QzRCZEdUWEkweWxWS2RpdEhFY1ZuR1BPZlBEc2VuZzhCUzhpZ0NEakpXbjVfVUE1VktkcW16aEdTaHBkX3g3SXZqaGRubDl4ODhMaU5LaFdCfi5pd0xTcG1sX3lFOThVR3VZR3lrVkhWTGxWdEdmWXdXVUp5TXZCN0szR2VEfnRtbGdtV05kZVZnQ1VrY3U5NDBjcHBOVn5rS1ZxJktleS1QYWlyLUlkPUtKWlZLREIxWk9HWVYiLCJhYTQ3MzA4YzNlMTAyNGY1NmRkZjMzOTY2ODc2OTM5NyI6Imh0dHBzOi8vaW1hZ2UuanFtY3kuY2xvdWQvMjAyNS8wNy8xOC9hYTQ3MzA4YzNlMTAyNGY1NmRkZjMzOTY2ODc2OTM5Ny5qcGc/RXhwaXJlcz0xNzUyODA1NTUzJlNpZ25hdHVyZT1CeXdqQTIzRFJDdVdQcThsdlVoekF3dk51ZTRpZTNKSUtENEtkMW5NeEduelhhU0wwODUtb2lHSGRJLUNHem11MFhHQ2FCNFphOGQ3aEIyTnU0NTlzcmlMYU9yWk9SLmFhYU0yY2J2dVkxT1loNG53SkJXb3ltb1V1SUxlNy53US5GaDRPTzlNcWVJaHhvWW05ckFjNFl+UHBndkhJSFRGWUJJN2h0WTRKczkzYW9nWDNqM19rQmFPMnZqYTVOJktleS1QYWlyLUlkPUtKWlZLREIxWk9HWVYifTsKKGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgIHZhciBtYXAgPSB3aW5kb3cuX19TSUdORURfTUFQX18gfHwge307CiAgICAgICAgdmFyIGZpcnN0ID0gT2JqZWN0LnZhbHVlcyhtYXApWzBdOwogICAgICAgIGlmIChmaXJzdCAmJiBmaXJzdC50b2tlbikgewogICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiaGFzX2pzPSIgKyBmaXJzdC50b2tlbiArICI7IHBhdGg9LyI7CiAgICAgICAgfQogICAgfSBjYXRjaChlKXt9CgogICAgY29uc3QgZnVsbCA9IHdpbmRvdy5fX1NJR05FRF9NQVBfXyB8fCB7fTsKICAgIGRlbGV0ZSB3aW5kb3cuX19TSUdORURfTUFQX187IC8vIOWIoOmZpOS4tOaXtuWPmOmHj++8jOmBv+WFjeaatOmcsgoKICAgIGNvbnN0IGFjdGl2ZSA9IHt9OwoKICAgIGZ1bmN0aW9uIGdldEtleUZyb21VcmwodXJsKSB7CiAgICAgICAgY29uc3QgbmFtZVBhcnQgPSB1cmwuc3BsaXQoJy8nKS5wb3AoKS5zcGxpdCgnPycpWzBdOwogICAgICAgIHJldHVybiBuYW1lUGFydCA/IG5hbWVQYXJ0LnNwbGl0KCcuJylbMF0gOiAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBzaWduKHVybCkgewogICAgICAgIGNvbnN0IGtleSA9IGdldEtleUZyb21VcmwodXJsKTsKICAgICAgICByZXR1cm4gYWN0aXZlW2tleV0gfHwgdXJsOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VJbWFnZShpbWcpIHsKICAgICAgICBjb25zdCByYXcgPSBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8ICcnOwogICAgICAgIGlmICghcmF3LmluY2x1ZGVzKCdpbWFnZS5qcW1jeS5jbG91ZCcpKSByZXR1cm47CgogICAgICAgIGNvbnN0IGtleSA9IGdldEtleUZyb21VcmwocmF3KTsKICAgICAgICBpZiAoIShrZXkgaW4gYWN0aXZlKSAmJiBrZXkgaW4gZnVsbCkgewogICAgICAgICAgICBhY3RpdmVba2V5XSA9IGZ1bGxba2V5XTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IHNpZ25lZCA9IHNpZ24ocmF3KTsKICAgICAgICBpZiAoc2lnbmVkICYmIHNpZ25lZCAhPT0gcmF3KSB7CiAgICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJywgc2lnbmVkKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudFNyYyA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnOwogICAgICAgICAgICBpZiAoIWltZy5jbGFzc0xpc3QuY29udGFpbnMoJ2xhenlsb2FkJykgJiYgY3VycmVudFNyYy5zdGFydHNXaXRoKCdkYXRhOmltYWdlJykpIHsKICAgICAgICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNpZ25lZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2NhbkltYWdlcygpIHsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbWdbZGF0YS1zcmNdJykuZm9yRWFjaChpbWcgPT4gewogICAgICAgICAgICBpZiAoIWltZy5fb2JzZXJ2ZXJfYm91bmQpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW1nKTsKICAgICAgICAgICAgICAgIGltZy5fb2JzZXJ2ZXJfYm91bmQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbGF6eWJlZm9yZXVudmVpbCcsIGUgPT4gcmVwbGFjZUltYWdlKGUudGFyZ2V0KSk7CgogICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHsKICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSByZXBsYWNlSW1hZ2UoZW50cnkudGFyZ2V0KTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBzY2FuSW1hZ2VzKTsKCiAgICBjb25zdCBtbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHNjYW5JbWFnZXMpOwogICAgbW8ub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKCiAgICBzY2FuSW1hZ2VzKCk7Cn0pKCk7'));