Created
August 14, 2026 15:09
-
-
Save flyingwebie/880c1ca05f25dbf9607d1b1fc0bee858 to your computer and use it in GitHub Desktop.
Ambient Backgrounds for Etch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {"type":"block","gutenbergBlock":{"blockName":"etch/component","attrs":{"ref":1071,"attributes":{"variant":"drift","density":"1.4"}},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]},"timestamp":"2026-08-14T15:09:10.748Z","styles":{"28p1bej":{"type":"attribute","selector":"[data-ezm-ambient]","collection":"default","css":"position: absolute; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; border-radius: inherit;","readonly":false},"1x0wgt6":{"type":"custom","selector":"[data-ezm-ambient] canvas","collection":"default","css":"display: block; inline-size: 100%; block-size: 100%;","readonly":false}},"components":{"1071":{"id":1071,"legacyId":"","name":"Ambient Backgrounds","key":"AmbientBackgrounds","blocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Ambient host"},"script":{"code":"LyogRWF6eUNpdHkg4oCUIEFtYmllbnQgQmFja2dyb3VuZHMKICAgVmFuaWxsYSBwb3J0IG9mIHRoZSAxMCBjYW52YXMgcmVuZGVyZXJzLiBPbmUgaW5zdGFuY2UgcGVyIFtkYXRhLWV6bS1hbWJpZW50XSBob3N0LgogICBDb25maWcgaXMgcmVhZCBmcm9tIGRhdGEgYXR0cmlidXRlcyBzbyBlYWNoIEV0Y2ggY29tcG9uZW50IGluc3RhbmNlIGRyaXZlcyBpdHMgb3duIHByb3BzLiAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKICBpZiAod2luZG93Ll9fZXptQW1iaWVudCkgcmV0dXJuOwogIHdpbmRvdy5fX2V6bUFtYmllbnQgPSB0cnVlOwoKICB2YXIgS0lORFMgPSB7CiAgICBzcG90bGlnaHQ6ICdzcG90JywgZHJpZnQ6ICdwYXJ0JywgcmlwcGxlOiAncmlwJywgbGVuczogJ2xlbnMnLCBmbG93OiAnZmxvdycsCiAgICBtZXNoOiAnbWVzaCcsIG1ldGFiYWxsOiAnZ29vJywgY2F1c3RpY3M6ICdjYXUnLCAncGFydGljbGUtdGV4dCc6ICd0ZXh0JywgdGVycmFpbjogJ3RlcnInCiAgfTsKCiAgLy8gLS0tLSBjb2xvdXIgcmVzb2x1dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gVmFsdWVzIG1heSBiZSBhIGhleCAoI2ZhNDEwMCksIGEgQ1NTIGNvbG91ciwgb3IgYW4gQUNTUyB0b2tlbiAodmFyKC0tcHJpbWFyeSkpLgogIC8vIENhbnZhcyBjYW5ub3QgcmVhZCBjdXN0b20gcHJvcGVydGllcywgc28gZXZlcnkgdmFsdWUgaXMgcmVzb2x2ZWQgdG8gYW4gUkdCCiAgLy8gdHJpcGxlIGF0IG1vdW50OiBhIHByb2JlIGVsZW1lbnQgaW5zaWRlIHRoZSBob3N0IHJlc29sdmVzIHZhcigpIGFnYWluc3QgdGhlCiAgLy8gbGl2ZSBjYXNjYWRlLCB0aGVuIGEgMXgxIGNhbnZhcyByYXN0ZXJpc2VzIHdoYXRldmVyIGNvbG91ciBzcGFjZSBjYW1lIGJhY2sKICAvLyAob2tsY2ggaW5jbHVkZWQpIGRvd24gdG8gcGxhaW4gUkdCLgogIHZhciByYXN0ZXJDdHggPSBudWxsOwogIGZ1bmN0aW9uIHJhc3RlcihzdHIsIGZiKSB7CiAgICBpZiAoIXJhc3RlckN0eCkgewogICAgICB2YXIgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgY3Yud2lkdGggPSBjdi5oZWlnaHQgPSAxOwogICAgICByYXN0ZXJDdHggPSBjdi5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pOwogICAgfQogICAgdmFyIGMgPSByYXN0ZXJDdHg7CiAgICBjLmNsZWFyUmVjdCgwLCAwLCAxLCAxKTsKICAgIGMuZmlsbFN0eWxlID0gJyMwMDAnOwogICAgdHJ5IHsgYy5maWxsU3R5bGUgPSBzdHI7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAoYy5maWxsU3R5bGUgPT09ICcjMDAwJyAmJiAhL14jMHszLDZ9JHxeYmxhY2skfF5yZ2JcKDAsIDAsIDBcKSQvaS50ZXN0KFN0cmluZyhzdHIpLnRyaW0oKSkpIHsKICAgICAgdHJ5IHsgYy5maWxsU3R5bGUgPSBmYjsgfSBjYXRjaCAoZTIpIHt9CiAgICB9CiAgICBjLmZpbGxSZWN0KDAsIDAsIDEsIDEpOwogICAgdmFyIGQgPSBjLmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhOwogICAgcmV0dXJuIFtkWzBdLCBkWzFdLCBkWzJdXTsKICB9CiAgZnVuY3Rpb24gcmVzb2x2ZVJHQihob3N0LCB2YWx1ZSwgZmIpIHsKICAgIHZhciB2ID0gKHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSkpLnRyaW0oKTsKICAgIGlmICghdikgdiA9IGZiOwogICAgdmFyIHByb2JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgcHJvYmUuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICBwcm9iZS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTk5OTlweDt0b3A6MDt3aWR0aDowO2hlaWdodDowO3BvaW50ZXItZXZlbnRzOm5vbmUnOwogICAgcHJvYmUuc3R5bGUuY29sb3IgPSB2OwogICAgaWYgKCFwcm9iZS5zdHlsZS5jb2xvcikgcHJvYmUuc3R5bGUuY29sb3IgPSBmYjsgICAvLyBDU1NPTSByZWplY3RlZCBpdCBvdXRyaWdodAogICAgKGhvc3QgfHwgZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQocHJvYmUpOwogICAgdmFyIGNvbXB1dGVkID0gJyc7CiAgICB0cnkgeyBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHByb2JlKS5jb2xvcjsgfSBjYXRjaCAoZSkge30KICAgIGlmIChwcm9iZS5wYXJlbnROb2RlKSBwcm9iZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHByb2JlKTsKICAgIHJldHVybiByYXN0ZXIoY29tcHV0ZWQgfHwgdiwgZmIpOwogIH0KICBmdW5jdGlvbiBjcyh0KSB7IHJldHVybiAncmdiKCcgKyB0WzBdICsgJywnICsgdFsxXSArICcsJyArIHRbMl0gKyAnKSc7IH0KICBmdW5jdGlvbiBjYSh0LCBhKSB7IHJldHVybiAncmdiYSgnICsgdFswXSArICcsJyArIHRbMV0gKyAnLCcgKyB0WzJdICsgJywnICsgYSArICcpJzsgfQogIGZ1bmN0aW9uIG51bSh2LCBkLCBsbywgaGkpIHsKICAgIHZhciBuID0gcGFyc2VGbG9hdCh2KTsKICAgIGlmICghaXNGaW5pdGUobikpIG4gPSBkOwogICAgaWYgKGxvICE9IG51bGwgJiYgbiA8IGxvKSBuID0gbG87CiAgICBpZiAoaGkgIT0gbnVsbCAmJiBuID4gaGkpIG4gPSBoaTsKICAgIHJldHVybiBuOwogIH0KCiAgdmFyIGdyYWluVGlsZSA9IG51bGw7CiAgZnVuY3Rpb24gZ3JhaW4oKSB7CiAgICBpZiAoZ3JhaW5UaWxlKSByZXR1cm4gZ3JhaW5UaWxlOwogICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgZy53aWR0aCA9IGcuaGVpZ2h0ID0gMTQwOwogICAgdmFyIGMgPSBnLmdldENvbnRleHQoJzJkJyksIGQgPSBjLmNyZWF0ZUltYWdlRGF0YSgxNDAsIDE0MCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGQuZGF0YS5sZW5ndGg7IGkgKz0gNCkgewogICAgICB2YXIgdiA9IDEyMCArIE1hdGgucmFuZG9tKCkgKiAxMzU7CiAgICAgIGQuZGF0YVtpXSA9IGQuZGF0YVtpICsgMV0gPSBkLmRhdGFbaSArIDJdID0gdjsgZC5kYXRhW2kgKyAzXSA9IDI2OwogICAgfQogICAgYy5wdXRJbWFnZURhdGEoZCwgMCwgMCk7CiAgICBncmFpblRpbGUgPSBnOyByZXR1cm4gZzsKICB9CgogIGZ1bmN0aW9uIHJlYWRDZmcoaG9zdCkgewogICAgdmFyIGQgPSBob3N0LmRhdGFzZXQ7CiAgICByZXR1cm4gewogICAgICBraW5kOiBLSU5EU1tkLmV6bUFtYmllbnRdIHx8IEtJTkRTW2QudmFyaWFudF0gfHwgJ3Nwb3QnLAogICAgICBhY2NlbnQ6IHJlc29sdmVSR0IoaG9zdCwgZC5hY2NlbnQsICcjRTRCNDI5JyksCiAgICAgIHNlY29uZDogcmVzb2x2ZVJHQihob3N0LCBkLnNlY29uZGFyeSwgJyMzRTlFOTYnKSwKICAgICAgdGhpcmQ6IHJlc29sdmVSR0IoaG9zdCwgZC50ZXJ0aWFyeSwgJyNBOTlCRTAnKSwKICAgICAgYmFzZTogcmVzb2x2ZVJHQihob3N0LCBkLmJhc2UsICcjRjRGMUVBJyksCiAgICAgIGluazogcmVzb2x2ZVJHQihob3N0LCBkLmluaywgJyMxQTE4MTUnKSwKICAgICAgYW1wOiBudW0oZC5pbnRlbnNpdHksIDEsIDAuMSwgNCksCiAgICAgIGRlbnM6IG51bShkLmRlbnNpdHksIDEsIDAuMSwgNCksCiAgICAgIHRleHQ6IGQudGV4dCB8fCAnaGVsbG8nLAogICAgICBpbnRlcmFjdGl2ZTogZC5pbnRlcmFjdGl2ZSAhPT0gJ2ZhbHNlJwogICAgfTsKICB9CgogIGZ1bmN0aW9uIFVuaXQoaG9zdCkgewogICAgdmFyIGNhbnZhcyA9IGhvc3QucXVlcnlTZWxlY3RvcignY2FudmFzJyk7CiAgICBpZiAoIWNhbnZhcykgeyBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgaG9zdC5hcHBlbmRDaGlsZChjYW52YXMpOyB9CiAgICB0aGlzLmhvc3QgPSBob3N0OwogICAgdGhpcy5jID0gY2FudmFzOwogICAgdGhpcy5jdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgIHRoaXMuUCA9IHJlYWRDZmcoaG9zdCk7CiAgICB0aGlzLmtpbmQgPSB0aGlzLlAua2luZDsKICAgIHRoaXMudmlzID0gdHJ1ZTsgdGhpcy53ID0gMDsgdGhpcy5oID0gMDsgdGhpcy5kYXRhID0gbnVsbDsgdGhpcy5vZmYgPSBudWxsOwogICAgdGhpcy5tID0geyB4OiAwLCB5OiAwLCB0eDogMCwgdHk6IDAsIGluOiBmYWxzZSB9OwogICAgdGhpcy5iaW5kKCk7CiAgfQoKICBVbml0LnByb3RvdHlwZS5maXQgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgciA9IHRoaXMuaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGlmICghci53aWR0aCB8fCAhci5oZWlnaHQpIHJldHVybjsKICAgIHZhciBkID0gTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwgMik7CiAgICB0aGlzLmMud2lkdGggPSBNYXRoLnJvdW5kKHIud2lkdGggKiBkKTsKICAgIHRoaXMuYy5oZWlnaHQgPSBNYXRoLnJvdW5kKHIuaGVpZ2h0ICogZCk7CiAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oZCwgMCwgMCwgZCwgMCwgMCk7CiAgICB0aGlzLncgPSByLndpZHRoOyB0aGlzLmggPSByLmhlaWdodDsKICAgIGlmICghdGhpcy5tLmluKSB7CiAgICAgIHRoaXMubS50eCA9IHIud2lkdGggKiAwLjU7IHRoaXMubS50eSA9IHIuaGVpZ2h0ICogMC40NTsKICAgICAgdGhpcy5tLnggPSB0aGlzLm0udHg7IHRoaXMubS55ID0gdGhpcy5tLnR5OwogICAgfQogICAgdGhpcy5kYXRhID0gbnVsbDsKICB9OwoKICBVbml0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5maXQoKTsKICAgIGlmICh3aW5kb3cuUmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgdGhpcy5ybyA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgeyBzZWxmLmZpdCgpOyB9KTsKICAgICAgdGhpcy5yby5vYnNlcnZlKHRoaXMuaG9zdCk7CiAgICB9CiAgICBpZiAod2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKSB7CiAgICAgIHRoaXMuaW8gPSBuZXcgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlKSB7IHNlbGYudmlzID0gZVswXS5pc0ludGVyc2VjdGluZzsgfSwgeyByb290TWFyZ2luOiAnODBweCcgfSk7CiAgICAgIHRoaXMuaW8ub2JzZXJ2ZSh0aGlzLmhvc3QpOwogICAgfQogICAgaWYgKCF0aGlzLlAuaW50ZXJhY3RpdmUpIHJldHVybjsKICAgIC8vIFRoZSBjYW52YXMgaXMgcG9pbnRlci10cmFuc3BhcmVudCBzbyBwYWdlIGNvbnRlbnQgc3RheXMgY2xpY2thYmxlIOKAlCBsaXN0ZW4gb24gdGhlCiAgICAvLyBzdXJyb3VuZGluZyBzdXJmYWNlICh0aGUgRXRjaCBzZWN0aW9uKSBhbmQgdHJhbnNsYXRlIGNvb3JkaW5hdGVzIGludG8gaG9zdCBzcGFjZS4KICAgIHZhciBzdXJmYWNlID0gdGhpcy5ob3N0LmNsb3Nlc3QoJ1tkYXRhLWV6bS1hbWJpZW50LXN1cmZhY2VdJykgfHwgdGhpcy5ob3N0LnBhcmVudEVsZW1lbnQgfHwgdGhpcy5ob3N0OwogICAgdGhpcy5fbW92ZSA9IGZ1bmN0aW9uIChldikgewogICAgICB2YXIgciA9IHNlbGYuaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgc2VsZi5tLnR4ID0gZXYuY2xpZW50WCAtIHIubGVmdDsgc2VsZi5tLnR5ID0gZXYuY2xpZW50WSAtIHIudG9wOyBzZWxmLm0uaW4gPSB0cnVlOwogICAgfTsKICAgIHRoaXMuX2xlYXZlID0gZnVuY3Rpb24gKCkgeyBzZWxmLm0uaW4gPSBmYWxzZTsgfTsKICAgIHN1cmZhY2UuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLl9tb3ZlLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICBzdXJmYWNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIHRoaXMuX2xlYXZlLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNlOwogIH07CgogIFVuaXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CiAgICB0aGlzLnJvICYmIHRoaXMucm8uZGlzY29ubmVjdCgpOwogICAgdGhpcy5pbyAmJiB0aGlzLmlvLmRpc2Nvbm5lY3QoKTsKICAgIGlmICh0aGlzLnN1cmZhY2UgJiYgdGhpcy5fbW92ZSkgewogICAgICB0aGlzLnN1cmZhY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLl9tb3ZlKTsKICAgICAgdGhpcy5zdXJmYWNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIHRoaXMuX2xlYXZlKTsKICAgIH0KICB9OwoKICBVbml0LnByb3RvdHlwZS5pZGxlID0gZnVuY3Rpb24gKHQpIHsKICAgIGlmICh0aGlzLm0uaW4pIHJldHVybjsKICAgIHRoaXMubS50eCA9IHRoaXMudyAqICgwLjUgKyBNYXRoLmNvcyh0ICogMC4xOSkgKiAwLjI4KTsKICAgIHRoaXMubS50eSA9IHRoaXMuaCAqICgwLjUgKyBNYXRoLnNpbih0ICogMC4xMykgKiAwLjI0KTsKICB9OwoKICB2YXIgRCA9IHt9OwoKICBELnNwb3QgPSBmdW5jdGlvbiAodSwgdCkgewogICAgdmFyIGN0eCA9IHUuY3R4LCB3ID0gdS53LCBoID0gdS5oLCBQID0gdS5QOyB1LmlkbGUodCk7CiAgICBpZiAoIXUuZGF0YSkgewogICAgICB2YXIgY29scyA9IFtQLmFjY2VudCwgUC5zZWNvbmQsIFAudGhpcmQsIFAuYWNjZW50XTsKICAgICAgdS5kYXRhID0geyBibG9iczogW10gfTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICB1LmRhdGEuYmxvYnMucHVzaCh7CiAgICAgICAgICB4OiAwLjEyICsgKGkgKiAwLjE5KSAlIDAuOCwgeTogMC4yNSArICgoaSAqIDAuMzcpICUgMC41NSksCiAgICAgICAgICByOiAyMDAgKyBpICogNjIsIHA6IGkgKiAxLjcsIHNwOiAwLjA5ICsgaSAqIDAuMDIxLCBjb2w6IGNvbHNbaSAlIGNvbHMubGVuZ3RoXQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHUub2ZmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICB9CiAgICB2YXIgZHByID0gTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwgMik7CiAgICBpZiAodS5vZmYud2lkdGggIT09IHUuYy53aWR0aCkgeyB1Lm9mZi53aWR0aCA9IHUuYy53aWR0aDsgdS5vZmYuaGVpZ2h0ID0gdS5jLmhlaWdodDsgfQogICAgdmFyIG9jdHggPSB1Lm9mZi5nZXRDb250ZXh0KCcyZCcpOwogICAgb2N0eC5zZXRUcmFuc2Zvcm0oZHByLCAwLCAwLCBkcHIsIDAsIDApOwogICAgb2N0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7CiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpOwogICAgZm9yICh2YXIgayA9IDA7IGsgPCB1LmRhdGEuYmxvYnMubGVuZ3RoOyBrKyspIHsKICAgICAgdmFyIGIgPSB1LmRhdGEuYmxvYnNba107CiAgICAgIHZhciB4ID0gYi54ICogdyArIE1hdGguY29zKHQgKiBiLnNwICsgYi5wKSAqIHcgKiAwLjEwOwogICAgICB2YXIgeSA9IGIueSAqIGggKyBNYXRoLnNpbih0ICogYi5zcCAqIDEuNCArIGIucCkgKiBoICogMC4xNDsKICAgICAgdmFyIGcgPSBvY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHgsIHksIDAsIHgsIHksIGIucik7CiAgICAgIGcuYWRkQ29sb3JTdG9wKDAsIGNhKGIuY29sLCAwLjYyKSk7IGcuYWRkQ29sb3JTdG9wKDEsIGNhKGIuY29sLCAwKSk7CiAgICAgIG9jdHguZmlsbFN0eWxlID0gZzsgb2N0eC5maWxsUmVjdCgwLCAwLCB3LCBoKTsKICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMC4xNjsKICAgICAgY3R4LmZpbGxTdHlsZSA9IGc7IGN0eC5maWxsUmVjdCgwLCAwLCB3LCBoKTsKICAgIH0KICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICB2YXIgUiA9ICgzMDAgKyAxMTAgKiBQLmFtcCkgKiAodS5tLmluID8gMSA6IDAuNzIpOwogICAgb2N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24taW4nOwogICAgdmFyIG0gPSBvY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHUubS54LCB1Lm0ueSwgMCwgdS5tLngsIHUubS55LCBSKTsKICAgIG0uYWRkQ29sb3JTdG9wKDAsICdyZ2JhKDAsMCwwLDEpJyk7IG0uYWRkQ29sb3JTdG9wKDAuNSwgJ3JnYmEoMCwwLDAsLjYpJyk7IG0uYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJyk7CiAgICBvY3R4LmZpbGxTdHlsZSA9IG07IG9jdHguZmlsbFJlY3QoMCwgMCwgdywgaCk7CiAgICBvY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7CiAgICBjdHguZ2xvYmFsQWxwaGEgPSBNYXRoLm1pbigxLCAwLjg1ICogUC5hbXApOwogICAgY3R4LmRyYXdJbWFnZSh1Lm9mZiwgMCwgMCwgdywgaCk7CiAgICBjdHguZ2xvYmFsQWxwaGEgPSAxOwogIH07CgogIEQucGFydCA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIGlmICghdS5kYXRhKSB7CiAgICAgIHZhciBuID0gTWF0aC5yb3VuZChNYXRoLm1pbigxNTAsICh3ICogaCkgLyA3NjAwKSAqIFAuZGVucyk7CiAgICAgIHZhciBpbmsgPSBQLmluazsKICAgICAgdmFyIGNvbHMgPSBbY2EoUC5hY2NlbnQsIDAuODUpLCBjYShQLnNlY29uZCwgMC43KSwgJ3JnYmEoJyArIGlua1swXSArICcsJyArIGlua1sxXSArICcsJyArIGlua1syXSArICcsLjI4KSddOwogICAgICB1LmRhdGEgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgaHggPSBNYXRoLnJhbmRvbSgpICogdywgaHkgPSBNYXRoLnJhbmRvbSgpICogaDsKICAgICAgICB1LmRhdGEucHVzaCh7IGh4OiBoeCwgaHk6IGh5LCB4OiBoeCwgeTogaHksIHZ4OiAwLCB2eTogMCwgcjogMS4yICsgTWF0aC5yYW5kb20oKSAqIDIuOCwKICAgICAgICAgIGNvbDogY29sc1tpICUgMyA9PT0gMCA/IDAgOiAoaSAlIDUgPT09IDAgPyAxIDogMildLCBwaDogTWF0aC5yYW5kb20oKSAqIDYuMjgsIGRyOiAwLjMgKyBNYXRoLnJhbmRvbSgpICogMC41IH0pOwogICAgICB9CiAgICB9CiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpOwogICAgdmFyIFIgPSAxNTAgKiBQLmFtcCwgRiA9IDIuNiAqIFAuYW1wOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCB1LmRhdGEubGVuZ3RoOyBqKyspIHsKICAgICAgdmFyIHAgPSB1LmRhdGFbal07CiAgICAgIHZhciBwaHggPSBwLmh4ICsgTWF0aC5jb3ModCAqIDAuMjIgKyBwLnBoKSAqIDE0ICogcC5kcjsKICAgICAgdmFyIHBoeSA9IHAuaHkgKyBNYXRoLnNpbih0ICogMC4xOCArIHAucGgpICogMTIgKiBwLmRyOwogICAgICB2YXIgZHggPSBwLnggLSB1Lm0ueCwgZHkgPSBwLnkgLSB1Lm0ueSwgZCA9IE1hdGguaHlwb3QoZHgsIGR5KSB8fCAxOwogICAgICBpZiAoZCA8IFIpIHsgdmFyIGYgPSBNYXRoLnBvdygxIC0gZCAvIFIsIDIpICogRjsgcC52eCArPSAoZHggLyBkKSAqIGY7IHAudnkgKz0gKGR5IC8gZCkgKiBmOyB9CiAgICAgIHAudnggKz0gKHBoeCAtIHAueCkgKiAwLjAxMjsgcC52eSArPSAocGh5IC0gcC55KSAqIDAuMDEyOwogICAgICBwLnZ4ICo9IDAuOTA7IHAudnkgKj0gMC45MDsgcC54ICs9IHAudng7IHAueSArPSBwLnZ5OwogICAgICB2YXIgZ2xvdyA9IE1hdGgubWluKDEsIE1hdGguaHlwb3QocC52eCwgcC52eSkgKiAwLjUpOwogICAgICBjdHguYmVnaW5QYXRoKCk7IGN0eC5hcmMocC54LCBwLnksIHAuciArIGdsb3cgKiAxLjYsIDAsIDYuMjgzMik7CiAgICAgIGN0eC5maWxsU3R5bGUgPSBwLmNvbDsgY3R4LmZpbGwoKTsKICAgICAgaWYgKGdsb3cgPiAwLjE1KSB7CiAgICAgICAgdmFyIGcgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQocC54LCBwLnksIDAsIHAueCwgcC55LCAxNik7CiAgICAgICAgZy5hZGRDb2xvclN0b3AoMCwgY2EoUC5hY2NlbnQsIDAuMjIgKiBnbG93KSk7IGcuYWRkQ29sb3JTdG9wKDEsIGNhKFAuYWNjZW50LCAwKSk7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGc7IGN0eC5iZWdpblBhdGgoKTsgY3R4LmFyYyhwLngsIHAueSwgMTYsIDAsIDYuMjgzMik7IGN0eC5maWxsKCk7CiAgICAgIH0KICAgIH0KICB9OwoKICBELnJpcCA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIGlmICghdS5kYXRhKSB1LmRhdGEgPSB7IHJpbmdzOiBbXSwgbGFzdDogeyB4OiAtOTk5LCB5OiAtOTk5IH0sIG5leHQ6IDAgfTsKICAgIHZhciBTID0gdS5kYXRhOwogICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTsKICAgIHZhciBnMSA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudCh3ICogMC4yICsgTWF0aC5jb3ModCAqIDAuMTEpICogOTAsIGggKiAwLjE1LCAwLCB3ICogMC4yLCBoICogMC4xNSwgdyAqIDAuNik7CiAgICBnMS5hZGRDb2xvclN0b3AoMCwgY2EoUC5hY2NlbnQsIDAuMTYpKTsgZzEuYWRkQ29sb3JTdG9wKDEsIGNhKFAuYWNjZW50LCAwKSk7CiAgICBjdHguZmlsbFN0eWxlID0gZzE7IGN0eC5maWxsUmVjdCgwLCAwLCB3LCBoKTsKICAgIHZhciBnMiA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudCh3ICogMC44NSwgaCAqIDAuOCArIE1hdGguc2luKHQgKiAwLjE0KSAqIDcwLCAwLCB3ICogMC44NSwgaCAqIDAuOCwgdyAqIDAuNSk7CiAgICBnMi5hZGRDb2xvclN0b3AoMCwgY2EoUC5zZWNvbmQsIDAuMTQpKTsgZzIuYWRkQ29sb3JTdG9wKDEsIGNhKFAuc2Vjb25kLCAwKSk7CiAgICBjdHguZmlsbFN0eWxlID0gZzI7IGN0eC5maWxsUmVjdCgwLCAwLCB3LCBoKTsKICAgIGlmIChNYXRoLmh5cG90KHUubS54IC0gUy5sYXN0LngsIHUubS55IC0gUy5sYXN0LnkpID4gMjYgJiYgUy5yaW5ncy5sZW5ndGggPCA5MCkgewogICAgICBTLnJpbmdzLnB1c2goeyB4OiB1Lm0ueCwgeTogdS5tLnksIHI6IDAsIGE6IDEgfSk7CiAgICAgIFMubGFzdCA9IHsgeDogdS5tLngsIHk6IHUubS55IH07CiAgICB9CiAgICBpZiAodCA+IFMubmV4dCkgeyBTLm5leHQgPSB0ICsgMi40OyBTLnJpbmdzLnB1c2goeyB4OiBNYXRoLnJhbmRvbSgpICogdywgeTogTWF0aC5yYW5kb20oKSAqIGgsIHI6IDAsIGE6IDAuNiB9KTsgfQogICAgdmFyIHNwID0gMS43ICogUC5hbXA7CiAgICBmb3IgKHZhciBpID0gUy5yaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICB2YXIgciA9IFMucmluZ3NbaV07CiAgICAgIHIuciArPSBzcDsgci5hIC09IDAuMDA4NTsKICAgICAgaWYgKHIuYSA8PSAwKSB7IFMucmluZ3Muc3BsaWNlKGksIDEpOyBjb250aW51ZTsgfQogICAgICBjdHguYmVnaW5QYXRoKCk7IGN0eC5hcmMoci54LCByLnksIHIuciwgMCwgNi4yODMyKTsKICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY2EoUC5hY2NlbnQsIHIuYSAqIDAuNTUpOyBjdHgubGluZVdpZHRoID0gMS40OyBjdHguc3Ryb2tlKCk7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsgY3R4LmFyYyhyLngsIHIueSwgci5yICogMC42MiwgMCwgNi4yODMyKTsKICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY2EoUC5zZWNvbmQsIHIuYSAqIDAuMyk7IGN0eC5saW5lV2lkdGggPSAxOyBjdHguc3Ryb2tlKCk7CiAgICB9CiAgICB2YXIgaGcgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQodS5tLngsIHUubS55LCAwLCB1Lm0ueCwgdS5tLnksIDkwKTsKICAgIGhnLmFkZENvbG9yU3RvcCgwLCBjYShQLmFjY2VudCwgMC4yKSk7IGhnLmFkZENvbG9yU3RvcCgxLCBjYShQLmFjY2VudCwgMCkpOwogICAgY3R4LmZpbGxTdHlsZSA9IGhnOyBjdHguZmlsbFJlY3QodS5tLnggLSA5MCwgdS5tLnkgLSA5MCwgMTgwLCAxODApOwogIH07CgogIEQubGVucyA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIHZhciBTID0gTWF0aC5tYXgoMjIsIDM0IC8gTWF0aC5tYXgoMC42LCBQLmRlbnMpKTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7CiAgICB2YXIgUiA9IDIwMCAqIFAuYW1wLCBQVVNIID0gMzQgKiBQLmFtcDsKICAgIHZhciBjb2xzID0gTWF0aC5jZWlsKHcgLyBTKSwgcm93cyA9IE1hdGguY2VpbChoIC8gUyk7CiAgICB2YXIgYWMgPSBQLmFjY2VudCwgc2MgPSBQLnNlY29uZCwgbnQgPSBQLmluazsKICAgIGZvciAodmFyIGd5ID0gMDsgZ3kgPCByb3dzOyBneSsrKSB7CiAgICAgIGZvciAodmFyIGd4ID0gMDsgZ3ggPCBjb2xzOyBneCsrKSB7CiAgICAgICAgdmFyIHggPSBneCAqIFMgKyBTIC8gMiwgeSA9IGd5ICogUyArIFMgLyAyOwogICAgICAgIHkgKz0gTWF0aC5zaW4oeCAqIDAuMDEyICsgdCAqIDAuNTUpICogMy4yOwogICAgICAgIHggKz0gTWF0aC5jb3MoeSAqIDAuMDExICsgdCAqIDAuNCkgKiAyLjY7CiAgICAgICAgdmFyIGR4ID0geCAtIHUubS54LCBkeSA9IHkgLSB1Lm0ueSwgZCA9IE1hdGguaHlwb3QoZHgsIGR5KSB8fCAxOwogICAgICAgIHZhciBmID0gZCA8IFIgPyBNYXRoLnBvdygxIC0gZCAvIFIsIDEuNikgOiAwOwogICAgICAgIHggKz0gKGR4IC8gZCkgKiBmICogUFVTSDsgeSArPSAoZHkgLyBkKSAqIGYgKiBQVVNIOwogICAgICAgIGlmIChmID4gMC4wMikgewogICAgICAgICAgdmFyIGMgPSBmID4gMC41ID8gYWMgOiBzYzsKICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgnICsgY1swXSArICcsJyArIGNbMV0gKyAnLCcgKyBjWzJdICsgJywnICsgKDAuMjUgKyBmICogMC42KSArICcpJzsKICAgICAgICB9IGVsc2UgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBudFswXSArICcsJyArIG50WzFdICsgJywnICsgbnRbMl0gKyAnLC4zMCknOwogICAgICAgIGN0eC5iZWdpblBhdGgoKTsgY3R4LmFyYyh4LCB5LCAxLjQgKyBmICogMi42LCAwLCA2LjI4MzIpOyBjdHguZmlsbCgpOwogICAgICB9CiAgICB9CiAgICB2YXIgZyA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudCh1Lm0ueCwgdS5tLnksIDAsIHUubS54LCB1Lm0ueSwgUiAqIDAuOSk7CiAgICBnLmFkZENvbG9yU3RvcCgwLCBjYShQLmFjY2VudCwgMC4xNCkpOyBnLmFkZENvbG9yU3RvcCgwLjcsIGNhKFAuYWNjZW50LCAwLjAzKSk7IGcuYWRkQ29sb3JTdG9wKDEsIGNhKFAuYWNjZW50LCAwKSk7CiAgICBjdHguZmlsbFN0eWxlID0gZzsgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpOwogIH07CgogIEQuZmxvdyA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIHZhciBiID0gUC5iYXNlOwogICAgaWYgKCF1LmRhdGEpIHsKICAgICAgdmFyIG4gPSBNYXRoLnJvdW5kKDM0MCAqIFAuZGVucyk7CiAgICAgIHUuZGF0YSA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHUuZGF0YS5wdXNoKHsgeDogTWF0aC5yYW5kb20oKSAqIHcsIHk6IE1hdGgucmFuZG9tKCkgKiBoLCBsaWZlOiBNYXRoLnJhbmRvbSgpICogMjAwLCBtYXg6IDEyMCArIE1hdGgucmFuZG9tKCkgKiAxNjAgfSk7CiAgICAgIH0KICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2IoJyArIGJbMF0gKyAnLCcgKyBiWzFdICsgJywnICsgYlsyXSArICcpJzsgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpOwogICAgfQogICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBiWzBdICsgJywnICsgYlsxXSArICcsJyArIGJbMl0gKyAnLDAuMDU1KSc7IGN0eC5maWxsUmVjdCgwLCAwLCB3LCBoKTsKICAgIHZhciBSID0gMjEwICogUC5hbXAsIGFjID0gUC5hY2NlbnQsIHNjID0gUC5zZWNvbmQ7CiAgICBjdHgubGluZVdpZHRoID0gMTsKICAgIGZvciAodmFyIGogPSAwOyBqIDwgdS5kYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciBwID0gdS5kYXRhW2pdOwogICAgICB2YXIgYSA9IE1hdGguc2luKHAueCAqIDAuMDA0MiArIHQgKiAwLjE2KSAqIDIuMiArIE1hdGguY29zKHAueSAqIDAuMDA1MSAtIHQgKiAwLjExKSAqIDIuMjsKICAgICAgdmFyIGR4ID0gcC54IC0gdS5tLngsIGR5ID0gcC55IC0gdS5tLnksIGQgPSBNYXRoLmh5cG90KGR4LCBkeSkgfHwgMTsKICAgICAgdmFyIGJvb3N0ID0gMDsKICAgICAgaWYgKGQgPCBSKSB7IGJvb3N0ID0gTWF0aC5wb3coMSAtIGQgLyBSLCAxLjUpOyBhICs9IE1hdGguYXRhbjIoZHksIGR4KSAqIGJvb3N0ICogMS45ICsgYm9vc3QgKiAxLjQ7IH0KICAgICAgdmFyIHNwID0gMS4xICsgYm9vc3QgKiAyLjY7CiAgICAgIHZhciBueCA9IHAueCArIE1hdGguY29zKGEpICogc3AsIG55ID0gcC55ICsgTWF0aC5zaW4oYSkgKiBzcDsKICAgICAgdmFyIGMgPSBib29zdCA+IDAuMTIgPyBhYyA6IHNjOwogICAgICBjdHguc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgY1swXSArICcsJyArIGNbMV0gKyAnLCcgKyBjWzJdICsgJywnICsgKDAuMTYgKyBib29zdCAqIDAuNikgKyAnKSc7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsgY3R4Lm1vdmVUbyhwLngsIHAueSk7IGN0eC5saW5lVG8obngsIG55KTsgY3R4LnN0cm9rZSgpOwogICAgICBwLnggPSBueDsgcC55ID0gbnk7IHAubGlmZSsrOwogICAgICBpZiAocC5saWZlID4gcC5tYXggfHwgcC54IDwgLTIwIHx8IHAueCA+IHcgKyAyMCB8fCBwLnkgPCAtMjAgfHwgcC55ID4gaCArIDIwKSB7CiAgICAgICAgcC54ID0gTWF0aC5yYW5kb20oKSAqIHc7IHAueSA9IE1hdGgucmFuZG9tKCkgKiBoOyBwLmxpZmUgPSAwOwogICAgICB9CiAgICB9CiAgfTsKCiAgRC5tZXNoID0gZnVuY3Rpb24gKHUsIHQpIHsKICAgIHZhciBjdHggPSB1LmN0eCwgdyA9IHUudywgaCA9IHUuaCwgUCA9IHUuUDsgdS5pZGxlKHQpOwogICAgaWYgKCF1LmRhdGEpIHsKICAgICAgdS5vZmYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICAgICAgdS5kYXRhID0geyBibG9iczogWwogICAgICAgIHsgaHg6IDAuMjIsIGh5OiAwLjI4LCByOiAwLjYyLCBjb2w6IFAuYWNjZW50LCBzcDogMC4xMywgcGg6IDAuNCB9LAogICAgICAgIHsgaHg6IDAuNzgsIGh5OiAwLjIyLCByOiAwLjU1LCBjb2w6IFAuc2Vjb25kLCBzcDogMC4xMCwgcGg6IDIuMSB9LAogICAgICAgIHsgaHg6IDAuNjgsIGh5OiAwLjc4LCByOiAwLjcwLCBjb2w6IFAudGhpcmQsIHNwOiAwLjA4LCBwaDogMy42IH0sCiAgICAgICAgeyBoeDogMC4zMCwgaHk6IDAuODAsIHI6IDAuNTAsIGNvbDogUC5hY2NlbnQsIHNwOiAwLjE1LCBwaDogNS4wIH0KICAgICAgXSB9OwogICAgfQogICAgdmFyIHN3ID0gOTAsIHNoID0gTWF0aC5tYXgoMjQsIE1hdGgucm91bmQoOTAgKiBoIC8gdykpOwogICAgaWYgKHUub2ZmLndpZHRoICE9PSBzdykgeyB1Lm9mZi53aWR0aCA9IHN3OyB1Lm9mZi5oZWlnaHQgPSBzaDsgfQogICAgdmFyIG8gPSB1Lm9mZi5nZXRDb250ZXh0KCcyZCcpOwogICAgby5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CiAgICBvLmZpbGxTdHlsZSA9IGNzKFAuYmFzZSk7IG8uZmlsbFJlY3QoMCwgMCwgc3csIHNoKTsKICAgIHZhciBtbnggPSB1Lm0ueCAvIHcgLSAwLjUsIG1ueSA9IHUubS55IC8gaCAtIDAuNTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdS5kYXRhLmJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBiID0gdS5kYXRhLmJsb2JzW2ldOwogICAgICB2YXIgeCA9IChiLmh4ICsgTWF0aC5jb3ModCAqIGIuc3AgKyBiLnBoKSAqIDAuMDkgKyBtbnggKiAwLjIyICogUC5hbXApICogc3c7CiAgICAgIHZhciB5ID0gKGIuaHkgKyBNYXRoLnNpbih0ICogYi5zcCAqIDEuMyArIGIucGgpICogMC4wOCArIG1ueSAqIDAuMjIgKiBQLmFtcCkgKiBzaDsKICAgICAgdmFyIGcgPSBvLmNyZWF0ZVJhZGlhbEdyYWRpZW50KHgsIHksIDAsIHgsIHksIGIuciAqIHN3ICogMC43KTsKICAgICAgZy5hZGRDb2xvclN0b3AoMCwgY2EoYi5jb2wsIDAuOTUpKTsgZy5hZGRDb2xvclN0b3AoMSwgY2EoYi5jb2wsIDApKTsKICAgICAgby5maWxsU3R5bGUgPSBnOyBvLmZpbGxSZWN0KDAsIDAsIHN3LCBzaCk7CiAgICB9CiAgICB2YXIgY2cgPSBvLmNyZWF0ZVJhZGlhbEdyYWRpZW50KHUubS54IC8gdyAqIHN3LCB1Lm0ueSAvIGggKiBzaCwgMCwgdS5tLnggLyB3ICogc3csIHUubS55IC8gaCAqIHNoLCBzdyAqIDAuMzApOwogICAgY2cuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKDI1NSwyNTUsMjU1LC44NSknKTsgY2cuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDI1NSwyNTUsMjU1LDApJyk7CiAgICBvLmZpbGxTdHlsZSA9IGNnOyBvLmZpbGxSZWN0KDAsIDAsIHN3LCBzaCk7CiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpOwogICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7IGN0eC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAnaGlnaCc7CiAgICBjdHguZHJhd0ltYWdlKHUub2ZmLCAwLCAwLCB3LCBoKTsKICAgIGN0eC5maWxsU3R5bGUgPSBjdHguY3JlYXRlUGF0dGVybihncmFpbigpLCAncmVwZWF0Jyk7CiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdywgaCk7CiAgfTsKCiAgRC5nb28gPSBmdW5jdGlvbiAodSwgdCkgewogICAgdmFyIGN0eCA9IHUuY3R4LCB3ID0gdS53LCBoID0gdS5oLCBQID0gdS5QOyB1LmlkbGUodCk7CiAgICBpZiAoIXUuZGF0YSkgewogICAgICB1Lm9mZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgICB2YXIgY2hhaW4gPSBbXSwgYW1iID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSBjaGFpbi5wdXNoKHsgeDogdyAvIDIsIHk6IGggLyAyIH0pOwogICAgICB2YXIgSFggPSBbMC4wOSwgMC4yNywgMC41LCAwLjc0LCAwLjkzXSwgSFkgPSBbMC4yLCAwLjg2LCAwLjEzLCAwLjg4LCAwLjI4XTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA1OyBqKyspIGFtYi5wdXNoKHsgaHg6IEhYW2pdLCBoeTogSFlbal0sIHI6IDAuMDc1ICsgKGogJSAzKSAqIDAuMDIsIHBoOiBqICogMS45LCBzcDogMC4xNiArIGogKiAwLjAzIH0pOwogICAgICB1LmRhdGEgPSB7IGNoYWluOiBjaGFpbiwgYW1iOiBhbWIgfTsKICAgIH0KICAgIHZhciBzYyA9IDAuMjQsIHN3ID0gTWF0aC5tYXgoOCwgTWF0aC5yb3VuZCh3ICogc2MpKSwgc2ggPSBNYXRoLm1heCg4LCBNYXRoLnJvdW5kKGggKiBzYykpOwogICAgaWYgKHUub2ZmLndpZHRoICE9PSBzdykgeyB1Lm9mZi53aWR0aCA9IHN3OyB1Lm9mZi5oZWlnaHQgPSBzaDsgfQogICAgdmFyIG9jdHggPSB1Lm9mZi5nZXRDb250ZXh0KCcyZCcpOwogICAgdmFyIGltZyA9IG9jdHguY3JlYXRlSW1hZ2VEYXRhKHN3LCBzaCk7CiAgICB2YXIgYmFsbHMgPSBbXSwgY2ggPSB1LmRhdGEuY2hhaW47CiAgICBjaFswXS54ICs9ICh1Lm0ueCAtIGNoWzBdLngpICogMC4xNjsgY2hbMF0ueSArPSAodS5tLnkgLSBjaFswXS55KSAqIDAuMTY7CiAgICBmb3IgKHZhciBrID0gMTsgayA8IGNoLmxlbmd0aDsgaysrKSB7CiAgICAgIGNoW2tdLnggKz0gKGNoW2sgLSAxXS54IC0gY2hba10ueCkgKiAwLjIyOyBjaFtrXS55ICs9IChjaFtrIC0gMV0ueSAtIGNoW2tdLnkpICogMC4yMjsKICAgIH0KICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY2gubGVuZ3RoOyBxKyspIGJhbGxzLnB1c2goeyB4OiBjaFtxXS54ICogc2MsIHk6IGNoW3FdLnkgKiBzYywgcjogKDQ0IC0gcSAqIDUuNSkgKiBzYyAqIFAuYW1wIH0pOwogICAgZm9yICh2YXIgYTIgPSAwOyBhMiA8IHUuZGF0YS5hbWIubGVuZ3RoOyBhMisrKSB7CiAgICAgIHZhciBiMiA9IHUuZGF0YS5hbWJbYTJdOwogICAgICBiYWxscy5wdXNoKHsgeDogKGIyLmh4ICsgTWF0aC5jb3ModCAqIGIyLnNwICsgYjIucGgpICogMC4wNSkgKiBzdywKICAgICAgICAgICAgICAgICAgIHk6IChiMi5oeSArIE1hdGguc2luKHQgKiBiMi5zcCAqIDEuNCArIGIyLnBoKSAqIDAuMDcpICogc2gsIHI6IGIyLnIgKiBzdyAqIDAuOSB9KTsKICAgIH0KICAgIHZhciBhYyA9IFAuYWNjZW50LCBzMiA9IFAuc2Vjb25kOwogICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaDsgeSsrKSB7CiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgc3c7IHgrKykgewogICAgICAgIHZhciBmID0gMDsKICAgICAgICBmb3IgKHZhciBiaSA9IDA7IGJpIDwgYmFsbHMubGVuZ3RoOyBiaSsrKSB7CiAgICAgICAgICB2YXIgYmIgPSBiYWxsc1tiaV0sIGRkeCA9IHggLSBiYi54LCBkZHkgPSB5IC0gYmIueTsKICAgICAgICAgIGYgKz0gKGJiLnIgKiBiYi5yKSAvIChkZHggKiBkZHggKyBkZHkgKiBkZHkgKyAxKTsKICAgICAgICB9CiAgICAgICAgdmFyIGlkeCA9ICh5ICogc3cgKyB4KSAqIDQ7CiAgICAgICAgdmFyIGFsID0gZiA8IDAuODUgPyAwIDogTWF0aC5taW4oMSwgKGYgLSAwLjg1KSAqIDIuNCk7CiAgICAgICAgaWYgKGFsID4gMCkgewogICAgICAgICAgdmFyIGtrID0gTWF0aC5tYXgoMCwgMSAtIChmIC0gMC44NSkgLyAxLjQpOwogICAgICAgICAgaW1nLmRhdGFbaWR4XSA9IGFjWzBdICsgKHMyWzBdIC0gYWNbMF0pICoga2s7CiAgICAgICAgICBpbWcuZGF0YVtpZHggKyAxXSA9IGFjWzFdICsgKHMyWzFdIC0gYWNbMV0pICoga2s7CiAgICAgICAgICBpbWcuZGF0YVtpZHggKyAyXSA9IGFjWzJdICsgKHMyWzJdIC0gYWNbMl0pICoga2s7CiAgICAgICAgICBpbWcuZGF0YVtpZHggKyAzXSA9IGFsICogMTA1OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgb2N0eC5wdXRJbWFnZURhdGEoaW1nLCAwLCAwKTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7CiAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTsgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICdoaWdoJzsKICAgIGN0eC5kcmF3SW1hZ2UodS5vZmYsIDAsIDAsIHcsIGgpOwogIH07CgogIEQuY2F1ID0gZnVuY3Rpb24gKHUsIHQpIHsKICAgIHZhciBjdHggPSB1LmN0eCwgdyA9IHUudywgaCA9IHUuaCwgUCA9IHUuUDsgdS5pZGxlKHQpOwogICAgaWYgKCF1LmRhdGEpIHsgdS5vZmYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgdS5kYXRhID0gMTsgfQogICAgdmFyIHNjID0gMC4yLCBzdyA9IE1hdGgubWF4KDgsIE1hdGgucm91bmQodyAqIHNjKSksIHNoID0gTWF0aC5tYXgoOCwgTWF0aC5yb3VuZChoICogc2MpKTsKICAgIGlmICh1Lm9mZi53aWR0aCAhPT0gc3cpIHsgdS5vZmYud2lkdGggPSBzdzsgdS5vZmYuaGVpZ2h0ID0gc2g7IH0KICAgIHZhciBvY3R4ID0gdS5vZmYuZ2V0Q29udGV4dCgnMmQnKTsKICAgIHZhciBpbWcgPSBvY3R4LmNyZWF0ZUltYWdlRGF0YShzdywgc2gpOwogICAgdmFyIGFjID0gUC5hY2NlbnQsIHMyID0gUC5zZWNvbmQ7CiAgICB2YXIgbXggPSB1Lm0ueCAqIHNjLCBteSA9IHUubS55ICogc2MsIFJSID0gNjIgKiBQLmFtcDsKICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc2g7IHkrKykgewogICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHN3OyB4KyspIHsKICAgICAgICB2YXIgZHggPSB4IC0gbXgsIGR5ID0geSAtIG15OwogICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKICAgICAgICB2YXIgbmVhciA9IE1hdGgubWF4KDAsIDEgLSBkIC8gUlIpOwogICAgICAgIHZhciB2ID0gTWF0aC5zaW4oeCAqIDAuMTkgKyB0ICogMC45KQogICAgICAgICAgICAgICsgTWF0aC5zaW4oeSAqIDAuMjMgLSB0ICogMC43KQogICAgICAgICAgICAgICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMTUgKyB0ICogMC41KQogICAgICAgICAgICAgICsgTWF0aC5zaW4oZCAqIDAuMzAgLSB0ICogMi4yKSAqICgwLjcgKyBuZWFyICogMi4yKTsKICAgICAgICB2YXIgYyA9IE1hdGguc2luKHYgKiAxLjE1KTsKICAgICAgICBjID0gYyA+IDAgPyBNYXRoLnBvdyhjLCA3KSA6IDA7CiAgICAgICAgdmFyIGFsID0gTWF0aC5taW4oMSwgYyAqICgwLjUgKyBuZWFyICogMS41KSk7CiAgICAgICAgdmFyIGkyID0gKHkgKiBzdyArIHgpICogNDsKICAgICAgICB2YXIga2sgPSBNYXRoLm1pbigxLCBuZWFyICogMS40KTsKICAgICAgICBpbWcuZGF0YVtpMl0gPSBzMlswXSArIChhY1swXSAtIHMyWzBdKSAqIGtrOwogICAgICAgIGltZy5kYXRhW2kyICsgMV0gPSBzMlsxXSArIChhY1sxXSAtIHMyWzFdKSAqIGtrOwogICAgICAgIGltZy5kYXRhW2kyICsgMl0gPSBzMlsyXSArIChhY1syXSAtIHMyWzJdKSAqIGtrOwogICAgICAgIGltZy5kYXRhW2kyICsgM10gPSBhbCAqIDE5MDsKICAgICAgfQogICAgfQogICAgb2N0eC5wdXRJbWFnZURhdGEoaW1nLCAwLCAwKTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7CiAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTsgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICdoaWdoJzsKICAgIGN0eC5kcmF3SW1hZ2UodS5vZmYsIDAsIDAsIHcsIGgpOwogIH07CgogIEQudGV4dCA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIGlmICghdS5kYXRhKSB7CiAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgIHMud2lkdGggPSBNYXRoLm1heCgyLCBNYXRoLnJvdW5kKHcpKTsgcy5oZWlnaHQgPSBNYXRoLm1heCgyLCBNYXRoLnJvdW5kKGgpKTsKICAgICAgdmFyIHN4ID0gcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICB2YXIgZnMgPSBNYXRoLm1pbih3ICogMC4yNCwgaCAqIDAuNTIpOwogICAgICBzeC5maWxsU3R5bGUgPSAnIzAwMCc7CiAgICAgIHN4LmZvbnQgPSAnNzAwICcgKyBmcyArICdweCBNYW5yb3BlLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgc3gudGV4dEFsaWduID0gJ2NlbnRlcic7IHN4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnOwogICAgICBzeC5maWxsVGV4dChQLnRleHQsIHcgLyAyLCBoICogMC41KTsKICAgICAgdmFyIGRkID0gc3guZ2V0SW1hZ2VEYXRhKDAsIDAsIHMud2lkdGgsIHMuaGVpZ2h0KS5kYXRhOwogICAgICB2YXIgc3RlcCA9IDYsIHB0cyA9IFtdOwogICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHMuaGVpZ2h0OyB5ICs9IHN0ZXApIHsKICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHMud2lkdGg7IHggKz0gc3RlcCkgewogICAgICAgICAgaWYgKGRkWyh5ICogcy53aWR0aCArIHgpICogNCArIDNdID4gMTI4KSBwdHMucHVzaCh7IHR4OiB4LCB0eTogeSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFwdHMubGVuZ3RoKSByZXR1cm47CiAgICAgIHUuZGF0YSA9IHB0cy5tYXAoZnVuY3Rpb24gKHApIHsKICAgICAgICByZXR1cm4geyB0eDogcC50eCwgdHk6IHAudHksIHg6IHcgLyAyICsgKE1hdGgucmFuZG9tKCkgLSAwLjUpICogdywgeTogaCAvIDIgKyAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiBoLAogICAgICAgICAgdng6IDAsIHZ5OiAwLCByOiAxLjEgKyBNYXRoLnJhbmRvbSgpICogMS41LCBwaDogTWF0aC5yYW5kb20oKSAqIDYuMjggfTsKICAgICAgfSk7CiAgICB9CiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpOwogICAgdmFyIFIgPSAxMzAgKiBQLmFtcCwgYWMgPSBQLmFjY2VudCwgczIgPSBQLnNlY29uZCwgaW5rID0gUC5pbms7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHUuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgcCA9IHUuZGF0YVtpXTsKICAgICAgdmFyIGR4ID0gcC54IC0gdS5tLngsIGR5ID0gcC55IC0gdS5tLnksIGQgPSBNYXRoLmh5cG90KGR4LCBkeSkgfHwgMTsKICAgICAgaWYgKGQgPCBSKSB7IHZhciBmID0gTWF0aC5wb3coMSAtIGQgLyBSLCAyKSAqIDUuNSAqIFAuYW1wOyBwLnZ4ICs9IChkeCAvIGQpICogZjsgcC52eSArPSAoZHkgLyBkKSAqIGY7IH0KICAgICAgcC52eCArPSAocC50eCArIE1hdGguY29zKHQgKiAwLjkgKyBwLnBoKSAqIDEuNiAtIHAueCkgKiAwLjAzNTsKICAgICAgcC52eSArPSAocC50eSArIE1hdGguc2luKHQgKiAwLjkgKyBwLnBoKSAqIDEuNiAtIHAueSkgKiAwLjAzNTsKICAgICAgcC52eCAqPSAwLjg2OyBwLnZ5ICo9IDAuODY7IHAueCArPSBwLnZ4OyBwLnkgKz0gcC52eTsKICAgICAgdmFyIHNwID0gTWF0aC5taW4oMSwgTWF0aC5oeXBvdChwLnZ4LCBwLnZ5KSAqIDAuMTYpOwogICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoJyArIE1hdGgucm91bmQoaW5rWzBdICsgKGFjWzBdIC0gaW5rWzBdKSAqIHNwKSArICcsJyArCiAgICAgICAgTWF0aC5yb3VuZChpbmtbMV0gKyAoYWNbMV0gLSBpbmtbMV0pICogc3ApICsgJywnICsKICAgICAgICBNYXRoLnJvdW5kKGlua1syXSArIChhY1syXSAtIGlua1syXSkgKiBzcCkgKyAnLCcgKyAoMC40MiArIHNwICogMC41KSArICcpJzsKICAgICAgY3R4LmJlZ2luUGF0aCgpOyBjdHguYXJjKHAueCwgcC55LCBwLnIgKyBzcCAqIDEuNCwgMCwgNi4yODMyKTsgY3R4LmZpbGwoKTsKICAgIH0KICAgIHZhciBnID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHUubS54LCB1Lm0ueSwgMCwgdS5tLngsIHUubS55LCBSKTsKICAgIGcuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKCcgKyBzMlswXSArICcsJyArIHMyWzFdICsgJywnICsgczJbMl0gKyAnLC4xMCknKTsKICAgIGcuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKCcgKyBzMlswXSArICcsJyArIHMyWzFdICsgJywnICsgczJbMl0gKyAnLDApJyk7CiAgICBjdHguZmlsbFN0eWxlID0gZzsgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpOwogIH07CgogIEQudGVyciA9IGZ1bmN0aW9uICh1LCB0KSB7CiAgICB2YXIgY3R4ID0gdS5jdHgsIHcgPSB1LncsIGggPSB1LmgsIFAgPSB1LlA7IHUuaWRsZSh0KTsKICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7CiAgICB2YXIgcm93cyA9IDQ2LCBjb2xzID0gNzAsIGhvcml6b24gPSBoICogMC4zNjsKICAgIHZhciBjYW14ID0gKHUubS54IC8gdyAtIDAuNSkgKiAwLjUgKiBQLmFtcDsKICAgIHZhciBSID0gMjEwICogUC5hbXA7CiAgICB2YXIgYWMgPSBQLmFjY2VudCwgaW5rID0gUC5pbmssIGJzID0gUC5iYXNlOwogICAgZm9yICh2YXIgciA9IDE7IHIgPD0gcm93czsgcisrKSB7CiAgICAgIHZhciB6dCA9IHIgLyByb3dzOwogICAgICB2YXIgcHkgPSBob3Jpem9uICsgKGggKiAwLjY2KSAqIE1hdGgucG93KHp0LCAyLjMpOwogICAgICB2YXIgc3ByZWFkID0gdyAqIDAuMTAgKyB3ICogMi4xICogTWF0aC5wb3coenQsIDIuMCk7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgdmFyIHBlYWsgPSAwOwogICAgICBmb3IgKHZhciBjID0gMDsgYyA8PSBjb2xzOyBjKyspIHsKICAgICAgICB2YXIgdW4gPSBjIC8gY29scyAtIDAuNTsKICAgICAgICB2YXIgeCA9IHcgLyAyICsgdW4gKiBzcHJlYWQgLSBjYW14ICogc3ByZWFkICogMC4zMjsKICAgICAgICB2YXIgaGcgPSAoTWF0aC5zaW4odW4gKiA4ICsgdCAqIDAuNSkgKiBNYXRoLmNvcyhyICogMC4yNiAtIHQgKiAwLjQyKQogICAgICAgICAgICAgICAgKyBNYXRoLnNpbih1biAqIDMuMSAtIHQgKiAwLjMxKSAqIDAuNikgKiAoMTAgKyA0NiAqIE1hdGgucG93KHp0LCAyKSk7CiAgICAgICAgdmFyIGR4ID0geCAtIHUubS54LCBkeSA9IHB5IC0gdS5tLnksIGQgPSBNYXRoLmh5cG90KGR4LCBkeSk7CiAgICAgICAgaWYgKGQgPCBSKSB7IHZhciBmID0gTWF0aC5wb3coMSAtIGQgLyBSLCAyKTsgaGcgLT0gZiAqIDEwMCAqIFAuYW1wOyBwZWFrID0gTWF0aC5tYXgocGVhaywgZik7IH0KICAgICAgICB2YXIgeXkgPSBweSArIGhnOwogICAgICAgIGlmIChjID09PSAwKSBjdHgubW92ZVRvKHgsIHl5KTsgZWxzZSBjdHgubGluZVRvKHgsIHl5KTsKICAgICAgfQogICAgICB2YXIgYmFzZSA9IDAuMDUgKyB6dCAqIDAuMzU7CiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHBlYWsgPiAwLjA0CiAgICAgICAgPyAncmdiYSgnICsgYWNbMF0gKyAnLCcgKyBhY1sxXSArICcsJyArIGFjWzJdICsgJywnICsgTWF0aC5taW4oMC44LCBiYXNlICsgcGVhayAqIDAuNykgKyAnKScKICAgICAgICA6ICdyZ2JhKCcgKyBpbmtbMF0gKyAnLCcgKyBpbmtbMV0gKyAnLCcgKyBpbmtbMl0gKyAnLCcgKyBiYXNlICsgJyknOwogICAgICBjdHgubGluZVdpZHRoID0gMC42ICsgenQgKiAxLjE7CiAgICAgIGN0eC5zdHJva2UoKTsKICAgIH0KICAgIHZhciBnID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIGhvcml6b24gLSA2MCwgMCwgaG9yaXpvbiArIDkwKTsKICAgIGcuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKCcgKyBic1swXSArICcsJyArIGJzWzFdICsgJywnICsgYnNbMl0gKyAnLDEpJyk7CiAgICBnLmFkZENvbG9yU3RvcCgxLCAncmdiYSgnICsgYnNbMF0gKyAnLCcgKyBic1sxXSArICcsJyArIGJzWzJdICsgJywwKScpOwogICAgY3R4LmZpbGxTdHlsZSA9IGc7IGN0eC5maWxsUmVjdCgwLCAwLCB3LCBob3Jpem9uICsgOTApOwogIH07CgogIHZhciB1bml0cyA9IFtdLCByYWYgPSBudWxsLCB0MCA9IG51bGw7CiAgdmFyIHJlZHVjZSA9IHdpbmRvdy5tYXRjaE1lZGlhICYmIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CgogIGZ1bmN0aW9uIHRpY2sobm93KSB7CiAgICBpZiAodDAgPT09IG51bGwpIHQwID0gbm93OwogICAgdmFyIHQgPSAobm93IC0gdDApIC8gMTAwMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHUgPSB1bml0c1tpXTsKICAgICAgaWYgKCF1LnZpcyB8fCAhdS53KSBjb250aW51ZTsKICAgICAgdS5tLnggKz0gKHUubS50eCAtIHUubS54KSAqIDAuMTI7CiAgICAgIHUubS55ICs9ICh1Lm0udHkgLSB1Lm0ueSkgKiAwLjEyOwogICAgICB2YXIgZm4gPSBEW3Uua2luZF07IGlmIChmbikgZm4odSwgdCk7CiAgICB9CiAgICByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CiAgfQoKICBmdW5jdGlvbiBtb3VudChob3N0KSB7CiAgICBpZiAoaG9zdC5fX2V6bVVuaXQpIHJldHVybjsKICAgIHZhciB1ID0gbmV3IFVuaXQoaG9zdCk7CiAgICBob3N0Ll9fZXptVW5pdCA9IHU7CiAgICB1bml0cy5wdXNoKHUpOwogICAgaWYgKHJlZHVjZSkgewogICAgICAvLyBIb25vdXIgdGhlIHVzZXIncyBtb3Rpb24gcHJlZmVyZW5jZTogcGFpbnQgYSBzaW5nbGUgc3RhdGljIGZyYW1lLCBuZXZlciBhbmltYXRlLgogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgeyB1LmZpdCgpOyB2YXIgZm4gPSBEW3Uua2luZF07IGlmIChmbikgZm4odSwgMCk7IH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2Nhbihyb290KSB7CiAgICB2YXIgbGlzdCA9IChyb290IHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1lem0tYW1iaWVudF0nKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgbW91bnQobGlzdFtpXSk7CiAgICBpZiAoIXJlZHVjZSAmJiB1bml0cy5sZW5ndGggJiYgcmFmID09PSBudWxsKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CiAgfQoKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkgeyBzY2FuKCk7IH0pOwogIGVsc2Ugc2NhbigpOwoKICB3aW5kb3cuZXptQW1iaWVudCA9IHsKICAgIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHsgc2NhbigpOyB9LAogICAgcmVsb2FkOiBmdW5jdGlvbiAoaG9zdCkgewogICAgICB2YXIgdSA9IGhvc3QgJiYgaG9zdC5fX2V6bVVuaXQ7CiAgICAgIGlmICghdSkgcmV0dXJuOwogICAgICB1LlAgPSByZWFkQ2ZnKGhvc3QpOyB1LmtpbmQgPSB1LlAua2luZDsgdS5kYXRhID0gbnVsbDsgdS5maXQoKTsKICAgIH0KICB9Owp9KSgpOwo=","id":"ibtzejx"},"tag":"div","attributes":{"data-ezm-ambient":"{props.variant}","data-accent":"{props.primaryColor}","data-secondary":"{props.secondaryColor}","data-tertiary":"{props.tertiaryColor}","data-base":"{props.baseColor}","data-ink":"{props.inkColor}","data-intensity":"{props.intensity}","data-density":"{props.density}","data-text":"{props.text}","data-interactive":"{props.interactive}","aria-hidden":"true","style":"opacity:{props.opacity}"},"styles":["28p1bej"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Canvas"},"tag":"canvas","attributes":{},"styles":["1x0wgt6"]},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]}],"properties":[{"name":"Variant","key":"variant","type":{"primitive":"string","specialized":"select"},"default":"mesh","selectOptionsString":"Spotlight : spotlight\nDrift : drift\nRipple : ripple\nLens : lens\nFlow field : flow\nMesh gradient : mesh\nMetaball : metaball\nCaustics : caustics\nParticle text : particle-text\nTerrain : terrain"},{"name":"Primary colour — hex or var(--token)","key":"primaryColor","type":{"primitive":"string"},"default":"var(--primary)"},{"name":"Secondary colour — hex or var(--token)","key":"secondaryColor","type":{"primitive":"string"},"default":"var(--secondary)"},{"name":"Condition Tertiary colour","key":"gyludyo","keyTouched":true,"type":{"primitive":"string","specialized":"condition"},"properties":[{"name":"Tertiary colour — spotlight + mesh only","key":"tertiaryColor","type":{"primitive":"string"},"default":"var(--tertiary)"}],"default":"props.variant === \"spotlight\" || props.variant === \"mesh\""},{"name":"Condition Base colour","key":"conditionTertiaryColourCopy","keyTouched":true,"type":{"primitive":"string","specialized":"condition"},"properties":[{"name":"Base colour — must match section bg (flow, mesh, terrain)","key":"baseColourMustMatchSectionBgFlowMeshTerrain","type":{"primitive":"string"},"default":"var(--base)"}],"default":"props.variant === \"flow\" || props.variant === \"mesh\" || props.variant === \"terrain\""},{"name":"Ink colour — neutral dots and lines","key":"inkColor","type":{"primitive":"string"},"default":"var(--neutral)"},{"name":"Intensity","key":"intensity","type":{"primitive":"string","specialized":"select"},"default":"1","selectOptionsString":"0.4 — subtle : 0.4\n0.6 : 0.6\n0.8 : 0.8\n1.0 — default : 1\n1.2 : 1.2\n1.4 : 1.4\n1.6 : 1.6\n1.8 — strong : 1.8"},{"name":"Density — drift, lens, flow only","key":"density","type":{"primitive":"string","specialized":"select"},"default":"1","selectOptionsString":"0.5 — sparse : 0.5\n0.7 : 0.7\n0.9 : 0.9\n1.0 — default : 1\n1.2 : 1.2\n1.4 : 1.4\n1.6 : 1.6\n1.8 — dense : 1.8"},{"name":"Opacity","key":"opacity","type":{"primitive":"string","specialized":"select"},"default":"1","selectOptionsString":"25% : 0.25\n40% : 0.4\n55% : 0.55\n70% : 0.7\n85% : 0.85\n100% : 1"},{"name":"Condition Particle text","key":"u291q1l","keyTouched":true,"type":{"primitive":"string","specialized":"condition"},"properties":[{"name":"Particle text — ONLY used by the “Particle text” variant","key":"text","type":{"primitive":"string"},"default":"hello"}],"default":"props.variant === \"particle-text\""},{"name":"Follow cursor","key":"interactive","type":{"primitive":"boolean"},"default":true}],"description":"Animated canvas background for a Section. Ten cursor-reactive variants. Colours accept a hex (#fa4100), any CSS colour, or an ACSS token such as var(--primary) — tokens are resolved to RGB at runtime. Renders behind content and is pointer-transparent."}},"version":2.1} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment