{"data":"77u/PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+V2hhdHNBcHAgLSBNZXNxdWl0YSBMb3RvPC90aXRsZT4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDQwMDs1MDA7NjAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgogIDpyb290IHsKICAgIC0td2EtZ3JlZW4tZGFyazogIzA3NWU1NDsKICAgIC0td2EtZ3JlZW46ICMxMjhjN2U7CiAgICAtLXdhLWdyZWVuLWxpZ2h0OiAjMjVkMzY2OwogICAgLS13YS1ncmVlbi1oZWFkZXI6ICMwNzVlNTQ7CiAgICAtLXdhLWJnOiAjZTVkZGQ1OwogICAgLS13YS1iZy1wYXR0ZXJuOiAjZDlkMmM1OwogICAgLS13YS1pbnB1dC1iZzogI2ZmZmZmZjsKICAgIC0td2EtYnViYmxlLW91dDogI2RjZjhjNjsKICAgIC0td2EtYnViYmxlLWluOiAjZmZmZmZmOwogICAgLS13YS10ZXh0OiAjMzAzMDMwOwogICAgLS13YS10ZXh0LWxpZ2h0OiAjNjY3NzgxOwogICAgLS13YS10aW1lOiAjNjY3NzgxOwogICAgLS13YS1lbmNyeXB0LWJnOiAjZmRmNGM1OwogICAgLS13YS1lbmNyeXB0LXRleHQ6ICM1NDY1NmY7CiAgICAtLXdhLWhlYWRlci1pY29uOiAjYTBiNGJjOwogICAgLS13YS1taWMtYmc6ICMwMGE4ODQ7CiAgICAtLXdhLWJsdWUtdGljazogIzUzYmRlYjsKICB9CgogICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KCiAgYm9keSB7DQogICAgZm9udC1mYW1pbHk6ICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsNCiAgICBiYWNrZ3JvdW5kOiAjMGEwYTBhOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBoZWlnaHQ6IDEwMHZoOw0KICAgIGhlaWdodDogMTAwZHZoOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIGluc2V0OiAwOw0KICB9DQoNCiAgLnBob25lLWZyYW1lIHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBtYXgtd2lkdGg6IDQyMHB4Ow0KICAgIGhlaWdodDogMTAwdmg7DQogICAgaGVpZ2h0OiAxMDBkdmg7DQogICAgbWF4LWhlaWdodDogNzgwcHg7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtYmcpOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBib3gtc2hhZG93OiAwIDIwcHggODBweCByZ2JhKDAsMCwwLDAuNSk7DQogIH0NCg0KICBAbWVkaWEgKG1heC13aWR0aDogNDQwcHgpIHsNCiAgICAucGhvbmUtZnJhbWUgew0KICAgICAgbWF4LXdpZHRoOiAxMDAlOw0KICAgICAgbWF4LWhlaWdodDogMTAwdmg7DQogICAgICBtYXgtaGVpZ2h0OiAxMDBkdmg7DQogICAgICBib3gtc2hhZG93OiBub25lOw0KICAgIH0NCiAgfQoKICAvKiDDouKAneKCrMOi4oCd4oKsIEhFQURFUiDDouKAneKCrMOi4oCd4oKsICovCiAgLmNoYXQtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWdyZWVuLWhlYWRlcik7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgZ2FwOiAxMHB4OwogICAgbWluLWhlaWdodDogNTZweDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgei1pbmRleDogMTA7CiAgfQoKICAuaGVhZGVyLWJhY2sgewogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CgogIC5oZWFkZXItYXZhdGFyIHsKICAgIHdpZHRoOiA0MHB4OwogICAgaGVpZ2h0OiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogI2NmZDhkYzsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgfQoKICAuaGVhZGVyLWF2YXRhciBzdmcgewogICAgd2lkdGg6IDI2cHg7CiAgICBoZWlnaHQ6IDI2cHg7CiAgICBmaWxsOiAjZmZmOwogIH0KCiAgLmhlYWRlci1pbmZvIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgfQoKICAuaGVhZGVyLW5hbWUgewogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICB9CgogIC5oZWFkZXItc3RhdHVzIHsKICAgIGNvbG9yOiB2YXIoLS13YS1oZWFkZXItaWNvbik7CiAgICBmb250LXNpemU6IDEyLjVweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgfQoKICAuaGVhZGVyLWFjdGlvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMThweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKICAuaGVhZGVyLWFjdGlvbnMgc3ZnIHsKICAgIHdpZHRoOiAyMnB4OwogICAgaGVpZ2h0OiAyMnB4OwogICAgZmlsbDogdmFyKC0td2EtaGVhZGVyLWljb24pOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogZmlsbCAwLjE1czsKICB9CgogIC5oZWFkZXItYWN0aW9ucyBzdmc6aG92ZXIgewogICAgZmlsbDogI2ZmZjsKICB9CgogIC8qIMOi4oCd4oKsw6LigJ3igqwgRU5DUllQVElPTiBCQU5ORVIgw6LigJ3igqzDouKAneKCrCAqLwogIC5lbmNyeXB0LWJhbm5lciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13YS1lbmNyeXB0LWJnKTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDhweCA0MHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLXdhLWVuY3J5cHQtdGV4dCk7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgfQoKICAuZW5jcnlwdC1iYW5uZXIgc3ZnIHsKICAgIHdpZHRoOiAxM3B4OwogICAgaGVpZ2h0OiAxM3B4OwogICAgZmlsbDogdmFyKC0td2EtZW5jcnlwdC10ZXh0KTsKICAgIGZsZXgtc2hyaW5rOiAwOwogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBDSEFUIEFSRUEgw6LigJ3igqzDouKAneKCrCAqLw0KICAuY2hhdC1hcmVhIHsNCiAgICBmbGV4OiAxOw0KICAgIG1pbi1oZWlnaHQ6IDA7DQogICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICBwYWRkaW5nOiA4cHggMTJweDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgZ2FwOiAzcHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB9CgogIC5jaGF0LWFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA1cHg7CiAgfQoKICAuY2hhdC1hcmVhOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogIH0KCiAgLyogV2hhdHNBcHAgZG9vZGxlIGJhY2tncm91bmQgKi8KICAuY2hhdC1hcmVhOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMDAnIGhlaWdodD0nMjAwJyB2aWV3Qm94PScwIDAgMjAwIDIwMCclM0UlM0NnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzYzljMWI1JyBzdHJva2Utd2lkdGg9JzAuOCcgb3BhY2l0eT0nMC40NSclM0UlM0NwYXRoIGQ9J00zMCAyMGw1IDEwLTUgMTAnLyUzRSUzQ2NpcmNsZSBjeD0nNjAnIGN5PSczMCcgcj0nOCcvJTNFJTNDcGF0aCBkPSdNOTAgMTV2MTVoMTAnLyUzRSUzQ3JlY3QgeD0nMTIwJyB5PScxOCcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyByeD0nMicvJTNFJTNDcGF0aCBkPSdNMTYwIDIwbDggOC04IDgnLyUzRSUzQ2NpcmNsZSBjeD0nMjUnIGN5PSc2MCcgcj0nNScvJTNFJTNDcGF0aCBkPSdNNTAgNTBsMTAgNS0xMCA1Jy8lM0UlM0NwYXRoIGQ9J004MCA1NWgxNScvJTNFJTNDY2lyY2xlIGN4PScxMTUnIGN5PSc1OCcgcj0nNycvJTNFJTNDcGF0aCBkPSdNMTUwIDUwbDUgMTInLyUzRSUzQ3BhdGggZD0nTTE3NSA1NWw1LTUgNSA1Jy8lM0UlM0NwYXRoIGQ9J00yMCA5MGw4LTUgOCA1Jy8lM0UlM0NjaXJjbGUgY3g9JzU1JyBjeT0nOTUnIHI9JzYnLyUzRSUzQ3BhdGggZD0nTTg1IDg4djE0Jy8lM0UlM0NyZWN0IHg9JzExMCcgeT0nODUnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgcng9JzYnLyUzRSUzQ3BhdGggZD0nTTE0NSA5MGgxMicvJTNFJTNDcGF0aCBkPSdNMTcwIDg4bDYgNi02IDYnLyUzRSUzQ2NpcmNsZSBjeD0nMzAnIGN5PScxMzAnIHI9JzQnLyUzRSUzQ3BhdGggZD0nTTU1IDEyMGwxMCAxMC0xMCAxMCcvJTNFJTNDcGF0aCBkPSdNOTAgMTI1aDh2OCcvJTNFJTNDY2lyY2xlIGN4PScxMjUnIGN5PScxMzInIHI9JzYnLyUzRSUzQ3BhdGggZD0nTTE1NSAxMjJsOCAxMCcvJTNFJTNDcGF0aCBkPSdNMTgwIDEyOGw1IDUtNSA1Jy8lM0UlM0NwYXRoIGQ9J00yMCAxNjBsNiA4LTYgOCcvJTNFJTNDY2lyY2xlIGN4PSc1NScgY3k9JzE2NScgcj0nNScvJTNFJTNDcGF0aCBkPSdNODUgMTU4djEyaDgnLyUzRSUzQ3JlY3QgeD0nMTE1JyB5PScxNTUnIHdpZHRoPScxMCcgaGVpZ2h0PScxMCcgcng9JzInLyUzRSUzQ3BhdGggZD0nTTE1MCAxNjBsNiA2LTYgNicvJTNFJTNDY2lyY2xlIGN4PScxODAnIGN5PScxNjInIHI9JzQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRSIpOwogICAgYmFja2dyb3VuZC1zaXplOiAyMDBweCAyMDBweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMDsKICB9CgogIC5jaGF0LWFyZWEgPiAqIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgfQoKICAvKiDDouKAneKCrMOi4oCd4oKsIEJVQkJMRVMgw6LigJ3igqzDouKAneKCrCAqLwogIC5tc2ctcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBtYXgtd2lkdGg6IDgyJTsKICAgIGFuaW1hdGlvbjogbXNnSW4gMC4yNXMgZWFzZS1vdXQ7CiAgfQoKICBAa2V5ZnJhbWVzIG1zZ0luIHsKICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk3KTsgfQogICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IH0KICB9CgogIC5tc2ctcm93Lm91dCB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICB9CgogIC5tc2ctcm93LmluIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgfQoKICAuYnViYmxlIHsKICAgIHBhZGRpbmc6IDZweCA4cHggNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgZm9udC1zaXplOiAxNC4ycHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS13YS10ZXh0KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIG1pbi13aWR0aDogODBweDsKICB9CgogIC5tc2ctcm93Lm91dCAuYnViYmxlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJ1YmJsZS1vdXQpOwogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgfQoKICAubXNnLXJvdy5pbiAuYnViYmxlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJ1YmJsZS1pbik7CiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIH0KCiAgLm1zZy1yb3cub3V0IC5idWJibGU6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHJpZ2h0OiAtOHB4OwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHZhcigtLXdhLWJ1YmJsZS1vdXQpOwogICAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIHRyYW5zcGFyZW50OwogIH0KCiAgLm1zZy1yb3cuaW4gLmJ1YmJsZTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogLThweDsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyLXJpZ2h0OiA4cHggc29saWQgdmFyKC0td2EtYnViYmxlLWluKTsKICAgIGJvcmRlci1ib3R0b206IDhweCBzb2xpZCB0cmFuc3BhcmVudDsKICB9CgogIC5idWJibGUtdGV4dCB7CiAgICBtYXJnaW4tcmlnaHQ6IDUycHg7CiAgfQoKICAuYnViYmxlLW1ldGEgewogICAgZmxvYXQ6IHJpZ2h0OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDNweDsKICAgIG1hcmdpbi10b3A6IC0xMnB4OwogICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRvcDogNnB4OwogIH0KCiAgLmJ1YmJsZS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS13YS10aW1lKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgfQoKICAuYnViYmxlLXRpY2sgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKICAuYnViYmxlLXRpY2sgc3ZnIHsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxMXB4OwogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBJTUFHRSBJTiBCVUJCTEUgw6LigJ3igqzDouKAneKCrCAqLwogIC5idWJibGUtaW1nIHsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBtYXJnaW46IC0zcHggLTRweCA0cHg7CiAgfQoKICAuYnViYmxlLWltZyBpbWcgewogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgZGlzcGxheTogYmxvY2s7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgfQoKICAvKiDDouKAneKCrMOi4oCd4oKsIEFVRElPIEJVQkJMRSDDouKAneKCrMOi4oCd4oKsICovCiAgLmJ1YmJsZS1hdWRpbyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMjQwcHg7CiAgICBwYWRkaW5nOiA2cHggNHB4OwogIH0KCiAgLmF1ZGlvLXBsYXkgewogICAgd2lkdGg6IDM2cHg7CiAgICBoZWlnaHQ6IDM2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13YS1ncmVlbik7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7CiAgfQoKICAuYXVkaW8tcGxheSBzdmcgewogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBmaWxsOiAjZmZmOwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICB9CgogIC5hdWRpby13YXZlIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogIH0KCiAgLmF1ZGlvLXdhdmUgc3BhbiB7CiAgICB3aWR0aDogM3B4OwogICAgYmFja2dyb3VuZDogdmFyKC0td2EtZ3JlZW4pOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgLmF1ZGlvLWR1cmF0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS13YS10aW1lKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBEQVRFIFNFUEFSQVRPUiDDouKAneKCrMOi4oCd4oKsICovCiAgLmRhdGUtc2VwIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbjogOHB4IDA7CiAgfQoKICAuZGF0ZS1zZXAgc3BhbiB7CiAgICBiYWNrZ3JvdW5kOiAjZTFmM2ZiOwogICAgY29sb3I6IHZhcigtLXdhLXRleHQtbGlnaHQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgcGFkZGluZzogNXB4IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjEpOwogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBUWVBJTkcgSU5ESUNBVE9SIMOi4oCd4oKsw6LigJ3igqwgKi8KICAudHlwaW5nLWluZGljYXRvciB7CiAgICBkaXNwbGF5OiBub25lOwogICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgIHBhZGRpbmc6IDEwcHggMTRweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJ1YmJsZS1pbik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogICAgZ2FwOiA0cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CgogIC50eXBpbmctaW5kaWNhdG9yOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAtOHB4OwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB2YXIoLS13YS1idWJibGUtaW4pOwogICAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIHRyYW5zcGFyZW50OwogIH0KCiAgLnR5cGluZy1pbmRpY2F0b3IuYWN0aXZlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgfQoKICAudHlwaW5nLWRvdCB7CiAgICB3aWR0aDogN3B4OwogICAgaGVpZ2h0OiA3cHg7CiAgICBiYWNrZ3JvdW5kOiAjODY5NmEwOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYW5pbWF0aW9uOiB0eXBpbmdCb3VuY2UgMS40cyBpbmZpbml0ZTsKICB9CgogIC50eXBpbmctZG90Om50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfQogIC50eXBpbmctZG90Om50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTogMC40czsgfQoKICBAa2V5ZnJhbWVzIHR5cGluZ0JvdW5jZSB7CiAgICAwJSwgNjAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBvcGFjaXR5OiAwLjQ7IH0KICAgIDMwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsgb3BhY2l0eTogMTsgfQogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBJTlBVVCBCQVIgw6LigJ3igqzDouKAneKCrCAqLwogIC5pbnB1dC1iYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgIHBhZGRpbmc6IDZweCA2cHg7CiAgICBnYXA6IDZweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJnKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogIH0KCiAgLmlucHV0LWxlZnQgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogNHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CgogIC5pY29uLWJ0biB7CiAgICB3aWR0aDogNDBweDsKICAgIGhlaWdodDogNDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKICB9CgogIC5pY29uLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDYpOwogIH0KCiAgLmljb24tYnRuIHN2ZyB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGZpbGw6ICM1NDY1NmY7CiAgfQoKICAuaW5wdXQtZmllbGQtd3JhcCB7CiAgICBmbGV4OiAxOwogICAgYmFja2dyb3VuZDogdmFyKC0td2EtaW5wdXQtYmcpOwogICAgYm9yZGVyLXJhZGl1czogMjJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIG1pbi1oZWlnaHQ6IDQycHg7CiAgICBtYXgtaGVpZ2h0OiAxMjBweDsKICB9CgogIC5pbnB1dC1maWVsZCB7CiAgICBmbGV4OiAxOwogICAgYm9yZGVyOiBub25lOwogICAgb3V0bGluZTogbm9uZTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiAxNXB4OwogICAgY29sb3I6IHZhcigtLXdhLXRleHQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICByZXNpemU6IG5vbmU7CiAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgcGFkZGluZzogNHB4IDA7CiAgfQoKICAuaW5wdXQtZmllbGQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiAjODY5NmEwOwogIH0KCiAgLm1pYy1idG4gewogICAgd2lkdGg6IDQ0cHg7CiAgICBoZWlnaHQ6IDQ0cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13YS1taWMtYmcpOwogICAgYm9yZGVyOiBub25lOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKICB9CgogIC5taWMtYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMwMDhmNzI7CiAgfQoKICAubWljLWJ0biBzdmcgewogICAgd2lkdGg6IDIycHg7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBmaWxsOiAjZmZmOwogIH0KCiAgLm1pYy1idG4ucmVjb3JkaW5nIHsKICAgIGJhY2tncm91bmQ6ICNlNzRjM2M7CiAgICBhbmltYXRpb246IG1pY1B1bHNlIDFzIGluZmluaXRlOwogIH0KCiAgQGtleWZyYW1lcyBtaWNQdWxzZSB7CiAgICAwJSwgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgyMzEsNzYsNjAsMC40KTsgfQogICAgNTAlIHsgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDIzMSw3Niw2MCwwKTsgfQogIH0KCiAgLnNlbmQtYnRuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAuc2VuZC1idG4udmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnNlbmQtYnRuIHN2ZyB7CiAgICBmaWxsOiAjNTQ2NTZmOwogIH0KCiAgLyogw6LigJ3igqzDouKAneKCrCBFTU9KSSBQSUNLRVIgw6LigJ3igqzDouKAneKCrCAqLwogIC5lbW9qaS1wYW5lbCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwogICAgcGFkZGluZzogOHB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgfQoKICAuZW1vamktcGFuZWwub3BlbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9CgogIC5lbW9qaS1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpOwogICAgZ2FwOiAycHg7CiAgfQoKICAuZW1vamktaXRlbSB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA2cHggMnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEyczsKICAgIHVzZXItc2VsZWN0OiBub25lOwogIH0KCiAgLmVtb2ppLWl0ZW06aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA4KTsKICB9CgogIC8qIMOi4oCd4oKsw6LigJ3igqwgQVRUQUNITUVOVCBNRU5VIMOi4oCd4oKsw6LigJ3igqwgKi8KICAuYXR0YWNoLW1lbnUgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogNjBweDsKICAgIGxlZnQ6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLDAsMCwwLjE4KTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICB6LWluZGV4OiAxMDA7CiAgICBtaW4td2lkdGg6IDE4MHB4OwogIH0KCiAgLmF0dGFjaC1tZW51Lm9wZW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbmltYXRpb246IG1lbnVQb3AgMC4ycyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgbWVudVBvcCB7CiAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiBzY2FsZSgwLjkpIHRyYW5zbGF0ZVkoMTBweCk7IH0KICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOyB9CiAgfQoKICAuYXR0YWNoLWl0ZW0gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEyczsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiB2YXIoLS13YS10ZXh0KTsKICB9CgogIC5hdHRhY2gtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogIH0KCiAgLmF0dGFjaC1pY29uIHsKICAgIHdpZHRoOiA0MHB4OwogICAgaGVpZ2h0OiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB9CgogIC5hdHRhY2gtaWNvbiBzdmcgewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBmaWxsOiAjZmZmOwogIH0KCiAgLmF0dGFjaC1pY29uLmltZyB7IGJhY2tncm91bmQ6ICM3ZjY2ZmY7IH0KICAuYXR0YWNoLWljb24uZG9jIHsgYmFja2dyb3VuZDogIzUxNTdhZTsgfQogIC5hdHRhY2gtaWNvbi5hdWRpbyB7IGJhY2tncm91bmQ6ICNlZTU2MjM7IH0NCiAgLyogw6LigJ3igqzDouKAneKCrCBDSEFUIE1FTlUgKHRyw6pzIHBvbnRpbmhvcykgw6LigJ3igqzDouKAneKCrCAqLwogIC5jaGF0LW1lbnUgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTJweDsKICAgIHJpZ2h0OiAxMHB4OwogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBib3gtc2hhZG93OiAwIDRweCAyNHB4IHJnYmEoMCwwLDAsMC4xOCk7CiAgICBwYWRkaW5nOiA4cHg7CiAgICB6LWluZGV4OiAxMTA7CiAgICBtaW4td2lkdGg6IDIxMHB4OwogIH0KCiAgLmNoYXQtbWVudS5vcGVuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYW5pbWF0aW9uOiBtZW51UG9wIDAuMnMgZWFzZS1vdXQ7CiAgfQoKICAuY2hhdC1tZW51LWl0ZW0gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEyczsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiB2YXIoLS13YS10ZXh0KTsKICB9CgogIC5jaGF0LW1lbnUtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogIH0KCiAgLmNoYXQtbWVudS1pdGVtIHN2ZyB7CiAgICB3aWR0aDogMjBweDsKICAgIGhlaWdodDogMjBweDsKICAgIGZpbGw6ICM2Njc3ODE7CiAgICBmbGV4LXNocmluazogMDsKICB9CgoKICAvKiDDouKAneKCrMOi4oCd4oKsIFJFQ09SRElORyBCQVIgw6LigJ3igqzDouKAneKCrCAqLwogIC5yZWNvcmRpbmctYmFyIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogNnB4IDZweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJnKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgYW5pbWF0aW9uOiBtc2dJbiAwLjJzIGVhc2Utb3V0OwogIH0KCiAgLnJlY29yZGluZy1iYXIuYWN0aXZlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgfQoKICAucmVjLWRvdCB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKICAgIGJhY2tncm91bmQ6ICNlNzRjM2M7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBhbmltYXRpb246IHJlY0JsaW5rIDFzIGluZmluaXRlOwogIH0KCiAgQGtleWZyYW1lcyByZWNCbGluayB7CiAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDE7IH0KICAgIDUwJSB7IG9wYWNpdHk6IDAuMzsgfQogIH0KCiAgLnJlYy10aW1lciB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBjb2xvcjogdmFyKC0td2EtdGV4dCk7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgbWluLXdpZHRoOiA0MHB4OwogIH0KCiAgLnJlYy1jYW5jZWwgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6ICNlNzRjM2M7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogNTAwOwogIH0KCiAgLnJlYy1zZW5kIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogIH0KCiAgLnJlYy1zZW5kIHN2ZyB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGZpbGw6ICNmZmY7CiAgfQoKICAvKiBIaWRkZW4gZmlsZSBpbnB1dHMgKi8KICAuaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfQoKICAvKiDDouKAneKCrMOi4oCd4oKsIFRJQ0sgU1RBVEVTIMOi4oCd4oKsw6LigJ3igqwgKi8KICAudGljay1zaW5nbGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9CiAgLnRpY2stc2luZ2xlIHN2ZyB7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDExcHg7IH0KICAudGljay1kb3VibGUgeyBkaXNwbGF5OiBub25lOyBhbGlnbi1pdGVtczogY2VudGVyOyB9CiAgLnRpY2stZG91YmxlIHN2ZyB7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDExcHg7IG1hcmdpbi1sZWZ0OiAtNHB4OyB9CiAgLnRpY2stZG91YmxlIC50aWNrLXNlY29uZCB7IG9wYWNpdHk6IDA7IH0KICAudGljay1kZWxpdmVyZWQgLnRpY2stc2Vjb25kIHsgb3BhY2l0eTogMTsgZmlsbDogIzg2OTZhMDsgfQogIC50aWNrLXJlYWQgLnRpY2stc2Vjb25kIHsgb3BhY2l0eTogMTsgZmlsbDogdmFyKC0td2EtYmx1ZS10aWNrKTsgfQoKICAvKiDDouKAneKCrMOi4oCd4oKsIENBTEwgT1ZFUkxBWSDDouKAneKCrMOi4oCd4oKsICovCiAgLmNhbGwtb3ZlcmxheSB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiAyMDA7CiAgICBiYWNrZ3JvdW5kOiAjMWEyYzM0OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB9CgogIC5jYWxsLW92ZXJsYXkuYWN0aXZlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgfQoKICAuY2FsbC1vdmVybGF5LWJnIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgb3BhY2l0eTogMC4wODsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMDAnIGhlaWdodD0nMjAwJyB2aWV3Qm94PScwIDAgMjAwIDIwMCclM0UlM0NnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzZmZmZmZmJyBzdHJva2Utd2lkdGg9JzAuOCcgb3BhY2l0eT0nMC41JyUzRSUzQ3BhdGggZD0nTTMwIDIwbDUgMTAtNSAxMCcvJTNFJTNDY2lyY2xlIGN4PSc2MCcgY3k9JzMwJyByPSc4Jy8lM0UlM0NwYXRoIGQ9J005MCAxNXYxNWgxMCcvJTNFJTNDcmVjdCB4PScxMjAnIHk9JzE4JyB3aWR0aD0nMTQnIGhlaWdodD0nMTQnIHJ4PScyJy8lM0UlM0NwYXRoIGQ9J00xNjAgMjBsOCA4LTggOCcvJTNFJTNDY2lyY2xlIGN4PScyNScgY3k9JzYwJyByPSc1Jy8lM0UlM0NwYXRoIGQ9J001MCA1MGwxMCA1LTEwIDUnLyUzRSUzQ3BhdGggZD0nTTgwIDU1aDE1Jy8lM0UlM0NjaXJjbGUgY3g9JzExNScgY3k9JzU4JyByPSc3Jy8lM0UlM0NwYXRoIGQ9J00xNTAgNTBsNSAxMicvJTNFJTNDcGF0aCBkPSdNMTc1IDU1bDUtNSA1IDUnLyUzRSUzQ3BhdGggZD0nTTIwIDkwbDgtNSA4IDUnLyUzRSUzQ2NpcmNsZSBjeD0nNTUnIGN5PSc5NScgcj0nNicvJTNFJTNDcGF0aCBkPSdNODUgODh2MTQnLyUzRSUzQ3JlY3QgeD0nMTEwJyB5PSc4NScgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyByeD0nNicvJTNFJTNDcGF0aCBkPSdNMTQ1IDkwaDEyJy8lM0UlM0NwYXRoIGQ9J00xNzAgODhsNiA2LTYgNicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFIik7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4IDIwMHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgfQoKICAuY2FsbC1oZWFkZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICB6LWluZGV4OiAyOwogIH0KCiAgLmNhbGwtaGVhZGVyLWxlZnQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICB9CgogIC5jYWxsLWhlYWRlci1sZWZ0IHN2ZyB7CiAgICB3aWR0aDogMjBweDsKICAgIGhlaWdodDogMjBweDsKICAgIGZpbGw6ICNmZmY7CiAgfQoKICAuY2FsbC1oZWFkZXItY2VudGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjcpOwogICAgZm9udC1zaXplOiAxMnB4OwogIH0KCiAgLmNhbGwtaGVhZGVyLXJpZ2h0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjcpOwogICAgZm9udC1zaXplOiAxMnB4OwogIH0KCiAgLmNhbGwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDE2cHg7CiAgICB6LWluZGV4OiAyOwogIH0KCiAgLmNhbGwtbmFtZSB7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2FsbC1lbmNyeXB0IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwIDQwcHg7CiAgfQoKICAuY2FsbC1hdmF0YXIgewogICAgd2lkdGg6IDE0MHB4OwogICAgaGVpZ2h0OiAxNDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXI6IDNweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOwogICAgbWFyZ2luOiAyMHB4IDA7CiAgfQoKICAuY2FsbC1hdmF0YXIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgfQoKICAuY2FsbC1zdGF0dXMgewogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIG1hcmdpbi10b3A6IDhweDsKICB9CgogIC5jYWxsLXN0YXR1cy51bmF2YWlsYWJsZSB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpOwogIH0KCiAgLmNhbGwtYWN0aW9ucyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDYwcHg7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDIwcHg7CiAgICB6LWluZGV4OiAyOwogIH0KCiAgLmNhbGwtYWN0aW9uLWJ0biB7CiAgICB3aWR0aDogNTJweDsKICAgIGhlaWdodDogNTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzOwogIH0KCiAgLmNhbGwtYWN0aW9uLWJ0bjpob3ZlciB7IG9wYWNpdHk6IDAuODU7IH0KICAuY2FsbC1hY3Rpb24tYnRuIHN2ZyB7IHdpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7IGZpbGw6ICNmZmY7IH0KCiAgLmNhbGwtYWN0aW9uLWJ0bi5tb3JlIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTsgfQogIC5jYWxsLWFjdGlvbi1idG4uY2FtZXJhIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTsgfQogIC5jYWxsLWFjdGlvbi1idG4uc3BlYWtlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7IH0KICAuY2FsbC1hY3Rpb24tYnRuLm11dGUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOyB9CiAgLmNhbGwtYWN0aW9uLWJ0bi5lbmQgeyBiYWNrZ3JvdW5kOiAjZTc0YzNjOyB9CiAgLmNhbGwtYWN0aW9uLWJ0bi5lbmQgc3ZnIHsgd2lkdGg6IDI4cHg7IGhlaWdodDogMjhweDsgfQoKICAuY2FsbC1uYXYgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAxNnB4OwogICAgbGVmdDogNTAlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogODBweDsKICAgIHotaW5kZXg6IDI7CiAgfQoKICAuY2FsbC1uYXYgc3BhbiB7CiAgICB3aWR0aDogNDBweDsKICAgIGhlaWdodDogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjMpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogIH0KCiAgLmNhbGwtbmF2LWRvdCB7CiAgICB3aWR0aDogNnB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMykgIWltcG9ydGFudDsKICB9Cjwvc3R5bGU+CjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2hlaWMyYW55QDAuMC40L2Rpc3QvaGVpYzJhbnkubWluLmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9InBob25lLWZyYW1lIj4KICA8IS0tIEhFQURFUiAtLT4KICA8ZGl2IGNsYXNzPSJjaGF0LWhlYWRlciIgZGF0YS1vZC1pZD0iY2hhdC1oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJhY2siPgogICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ii8+PC9zdmc+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci1hdmF0YXIiPgogICAgICA8aW1nIHNyYz0iYXZhdGFyLmpwZyIgYWx0PSJNZXNxdWl0YSBMb3RvIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NTAlIj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWluZm8iPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItbmFtZSI+TWVzcXVpdGEgTG90bzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc3RhdHVzIj5vbmxpbmU8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWFjdGlvbnMiPgogICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZGF0YS1vZC1pZD0iYnRuLXZpZGVvIj48cGF0aCBkPSJNMTcgMTAuNVY3YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDF2MTBjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xdi0zLjVsNCA0di0xMWwtNCA0eiIvPjwvc3ZnPgogICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZGF0YS1vZC1pZD0iYnRuLWNhbGwiPjxwYXRoIGQ9Ik0yMC4wMSAxNS4zOGMtMS4yMyAwLTIuNDItLjItMy41My0uNTYtLjM1LS4xMi0uNzQtLjAzLTEuMDEuMjRsLTEuNTcgMS45N2MtMi44My0xLjM1LTUuNDgtMy45LTYuODktNi44M2wxLjk1LTEuNjZjLjI3LS4yOC4zNS0uNjcuMjQtMS4wMi0uMzctMS4xMS0uNTYtMi4zLS41Ni0zLjUzIDAtLjU0LS40NS0uOTktLjk5LS45OUg0LjE5QzMuNjUgMyAzIDMuMjQgMyAzLjk5IDMgMTMuMjggMTAuNzMgMjEgMjAuMDEgMjFjLjcxIDAgLjk5LS42My45OS0xLjE4di0zLjQ1YzAtLjU0LS40NS0uOTktLjk5LS45OXoiLz48L3N2Zz4KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGRhdGEtb2QtaWQ9ImJ0bi1tZW51Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBDSEFUIE1FTlUgLS0+CiAgPGRpdiBjbGFzcz0iY2hhdC1tZW51IiBpZD0iY2hhdE1lbnUiPgogICAgPGRpdiBjbGFzcz0iY2hhdC1tZW51LWl0ZW0iIGlkPSJtZW51Q2xlYXIiPgogICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiLz48L3N2Zz4KICAgICAgTGltcGFyIGNvbnZlcnNhCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNoYXQtbWVudS1pdGVtIiBpZD0ibWVudUV4cG9ydCI+CiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiIvPjwvc3ZnPgogICAgICBFeHBvcnRhciBjb252ZXJzYSAoLnR4dCkKICAgIDwvZGl2PgogIDwvZGl2PgogIDwhLS0gRU5DUllQVElPTiBCQU5ORVIgLS0+CiAgPGRpdiBjbGFzcz0iZW5jcnlwdC1iYW5uZXIiIGRhdGEtb2QtaWQ9ImVuY3J5cHQtYmFubmVyIj4KICAgIDxzdmcgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBkPSJNOCAxYTQgNCAwIDAgMC00IDR2MkgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWOGExIDEgMCAwIDAtMS0xaC0xVjVhNCA0IDAgMCAwLTQtNHptMiA2SDZWNWEyIDIgMCAxIDEgNCAwdjJ6Ii8+PC9zdmc+CiAgICBBcyBtZW5zYWdlbnMgZSBjaGFtYWRhcyBkZXN0YSBjb252ZXJzYSBlc3TDo28gYWdvcmEgc2VndXJhcyBjb20gY3JpcHRvZ3JhZmlhIGRlIHBvbnRhIGEgcG9udGEuIFRvcXVlIHBhcmEgb2J0ZXIgbWFpcyBpbmZvcm1hw6fDtWVzLgogIDwvZGl2PgoKICA8IS0tIENIQVQgQVJFQSAtLT4KICA8ZGl2IGNsYXNzPSJjaGF0LWFyZWEiIGlkPSJjaGF0QXJlYSIgZGF0YS1vZC1pZD0iY2hhdC1hcmVhIj4KICAgIDwhLS0gVHlwaW5nIGluZGljYXRvciAtLT4KICAgIDxkaXYgY2xhc3M9InR5cGluZy1pbmRpY2F0b3IiIGlkPSJ0eXBpbmdJbmRpY2F0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJ0eXBpbmctZG90Ij48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHlwaW5nLWRvdCI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR5cGluZy1kb3QiPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gRU1PSkkgUEFORUwgLS0+CiAgPGRpdiBjbGFzcz0iZW1vamktcGFuZWwiIGlkPSJlbW9qaVBhbmVsIj4KICAgIDxkaXYgY2xhc3M9ImVtb2ppLWdyaWQiIGlkPSJlbW9qaUdyaWQiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFJFQ09SRElORyBCQVIgLS0+CiAgPGRpdiBjbGFzcz0icmVjb3JkaW5nLWJhciIgaWQ9InJlY29yZGluZ0JhciI+CiAgICA8ZGl2IGNsYXNzPSJyZWMtZG90Ij48L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJyZWMtdGltZXIiIGlkPSJyZWNUaW1lciI+MDowMDwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJyZWMtY2FuY2VsIiBpZD0icmVjQ2FuY2VsIj5DYW5jZWxhcjwvc3Bhbj4KICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIHJlYy1zZW5kIiBpZD0icmVjU2VuZCIgZGF0YS1vZC1pZD0iYnRuLXJlYy1zZW5kIj4KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiLz48L3N2Zz4KICAgIDwvYnV0dG9uPgogIDwvZGl2PgoKICA8IS0tIElOUFVUIEJBUiAtLT4KICA8ZGl2IGNsYXNzPSJpbnB1dC1iYXIiIGlkPSJpbnB1dEJhciIgZGF0YS1vZC1pZD0iaW5wdXQtYmFyIj4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWxlZnQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJpY29uLWJ0biIgaWQ9ImVtb2ppQnRuIiBkYXRhLW9kLWlkPSJidG4tZW1vamkiPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiIvPjwvc3ZnPgogICAgICA8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idG4iIGlkPSJhdHRhY2hCdG4iIGRhdGEtb2QtaWQ9ImJ0bi1hdHRhY2giPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTYuNSA2djExLjVjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRWNWMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41djEwLjVjMCAuNTUtLjQ1IDEtMSAxcy0xLS40NS0xLTFWNkgxMHY5LjVjMCAxLjM4IDEuMTIgMi41IDIuNSAyLjVzMi41LTEuMTIgMi41LTIuNVY1YzAtMi4yMS0xLjc5LTQtNC00UzcgMi43OSA3IDV2MTIuNWMwIDMuMDQgMi40NiA1LjUgNS41IDUuNXM1LjUtMi40NiA1LjUtNS41VjZoLTEuNXoiLz48L3N2Zz4KICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWZpZWxkLXdyYXAiPgogICAgICA8dGV4dGFyZWEgY2xhc3M9ImlucHV0LWZpZWxkIiBpZD0iaW5wdXRGaWVsZCIgcGxhY2Vob2xkZXI9IkRpZ2l0ZSBhcXVpLi4uIiByb3dzPSIxIiBkYXRhLW9kLWlkPSJpbnB1dC1tZXNzYWdlIj48L3RleHRhcmVhPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJpY29uLWJ0biBzZW5kLWJ0biIgaWQ9InNlbmRCdG4iIGRhdGEtb2QtaWQ9ImJ0bi1zZW5kIj4KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiLz48L3N2Zz4KICAgIDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibWljLWJ0biIgaWQ9Im1pY0J0biIgZGF0YS1vZC1pZD0iYnRuLW1pYyI+CiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIvPjwvc3ZnPgogICAgPC9idXR0b24+CiAgPC9kaXY+CgogIDwhLS0gQVRUQUNITUVOVCBNRU5VIC0tPgogIDxkaXYgY2xhc3M9ImF0dGFjaC1tZW51IiBpZD0iYXR0YWNoTWVudSIgZGF0YS1vZC1pZD0iYXR0YWNoLW1lbnUiPgogICAgPGRpdiBjbGFzcz0iYXR0YWNoLWl0ZW0iIGlkPSJhdHRhY2hJbWciPgogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaWNvbiBpbWciPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiLz48L3N2Zz4KICAgICAgPC9kaXY+CiAgICAgIDxzcGFuPkZvdG8gb3UgVsOtZGVvPC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaXRlbSIgaWQ9ImF0dGFjaERvYyI+CiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaC1pY29uIGRvYyI+CiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiIvPjwvc3ZnPgogICAgICA8L2Rpdj4KICAgICAgPHNwYW4+RG9jdW1lbnRvPC9zcGFuPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaXRlbSIgaWQ9ImF0dGFjaEF1ZGlvIj4KICAgICAgPGRpdiBjbGFzcz0iYXR0YWNoLWljb24gYXVkaW8iPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ii8+PC9zdmc+CiAgICAgIDwvZGl2PgogICAgICA8c3Bhbj7DgXVkaW88L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBIaWRkZW4gZmlsZSBpbnB1dHMgLS0+CiAgPGlucHV0IHR5cGU9ImZpbGUiIGFjY2VwdD0iaW1hZ2UvKiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmhlaWMsLmhlaWYiIGNsYXNzPSJoaWRkZW4iIGlkPSJmaWxlSW1nIj4NCiAgPGlucHV0IHR5cGU9ImZpbGUiIGFjY2VwdD0iLnBkZiwuZG9jLC5kb2N4LC50eHQsLmpwZywuanBlZywucG5nLC53ZWJwIiBjbGFzcz0iaGlkZGVuIiBpZD0iZmlsZURvYyI+CgogIDwhLS0gQ0FMTCBPVkVSTEFZIC0tPgogIDxkaXYgY2xhc3M9ImNhbGwtb3ZlcmxheSIgaWQ9ImNhbGxPdmVybGF5Ij4KICAgIDxkaXYgY2xhc3M9ImNhbGwtb3ZlcmxheS1iZyI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjYWxsLWhlYWRlciI+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyLWxlZnQiPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyLWNlbnRlciI+CiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIHN0eWxlPSJ3aWR0aDoxMnB4O2hlaWdodDoxMnB4Ij48cGF0aCBkPSJNOCAxYTQgNCAwIDAgMC00IDR2MkgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWOGExIDEgMCAwIDAtMS0xaC0xVjVhNCA0IDAgMCAwLTQtNHoiIGZpbGw9InJnYmEoMjU1LDI1NSwyNTUsMC42KSIvPjwvc3ZnPgogICAgICAgIDxzcGFuPlByb3RlZ2lkYSBjb20gYSBjcmlwdG9ncmFmaWE8YnI+ZGUgcG9udGEgYSBwb250YTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyLXJpZ2h0Ij4KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHgiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiBmaWxsPSJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLz48L3N2Zz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhbGwtYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtbmFtZSIgaWQ9ImNhbGxOYW1lIj5NZXNxdWl0YSBMb3RvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtZW5jcnlwdCI+UHJvdGVnaWRhIGNvbSBhIGNyaXB0b2dyYWZpYTxicj5kZSBwb250YSBhIHBvbnRhPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtYXZhdGFyIj4KICAgICAgICA8aW1nIHNyYz0iYXZhdGFyLmpwZyIgYWx0PSJNZXNxdWl0YSBMb3RvIj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtc3RhdHVzIiBpZD0iY2FsbFN0YXR1cyI+Q2hhbWFuZG8uLi48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY2FsbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY2FsbC1hY3Rpb24tYnRuIG1vcmUiPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI1IiBjeT0iMTIiIHI9IjIiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+PGNpcmNsZSBjeD0iMTkiIGN5PSIxMiIgcj0iMiIvPjwvc3ZnPjwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJjYWxsLWFjdGlvbi1idG4gY2FtZXJhIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiLz48L3N2Zz48L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY2FsbC1hY3Rpb24tYnRuIHNwZWFrZXIiPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMyA5djZoNGw1IDVWNEw3IDlIM3ptMTMuNSAzYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2OC4wNWMxLjQ4LS43MyAyLjUtMi4yNSAyLjUtNC4wMnpNMTQgMy4yM3YyLjA2YzIuODkuODYgNSAzLjU0IDUgNi43MXMtMi4xMSA1Ljg1LTUgNi43MXYyLjA2YzQuMDEtLjkxIDctNC40OSA3LTguNzdzLTIuOTktNy44Ni03LTguNzd6Ii8+PC9zdmc+PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImNhbGwtYWN0aW9uLWJ0biBtdXRlIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5IDExaC0xLjdjMCAuNzQtLjE2IDEuNDMtLjQzIDIuMDVsMS4yMyAxLjIzYy41Ni0uOTguOS0yLjA5LjktMy4yOHptLTQuMDIuMTdjMC0uMDYuMDItLjExLjAyLS4xN1Y1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2LjE4bDUuOTggNS45OXpNNC4yNyAzTDMgNC4yN2w2LjAxIDYuMDFWMTFjMCAxLjY2IDEuMzMgMyAyLjk5IDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS42NiAxLjY2Yy0uNzEuMzMtMS41LjUyLTIuMzEuNTItMi43NiAwLTUuMy0yLjEtNS4zLTUuMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjLjkxLS4xMyAxLjc3LS40NSAyLjU0LS45TDE5LjczIDIxIDIxIDE5LjczIDQuMjcgM3oiLz48L3N2Zz48L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY2FsbC1hY3Rpb24tYnRuIGVuZCIgaWQ9ImNhbGxFbmRCdG4iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgOWMtMS42IDAtMy4xNS4yNS00LjYuNzJ2My4xYzAgLjM5LS4yMy43NC0uNTYuOS0uOTguNDktMS44NyAxLjEyLTIuNjYgMS44NS0uMTguMTgtLjQzLjI4LS43LjI4LS4yOCAwLS41My0uMTEtLjcxLS4yOUwuMjkgMTMuMDhjLS4xOC0uMTctLjI5LS40Mi0uMjktLjcgMC0uMjguMTEtLjUzLjI5LS43MUMzLjM0IDguNzggNy40NiA3IDEyIDdzOC42NiAxLjc4IDExLjcxIDQuNjdjLjE4LjE4LjI5LjQzLjI5LjcxIDAgLjI4LS4xMS41My0uMjkuNzFsLTIuNDggMi40OGMtLjE4LjE4LS40My4yOS0uNzEuMjktLjI3IDAtLjUyLS4xMS0uNy0uMjgtLjc5LS43NC0xLjY5LTEuMzYtMi42Ny0xLjg1LS4zMy0uMTYtLjU2LS41LS41Ni0uOXYtMy4xQzE1LjE1IDkuMjUgMTMuNiA5IDEyIDl6Ii8+PC9zdmc+PC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhbGwtbmF2Ij4KICAgICAgPHNwYW4+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iY2FsbC1uYXYtZG90Ij48L3NwYW4+CiAgICAgIDxzcGFuPjwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICBjb25zdCBXRUJIT09LX1VSTCA9ICdodHRwczovL244bi1uOG4uc2JsMHdxLmVhc3lwYW5lbC5ob3N0L3dlYmhvb2svdXBsb2FkLWxvdG8nOw0KICBjb25zdCBjaGF0QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0QXJlYScpOwogIGNvbnN0IGlucHV0RmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRGaWVsZCcpOwogIGNvbnN0IHNlbmRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZEJ0bicpOwogIGNvbnN0IG1pY0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWNCdG4nKTsKICBjb25zdCBlbW9qaUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbW9qaUJ0bicpOwogIGNvbnN0IGVtb2ppUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1vamlQYW5lbCcpOwogIGNvbnN0IGVtb2ppR3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbW9qaUdyaWQnKTsKICBjb25zdCBhdHRhY2hCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXR0YWNoQnRuJyk7CiAgY29uc3QgYXR0YWNoTWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHRhY2hNZW51Jyk7CiAgY29uc3QgYXR0YWNoSW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0dGFjaEltZycpOwogIGNvbnN0IGF0dGFjaERvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHRhY2hEb2MnKTsKICBjb25zdCBhdHRhY2hBdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHRhY2hBdWRpbycpOwogIGNvbnN0IGZpbGVJbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUltZycpOwogIGNvbnN0IGZpbGVEb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZURvYycpOwogIGNvbnN0IHJlY29yZGluZ0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmRpbmdCYXInKTsKICBjb25zdCByZWNUaW1lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNUaW1lcicpOwogIGNvbnN0IHJlY0NhbmNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNDYW5jZWwnKTsKICBjb25zdCByZWNTZW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY1NlbmQnKTsKICBjb25zdCB0eXBpbmdJbmRpY2F0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwaW5nSW5kaWNhdG9yJyk7CiAgY29uc3QgaW5wdXRCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRCYXInKTsKCiAgY29uc3QgZW1vamlzID0gWw0KICAgICfwn5iAJywsICfwn5iCJywsICfwn5iNJywsICfwn6WwJywsICfwn5iOJywsICfwn6SpJywsICfwn5iHJywsICfwn6WzJywsICfwn5iLJywsICfwn6SUJywNCiAgICAn8J+YjycsLCAn8J+YoicsLCAn8J+YrScsLCAn8J+YpCcsLCAn8J+krycsLCAn8J+YsScsLCAn8J+roScsLCAn8J+knScsLCAn8J+SqicsLCAn8J+ZjycsDQogICAgJ+KdpO+4jycsLCAn8J+UpScsLCAn4q2QJywsICfwn5KvJywsICfwn46JJywsICfwn5GPJywsICfinIzvuI8nLCwgJ/CfpJgnLCwgJ/Cfq7YnLCwgJ+KcqCcsDQogICAgJ/CfkY0nLCwgJ/CfkY4nLCwgJ/CfkYknLCwgJ/CfkYYnLCwgJ/Cfq7AnLCwgJ/CfkqonLCwgJ/Cfp6AnLCwgJ/CfkYAnLCwgJ/CfkYQnLCwgJ/CfprYnLA0KICAgICfwn5KAJywsICfwn5G7JywsICfwn46DJywsICfwn4yIJywsICfimIDvuI8nLCwgJ/CfjJknLCwgJ+KaoScsLCAn8J+SpycsLCAn8J+NlScsLCAn8J+NlCcsDQogICAgJ+KYlScsLCAn8J+OtScsLCAn8J+TsScsLCAn8J+SuycsLCAn8J+TuCcsLCAn8J+OrCcsLCAn4pq9JywsICfwn46uJywsICfwn4+GJywsICfinIjvuI8nLA0KICAgICfwn5qXJywsICfwn4+gJywsICfwn5KwJywsICfwn46BJywsICfwn5OmJywsICfwn5uSJywsICfwn5K8JywsICfwn5OeJywsICfinInvuI8nLCwgJ/CflJEnLA0KICAgICfwn6uCJywsICfwn5i0JywsICfwn6SvJywsICfwn6SuJywsICfwn6SnJywsICfwn6W2JywsICfwn6W1JywsICfwn6SgJywsICfwn6ShJywsICfwn5G5JywNCiAgXTsKCiAgLy8gQnVpbGQgZW1vamkgZ3JpZAogIGVtb2ppcy5mb3JFYWNoKGUgPT4gewogICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgIHNwYW4uY2xhc3NOYW1lID0gJ2Vtb2ppLWl0ZW0nOwogICAgc3Bhbi50ZXh0Q29udGVudCA9IGU7CiAgICBzcGFuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICBpbnB1dEZpZWxkLnZhbHVlICs9IGU7CiAgICAgIGlucHV0RmllbGQuZm9jdXMoKTsKICAgICAgdXBkYXRlU2VuZEJ0bigpOwogICAgfSk7CiAgICBlbW9qaUdyaWQuYXBwZW5kQ2hpbGQoc3Bhbik7CiAgfSk7CgogIGxldCBsYXN0TWVzc2FnZURhdGUgPSAnJzsKCiAgZnVuY3Rpb24gZGF0ZUtleShkKSB7CiAgICByZXR1cm4gZC5nZXRGdWxsWWVhcigpICsgJy0nICsgKGQuZ2V0TW9udGgoKSsxKSArICctJyArIGQuZ2V0RGF0ZSgpOwogIH0KCiAgZnVuY3Rpb24gZGF0ZUxhYmVsKGQpIHsKICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTsKICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKCk7CiAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7CiAgICBpZiAoZGF0ZUtleShkKSA9PT0gZGF0ZUtleSh0b2RheSkpIHJldHVybiAnSE9KRSc7CiAgICBpZiAoZGF0ZUtleShkKSA9PT0gZGF0ZUtleSh5ZXN0ZXJkYXkpKSByZXR1cm4gJ09OVEVNJzsKICAgIGNvbnN0IGRheXMgPSBbJ0RPTScsJ1NFRycsJ1RFUicsJ1FVQScsJ1FVSScsJ1NFWCcsJ1NBQiddOwogICAgY29uc3QgbW9udGhzID0gWydKQU4nLCdGRVYnLCdNQVInLCdBQlInLCdNQUknLCdKVU4nLCdKVUwnLCdBR08nLCdTRVQnLCdPVVQnLCdOT1YnLCdERVonXTsKICAgIHJldHVybiBkYXlzW2QuZ2V0RGF5KCldICsgJywgJyArIGQuZ2V0RGF0ZSgpICsgJyBkZSAnICsgbW9udGhzW2QuZ2V0TW9udGgoKV07CiAgfQoKICBmdW5jdGlvbiBjaGVja0RhdGVTZXAoKSB7CiAgICBjb25zdCBkID0gbmV3IERhdGUoKTsKICAgIGNvbnN0IGtleSA9IGRhdGVLZXkoZCk7CiAgICBpZiAoa2V5ICE9PSBsYXN0TWVzc2FnZURhdGUpIHsKICAgICAgbGFzdE1lc3NhZ2VEYXRlID0ga2V5OwogICAgICBjb25zdCBzZXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgc2VwLmNsYXNzTmFtZSA9ICdkYXRlLXNlcCc7CiAgICAgIHNlcC5pbm5lckhUTUwgPSAnPHNwYW4+JyArIGRhdGVMYWJlbChkKSArICc8L3NwYW4+JzsKICAgICAgY2hhdEFyZWEuaW5zZXJ0QmVmb3JlKHNlcCwgdHlwaW5nSW5kaWNhdG9yKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIG5vdygpIHsKICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpOwogICAgcmV0dXJuIGQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsJzAnKSArICc6JyArIGQuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwnMCcpOwogIH0KCiAgZnVuY3Rpb24gZG91YmxlQ2hlY2tTVkcoKSB7CiAgICByZXR1cm4gJzxzdmcgdmlld0JveD0iMCAwIDE2IDExIiB3aWR0aD0iMTYiIGhlaWdodD0iMTEiPjxwYXRoIGQ9Ik0xMS4wNzEuNjUzYS40NTcuNDU3IDAgMCAwLS4zMDQtLjEwMi40OTMuNDkzIDAgMCAwLS4zODEuMTc4bC02LjE5IDcuNjM2LTIuMDExLTIuMTc1YS40Ni40NiAwIDAgMC0uMzUzLS4xNDUuNDcuNDcgMCAwIDAtLjMzNS4xMzYuNDc0LjQ3NCAwIDAgMC0uMDE2LjY3OGwyLjM3NSAyLjU3NGEuNDQ4LjQ0OCAwIDAgMCAuMzQ3LjE1N2guMDE0YS40NzIuNDcyIDAgMCAwIC4zNTItLjE3NGw2LjUzNi04LjA2NmEuNDQ4LjQ0OCAwIDAgMC0uMDM0LS42Mzh6IiBmaWxsPSIjODY5NmEwIi8+PC9zdmc+JzsKICB9CgogIGZ1bmN0aW9uIHRpY2tIVE1MKCkgewogICAgcmV0dXJuICc8c3BhbiBjbGFzcz0idGljay1zaW5nbGUiPicgKyBkb3VibGVDaGVja1NWRygpICsgJzwvc3Bhbj48c3BhbiBjbGFzcz0idGljay1kb3VibGUiPjxzdmcgdmlld0JveD0iMCAwIDE2IDExIj48cGF0aCBkPSJNMTEuMDcxLjY1M2EuNDU3LjQ1NyAwIDAgMC0uMzA0LS4xMDIuNDkzLjQ5MyAwIDAgMC0uMzgxLjE3OGwtNi4xOSA3LjYzNi0yLjAxMS0yLjE3NWEuNDYuNDYgMCAwIDAtLjM1My0uMTQ1LjQ3LjQ3IDAgMCAwLS4zMzUuMTM2LjQ3NC40NzQgMCAwIDAtLjAxNi42NzhsMi4zNzUgMi41NzRhLjQ0OC40NDggMCAwIDAgLjM0Ny4xNTdoLjAxNGEuNDcyLjQ3MiAwIDAgMCAuMzUyLS4xNzRsNi41MzYtOC4wNjZhLjQ0OC40NDggMCAwIDAtLjAzNC0uNjM4eiIgZmlsbD0iIzg2OTZhMCIvPjwvc3ZnPjxzdmcgY2xhc3M9InRpY2stc2Vjb25kIiB2aWV3Qm94PSIwIDAgMTYgMTEiPjxwYXRoIGQ9Ik0xMS4wNzEuNjUzYS40NTcuNDU3IDAgMCAwLS4zMDQtLjEwMi40OTMuNDkzIDAgMCAwLS4zODEuMTc4bC02LjE5IDcuNjM2LTIuMDExLTIuMTc1YS40Ni40NiAwIDAgMC0uMzUzLS4xNDUuNDcuNDcgMCAwIDAtLjMzNS4xMzYuNDc0LjQ3NCAwIDAgMC0uMDE2LjY3OGwyLjM3NSAyLjU3NGEuNDQ4LjQ0OCAwIDAgMCAuMzQ3LjE1N2guMDE0YS40NzIuNDcyIDAgMCAwIC4zNTItLjE3NGw2LjUzNi04LjA2NmEuNDQ4LjQ0OCAwIDAgMC0uMDM0LS42Mzh6IiBmaWxsPSIjODY5NmEwIi8+PC9zdmc+PC9zcGFuPic7CiAgfQoKICBmdW5jdGlvbiBhbmltYXRlVGlja3Mocm93KSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3Qgc2luZ2xlID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy50aWNrLXNpbmdsZScpOwogICAgICBjb25zdCBkb3VibGUgPSByb3cucXVlcnlTZWxlY3RvcignLnRpY2stZG91YmxlJyk7CiAgICAgIGlmIChzaW5nbGUpIHNpbmdsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBpZiAoZG91YmxlKSBkb3VibGUuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICAgIH0sIDgwMCk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3Qgd3JhcCA9IHJvdy5xdWVyeVNlbGVjdG9yKCcudGljay1kb3VibGUnKTsKICAgICAgaWYgKHdyYXApIHdyYXAuY2xhc3NMaXN0LmFkZCgndGljay1kZWxpdmVyZWQnKTsKICAgIH0sIDE4MDApOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnN0IHdyYXAgPSByb3cucXVlcnlTZWxlY3RvcignLnRpY2stZG91YmxlJyk7CiAgICAgIGlmICh3cmFwKSB7CiAgICAgICAgd3JhcC5jbGFzc0xpc3QucmVtb3ZlKCd0aWNrLWRlbGl2ZXJlZCcpOwogICAgICAgIHdyYXAuY2xhc3NMaXN0LmFkZCgndGljay1yZWFkJyk7CiAgICAgIH0KICAgIH0sIDM1MDApOwogIH0KCiAgZnVuY3Rpb24gYWRkTWVzc2FnZSh0ZXh0LCB0eXBlKSB7CiAgICBjaGVja0RhdGVTZXAoKTsKICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcm93LmNsYXNzTmFtZSA9ICdtc2ctcm93ICcgKyB0eXBlOwogICAgY29uc3QgdGljayA9IHR5cGUgPT09ICdvdXQnID8gJzxzcGFuIGNsYXNzPSJidWJibGUtdGljayI+JyArIHRpY2tIVE1MKCkgKyAnPC9zcGFuPicgOiAnJzsKICAgIHJvdy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYnViYmxlIj48ZGl2IGNsYXNzPSJidWJibGUtdGV4dCI+JyArIHRleHQgKyAnPC9kaXY+PGRpdiBjbGFzcz0iYnViYmxlLW1ldGEiPjxzcGFuIGNsYXNzPSJidWJibGUtdGltZSI+JyArIG5vdygpICsgJzwvc3Bhbj4nICsgdGljayArICc8L2Rpdj48L2Rpdj4nOwogICAgY2hhdEFyZWEuaW5zZXJ0QmVmb3JlKHJvdywgdHlwaW5nSW5kaWNhdG9yKTsKICAgIGlmICh0eXBlID09PSAnb3V0JykgYW5pbWF0ZVRpY2tzKHJvdyk7CiAgICBzY3JvbGxCb3R0b20oKTsKICB9CgogIGZ1bmN0aW9uIGFkZEltYWdlTWVzc2FnZShkYXRhVXJsLCBzdGF0dXNFbCkgew0KICAgIGNoZWNrRGF0ZVNlcCgpOw0KICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgIHJvdy5jbGFzc05hbWUgPSAnbXNnLXJvdyBvdXQnOw0KICAgIHJvdy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYnViYmxlIj48ZGl2IGNsYXNzPSJidWJibGUtaW1nIj48aW1nIHNyYz0iJyArIGRhdGFVcmwgKyAnIiBhbHQ9IkltYWdlbSBlbnZpYWRhIj48L2Rpdj48ZGl2IGNsYXNzPSJidWJibGUtbWV0YSI+PHNwYW4gY2xhc3M9ImJ1YmJsZS10aW1lIj4nICsgbm93KCkgKyAnPC9zcGFuPjxzcGFuIGNsYXNzPSJidWJibGUtdGljayI+JyArIHRpY2tIVE1MKCkgKyAnPC9zcGFuPjwvZGl2PjwvZGl2Pic7DQogICAgY2hhdEFyZWEuaW5zZXJ0QmVmb3JlKHJvdywgdHlwaW5nSW5kaWNhdG9yKTsNCiAgICBpZiAoc3RhdHVzRWwpIHJvdy5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLW1ldGEnKS5hcHBlbmRDaGlsZChzdGF0dXNFbCk7DQogICAgYW5pbWF0ZVRpY2tzKHJvdyk7DQogICAgc2Nyb2xsQm90dG9tKCk7DQogICAgcmV0dXJuIHJvdzsNCiAgfQ0KDQogICAgZnVuY3Rpb24gYWRkQXVkaW9NZXNzYWdlKCkgewogICAgY2hlY2tEYXRlU2VwKCk7CiAgICBjb25zdCBiYXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiAyOH0sICgpID0+IHsKICAgICAgY29uc3QgaCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE4KSArIDQ7CiAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9ImhlaWdodDonICsgaCArICdweCI+PC9zcGFuPic7CiAgICB9KS5qb2luKCcnKTsKICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcm93LmNsYXNzTmFtZSA9ICdtc2ctcm93IG91dCc7CiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImJ1YmJsZSI+PGRpdiBjbGFzcz0iYnViYmxlLWF1ZGlvIj48YnV0dG9uIGNsYXNzPSJhdWRpby1wbGF5Ij48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTggNXYxNGwxMS03eiIvPjwvc3ZnPjwvYnV0dG9uPjxkaXYgY2xhc3M9ImF1ZGlvLXdhdmUiPicgKyBiYXJzICsgJzwvZGl2PjxzcGFuIGNsYXNzPSJhdWRpby1kdXJhdGlvbiI+MDonICsgKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyMCkrNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykgKyAnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImJ1YmJsZS1tZXRhIj48c3BhbiBjbGFzcz0iYnViYmxlLXRpbWUiPicgKyBub3coKSArICc8L3NwYW4+PHNwYW4gY2xhc3M9ImJ1YmJsZS10aWNrIj4nICsgdGlja0hUTUwoKSArICc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICAgIGNoYXRBcmVhLmluc2VydEJlZm9yZShyb3csIHR5cGluZ0luZGljYXRvcik7CiAgICBhbmltYXRlVGlja3Mocm93KTsKICAgIHNjcm9sbEJvdHRvbSgpOwogIH0KCiAgZnVuY3Rpb24gYWRkUGRmTWVzc2FnZShmaWxlbmFtZSwgc3RhdHVzRWwsIGZpbGVVcmwpIHsKICAgIGNoZWNrRGF0ZVNlcCgpOwogICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICByb3cuY2xhc3NOYW1lID0gJ21zZy1yb3cgb3V0JzsKICAgIHJvdy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYnViYmxlIiBzdHlsZT0ibWluLXdpZHRoOjIyMHB4JyArIChmaWxlVXJsID8gJztjdXJzb3I6cG9pbnRlcicgOiAnJykgKyAnIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmc6NHB4IDAiPjxkaXYgc3R5bGU9IndpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojNTE1N2FlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXNocmluazowIj48c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjZmZmIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiLz48L3N2Zz48L2Rpdj48ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjojMzAzMDMwO3dvcmQtYnJlYWs6YnJlYWstYWxsIj4nICsgZmlsZW5hbWUgKyAnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzY2Nzc4MTttYXJnaW4tdG9wOjJweCI+JyArIChmaWxlVXJsID8gJ1BERiAtIHRvcXVlIHBhcmEgYWJyaXInIDogJ1BERicpICsgJzwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImJ1YmJsZS1tZXRhIj48c3BhbiBjbGFzcz0iYnViYmxlLXRpbWUiPicgKyBub3coKSArICc8L3NwYW4+PHNwYW4gY2xhc3M9ImJ1YmJsZS10aWNrIj4nICsgdGlja0hUTUwoKSArICc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICAgIGNoYXRBcmVhLmluc2VydEJlZm9yZShyb3csIHR5cGluZ0luZGljYXRvcik7CiAgICBpZiAoc3RhdHVzRWwpIHJvdy5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLW1ldGEnKS5hcHBlbmRDaGlsZChzdGF0dXNFbCk7CiAgICBpZiAoZmlsZVVybCkgewogICAgICBjb25zdCBidWJibGUgPSByb3cucXVlcnlTZWxlY3RvcignLmJ1YmJsZScpOwogICAgICBidWJibGUudGl0bGUgPSAnQWJyaXIgJyArIGZpbGVuYW1lOwogICAgICBidWJibGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgd2luZG93Lm9wZW4oZmlsZVVybCwgJ19ibGFuaycpOwogICAgICB9KTsKICAgIH0KICAgIGFuaW1hdGVUaWNrcyhyb3cpOwogICAgc2Nyb2xsQm90dG9tKCk7CiAgICByZXR1cm4gcm93OwogIH0KICBmdW5jdGlvbiBzY3JvbGxCb3R0b20oKSB7CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICBjaGF0QXJlYS5zY3JvbGxUb3AgPSBjaGF0QXJlYS5zY3JvbGxIZWlnaHQ7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVNlbmRCdG4oKSB7CiAgICBjb25zdCBoYXNUZXh0ID0gaW5wdXRGaWVsZC52YWx1ZS50cmltKCkubGVuZ3RoID4gMDsKICAgIHNlbmRCdG4uY2xhc3NMaXN0LnRvZ2dsZSgndmlzaWJsZScsIGhhc1RleHQpOwogICAgbWljQnRuLnN0eWxlLmRpc3BsYXkgPSBoYXNUZXh0ID8gJ25vbmUnIDogJ2ZsZXgnOwogIH0KCmZ1bmN0aW9uIHNldFVwbG9hZFN0YXR1cyhyb3csIHR4dCwgY29sb3IpIHsKICB2YXIgc3RhdHVzID0gcm93LnF1ZXJ5U2VsZWN0b3IoIi51cGxvYWQtc3RhdHVzIik7CiAgaWYgKCFzdGF0dXMpIHsKICAgIHN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHN0YXR1cy5jbGFzc05hbWUgPSAidXBsb2FkLXN0YXR1cyI7CiAgICBzdGF0dXMuc3R5bGUuY3NzVGV4dCA9ICJmb250LXNpemU6MTBweDtjb2xvcjojODY5NmEwO21hcmdpbi1sZWZ0OjRweCI7CiAgICByb3cucXVlcnlTZWxlY3RvcigiLmJ1YmJsZS1tZXRhIikuYXBwZW5kQ2hpbGQoc3RhdHVzKTsKICB9CiAgc3RhdHVzLnRleHRDb250ZW50ID0gdHh0OwogIGlmIChjb2xvcikgc3RhdHVzLnN0eWxlLmNvbG9yID0gY29sb3I7CiAgcmV0dXJuIHN0YXR1czsKfQoKZnVuY3Rpb24gcG9zdEZpbGUoZm9ybURhdGEpIHsKICB2YXIgY29udHJvbGxlciA9IG51bGw7CiAgdHJ5IHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29udHJvbGxlciA9IG51bGw7CiAgfQogIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgdHJ5IHsKICAgICAgaWYgKGNvbnRyb2xsZXIpIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfSwgNjAwMDApOwogIHZhciBvcHRzID0geyBtZXRob2Q6ICJQT1NUIiwgYm9keTogZm9ybURhdGEgfTsKICBpZiAoY29udHJvbGxlcikgb3B0cy5zaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDsKICByZXR1cm4gZmV0Y2goV0VCSE9PS19VUkwsIG9wdHMpLnRoZW4oCiAgICBmdW5jdGlvbiAocikgewogICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICByZXR1cm4gcjsKICAgIH0sCiAgICBmdW5jdGlvbiAoZXJyKSB7CiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgIHRocm93IGVycjsKICAgIH0sCiAgKTsKfQoKZnVuY3Rpb24gYnVpbGRGb3JtKGZpbGUsIGV4dHJhKSB7CiAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTsKICBmZC5hcHBlbmQoImZpbGUiLCBmaWxlLCBmaWxlLm5hbWUgfHwgImNvbXByb3ZhbnRlIik7CiAgZmQuYXBwZW5kKCJmaWxlbmFtZSIsIGZpbGUubmFtZSB8fCAiY29tcHJvdmFudGUiKTsKICBmZC5hcHBlbmQoIm9yaWdpbmFsTmFtZSIsIChleHRyYSAmJiBleHRyYS5vcmlnaW5hbE5hbWUpIHx8IGZpbGUubmFtZSB8fCAiIik7CiAgZmQuYXBwZW5kKCJtaW1ldHlwZSIsIGZpbGUudHlwZSB8fCAiIik7CiAgZmQuYXBwZW5kKCJ0aXBvIiwgImNvbXByb3ZhbnRlIik7CiAgaWYgKGV4dHJhKQogICAgT2JqZWN0LmtleXMoZXh0cmEpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgaWYgKGsgIT09ICJvcmlnaW5hbE5hbWUiKSBmZC5hcHBlbmQoaywgZXh0cmFba10pOwogICAgfSk7CiAgcmV0dXJuIGZkOwp9CgpmdW5jdGlvbiBpc0ltYWdlRmlsZShmaWxlKSB7CiAgY29uc3QgbmFtZSA9IGZpbGUubmFtZSB8fCAiIjsKICByZXR1cm4gKAogICAgKGZpbGUudHlwZSB8fCAiIikuaW5kZXhPZigiaW1hZ2UvIikgPT09IDAgfHwKICAgIC9cLihqcGU/Z3xwbmd8d2VicHxoZWljfGhlaWZ8Z2lmfGJtcCkkL2kudGVzdChuYW1lKQogICk7Cn0KCi8vIENvbXByaW1lIGEgaW1hZ2VtIG5vIHByw7NwcmlvIGNlbHVsYXI6IEpQRUcgbGV2ZSBxdWUgbyBwYWluZWwgc2VtcHJlIGzDqi4KZnVuY3Rpb24gY29tcHJlc3NJbWFnZShmaWxlKSB7CiAgZnVuY3Rpb24gaXNIZWljKGYpIHsKICAgIHZhciBubSA9IFN0cmluZygoZiAmJiBmLm5hbWUpIHx8ICIiKSArICIgIiArIFN0cmluZygoZiAmJiBmLnR5cGUpIHx8ICIiKTsKICAgIHJldHVybiAvaGVpY3xoZWlmL2kudGVzdChubSk7CiAgfQogIGZ1bmN0aW9uIHJ1bihmKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKICAgICAgdmFyIHVybCA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIE1BWCA9IDE2MDA7CiAgICAgICAgICB2YXIgdyA9IGltZy5uYXR1cmFsV2lkdGggfHwgMTIwMCwKICAgICAgICAgICAgaCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IDE2MDA7CiAgICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbigxLCBNQVggLyBNYXRoLm1heCh3LCBoKSk7CiAgICAgICAgICB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh3ICogc2NhbGUpKTsKICAgICAgICAgIGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGggKiBzY2FsZSkpOwogICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgICAgY2FudmFzLndpZHRoID0gdzsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoOwogICAgICAgICAgY2FudmFzLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGltZywgMCwgMCwgdywgaCk7CiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICAgICAgICBpZiAoY2FudmFzLnRvQmxvYikgewogICAgICAgICAgICBjYW52YXMudG9CbG9iKAogICAgICAgICAgICAgIGZ1bmN0aW9uIChibG9iKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoYmxvYiAmJiB0eXBlb2YgRmlsZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IChmLm5hbWUgfHwgImNvbXByb3ZhbnRlIikucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgIC9cLlthLXowLTldKyQvaSwKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgKICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKFtibG9iXSwgYmFzZSArICIuanBnIiwgeyB0eXBlOiAiaW1hZ2UvanBlZyIgfSksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1hZ2UvanBlZyIsCiAgICAgICAgICAgICAgMC44MiwKICAgICAgICAgICAgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgICAgICAgfSBjYXRjaCAoZTIpIHt9CiAgICAgICAgICByZXNvbHZlKGZpbGUpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgIH07CiAgICAgIGltZy5zcmMgPSB1cmw7CiAgICB9KTsKICB9CiAgaWYgKGlzSGVpYyhmaWxlKSAmJiB0eXBlb2YgaGVpYzJhbnkgIT09ICJ1bmRlZmluZWQiICYmIGhlaWMyYW55KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gaGVpYzJhbnkoeyBibG9iOiBmaWxlLCB0b1R5cGU6ICJpbWFnZS9qcGVnIiwgcXVhbGl0eTogMC44MiB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChvdXQpIHsKICAgICAgICAgIHZhciBiID0gQXJyYXkuaXNBcnJheShvdXQpID8gb3V0WzBdIDogb3V0OwogICAgICAgICAgdmFyIGJhc2UgPSBTdHJpbmcoZmlsZS5uYW1lIHx8ICJjb21wcm92YW50ZSIpLnJlcGxhY2UoCiAgICAgICAgICAgIC9cLlthLXowLTldKyQvaSwKICAgICAgICAgICAgIiIsCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuIHJ1bihuZXcgRmlsZShbYl0sIGJhc2UgKyAiLmpwZyIsIHsgdHlwZTogImltYWdlL2pwZWciIH0pKTsKICAgICAgICB9KQogICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gcnVuKGZpbGUpOwogICAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gcnVuKGZpbGUpOwogICAgfQogIH0KICByZXR1cm4gcnVuKGZpbGUpOwp9CgovLyBTZSBvIHBhaW5lbCByZWN1c2FyIGEgaW1hZ2VtLCByZWVudmlhIGRlbnRybyBkZSB1bSBQREYgKHNlbSByZWNhZGFzdHJhciBuYWRhKS4KZnVuY3Rpb24ganBlZ1RvUGRmQmxvYihqcGVnQmxvYiwgaW1nVywgaW1nSCkgewogIHJldHVybiBqcGVnQmxvYi5hcnJheUJ1ZmZlcigpLnRoZW4oZnVuY3Rpb24gKGJ1ZikgewogICAgY29uc3QgZml0ID0gTWF0aC5taW4oMSwgNTk1IC8gaW1nVyk7CiAgICBjb25zdCBwYWdlVyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaW1nVyAqIGZpdCkpOwogICAgY29uc3QgcGFnZUggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGltZ0ggKiBmaXQpKTsKICAgIGNvbnN0IGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgY29uc3QganBnID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTsKICAgIGNvbnN0IHBhcnRzID0gW107CiAgICBjb25zdCBvZmZzZXRzID0gWzBdOwogICAgZnVuY3Rpb24gcHVzaChiKSB7CiAgICAgIG9mZnNldHMucHVzaChvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV0gKyBiLmxlbmd0aCk7CiAgICAgIHBhcnRzLnB1c2goYik7CiAgICB9CiAgICBwdXNoKGVuYy5lbmNvZGUoIiVQREYtMS40XG4iKSk7CiAgICBwdXNoKGVuYy5lbmNvZGUoIjEgMCBvYmpcbjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAyIDAgUiA+PlxuZW5kb2JqXG4iKSk7CiAgICBwdXNoKAogICAgICBlbmMuZW5jb2RlKAogICAgICAgICIyIDAgb2JqXG48PCAvVHlwZSAvUGFnZXMgL0tpZHMgWzMgMCBSXSAvQ291bnQgMSA+PlxuZW5kb2JqXG4iLAogICAgICApLAogICAgKTsKICAgIHB1c2goCiAgICAgIGVuYy5lbmNvZGUoCiAgICAgICAgIjMgMCBvYmpcbjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL01lZGlhQm94IFswIDAgIiArCiAgICAgICAgICBwYWdlVyArCiAgICAgICAgICAiICIgKwogICAgICAgICAgcGFnZUggKwogICAgICAgICAgIl0gL1Jlc291cmNlcyA8PCAvWE9iamVjdCA8PCAvSW0wIDQgMCBSID4+IC9Qcm9jU2V0IFsvUERGIC9JbWFnZUNdID4+IC9Db250ZW50cyA1IDAgUiA+PlxuZW5kb2JqXG4iLAogICAgICApLAogICAgKTsKICAgIHB1c2goCiAgICAgIGVuYy5lbmNvZGUoCiAgICAgICAgIjQgMCBvYmpcbjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggIiArCiAgICAgICAgICBpbWdXICsKICAgICAgICAgICIgL0hlaWdodCAiICsKICAgICAgICAgIGltZ0ggKwogICAgICAgICAgIiAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRENURGVjb2RlIC9MZW5ndGggIiArCiAgICAgICAgICBqcGcubGVuZ3RoICsKICAgICAgICAgICIgPj5cbnN0cmVhbVxuIiwKICAgICAgKSwKICAgICk7CiAgICBwdXNoKGpwZyk7CiAgICBwdXNoKGVuYy5lbmNvZGUoIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiIpKTsKICAgIGNvbnN0IG9iajVwb3MgPSBvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBjb250ZW50ID0gZW5jLmVuY29kZSgKICAgICAgInFcbiIgKyBwYWdlVyArICIgMCAwICIgKyBwYWdlSCArICIgMCAwIGNtXG4vSW0wIERvXG5RXG4iLAogICAgKTsKICAgIHB1c2goZW5jLmVuY29kZSgiNSAwIG9ialxuPDwgL0xlbmd0aCAiICsgY29udGVudC5sZW5ndGggKyAiID4+XG5zdHJlYW1cbiIpKTsKICAgIHB1c2goY29udGVudCk7CiAgICBwdXNoKGVuYy5lbmNvZGUoImVuZHN0cmVhbVxuZW5kb2JqXG4iKSk7CiAgICBjb25zdCB4cmVmUG9zID0gb2Zmc2V0c1tvZmZzZXRzLmxlbmd0aCAtIDFdOwogICAgbGV0IHhyZWYgPSAieHJlZlxuMCA2XG4wMDAwMDAwMDAwIDY1NTM1IGYgXG4iOwogICAgY29uc3Qgb2JqT2Zmc2V0cyA9IFswLCBvZmZzZXRzWzFdLCBvZmZzZXRzWzJdLCBvZmZzZXRzWzNdLCBvZmZzZXRzWzRdLCBvYmo1cG9zXTsKICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDU7IGkrKykKICAgICAgeHJlZiArPSBTdHJpbmcob2JqT2Zmc2V0c1tpXSkucGFkU3RhcnQoMTAsICIwIikgKyAiIDAwMDAwIG4gXG4iOwogICAgcHVzaCgKICAgICAgZW5jLmVuY29kZSgKICAgICAgICB4cmVmICsKICAgICAgICAgICJ0cmFpbGVyXG48PCAvU2l6ZSA2IC9Sb290IDEgMCBSID4+XG5zdGFydHhyZWZcbiIgKwogICAgICAgICAgeHJlZlBvcyArCiAgICAgICAgICAiXG4lJUVPRiIsCiAgICAgICksCiAgICApOwogICAgcmV0dXJuIG5ldyBCbG9iKHBhcnRzLCB7IHR5cGU6ICJhcHBsaWNhdGlvbi9wZGYiIH0pOwogIH0pOwp9CgpmdW5jdGlvbiByZXRyeUltYWdlQXNQZGYoanBlZ0ZpbGUsIG9yaWdpbmFsTmFtZSwgcm93KSB7CiAgc2V0VXBsb2FkU3RhdHVzKHJvdywgImNvbnZlcnRlbmRvIGVtIFBERi4uLiIpOwogIHZhciBubVRpcG8gPSBTdHJpbmcoKG9yaWdpbmFsTmFtZSB8fCAiIikgKyAiICIgKyAoanBlZ0ZpbGUudHlwZSB8fCAiIikpLnRvTG93ZXJDYXNlKCk7CiAgaWYgKG5tVGlwby5pbmRleE9mKCJoZWljIikgPiAtMSB8fCBubVRpcG8uaW5kZXhPZigiaGVpZiIpID4gLTEpIHsKICAgIHNldFVwbG9hZFN0YXR1cyhyb3csICJFUlJPIiwgIiNlZjUzNTAiKTsKICAgIGFkZE1lc3NhZ2UoIkZvdG8gZW0gZm9ybWF0byBIRUlDIChpUGhvbmUpLiBFbnZpZSBjb21vIFBERiBvdSB0aXJlIHVtIHByaW50IGRhIHRlbGEuIiwgImluIik7CiAgICBzaW11bGF0ZVJlcGx5KCk7CiAgICByZXR1cm47CiAgfQogIHRyeSB7ICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGpwZWdGaWxlKTsKICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgY29uc3QgdyA9IGltZy5uYXR1cmFsV2lkdGggfHwgMTIwMCwKICAgICAgaCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IDE2MDA7CiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICBqcGVnVG9QZGZCbG9iKGpwZWdGaWxlLCB3LCBoKQogICAgICAudGhlbihmdW5jdGlvbiAocGRmQmxvYikgewogICAgICAgIGNvbnN0IGJhc2UgPSAob3JpZ2luYWxOYW1lIHx8ICJjb21wcm92YW50ZSIpLnJlcGxhY2UoCiAgICAgICAgICAvXC5bYS16MC05XSskL2ksCiAgICAgICAgICAiIiwKICAgICAgICApOwogICAgICAgIGNvbnN0IHBkZkZpbGUgPSBuZXcgRmlsZShbcGRmQmxvYl0sIGJhc2UgKyAiLnBkZiIsIHsKICAgICAgICAgIHR5cGU6ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgIH0pOwogICAgICAgIHJldHVybiBwb3N0RmlsZSgKICAgICAgICAgIGJ1aWxkRm9ybShwZGZGaWxlLCB7CiAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICBjb252ZXJzYW86ICJpbWFnZW0tcGFyYS1wZGYiLAogICAgICAgICAgfSksCiAgICAgICAgKTsKICAgICAgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIyKSB7CiAgICAgICAgaWYgKHIyLm9rKSBzZXRVcGxvYWRTdGF0dXMocm93LCAiT0siLCAiIzAwYTg4NCIpOwogICAgICAgIGVsc2Ugc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiRVJSTyIsICIjZWY1MzUwIik7CiAgICAgICAgc2ltdWxhdGVSZXBseSgpOwogICAgICB9KTsKICB9OwogIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkgewogICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgc2ltdWxhdGVSZXBseSgpOwogIH07CiAgaW1nLnNyYyA9IHVybDsKICB9IGNhdGNoIChlKSB7CiAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiRVJSTyIsICIjZWY1MzUwIik7CiAgICBhZGRNZXNzYWdlKCJOYW8gZm9pIHBvc3NpdmVsIGNvbnZlcnRlciBhIGltYWdlbS4gRW52aWUgY29tbyBQREYgb3UgcHJpbnQgZGEgdGVsYS4iLCAiaW4iKTsKICAgIHNpbXVsYXRlUmVwbHkoKTsKICB9Cn0KCmZ1bmN0aW9uIHNlbmRUb044TihmaWxlLCByb3cpIHsKICBzZXRVcGxvYWRTdGF0dXMocm93LCAiZW52aWFuZG8uLi4iKTsKICBjb25zdCBvcmlnaW5hbE5hbWUgPSBmaWxlLm5hbWUgfHwgImNvbXByb3ZhbnRlIjsKICBjb25zdCBpbWFnZSA9IGlzSW1hZ2VGaWxlKGZpbGUpOwogIGNvbnN0IHJlYWR5ID0gaW1hZ2UgPyBjb21wcmVzc0ltYWdlKGZpbGUpIDogUHJvbWlzZS5yZXNvbHZlKGZpbGUpOwogIHJlYWR5CiAgICAudGhlbihmdW5jdGlvbiAodG9TZW5kKSB7CiAgICAgIHJldHVybiBwb3N0RmlsZShidWlsZEZvcm0odG9TZW5kLCB7IG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lIH0pKS50aGVuKAogICAgICAgIGZ1bmN0aW9uIChyKSB7CiAgICAgICAgICByZXR1cm4geyByOiByLCB0b1NlbmQ6IHRvU2VuZCB9OwogICAgICAgIH0sCiAgICAgICk7CiAgICB9KQogICAgLnRoZW4oZnVuY3Rpb24gKG91dCkgewogICAgICBpZiAob3V0LnIub2spIHsKICAgICAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiT0siLCAiIzAwYTg4NCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfSBlbHNlIGlmIChpbWFnZSkgewogICAgICAgIHJldHJ5SW1hZ2VBc1BkZihvdXQudG9TZW5kLCBvcmlnaW5hbE5hbWUsIHJvdyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfQogICAgfSkKICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgIGlmIChpbWFnZSkgewogICAgICAgIGNvbXByZXNzSW1hZ2UoZmlsZSkudGhlbihmdW5jdGlvbiAodG9TZW5kKSB7CiAgICAgICAgICByZXRyeUltYWdlQXNQZGYodG9TZW5kLCBvcmlnaW5hbE5hbWUsIHJvdyk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfQogICAgfSk7Cn0NCg0KICAvLyBBdXRvLXJlc2l6ZSB0ZXh0YXJlYQogIGlucHV0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7CiAgICBpbnB1dEZpZWxkLnN0eWxlLmhlaWdodCA9ICdhdXRvJzsKICAgIGlucHV0RmllbGQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oaW5wdXRGaWVsZC5zY3JvbGxIZWlnaHQsIDEwMCkgKyAncHgnOwogICAgdXBkYXRlU2VuZEJ0bigpOwogIH0pOwoKICAvLyBTZW5kIG1lc3NhZ2UKICBmdW5jdGlvbiBzZW5kTWVzc2FnZSgpIHsKICAgIGNvbnN0IHRleHQgPSBpbnB1dEZpZWxkLnZhbHVlLnRyaW0oKTsKICAgIGlmICghdGV4dCkgcmV0dXJuOwogICAgYWRkTWVzc2FnZSh0ZXh0LCAnb3V0Jyk7CiAgICBpbnB1dEZpZWxkLnZhbHVlID0gJyc7CiAgICBpbnB1dEZpZWxkLnN0eWxlLmhlaWdodCA9ICdhdXRvJzsKICAgIHVwZGF0ZVNlbmRCdG4oKTsKICAgIGNsb3NlUGFuZWxzKCk7CiAgfQoKICBzZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VuZE1lc3NhZ2UpOwoKICBpbnB1dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gewogICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgc2VuZE1lc3NhZ2UoKTsKICAgIH0KICB9KTsKCiAgLy8gRW1vamkgcGFuZWwKICBlbW9qaUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJyk7CiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICB9KTsKCiAgLy8gQXR0YWNoIG1lbnUKICBhdHRhY2hCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGF0dGFjaE1lbnUuY2xhc3NMaXN0LnRvZ2dsZSgnb3BlbicpOwogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgfSk7CgogIGF0dGFjaEltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIGZpbGVJbWcuY2xpY2soKTsKICAgIGF0dGFjaE1lbnUuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOwogIH0pOwoKICBhdHRhY2hEb2MuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBmaWxlRG9jLmNsaWNrKCk7CiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICB9KTsKCiAgYXR0YWNoQXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgIGFkZEF1ZGlvTWVzc2FnZSgpOwogIH0pOwoKZmlsZUltZy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZSkgPT4gewogIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsKICBpZiAoIWZpbGUpIHJldHVybjsKICBpZiAoZmlsZS5zaXplID4gMTUgKiAxMDI0ICogMTAyNCkgewogICAgYWRkTWVzc2FnZSgiQXJxdWl2byBtYWlvciBxdWUgMTVNQi4gRW52aWUgdW1hIGZvdG8gbWVub3Igb3UgdW0gUERGLiIsICJpbiIpOwogICAgZmlsZUltZy52YWx1ZSA9ICIiOwogICAgcmV0dXJuOwogIH0KICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogIHJlYWRlci5vbmxvYWQgPSAoZXYpID0+IHsKICAgIGNvbnN0IHJvdyA9IGFkZEltYWdlTWVzc2FnZShldi50YXJnZXQucmVzdWx0KTsKICAgIHNlbmRUb044TihmaWxlLCByb3cpOwogIH07CiAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgZmlsZUltZy52YWx1ZSA9ICIiOwp9KTsKCiAgZmlsZURvYy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZSkgPT4gewogIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsKICBpZiAoIWZpbGUpIHJldHVybjsKICBpZiAodHlwZW9mIGlzSW1hZ2VGaWxlID09PSAiZnVuY3Rpb24iICYmIGlzSW1hZ2VGaWxlKGZpbGUpKSB7CiAgICBpZiAoZmlsZS5zaXplID4gMTUgKiAxMDI0ICogMTAyNCkgewogICAgICBhZGRNZXNzYWdlKAogICAgICAgICJBcnF1aXZvIG1haW9yIHF1ZSAxNU1CLiBFbnZpZSB1bWEgZm90byBtZW5vciBvdSB1bSBQREYuIiwKICAgICAgICAiaW4iLAogICAgICApOwogICAgICBmaWxlRG9jLnZhbHVlID0gIiI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICByZWFkZXIub25sb2FkID0gKGV2KSA9PiB7CiAgICAgIGNvbnN0IHJvdyA9IGFkZEltYWdlTWVzc2FnZShldi50YXJnZXQucmVzdWx0KTsKICAgICAgc2VuZFRvTjhOKGZpbGUsIHJvdyk7CiAgICB9OwogICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICBmaWxlRG9jLnZhbHVlID0gIiI7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgY29uc3Qgcm93ID0gYWRkUGRmTWVzc2FnZShmaWxlLm5hbWUsIG51bGwsIHVybCk7CiAgc2VuZFRvTjhOKGZpbGUsIHJvdyk7CiAgZmlsZURvYy52YWx1ZSA9ICIiOwp9KTsKCgogIC8vIENsb3NlIHBhbmVscyBvbiBvdXRzaWRlIGNsaWNrCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgaWYgKCFlbW9qaVBhbmVsLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiBlLnRhcmdldCAhPT0gZW1vamlCdG4gJiYgIWVtb2ppQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICBlbW9qaVBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgIH0KICAgIGlmICghYXR0YWNoTWVudS5jb250YWlucyhlLnRhcmdldCkgJiYgZS50YXJnZXQgIT09IGF0dGFjaEJ0biAmJiAhYXR0YWNoQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgIH0KICAgIGlmICghY2hhdE1lbnUuY29udGFpbnMoZS50YXJnZXQpICYmIGUudGFyZ2V0ICE9PSBidG5NZW51ICYmICFidG5NZW51LmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICBjaGF0TWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIGNsb3NlUGFuZWxzKCkgewogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICB9CgogIC8vIEF1ZGlvIHJlY29yZGluZyBzaW11bGF0aW9uCiAgbGV0IGlzUmVjb3JkaW5nID0gZmFsc2U7CiAgbGV0IHJlY0ludGVydmFsID0gbnVsbDsKICBsZXQgcmVjU2Vjb25kcyA9IDA7CgogIG1pY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIGlmIChpc1JlY29yZGluZykgewogICAgICBzdG9wUmVjb3JkaW5nKCk7CiAgICB9IGVsc2UgewogICAgICBzdGFydFJlY29yZGluZygpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBzdGFydFJlY29yZGluZygpIHsKICAgIGlzUmVjb3JkaW5nID0gdHJ1ZTsKICAgIHJlY1NlY29uZHMgPSAwOwogICAgbWljQnRuLmNsYXNzTGlzdC5hZGQoJ3JlY29yZGluZycpOwogICAgaW5wdXRCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHJlY29yZGluZ0Jhci5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIHJlY1RpbWVyLnRleHRDb250ZW50ID0gJzA6MDAnOwogICAgcmVjSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgIHJlY1NlY29uZHMrKzsKICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IocmVjU2Vjb25kcyAvIDYwKTsKICAgICAgY29uc3QgcyA9IHJlY1NlY29uZHMgJSA2MDsKICAgICAgcmVjVGltZXIudGV4dENvbnRlbnQgPSBtICsgJzonICsgcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICB9LCAxMDAwKTsKICB9CgogIGZ1bmN0aW9uIHN0b3BSZWNvcmRpbmcoKSB7CiAgICBpc1JlY29yZGluZyA9IGZhbHNlOwogICAgY2xlYXJJbnRlcnZhbChyZWNJbnRlcnZhbCk7CiAgICBtaWNCdG4uY2xhc3NMaXN0LnJlbW92ZSgncmVjb3JkaW5nJyk7CiAgICByZWNvcmRpbmdCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICBpbnB1dEJhci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgaWYgKHJlY1NlY29uZHMgPiAwKSB7CiAgICAgIGFkZEF1ZGlvTWVzc2FnZSgpOwogICAgfQogIH0KCiAgcmVjQ2FuY2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgaXNSZWNvcmRpbmcgPSBmYWxzZTsKICAgIGNsZWFySW50ZXJ2YWwocmVjSW50ZXJ2YWwpOwogICAgbWljQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ3JlY29yZGluZycpOwogICAgcmVjb3JkaW5nQmFyLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgaW5wdXRCYXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICB9KTsKCiAgcmVjU2VuZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BSZWNvcmRpbmcpOwoKICAvLyBTaW11bGF0ZWQgcmVwbGllcyAtIG9ubHkgZm9yIGltYWdlcyBhbmQgUERGcwogIGZ1bmN0aW9uIHNpbXVsYXRlUmVwbHkoKSB7CiAgICB0eXBpbmdJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICBzY3JvbGxCb3R0b20oKTsKICAgIGNvbnN0IGRlbGF5ID0gMTIwMCArIE1hdGgucmFuZG9tKCkgKiAxODAwOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHR5cGluZ0luZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgYWRkTWVzc2FnZSgnRW52aWFuZG8gcGFyYSBvIEJvbMOjbyBMb3RvIScsICdpbicpOwogICAgfSwgZGVsYXkpOwogIH0KCiAgLy8gw6LigJ3igqzDouKAneKCrCBDQUxMIE9WRVJMQVkgw6LigJ3igqzDouKAneKCrAogIGNvbnN0IGNhbGxPdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGxPdmVybGF5Jyk7CiAgY29uc3QgY2FsbFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsU3RhdHVzJyk7CiAgY29uc3QgY2FsbEVuZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsRW5kQnRuJyk7CiAgY29uc3QgYnRuVmlkZW8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1vZC1pZD0iYnRuLXZpZGVvIl0nKTsKICBjb25zdCBidG5DYWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtb2QtaWQ9ImJ0bi1jYWxsIl0nKTsKCiAgZnVuY3Rpb24gc3RhcnRDYWxsKCkgewogICAgY2FsbE92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICBjYWxsU3RhdHVzLnRleHRDb250ZW50ID0gJ0NoYW1hbmRvLi4uJzsKICAgIGNhbGxTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZSgndW5hdmFpbGFibGUnKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBjYWxsU3RhdHVzLnRleHRDb250ZW50ID0gJ0luZGlzcG9uw612ZWwgcGFyYSBsaWdhw6fDtWVzJzsKICAgICAgY2FsbFN0YXR1cy5jbGFzc0xpc3QuYWRkKCd1bmF2YWlsYWJsZScpOwogICAgfSwgNTAwMCk7CiAgfQoKICBmdW5jdGlvbiBlbmRDYWxsKCkgewogICAgY2FsbE92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgfQoKICBidG5DYWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RhcnRDYWxsKTsKICBidG5WaWRlby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0YXJ0Q2FsbCk7CiAgY2FsbEVuZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGVuZENhbGwpOwoKICAvLyDDouKAneKCrMOi4oCd4oKsIENIQVQgTUVOVSAodHLDqnMgcG9udGluaG9zKSDDouKAneKCrMOi4oCd4oKsCiAgY29uc3QgYnRuTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW9kLWlkPSJidG4tbWVudSJdJyk7CiAgY29uc3QgY2hhdE1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdE1lbnUnKTsKICBjb25zdCBtZW51Q2xlYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudUNsZWFyJyk7CiAgY29uc3QgbWVudUV4cG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51RXhwb3J0Jyk7CgogIGJ0bk1lbnUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGNoYXRNZW51LmNsYXNzTGlzdC50b2dnbGUoJ29wZW4nKTsKICAgIGVtb2ppUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOwogICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgfSk7CgogIG1lbnVDbGVhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIGNoYXRNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjaGF0QXJlYSAubXNnLXJvdycpLmZvckVhY2goKHIpID0+IHIucmVtb3ZlKCkpOwogICAgbGFzdE1lc3NhZ2VEYXRlID0gJyc7CiAgfSk7CgogIG1lbnVFeHBvcnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBjaGF0TWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgICBjb25zdCByb3dzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NoYXRBcmVhIC5tc2ctcm93Jyk7CiAgICBpZiAoIXJvd3MubGVuZ3RoKSByZXR1cm47CiAgICBjb25zdCBsaW5lcyA9IFtdOwogICAgcm93cy5mb3JFYWNoKChyKSA9PiB7CiAgICAgIGxldCB0ZXh0ID0gJyc7CiAgICAgIGNvbnN0IHQgPSByLnF1ZXJ5U2VsZWN0b3IoJy5idWJibGUtdGV4dCcpOwogICAgICBpZiAodCkgdGV4dCA9IHQudGV4dENvbnRlbnQ7CiAgICAgIGVsc2UgaWYgKHIucXVlcnlTZWxlY3RvcignLmJ1YmJsZS1pbWcgaW1nJykpIHRleHQgPSAnW0ltYWdlbV0nOwogICAgICBlbHNlIGlmIChyLnF1ZXJ5U2VsZWN0b3IoJy5idWJibGUtYXVkaW8nKSkgdGV4dCA9ICdbw4F1ZGlvXSc7CiAgICAgIGVsc2UgdGV4dCA9ICdbQXJxdWl2b10nOwogICAgICBjb25zdCB0aW1lID0gci5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLXRpbWUnKTsKICAgICAgbGluZXMucHVzaCgodGltZSA/IHRpbWUudGV4dENvbnRlbnQgOiAnJykgKyAnIC0gJyArIHRleHQpOwogICAgfSk7CiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2xpbmVzLmpvaW4oJ1xuJyldLCB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pOwogICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICBhLmRvd25sb2FkID0gJ2NvbnZlcnNhLW1lc3F1aXRhLnR4dCc7CiAgICBhLmNsaWNrKCk7CiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZik7CiAgfSk7CiAgLy8gSW5pdGlhbCBzY3JvbGwKICBzY3JvbGxCb3R0b20oKTsKfSkoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg=="}