Skip to contentLy8gPGJsb2NrOnNldHVwOjE+CmNvbnN0IERBVEFfQ09VTlQgPSAxMjsKY29uc3QgTlVNQkVSX0NGRyA9IHtjb3VudDogREFUQV9DT1VOVCwgbWluOiAyLCBtYXg6IDQwfTsKCmNvbnN0IElOVExfTlVNX0ZPUk1BVCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgndXMnLCB7CiAgc3R5bGU6ICd1bml0JywKICB1bml0OiAna2lsb21ldGVyJywKICB1bml0RGlzcGxheTogJ3Nob3J0JywKICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDEsCiAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAxfSk7CgovLyA8L2Jsb2NrOnNldHVwPgoKLy8gPGJsb2NrOnV0aWxzOjI+CmZ1bmN0aW9uIGNvbG9yRnJvbVJhdyhjdHgpIHsKICBpZiAoY3R4LnR5cGUgIT09ICdkYXRhJykgewogICAgcmV0dXJuICd0cmFuc3BhcmVudCc7CiAgfQogIGNvbnN0IHZhbHVlID0gY3R4LnJhdy52OwogIGxldCBhbHBoYSA9ICgxICsgTWF0aC5sb2codmFsdWUpKSAvIDU7CiAgY29uc3QgY29sb3IgPSAnb3JhbmdlJzsKICByZXR1cm4gaGVscGVycy5jb2xvcihjb2xvcikKICAgIC5hbHBoYShhbHBoYSkKICAgIC5yZ2JTdHJpbmcoKTsKfQoKLy8gPC9ibG9jazp1dGlscz4KCi8vIDxibG9jazpjb25maWc6MD4KY29uc3QgY29uZmlnID0gewogIHR5cGU6ICd0cmVlbWFwJywKICBkYXRhOiB7CiAgICBkYXRhc2V0czogWwogICAgICB7CiAgICAgICAgbGFiZWw6ICdNeSBGaXJzdCBkYXRhc2V0JywKICAgICAgICB0cmVlOiBVdGlscy5udW1iZXJzKE5VTUJFUl9DRkcpLAogICAgICAgIGJvcmRlckNvbG9yOiAncmVkJywKICAgICAgICBib3JkZXJXaWR0aDogMC41LAogICAgICAgIHNwYWNpbmc6IDAsCiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAoY3R4KSA9PiBjb2xvckZyb21SYXcoY3R4KSwKICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgIGFsaWduOiAnbGVmdCcsCiAgICAgICAgICBkaXNwbGF5OiB0cnVlLAogICAgICAgICAgZm9ybWF0dGVyKGN0eCkgewogICAgICAgICAgICBpZiAoY3R4LnR5cGUgIT09ICdkYXRhJykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gSU5UTF9OVU1fRk9STUFULmZvcm1hdChjdHgucmF3LnYpOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbG9yOiAnYmxhY2snLAogICAgICAgICAgZm9udDogewogICAgICAgICAgICBzaXplOiAxNiwKICAgICAgICAgIH0sCiAgICAgICAgICBob3ZlckZvbnQ6IHsKICAgICAgICAgICAgc2l6ZTogMjQsCiAgICAgICAgICAgIHdlaWdodDogJ2JvbGQnCiAgICAgICAgICB9LAogICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInCiAgICAgICAgfQogICAgICB9CiAgICBdLAogIH0sCiAgb3B0aW9uczogewogICAgcGx1Z2luczogewogICAgICB0aXRsZTogewogICAgICAgIGRpc3BsYXk6IHRydWUsCiAgICAgICAgdGV4dDogJ0xhYmVsbGluZyBkYXRhJwogICAgICB9LAogICAgICBsZWdlbmQ6IHsKICAgICAgICBkaXNwbGF5OiBmYWxzZQogICAgICB9CiAgICB9CiAgfQp9OwoKLy8gPC9ibG9jazpjb25maWc+Cgpjb25zdCBhY3Rpb25zID0gWwogIHsKICAgIG5hbWU6ICdSYW5kb21pemUnLAogICAgaGFuZGxlcihjaGFydCkgewogICAgICBjaGFydC5kYXRhLmRhdGFzZXRzLmZvckVhY2goZGF0YXNldCA9PiB7CiAgICAgICAgZGF0YXNldC50cmVlID0gVXRpbHMubnVtYmVycyhOVU1CRVJfQ0ZHKTsKICAgICAgfSk7CiAgICAgIGNoYXJ0LnVwZGF0ZSgpOwogICAgfQogIH0sCl07Cgptb2R1bGUuZXhwb3J0cyA9IHsKICBhY3Rpb25zLAogIGNvbmZpZywKfTs=