IyEvdXNyL2Jpbi9weXRob24gLXUKIyAtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQppbXBvcnQgc3lzCmltcG9ydCBsaWJ4bWwyCgojIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCgpjdHh0ID0gTm9uZQoKY2xhc3MgY2FsbGJhY2s6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRkLCBzdGFydGUsIGVuZGUsIGRlbHRhLCBlbmRkKToKICAgICAgICBzZWxmLnN0YXJ0ZCA9IHN0YXJ0ZAogICAgICAgIHNlbGYuc3RhcnRlID0gc3RhcnRlCiAgICAgICAgc2VsZi5lbmRlID0gZW5kZQogICAgICAgIHNlbGYuZW5kZCA9IGVuZGQKICAgICAgICBzZWxmLmRlbHRhID0gZGVsdGEKICAgICAgICBzZWxmLmNvdW50ID0gMAoKICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBjdHh0CiAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBzZWxmLnN0YXJ0ZDoKICAgICAgICAgICAgcHJpbnQoImRvY3VtZW50IHN0YXJ0IGF0IHdyb25nIGluZGV4OiAlZCBleHBlY3RpbmcgJWRcbiIgJSAoCiAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIHNlbGYuc3RhcnRkKSkKICAgICAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6CiAgICAgICAgZ2xvYmFsIGN0eHQKICAgICAgICBleHBlY3QgPSBzZWxmLmVuZGUgKyBzZWxmLmRlbHRhICogKHNlbGYuY291bnQgLSAxKSArIHNlbGYuZW5kZAogICAgICAgIGlmIGN0eHQuYnl0ZUNvbnN1bWVkKCkgIT0gZXhwZWN0OgogICAgICAgICAgICBwcmludCgiZG9jdW1lbnQgZW5kIGF0IHdyb25nIGluZGV4OiAlZCBleHBlY3RpbmcgJWRcbiIgJSAoCiAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIGV4cGVjdCkpCiAgICAgICAgICAgIHN5cy5leGl0KDEpCgogICAgZGVmIHN0YXJ0RWxlbWVudChzZWxmLCB0YWcsIGF0dHJzKToKICAgICAgICBnbG9iYWwgY3R4dAogICAgICAgIGlmIHRhZyA9PSAiYmFyMSI6CiAgICAgICAgICAgIGV4cGVjdCA9IHNlbGYuc3RhcnRlICsgc2VsZi5kZWx0YSAqIHNlbGYuY291bnQKICAgICAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBleHBlY3Q6CiAgICAgICAgICAgICAgICBwcmludCgiZWxlbWVudCBzdGFydCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAogICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KSkKICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgIAoKICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIHRhZyk6CiAgICAgICAgZ2xvYmFsIGN0eHQKICAgICAgICBpZiB0YWcgPT0gImJhcjEiOgogICAgICAgICAgICBleHBlY3QgPSBzZWxmLmVuZGUgKyBzZWxmLmRlbHRhICogc2VsZi5jb3VudAogICAgICAgICAgICBpZiBjdHh0LmJ5dGVDb25zdW1lZCgpICE9IGV4cGVjdDoKICAgICAgICAgICAgICAgIHByaW50KCJlbGVtZW50IGVuZCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAogICAgICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KSkKICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQoKICAgIGRlZiBjaGFyYWN0ZXJzKHNlbGYsIGRhdGEpOgogICAgICAgIHBhc3MKCiMKIyBGaXJzdCBydW4gYSBwdXJlIFVURi04IHRlc3QKIwpoYW5kbGVyID0gY2FsbGJhY2soMCwgMTMsIDI3LCAxOTgsIDE4MykKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihoYW5kbGVyLCAiPGZvbz5cbiIsIDYsICJ0ZXN0LnhtbCIpCmNodW5rID0gIiIiICA8YmFyMT5jaGFyczE8L2JhcjE+CiAgPGJhcjI+Y2hhcnMyPC9iYXIyPgogIDxiYXIzPmNoYXJzMzwvYmFyMz4KICA8YmFyND5jaGFyczQ8L2JhcjQ+CiAgPGJhcjU+Y2hhcnM1PC9iYXI1PgogIDxiYXI2PiZsdDtzNjwvYmFyNj4KICA8YmFyNz5jaGFyczc8L2Jhcjc+CiAgPGJhcjg+JiMzODs4PC9iYXI4PgogIDxiYXI5PmNoYXJzOTwvYmFyOT4KIiIiCmkgPSAwCndoaWxlIGkgPCAxMDAwMDoKICAgIGN0eHQucGFyc2VDaHVuayhjaHVuaywgbGVuKGNodW5rKSwgMCkKICAgIGkgPSBpICsgMQpjaHVuayA9ICI8L2Zvbz4iCmN0eHQucGFyc2VDaHVuayhjaHVuaywgbGVuKGNodW5rKSwgMSkKY3R4dD1Ob25lCgojCiMgVGhlbiBydW4gYSB0ZXN0IHJlbHlpbmcgb24gSVNPLUxhdGluLTEKIwpoYW5kbGVyID0gY2FsbGJhY2soNDMsIDU3LCA3MSwgMTk4LCAxODMpCmNodW5rPSIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KPGZvbz4KIiIiCmN0eHQgPSBsaWJ4bWwyLmNyZWF0ZVB1c2hQYXJzZXIoaGFuZGxlciwgY2h1bmssIGxlbihjaHVuayksICJ0ZXN0LnhtbCIpCmNodW5rID0gIiIiICA8YmFyMT5jaGFyczE8L2JhcjE+CiAgPGJhcjI+Y2hhcnMyPC9iYXIyPgogIDxiYXIzPmNoYXJzMzwvYmFyMz4KICA8YmFyND5jaOByczQ8L2JhcjQ+CiAgPGJhcjU+Y2hhcnM1PC9iYXI1PgogIDxiYXI2PiZsdDtzNjwvYmFyNj4KICA8YmFyNz5jaGFyczc8L2Jhcjc+CiAgPGJhcjg+JiMzODs4PC9iYXI4PgogIDxiYXI5PnRy6HMgOTwvYmFyOT4KIiIiCmkgPSAwCndoaWxlIGkgPCAxMDAwMDoKICAgIGN0eHQucGFyc2VDaHVuayhjaHVuaywgbGVuKGNodW5rKSwgMCkKICAgIGkgPSBpICsgMQpjaHVuayA9ICI8L2Zvbz4iCmN0eHQucGFyc2VDaHVuayhjaHVuaywgbGVuKGNodW5rKSwgMSkKY3R4dD1Ob25lCgojIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQppZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6CiAgICBwcmludCgiT0siKQplbHNlOgogICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCg==