Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
23 kB · 1 line
at main
12https://strudel.cc/#KCgpID0+IHsKLy8gQUMgT1MgTm90ZXBhdCB2b2ljZXMgZm9yIFN0cnVkZWwuIGh0dHBzOi8vYWVzdGhldGljLmNvbXB1dGVyCi8vIFJlY2lwZXM6IGZlZGFjL25hdGl2ZS9waWVjZXMvbm90ZXBhdC5tanMgKHRyaWFuZ2xlIFNoaWZ0IGFsdGVybmF0ZSBhbmQgY2hvcmRzKS4KLy8gVXNlcyBXZWIgQXVkaW8ncyBiYW5kLWxpbWl0ZWQgb3NjaWxsYXRvcnM7IHRoaXMgaXMgbm90IGEgcmVjb3JkaW5nIG9mIHRoZQovLyBuYXRpdmUgbWl4ZXIsIGl0cyBlY2hvLCBvciBpdHMgb3V0cHV0IHNhdHVyYXRpb24uCi8vIEdsYXNzLCBzd2FybSwgYmxvb20sIGFuZCBvcmJpdCBleHRlbmQgdGhvc2UgcmVjaXBlcyBhcyBuZXcgU3RydWRlbCBzb3VuZHMuCgpjb25zdCB2b2ljZXMgPSBPYmplY3QuZnJlZXplKHsKICBhY190cmlhbmdsZTogeyB3YXZlOiAndHJpYW5nbGUnLCByYXRpb3M6IFsxXSwgbGV2ZWxzOiBbMC41XSB9LAogIGFjX3RyaWFuZ2xlX2ZpZnRoOiB7IHdhdmU6ICd0cmlhbmdsZScsIHJhdGlvczogWzEsIDEuNV0sIGxldmVsczogWzAuNDIsIDAuMTJdIH0sCiAgYWNfc2luZTogeyB3YXZlOiAnc2luZScsIHJhdGlvczogWzFdLCBsZXZlbHM6IFswLjVdIH0sCiAgYWNfbWFqb3I6IHsgd2F2ZTogJ3NpbmUnLCByYXRpb3M6IFsxLCAyICoqICg0IC8gMTIpLCAyICoqICg3IC8gMTIpXSB9LAogIGFjX21pbm9yOiB7IHdhdmU6ICdzaW5lJywgcmF0aW9zOiBbMSwgMiAqKiAoMyAvIDEyKSwgMiAqKiAoNyAvIDEyKV0gfSwKICBhY19zdXMyOiB7IHdhdmU6ICdzaW5lJywgcmF0aW9zOiBbMSwgMiAqKiAoMiAvIDEyKSwgMiAqKiAoNyAvIDEyKV0gfSwKICBhY19nbGFzczogeyByaWNoOiAnZ2xhc3MnIH0sCiAgYWNfc3dhcm06IHsgcmljaDogJ3N3YXJtJyB9LAogIGFjX2Jsb29tOiB7IHJpY2g6ICdibG9vbScgfSwKICBhY19vcmJpdDogeyByaWNoOiAnb3JiaXQnIH0sCiAgYWNfbWFyaW1iYTogeyBtb2RhbDogdHJ1ZSB9LAogIGFjX3N0b25lOiB7IG1vZGFsOiAnc3RvbmUnIH0sCiAgYWNfd2F0ZXI6IHsgY2hpcnA6ICd3YXRlcicgfSwKICBhY19raWNrOiB7IGNoaXJwOiAna2ljaycgfSwKfSk7Cgpjb25zdCBib3VuZGVkID0gKHZhbHVlLCBmYWxsYmFjaywgbWluLCBtYXgpID0+IHsKICBjb25zdCBuID0gTnVtYmVyKHZhbHVlID8/IGZhbGxiYWNrKTsKICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIG4pKSA6IGZhbGxiYWNrOwp9OwoKZnVuY3Rpb24gbWFyaW1iYVZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgb25lbmRlZCwgc3RvbmUgPSBmYWxzZSkgewogIC8vIE1vZGFsIHJlZHVjdGlvbiBvZiBwb3AvbWFyaW1iYS9zeW50aHMvbWFyaW1iYS5tanMsIHJvc2V3b29kIHByZXNldC4KICAvLyBQcmVzZXJ2ZXMgaXRzIDE6NDo5LjIgcmF0aW9zIGFuZCBUNjAgZGVjYXkgcmVsYXRpb25zaGlwczsgb21pdHMgdGhlCiAgLy8gc291cmNlIHJlbmRlcmVyJ3MgbWFsbGV0IGNvbnZvbHV0aW9uIGFuZCByZXNvbmF0b3IgdHViZSBtb2RlbC4KICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBkdXJhdGlvbiA9IGJvdW5kZWQodmFsdWUuZHVyYXRpb24sIDAuNSwgMC4wMDEsIDM2MDApOwogIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCAwLjAwMSwgMCwgNjApLCBkdXJhdGlvbik7CiAgY29uc3QgZGVjYXkgPSBNYXRoLm1pbihib3VuZGVkKHZhbHVlLmRlY2F5LCAwLCAwLCA2MCksIGR1cmF0aW9uIC0gYXR0YWNrKTsKICBjb25zdCBzdXN0YWluID0gYm91bmRlZCh2YWx1ZS5zdXN0YWluLCAxLCAwLCAxKTsKICBjb25zdCByZWxlYXNlID0gYm91bmRlZCh2YWx1ZS5yZWxlYXNlLCAwLjI1LCAwLCA2MCk7CiAgY29uc3QgZW5kID0gdGltZSArIGR1cmF0aW9uICsgcmVsZWFzZSArIDAuMDA1OwogIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlR2FpbigpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShhdHRhY2sgPyAwIDogMSwgdGltZSk7CiAgaWYgKGF0dGFjaykgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRpbWUgKyBhdHRhY2spOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShzdXN0YWluLCB0aW1lICsgYXR0YWNrICsgZGVjYXkpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShzdXN0YWluLCB0aW1lICsgZHVyYXRpb24pOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBlbmQgLSAwLjAwNSk7CiAgLy8gU3RvbmUgaXMgYSBkZXNpZ25lZCBpbmhhcm1vbmljIGJhciBzdXJyb2dhdGUsIG5vdCB0aGUgb2ZmbGluZSBGRU0gbW9kZWwuCiAgY29uc3QgcmF0aW9zID0gc3RvbmUgPyBbMSwgMi43NTYsIDUuNDA0XSA6IFsxLCA0LCA5LjJdOwogIGNvbnN0IHQ2MCA9IHN0b25lID8gWzIuOCwgMS4xLCAwLjM4XSA6IFsxLjYsIDAuMzIsIDAuMDldOwogIGNvbnN0IGxldmVscyA9IFsxLCAwLjMyICogKDAuMyArIGNvbG9yICogMS40KSwgMC4xICogKDAuMyArIGNvbG9yICogMS40KV07CiAgY29uc3Qgc2NhbGUgPSAwLjQ4IC8gbGV2ZWxzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApOwogIGNvbnN0IG9zY2lsbGF0b3JzID0gW10sIGdhaW5zID0gW107CiAgbGV0IHJlbWFpbmluZyA9IDMsIGZpbmlzaGVkID0gZmFsc2U7CiAgcmF0aW9zLmZvckVhY2goKHJhdGlvLCBpKSA9PiB7CiAgICBjb25zdCBvID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICBvLmZyZXF1ZW5jeS52YWx1ZSA9IE1hdGgubWluKGZyZXF1ZW5jeSAqIHJhdGlvLCBjdHguc2FtcGxlUmF0ZSAqIDAuNDUpOwogICAgY29uc3QgYW1wbGl0dWRlID0gbGV2ZWxzW2ldICogc2NhbGU7CiAgICBjb25zdCByaW5nID0gdDYwW2ldICogKDAuOCArIGNvbG9yICogMC44KTsKICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZShhbXBsaXR1ZGUsIHRpbWUpOwogICAgZy5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoYW1wbGl0dWRlICogMC4wMDEsIHRpbWUgKyByaW5nKTsKICAgIGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMDAwMSwgdGltZSArIHJpbmcgKiAyKTsKICAgIG8uY29ubmVjdChnKS5jb25uZWN0KG5vZGUpOwogICAgby5vbmVuZGVkID0gKCkgPT4gewogICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDAgJiYgIWZpbmlzaGVkKSB7CiAgICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICAgIFsuLi5vc2NpbGxhdG9ycywgLi4uZ2FpbnMsIG5vZGVdLmZvckVhY2gobiA9PiBuLmRpc2Nvbm5lY3QoKSk7CiAgICAgICAgb25lbmRlZD8uKCk7CiAgICAgIH0KICAgIH07CiAgICBvc2NpbGxhdG9ycy5wdXNoKG8pOyBnYWlucy5wdXNoKGcpOwogICAgby5zdGFydCh0aW1lKTsgby5zdG9wKGVuZCk7CiAgfSk7CiAgcmV0dXJuIHsgbm9kZSwgc3RvcChhdCkgewogICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICBjb25zdCBzdG9wQXQgPSBNYXRoLm1heChjdHguY3VycmVudFRpbWUsIE1hdGgubWluKGF0LCBlbmQpKTsKICAgIG5vZGUuZ2Fpbi5jYW5jZWxBbmRIb2xkQXRUaW1lKHN0b3BBdCk7CiAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgc3RvcEF0ICsgMC4wMDUpOwogICAgb3NjaWxsYXRvcnMuZm9yRWFjaChvID0+IG8uc3RvcChNYXRoLm1pbihlbmQsIHN0b3BBdCArIDAuMDA1KSkpOwogIH0gfTsKfQoKZnVuY3Rpb24gY2hpcnBWb2ljZShjdHgsIHRpbWUsIHZhbHVlLCBmcmVxdWVuY3ksIGtpbmQsIG9uZW5kZWQpIHsKICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBraWNrID0ga2luZCA9PT0gJ2tpY2snOwogIGNvbnN0IGR1cmF0aW9uID0gYm91bmRlZCh2YWx1ZS5kdXJhdGlvbiwgMC4yLCAwLjAwMSwgMzYwMCk7CiAgY29uc3QgcmVsZWFzZSA9IGJvdW5kZWQodmFsdWUucmVsZWFzZSwgMC4wOCwgMCwgNjApOwogIGNvbnN0IGVuZCA9IHRpbWUgKyBkdXJhdGlvbiArIHJlbGVhc2UgKyAwLjAwNTsKICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKSwgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgY29uc3QgYXR0YWNrID0gTWF0aC5taW4oYm91bmRlZCh2YWx1ZS5hdHRhY2ssIGtpY2sgPyAwLjAwNyA6IDAuMDAzLCAwLCA2MCksIGR1cmF0aW9uKTsKICBjb25zdCByaW5nID0ga2ljayA/IDAuMTIgKyBjb2xvciAqIDAuMiA6IDAuMDU1ICsgY29sb3IgKiAwLjE7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAwLjUsIHRpbWUpOwogIGlmIChhdHRhY2spIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLjUsIHRpbWUgKyBhdHRhY2spOwogIG5vZGUuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMDEsIE1hdGgubWluKGVuZCAtIDAuMDA1LCB0aW1lICsgYXR0YWNrICsgcmluZykpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCBlbmQpOwogIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKGtpY2sgPyAxMjYgKyBjb2xvciAqIDIwIDogZnJlcXVlbmN5ICogMC41NSwgdGltZSk7CiAgb3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShraWNrID8gNDMgOiBmcmVxdWVuY3ksCiAgICB0aW1lICsgTWF0aC5taW4oZHVyYXRpb24sIGtpY2sgPyAwLjA1NSArIGNvbG9yICogMC4wNCA6IDAuMDcpKTsKICBvc2NpbGxhdG9yLmNvbm5lY3Qobm9kZSk7CiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7CiAgb3NjaWxsYXRvci5vbmVuZGVkID0gKCkgPT4gewogICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICBmaW5pc2hlZCA9IHRydWU7IG9zY2lsbGF0b3IuZGlzY29ubmVjdCgpOyBub2RlLmRpc2Nvbm5lY3QoKTsgb25lbmRlZD8uKCk7CiAgfTsKICBvc2NpbGxhdG9yLnN0YXJ0KHRpbWUpOyBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICByZXR1cm4geyBub2RlLCBzdG9wKGF0KSB7CiAgICBpZiAoZmluaXNoZWQpIHJldHVybjsKICAgIGNvbnN0IHN0b3BBdCA9IE1hdGgubWF4KGN0eC5jdXJyZW50VGltZSwgTWF0aC5taW4oYXQsIGVuZCkpOwogICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBzdG9wQXQgKyAwLjAwNSk7CiAgICBvc2NpbGxhdG9yLnN0b3AoTWF0aC5taW4oZW5kLCBzdG9wQXQgKyAwLjAwNSkpOwogIH0gfTsKfQoKZnVuY3Rpb24gcmljaFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwga2luZCwgb25lbmRlZCwgY3BzID0gMC41KSB7CiAgLy8gbiBpcyBhIDAuLjEgdGltYnJlIG1hY3JvOiBGTSBkZXB0aCwgZGV0dW5lLCBhbmQgZmlsdGVyIG1vdGlvbi4KICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBkdXJhdGlvbiA9IGJvdW5kZWQodmFsdWUuZHVyYXRpb24sIDAuNSwgMC4wMDEsIDM2MDApOwogIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCBraW5kID09PSAnYmxvb20nID8gMC4xOCA6IDAuMDA2LCAwLCA2MCksIGR1cmF0aW9uKTsKICBjb25zdCBkZWNheSA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuZGVjYXksIGtpbmQgPT09ICdnbGFzcycgPyAwLjMgOiAwLjEsIDAsIDYwKSwgZHVyYXRpb24gLSBhdHRhY2spOwogIGNvbnN0IHN1c3RhaW4gPSBib3VuZGVkKHZhbHVlLnN1c3RhaW4sIGtpbmQgPT09ICdnbGFzcycgPyAwLjI0IDogMC44LCAwLCAxKTsKICBjb25zdCByZWxlYXNlID0gYm91bmRlZCh2YWx1ZS5yZWxlYXNlLCBraW5kID09PSAnZ2xhc3MnID8gMC4zNSA6IDAuNiwgMCwgNjApOwogIGNvbnN0IGhvbGRFbmQgPSB0aW1lICsgZHVyYXRpb247CiAgY29uc3QgZW5kID0gaG9sZEVuZCArIHJlbGVhc2UgKyAwLjAwNTsKICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKTsKICBjb25zdCBhbGxOb2RlcyA9IFtub2RlXSwgb3NjaWxsYXRvcnMgPSBbXTsKICBjb25zdCBrZWVwID0gb2JqZWN0ID0+IHsgYWxsTm9kZXMucHVzaChvYmplY3QpOyByZXR1cm4gb2JqZWN0OyB9OwogIGNvbnN0IGdhaW4gPSBsZXZlbCA9PiB7CiAgICBjb25zdCBnID0ga2VlcChjdHguY3JlYXRlR2FpbigpKTsgZy5nYWluLnZhbHVlID0gbGV2ZWw7IHJldHVybiBnOwogIH07CiAgY29uc3Qgb3NjID0gKHR5cGUsIGh6KSA9PiB7CiAgICBjb25zdCBvID0ga2VlcChjdHguY3JlYXRlT3NjaWxsYXRvcigpKTsKICAgIG8udHlwZSA9IHR5cGU7CiAgICBvLmZyZXF1ZW5jeS52YWx1ZSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKGh6LCBjdHguc2FtcGxlUmF0ZSAqIDAuNCkpOwogICAgb3NjaWxsYXRvcnMucHVzaChvKTsgcmV0dXJuIG87CiAgfTsKICBjb25zdCBmaWx0ZXIgPSBrZWVwKGN0eC5jcmVhdGVCaXF1YWRGaWx0ZXIoKSk7CiAgZmlsdGVyLnR5cGUgPSAnbG93cGFzcyc7CiAgZmlsdGVyLlEudmFsdWUgPSAwLjU7CiAgY29uc3QgY3V0b2ZmID0gTWF0aC5taW4oY3R4LnNhbXBsZVJhdGUgKiAwLjQsIGZyZXF1ZW5jeSAqICg1ICsgY29sb3IgKiAxNSkpOwogIGZpbHRlci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUoY3V0b2ZmLCB0aW1lKTsKICBmaWx0ZXIuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoCiAgICBNYXRoLm1heCg2MCwgY3V0b2ZmICogKGtpbmQgPT09ICdnbGFzcycgPyAwLjI0IDogMC41NSkpLCBob2xkRW5kLAogICk7CiAgZmlsdGVyLmNvbm5lY3Qobm9kZSk7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAxLCB0aW1lKTsKICBpZiAoYXR0YWNrKSBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGltZSArIGF0dGFjayk7CiAgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHN1c3RhaW4sIHRpbWUgKyBhdHRhY2sgKyBkZWNheSk7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHN1c3RhaW4sIGhvbGRFbmQpOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBob2xkRW5kICsgcmVsZWFzZSk7CgogIGNvbnN0IGxheWVycyA9IGtpbmQgPT09ICdnbGFzcycKICAgID8gW1sxLCAwLjI0LCAnc2luZScsIDBdLCBbMS41LCAwLjEwLCAndHJpYW5nbGUnLCAwXSwgWzIuNzU2LCAwLjA3LCAnc2luZScsIDBdXQogICAgOiBraW5kID09PSAnc3dhcm0nCiAgICAgID8gW1sxLCAwLjEyLCAnc2F3dG9vdGgnLCAtMV0sIFsxLCAwLjEyLCAnc2F3dG9vdGgnLCAxXSwgWzEuNSwgMC4wOSwgJ3RyaWFuZ2xlJywgMC40XSwgWzAuNSwgMC4xMCwgJ3NpbmUnLCAwXV0KICAgICAgOiBbWzEsIDAuMTUsICd0cmlhbmdsZScsIC0xXSwgWzEsIDAuMTIsICd0cmlhbmdsZScsIDFdLCBbMS41LCAwLjA5LCAnc2luZScsIC0wLjVdLCBbMiwgMC4wNiwgJ3NpbmUnLCAwLjVdXTsKICBsYXllcnMuZm9yRWFjaCgoW3JhdGlvLCBsZXZlbCwgd2F2ZSwgc3ByZWFkXSwgaSkgPT4gewogICAgY29uc3QgY2FycmllciA9IG9zYyh3YXZlLCBmcmVxdWVuY3kgKiByYXRpbyk7CiAgICBjYXJyaWVyLmRldHVuZS52YWx1ZSA9IHNwcmVhZCAqICg0ICsgY29sb3IgKiAxOCk7CiAgICBjb25zdCBwYW4gPSBrZWVwKGN0eC5jcmVhdGVTdGVyZW9QYW5uZXIoKSk7CiAgICBwYW4ucGFuLnZhbHVlID0gc3ByZWFkICogMC40NTsKICAgIGNvbnN0IHB1bHNlID0gZ2FpbihraW5kID09PSAnb3JiaXQnID8gMC43MiA6IDEpOwogICAgY2Fycmllci5jb25uZWN0KGdhaW4obGV2ZWwpKS5jb25uZWN0KHB1bHNlKS5jb25uZWN0KHBhbikuY29ubmVjdChmaWx0ZXIpOwogICAgaWYgKGtpbmQgPT09ICdvcmJpdCcpIHsKICAgICAgLy8gQW1wbGl0dWRlIHB1bHNlcyBsb2NrZWQgdG8gdGhlIHNjaGVkdWxlcidzIGN5Y2xlIHJhdGUuCiAgICAgIG9zYygnc2luZScsIGJvdW5kZWQoY3BzLCAwLjUsIDAuMDEsIDIwKSAqIChpICsgMikpCiAgICAgICAgLmNvbm5lY3QoZ2FpbigwLjI4KSkuY29ubmVjdChwdWxzZS5nYWluKTsKICAgIH0KICAgIGlmIChraW5kICE9PSAnc3dhcm0nKSB7CiAgICAgIGNvbnN0IG1vZCA9IG9zYygnc2luZScsIGZyZXF1ZW5jeSAqIHJhdGlvICogKGtpbmQgPT09ICdnbGFzcycgPyAyLjc1NiA6IDEuNSkpOwogICAgICBjb25zdCBkZXB0aCA9IGdhaW4oZnJlcXVlbmN5ICogcmF0aW8gKiAoMC4wOCArIGNvbG9yICogKGtpbmQgPT09ICdnbGFzcycgPyAyLjQgOiAwLjYpKSk7CiAgICAgIG1vZC5jb25uZWN0KGRlcHRoKS5jb25uZWN0KGNhcnJpZXIuZnJlcXVlbmN5KTsKICAgICAgZGVwdGguZ2Fpbi5zZXRWYWx1ZUF0VGltZShkZXB0aC5nYWluLnZhbHVlLCB0aW1lKTsKICAgICAgZGVwdGguZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKAogICAgICAgIE1hdGgubWF4KDAuMDAxLCBkZXB0aC5nYWluLnZhbHVlICogMC4wOCksIHRpbWUgKyBNYXRoLm1pbihkdXJhdGlvbiwgMC4zICsgY29sb3IpLAogICAgICApOwogICAgICBpZiAoa2luZCA9PT0gJ29yYml0JykgewogICAgICAgIC8vIENhcnJpZXIgLT4gZGVsYXkgLT4gbW9kdWxhdG9yIHBpdGNoIC0+IGNhcnJpZXIgcGl0Y2guIFRoZSBkZWxheQogICAgICAgIC8vIG1ha2VzIHRoZSBmZWVkYmFjayBjeWNsZSB2YWxpZCwgd2hpbGUgc2luZSBvdXRwdXRzIGJvdW5kIGl0cyBsZXZlbC4KICAgICAgICBjb25zdCBmZWVkYmFjayA9IGtlZXAoY3R4LmNyZWF0ZURlbGF5KDAuMDUpKTsKICAgICAgICBmZWVkYmFjay5kZWxheVRpbWUudmFsdWUgPSAwLjAwNCArIGkgKiAwLjAwMjsKICAgICAgICBjYXJyaWVyLmNvbm5lY3QoZmVlZGJhY2spLmNvbm5lY3QoZ2FpbihmcmVxdWVuY3kgKiAoMC4xNSArIGNvbG9yICogMS40KSkpCiAgICAgICAgICAuY29ubmVjdChtb2QuZnJlcXVlbmN5KTsKICAgICAgICBjb25zdCBzaGFwZSA9IG9zYygnc2luZScsIDAuMTMgKyBpICogMC4wNyk7CiAgICAgICAgc2hhcGUuY29ubmVjdChnYWluKGZyZXF1ZW5jeSAqIHJhdGlvICogY29sb3IgKiAwLjI0KSkuY29ubmVjdChkZXB0aC5nYWluKTsKICAgICAgfQogICAgfQogICAgY29uc3QgZHJpZnQgPSBvc2MoJ3NpbmUnLCAwLjE5ICsgaSAqIDAuMTEgKyBjb2xvciAqIDAuMzUpOwogICAgZHJpZnQuY29ubmVjdChnYWluKDIgKyBjb2xvciAqIDYpKS5jb25uZWN0KGNhcnJpZXIuZGV0dW5lKTsKICAgIGlmIChraW5kID09PSAnYmxvb20nIHx8IGtpbmQgPT09ICdvcmJpdCcpIGRyaWZ0LmNvbm5lY3QoZ2FpbigwLjMpKS5jb25uZWN0KHBhbi5wYW4pOwogIH0pOwogIGxldCByZW1haW5pbmcgPSBvc2NpbGxhdG9ycy5sZW5ndGgsIGZpbmlzaGVkID0gZmFsc2U7CiAgZm9yIChjb25zdCBvc2NpbGxhdG9yIG9mIG9zY2lsbGF0b3JzKSB7CiAgICBvc2NpbGxhdG9yLm9uZW5kZWQgPSAoKSA9PiB7CiAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCAmJiAhZmluaXNoZWQpIHsKICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAgYWxsTm9kZXMuZm9yRWFjaChuID0+IG4uZGlzY29ubmVjdCgpKTsKICAgICAgICBvbmVuZGVkPy4oKTsKICAgICAgfQogICAgfTsKICAgIG9zY2lsbGF0b3Iuc3RhcnQodGltZSk7CiAgICBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICB9CiAgcmV0dXJuIHsKICAgIG5vZGUsCiAgICBzdG9wKGF0KSB7CiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuOwogICAgICBjb25zdCBzdG9wQXQgPSBNYXRoLm1heChjdHguY3VycmVudFRpbWUsIE1hdGgubWluKGF0LCBlbmQpKTsKICAgICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgICAgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDAsIHN0b3BBdCArIDAuMDA1KTsKICAgICAgZm9yIChjb25zdCBvIG9mIG9zY2lsbGF0b3JzKSBvLnN0b3AoTWF0aC5taW4oZW5kLCBzdG9wQXQgKyAwLjAwNSkpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiByZWdpc3Rlck5vdGVwYXQoYXBpID0gZ2xvYmFsVGhpcykgewogIGNvbnN0IHsgcmVnaXN0ZXJTb3VuZCwgZ2V0QXVkaW9Db250ZXh0LCBnZXRGcmVxdWVuY3lGcm9tVmFsdWUgfSA9IGFwaTsKICBpZiAoIVtyZWdpc3RlclNvdW5kLCBnZXRBdWRpb0NvbnRleHQsIGdldEZyZXF1ZW5jeUZyb21WYWx1ZV0uZXZlcnkoZm4gPT4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnQgTm90ZXBhdCBpbnNpZGUgU3RydWRlbCwgb3IgcGFzcyBpdHMgYXVkaW8gQVBJIHRvIHJlZ2lzdGVyTm90ZXBhdCgpLicpOwogIH0KICBmb3IgKGNvbnN0IFtuYW1lLCByZWNpcGVdIG9mIE9iamVjdC5lbnRyaWVzKHZvaWNlcykpIHsKICAgIHJlZ2lzdGVyU291bmQobmFtZSwgKHRpbWUsIHZhbHVlLCBvbmVuZGVkLCBjcHMpID0+IHsKICAgICAgY29uc3QgY3R4ID0gZ2V0QXVkaW9Db250ZXh0KCk7CiAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGJvdW5kZWQoZ2V0RnJlcXVlbmN5RnJvbVZhbHVlKHZhbHVlKSwgMjIwLCAxLCBjdHguc2FtcGxlUmF0ZSAvIDIgLSAxKTsKICAgICAgaWYgKHJlY2lwZS5tb2RhbCkgcmV0dXJuIG1hcmltYmFWb2ljZShjdHgsIHRpbWUsIHZhbHVlLCBmcmVxdWVuY3ksIG9uZW5kZWQsIHJlY2lwZS5tb2RhbCA9PT0gJ3N0b25lJyk7CiAgICAgIGlmIChyZWNpcGUuY2hpcnApIHJldHVybiBjaGlycFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgcmVjaXBlLmNoaXJwLCBvbmVuZGVkKTsKICAgICAgaWYgKHJlY2lwZS5yaWNoKSByZXR1cm4gcmljaFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgcmVjaXBlLnJpY2gsIG9uZW5kZWQsIGNwcyk7CiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYm91bmRlZCh2YWx1ZS5kdXJhdGlvbiwgMC41LCAwLjAwMSwgMzYwMCk7CiAgICAgIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCAwLjAyLCAwLCA2MCksIGR1cmF0aW9uKTsKICAgICAgY29uc3QgZGVjYXkgPSBNYXRoLm1pbihib3VuZGVkKHZhbHVlLmRlY2F5LCAwLCAwLCA2MCksIGR1cmF0aW9uIC0gYXR0YWNrKTsKICAgICAgY29uc3Qgc3VzdGFpbiA9IGJvdW5kZWQodmFsdWUuc3VzdGFpbiwgMSwgMCwgMSk7CiAgICAgIGNvbnN0IHJlbGVhc2UgPSBib3VuZGVkKHZhbHVlLnJlbGVhc2UsIDAuMSwgMCwgNjApOwogICAgICBjb25zdCBob2xkRW5kID0gdGltZSArIGR1cmF0aW9uOwogICAgICBjb25zdCBlbmQgPSBob2xkRW5kICsgcmVsZWFzZSArIDAuMDA1OwogICAgICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAxLCB0aW1lKTsKICAgICAgaWYgKGF0dGFjaykgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRpbWUgKyBhdHRhY2spOwogICAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoc3VzdGFpbiwgdGltZSArIGF0dGFjayArIGRlY2F5KTsKICAgICAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHN1c3RhaW4sIGhvbGRFbmQpOwogICAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgaG9sZEVuZCArIHJlbGVhc2UpOwoKICAgICAgY29uc3Qgb3NjaWxsYXRvcnMgPSBbXTsKICAgICAgbGV0IHJlbWFpbmluZyA9IHJlY2lwZS5yYXRpb3MubGVuZ3RoOwogICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNpcGUucmF0aW9zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgICAgICAgb3NjaWxsYXRvci50eXBlID0gcmVjaXBlLndhdmU7CiAgICAgICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBNYXRoLm1pbihmcmVxdWVuY3kgKiByZWNpcGUucmF0aW9zW2ldLCBjdHguc2FtcGxlUmF0ZSAvIDIgLSAxKTsKICAgICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbmF0aXZlIHRyaWFuZ2xlIGxheWVyIGJhbGFuY2UuIENob3JkcyBzaGFyZSBoZWFkcm9vbS4KICAgICAgICBnYWluLmdhaW4udmFsdWUgPSAocmVjaXBlLmxldmVscz8uW2ldID8/IDAuNSAvIHJlY2lwZS5yYXRpb3MubGVuZ3RoKQogICAgICAgICAgKiAocmVjaXBlLndhdmUgPT09ICd0cmlhbmdsZScgPyAtMSA6IDEpOwogICAgICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKS5jb25uZWN0KG5vZGUpOwogICAgICAgIG9zY2lsbGF0b3Iub25lbmRlZCA9ICgpID0+IHsKICAgICAgICAgIG9zY2lsbGF0b3IuZGlzY29ubmVjdCgpOwogICAgICAgICAgZ2Fpbi5kaXNjb25uZWN0KCk7CiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDAgJiYgIWZpbmlzaGVkKSB7CiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgICAgbm9kZS5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIG9uZW5kZWQ/LigpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgb3NjaWxsYXRvci5zdGFydCh0aW1lKTsKICAgICAgICBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICAgICAgICBvc2NpbGxhdG9ycy5wdXNoKG9zY2lsbGF0b3IpOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgbm9kZSwKICAgICAgICAvLyBTdHJ1ZGVsIGNhbGxzIHRoaXMgd2hlbiByZXRpcmluZyBhIHZvaWNlLCBpbmNsdWRpbmcgcG9seXBob255IHN0ZWFscy4KICAgICAgICBzdG9wKGF0KSB7CiAgICAgICAgICBpZiAoZmluaXNoZWQpIHJldHVybjsKICAgICAgICAgIGNvbnN0IHN0b3BBdCA9IE1hdGgubWF4KGN0eC5jdXJyZW50VGltZSwgTWF0aC5taW4oYXQsIGVuZCkpOwogICAgICAgICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgICAgICAgIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBzdG9wQXQgKyAwLjAwNSk7CiAgICAgICAgICBmb3IgKGNvbnN0IG9zY2lsbGF0b3Igb2Ygb3NjaWxsYXRvcnMpIG9zY2lsbGF0b3Iuc3RvcChNYXRoLm1pbihlbmQsIHN0b3BBdCArIDAuMDA1KSk7CiAgICAgICAgfSwKICAgICAgfTsKICAgIH0sIHsgdHlwZTogJ3N5bnRoJyB9KTsKICB9CiAgcmV0dXJuIE9iamVjdC5rZXlzKHZvaWNlcyk7Cn0KCnJlZ2lzdGVyTm90ZXBhdCgpOwoKfSkoKQoKLy8gUEFUIC8gZm9yIFdpbGwg4oCUIGh0dHBzOi8vcGF0LmFlc3RoZXRpYy5jb21wdXRlcgoKLy8gVk9JQ0VTIOKAlCBjaGFuZ2UgLnMoLi4uKSBpbiBhbnkgYmxvY2sgYmVsb3cuCi8vIGFjX29yYml0OiBmZWVkYmFjayBGTSwgaW50ZXJsb2NraW5nIHB1bHNlcywgbW92aW5nIHN0ZXJlbwovLyBhY19nbGFzczogbWV0YWxsaWMgRk0sIHRyaWFuZ2xlIGZpZnRoLCBpbmhhcm1vbmljIG92ZXJ0b25lcwovLyBhY19zd2FybTogZGV0dW5lZCBzYXdzLCB0cmlhbmdsZSBmaWZ0aCwgc2luZSBzdWIKLy8gYWNfYmxvb206IHNvZnRlciBGTSwgdHJpYW5nbGUvc2luZSBsYXllcnMsIHN0ZXJlbyBkcmlmdAovLyBhY19tYXJpbWJhOiByb3Nld29vZCBtb2RhbCBtYWxsZXQ7IC5uKCkgY2hhbmdlcyBicmlnaHRuZXNzIGFuZCByaW5nCi8vIGFjX3N0b25lOiBpbmhhcm1vbmljIGJhcjsgYWNfd2F0ZXI6IHJpc2luZyBkcmlwOyBhY19raWNrOiBmYWxsaW5nIHNpbmUgZHJ1bQovLyBTdG9uZSBXYXR0YWpldHRhIGFycmFuZ2VtZW50OiBodHRwczovL3BhdC5hZXN0aGV0aWMuY29tcHV0ZXIvc3RvbmUKLy8gYWNfdHJpYW5nbGVfZmlmdGggLyBhY190cmlhbmdsZSAvIGFjX3NpbmU6IG9yaWdpbmFsIHNpbXBsZSB2b2ljZXMKLy8gYWNfbWFqb3IgLyBhY19taW5vciAvIGFjX3N1czI6IG9uZSByb290IHRyaWdnZXJzIGEgdGhyZWUtbm90ZSBzaW5lIGNob3JkCi8vIFRoZXNlIGFyZSBjdXN0b20gcmVjaXBlcyB1c2luZyBlc3RhYmxpc2hlZCBzeW50aGVzaXMgdGVjaG5pcXVlcy4KLy8gVGhlIG9yaWdpbmFsIHNpeCBkZXJpdmUgZnJvbSBBQyBPUyBOb3RlcGF0OyB0aGUgZm91ciByaWNoIHZvaWNlcyBleHRlbmQgdGhlbS4KLy8gVHJhY2sgYXJyYW5nZW1lbnRzOiBodHRwczovL3BhdC5hZXN0aGV0aWMuY29tcHV0ZXIvbWFyaW1iYWJhCi8vIEZhc3RlciByZW1peDogaHR0cHM6Ly9wYXQuYWVzdGhldGljLmNvbXB1dGVyL21hcmltYmFiYS1vcmJpdAoKLy8gVElNRSDigJQgbmV3IG5vdGVzL2tleSBldmVyeSAxMCBtaW51dGVzIHdoZW4geW91IG9wZW4gb3IgcmUtZXZhbHVhdGUuCi8vIEtlZXAgYSB2ZXJzaW9uIGJ5IHJlcGxhY2luZyBEYXRlLm5vdygpIHdpdGggYSBmaXhlZCB0aW1lc3RhbXAuCi8vIFdoaWxlIHBsYXlpbmcsIHNpZ25hbHMga2VlcCBjaGFuZ2luZyB0aW1icmUsIHNwYWNlLCBhbmQgbGF5ZXIgbGV2ZWxzLgovLyBHZW5lcmF0ZWQgc3RyaW5ncyBuZWVkIG1pbmkoLi4uKTsgcXVvdGVkIHBhdHRlcm4gbGl0ZXJhbHMgdXNlIGRvdWJsZSBxdW90ZXMuCmNvbnN0IGVwb2NoID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gNjAwMDAwKQpsZXQgc2VlZCA9IGVwb2NoID4+PiAwCmNvbnN0IGRpY2UgPSAoKSA9PiAoKHNlZWQgPSAoTWF0aC5pbXVsKHNlZWQsIDE2NjQ1MjUpICsgMTAxMzkwNDIyMykgPj4+IDApIC8gNDI5NDk2NzI5NikKY29uc3Qgcm9vdCA9IFs0NSwgNDgsIDUwLCA1M11bZXBvY2ggJSA0XQpjb25zdCBzY2FsZSA9IFswLCAyLCAzLCA1LCA3LCA5LCAxMF0KY29uc3QgcGhyYXNlID0gKGNvdW50LCBvcGVuaW5nKSA9PiBBcnJheS5mcm9tKHtsZW5ndGg6IGNvdW50fSwgKF8sIGkpID0+CiAgaSA9PT0gMCA/IFN0cmluZyhyb290ICsgMjQgKyBvcGVuaW5nKSA6CiAgICBkaWNlKCkgPCAuMTYgPyAnficgOiBTdHJpbmcocm9vdCArIDI0ICsgc2NhbGVbTWF0aC5mbG9vcihkaWNlKCkgKiBzY2FsZS5sZW5ndGgpXSkKKS5qb2luKCcgJykKY29uc3QgbWVsb2R5ID0gcGhyYXNlKDEzLCAwKQpjb25zdCBzcGFya3MgPSBwaHJhc2UoNywgNykKY29uc3QgY2hvcmQgPSAob2Zmc2V0LCBpbnRlcnZhbHMpID0+ICdbJyArIGludGVydmFscy5tYXAobiA9PiByb290ICsgb2Zmc2V0ICsgbikuam9pbignLCcpICsgJ10nCmNvbnN0IGhhcm1vbnkgPSAnPCcgKyBbY2hvcmQoMCwgWzAsMyw3LDEwXSksIGNob3JkKC01LCBbMCwzLDddKSwgY2hvcmQoLTQsIFswLDQsN10pLCBjaG9yZCgtMiwgWzAsNCw3XSldLmpvaW4oJyAnKSArICc+JwpzZXRjcG0oMjQpCgovLyBPUkJJVCDigJQgLm4oMC4uMSkgaXMgdGhlIHRpbWJyZSBtYWNybzogZmVlZGJhY2svRk0gZGVwdGggYW5kIGJyaWdodG5lc3MuCi8vIHNpbmUvcGVybGluIGFyZSBTdHJ1ZGVsIHNpZ25hbHM7IGRpZmZlcmVudCBwZXJpb2RzIGF2b2lkIGEgc2hvcnQgc2hhcmVkIGxvb3AuCi8vIEVhY2ggJDogYmxvY2sgaXMgaW5kZXBlbmRlbnQuIFNlbGVjdCBhIHdob2xlIGJsb2NrIGFuZCB0b2dnbGUgLy8gdG8gbXV0ZSBpdC4KLy8gQWxsIGZvdXIgZW50ZXIgb24gYmVhdCBvbmU6IHRvbmljIGxlYWQsIGZpZnRoIGFjY2VudCwgY2hvcmQsIGFuZCBiYXNzLgokOiBub3RlKG1pbmkobWVsb2R5KSkucygnYWNfb3JiaXQnKS5zbG93KDIpCiAgLm4ocGVybGluLnNsb3coMTEpLnJhbmdlKC4xMiwuOTUpKQogIC5hdHRhY2soLjAwOCkuZGVjYXkoLjIpLnN1c3RhaW4oLjU1KS5yZWxlYXNlKC42KQogIC5nYWluKHNpbmUuc2xvdygxNykucmFuZ2UoLjMyLC41KSkKICAucGFuKHNpbmUuc2xvdygxOSkpLmxwZihzaW5lLnNsb3coMjMpLnJhbmdlKDYwMCw2MDAwKSkKICAuZGVsYXkoLjMpLmRlbGF5dGltZSguMzc1KS5kZWxheWZlZWRiYWNrKC4zNSkucm9vbSguMzUpCiAgLl9waWFub3JvbGwoKQoKLy8gR0xBU1Mg4oCUIHNldmVuLW5vdGUgcGhyYXNlIGFnYWluc3Qgb3JiaXQncyB0aGlydGVlbjsgbm90ZXMvcmVzdHMgdmFyeSBwZXIgZXBvY2guCiQ6IG5vdGUobWluaShzcGFya3MpKS5zKCdhY19nbGFzcycpLnNsb3coMykKICAubihzaW5lLnNsb3coMTMpLnJhbmdlKC4xLC45KSkKICAuYXR0YWNrKC4wMDQpLmdhaW4oc2luZS5zbG93KDI5KS5yYW5nZSguMTYsLjMpKS5yZWxlYXNlKC44KQogIC5wYW4oc2luZS5zbG93KDMxKSkuZGVsYXkoLjI1KS5kZWxheXRpbWUoLjUpLnJvb20oLjQ1KQoKLy8gQkxPT00g4oCUIGV4dGVuZGVkIGNob3JkczsgYXR0YWNrL2RlY2F5L3N1c3RhaW4vcmVsZWFzZSBhcmUgc2Vjb25kcywgZXhjZXB0Ci8vIHN1c3RhaW4gKDAuLjEpLiAuc2xvdyg0KSBzdHJldGNoZXMgdGhlIGhhcm1vbmljIHByb2dyZXNzaW9uLgokOiBub3RlKG1pbmkoaGFybW9ueSkpLnMoJ2FjX2Jsb29tJykuc2xvdyg0KQogIC5uKHBlcmxpbi5zbG93KDM3KS5yYW5nZSguMTUsLjgpKQogIC5hdHRhY2soLjA2KS5kZWNheSguNCkuc3VzdGFpbiguNjUpLnJlbGVhc2UoMS44KQogIC5nYWluKC4yKS5scGYoc2luZS5zbG93KDQxKS5yYW5nZSg2NTAsMzIwMCkpLnJvb20oLjUpCgovLyBTV0FSTSDigJQgYmFzcyB3aXRoIGNoYW5naW5nIHRvbmUgYW5kIGxldmVsLiBGaWx0ZXJzL2RlbGF5L3JldmVyYi9wYW4gYXJlCi8vIFN0cnVkZWwgZWZmZWN0czsgRk0sIGRldHVuZSwgYW5kIGludGVybmFsIG1vdmVtZW50IGJlbG9uZyB0byB0aGVzZSB2b2ljZXMuCiQ6IG5vdGUobWluaSgnPCcgKyBbcm9vdC0xMiwgcm9vdC0xNywgcm9vdC0xNiwgcm9vdC0xNF0uam9pbignICcpICsgJz4gfiB+IFt+ICcgKyByb290ICsgJ10nKSkKICAucygnYWNfc3dhcm0nKS5zbG93KDIpLm4oc2luZS5zbG93KDcpLnJhbmdlKC4xNSwuOCkpCiAgLmF0dGFjayguMDA2KS5yZWxlYXNlKC4yNSkuZ2FpbiguNCkubHBmKDg1MCkKCi8vIFNPTE8gTEFCIOKAlCBjb21tZW50IG91dCB0aGUgZm91ciBhY3RpdmUgYmxvY2tzIGFib3ZlIGFuZCB1bmNvbW1lbnQgdGhpcy4KLy8gbm90ZSguLi4pIGFjY2VwdHMgbm90ZSBuYW1lcyBvciBNSURJIG51bWJlcnM7IGZyZXEoLi4uKSBhY2NlcHRzIGhlcnR6LgovLyBBbGwgdm9pY2VzOiAuYXR0YWNrIC5kZWNheSAuc3VzdGFpbiAucmVsZWFzZSAuZ2FpbiAucGFuIC5scGYgLmhwZiAuZGVsYXkgLnJvb20KLy8gUmljaCB2b2ljZXM6IC5uKDAuLjEpLiBTeW50aC1zcGVjaWZpYyBTdHJ1ZGVsIGNvbnRyb2xzIHN1Y2ggYXMgLmZtKCkgYXJlCi8vIG5vdCB3aXJlZCBpbnRvIHRoZXNlIGN1c3RvbSB2b2ljZXM7IHVzZSAubigpIGZvciB0aGVpciBpbnRlcm5hbCBtb2R1bGF0aW9uLgovLyAkOiBub3RlKCJjMyBlYjMgZzMgYmIzIikucygnYWNfb3JiaXQnKS5uKCI8MCAuMjUgLjUgLjc1IDE+IikKLy8gICAuYXR0YWNrKC4wMikucmVsZWFzZSguNykuZ2FpbiguNCkucm9vbSguMykKLy8gJDogZnJlcSgiMTEwIDE2NSAyMjAiKS5zKCdhY190cmlhbmdsZV9maWZ0aCcpLmdhaW4oLjQpCg==