https://ipfs.io/ipfs/QmaSSrURfv7ToPqWjLRLudern5dG8f26oMRsgQMQTp8PW8

files.html, add: logs view, +1 default relay

sha256

7ae750a83b010b3dad7f7b1451f85bf656514dfa386006558be2c3efa11ea7e5 images.html

base64

PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgdXNlci1zY2FsYWJsZT1ubyIvPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL3N2Z2ljb25zLnNwYXJray5mci9zdmdpY29ucy5jc3MiLz4KICAgIDxzdHlsZT4KICAgICAgYm9keSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBmb250LWZhbWlseTogIk5vdG8gU2VyaWYiOwogICAgICB9CiAgICAgIAogICAgICAjcXVlcnlkaXNwbGF5LCAKICAgICAgI2hlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDsKICAgICAgfQogICAgICAKICAgICAgI3JlbGF5cywKICAgICAgI2xvZ3MgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxOGVtOwogICAgICAgIGhlaWdodDogNmVtOwogICAgICAgIGJhY2tncm91bmQ6ICMxMTE7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KICAgICAgCiAgICAgICNsb2dzIHsKICAgICAgICBoZWlnaHQ6IDhlbTsKICAgICAgICBvdmVyZmxvdzogc2Nyb2xsOwogICAgICAgIGZvbnQtc2l6ZTogLjhlbTsKICAgICAgfQogICAgICAKICAgICAgI3JlbGF5cywgCiAgICAgIGlucHV0LnN1Ym1pdCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogLjVlbTsKICAgICAgfQogICAgICAKICAgICAgI3F1ZXJ5ZGlzcGxheSAudGV4dCwgCiAgICAgICNoZWFkZXIgYSwKICAgICAgI21lZGlhLWNvbnRhaW5lciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgICNoZWFkZXIgYSwgCiAgICAgIGZvcm0sIAogICAgICAjcXVlcnlkaXNwbGF5IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMGVtKSB7CiAgICAgICAgI3F1ZXJ5ZGlzcGxheSwKICAgICAgICAjY29udHJvbGluZm8gewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvcm0gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAKICAgICAgI3F1ZXJ5IHsKICAgICAgICB3aWR0aDogNmVtOwogICAgICB9CiAgICAgIAogICAgICAjbG9hZGluZyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMjdlbTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQogICAgICAKICAgICAgYSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CgogICAgICB2aWRlbyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgCiAgICAgICNtZWRpYS1jb250YWluZXIgdmlkZW8gewogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC50eXBlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgI3BpYy1xdWVyeSB7CiAgICAgICAgd2lkdGg6IDVlbTsKICAgICAgfQogICAgICAKICAgICAgI3F1ZXJ5ZGlzcGxheSwgCiAgICAgICNjb250cm9saW5mbywKICAgICAgYSwKICAgICAgaW5wdXQuc3VibWl0IHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQogICAgICAKICAgICAgI3F1ZXJ5ZGlzcGxheSB7CiAgICAgICAgcGFkZGluZzogMCAxZW07CiAgICAgIH0KCiAgICAgICNxdWVyeWRpc3BsYXkgLnRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtaW4td2lkdGg6IDNlbTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAjaGVhZGVyIGEsCiAgICAgICNoZWFkZXIgc3BhbiB7CiAgICAgICAgcGFkZGluZzogMC44ZW07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgICNoZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDAuNDVlbSAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICNoZWFkZXIgLml0ZW1zIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAKICAgICAgI2hlYWRlciAuaXRlbXMsIAogICAgICAjY29udHJvbGluZm8gewogICAgICAgIG1hcmdpbi10b3A6IC4zZW07CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgcGFkZGluZzogLjhlbSAuOGVtIC44ZW0gMDsKICAgICAgfQoKICAgICAgc3BhbiNjb250cm9saW5mbywgCiAgICAgICNwaWNzIGEgPiBhLAogICAgICAjcGljcyAucXVlcnkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgICAKICAgICAgc3BhbiNjb250cm9saW5mbyB7CiAgICAgICAgcmlnaHQ6IDJlbTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHBhZGRpbmc6IDAgMWVtOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgI21lZGlhLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDApOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgei1pbmRleDogNDsKICAgICAgfQogICAgICAKICAgICAgI3BpYy1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAKICAgICAgI3BpYyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDsKICAgICAgfQogICAgICAgIAogICAgICAjcGljcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgI3BpY3MgPiBhLCAKICAgICAgI3BpY3MgaW1nLAogICAgICAjcGljcyAuZmlsZSwKICAgICAgI3BpY3MgLnZpZGVvLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDI1dnc7CiAgICAgIH0KCiAgICAgICNwaWNzID4gYSwKICAgICAgI3BpY3MgLmZpbGUsCiAgICAgICNwaWNzIC52aWRlby1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMjV2dzsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlcjogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zZW07CiAgICAgICAgbWFyZ2luOiAtMC4zZW07CiAgICAgIH0KCiAgICAgICNwaWNzID4gLmZpbGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIAogICAgICAjbWVkaWEtY29udGFpbmVyIHZpZGVvIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CiAgICAgIAogICAgICBib2R5Om5vdCgubm9zdHIpICNmaWx0ZXItbGlrZXMsIAogICAgICAuZmlsdGVyLWxpa2VzICNwaWNzID4gLml0ZW06bm90KC5yZWFjdGVkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucXVlcnksIAogICAgICAubGlrZSwgCiAgICAgICNwaWMtcXVlcnksCiAgICAgICNwaWMtdXNlciB7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3Z3OwogICAgICB9CiAgICAgIAogICAgICAucXVlcnksIAogICAgICAubGlrZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBhZGRpbmc6IDAgMXZ3OwogICAgICB9CiAgICAgIAogICAgICAucXVlcnksIAogICAgICAubGlrZSwgCiAgICAgICNwaWMtcXVlcnkgewogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBmb250LXNpemU6IG1pbigzLjV2dywgMS41ZW0pOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC42KTsKICAgICAgICBtYXgtd2lkdGg6IDVlbTsKICAgICAgfQogICAgICAKICAgICAgI3BpYy1xdWVyeSB7CiAgICAgICAgcGFkZGluZzogLjZlbSAuNGVtIC4xZW0gLjRlbTsKICAgICAgICBtYXgtd2lkdGg6IDVlbTsKICAgICAgfQogICAgICAKICAgICAgLmxpa2UucmVhY3RlZCwKICAgICAgLmZpbHRlci1saWtlcyAjZmlsdGVyLWxpa2VzIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgIH0KCiAgICAgICNwaWMtcXVlcnksCiAgICAgICNwaWMtdXNlciB7CiAgICAgICAgZm9udC1zaXplOiAzZW07CiAgICAgIH0KICAgICAgCiAgICAgICNwaWMtcXVlcnksCiAgICAgICNwaWMtdXNlciwKICAgICAgI21lZGlhLWZvb3RlciAubGlrZSB7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgICNwaWMtcXVlcnksCiAgICAgICNwaWMtdXNlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgICNwaWMtdXNlciB7CiAgICAgICAgYm90dG9tOiAxLjllbTsKICAgICAgICBmb250LXNpemU6IDEuOGVtOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IC42NWVtOwogICAgICAgIG1heC13aWR0aDogOGVtOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIAogICAgICAubGlrZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IC4yZW07CiAgICAgICAgd2lkdGg6IDFlbTsKICAgICAgICBoZWlnaHQ6IDFlbTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm9zdHIgLmxpa2UgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOyAgCiAgICAgIH0KCiAgICAgICNtZWRpYS1mb290ZXIgLmxpa2UgewogICAgICAgIGZvbnQtc2l6ZTogMi40ZW07CiAgICAgIH0KCiAgICAgICNtZWRpYS1mb290ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7ICAKICAgICAgfQogIAogICAgICAjcGljcyBpbWcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgI21lbnUtY29udGVudCAuaXRlbXMgLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzQ0NDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQogICAgICAKICAgICAgI3BpY3MgPiAuYWN0aXZlIHsKICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC5oZWFydHN2ZyBwYXRoIHsKICAgICAgICBzdHJva2U6ICNmZmY7CiAgICAgIH0KICAKICAgICAgYSNtZW51LCBhI2ZpbHRlci1saWtlcyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXRvcDogLS4zZW07CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgYSNtZW51IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBwYWRkaW5nOiAwIC4zZW0gMCAuNWVtOwogICAgICAgIGhlaWdodDogMi4xZW07CiAgICAgIH0KICAgICAgCiAgICAgIGEjZmlsdGVyLWxpa2VzIHsKICAgICAgICBwYWRkaW5nOiAuMmVtOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICB3aWR0aDogMS41ZW07CiAgICAgICAgaGVpZ2h0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IC4xZW0gLjVlbTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGEjZmlsdGVyLWxpa2VzIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEuNWVtOwogICAgICAgIGhlaWdodDogMS41ZW07CiAgICAgIH0KICAgICAgIAogICAgICAubWVudXN2ZyB7CiAgICAgICAgd2lkdGg6IDJlbTsKICAgICAgICBoZWlnaHQ6IDJlbTsKICAgICAgfQoKICAgICAgLm1lbnVzdmcgcGF0aCB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgfQoKICAgICAgI21lbnUtY29udGVudCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICB3aWR0aDogMThlbTsKICAgICAgICBtYXJnaW4tbGVmdDogLTE4ZW07CiAgICAgICAgYmFja2dyb3VuZDogIzIyMjsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMzsgCiAgICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKICAgICAgfQoKICAgICAgI21lbnUtY29udGVudC5vcGVuIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAKICAgICAgI21lbnUtY29udGVudCAuaXRlbXMgewogICAgICAgIHBhZGRpbmc6IDAgMWVtIDFlbSAxZW07CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KICAgICAgCiAgICAgICNtZW51LWNvbnRlbnQgLml0ZW1zIGEsCiAgICAgIGlucHV0LnN1Ym1pdCB7CiAgICAgICAgcGFkZGluZzogLjVlbSAuN2VtOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgICB9CgogICAgICAjbWVudS1vdmVybGF5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIG9wYWNpdHk6IC41OwogICAgICB9CgogICAgICAjbWVudS1vdmVybGF5Lm9wZW4gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIAogICAgICBzdmcsIAogICAgICBpbWcsIAogICAgICAudmlkZW8gdmlkZW8gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjdGVtcGxhdGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0idGVtcGxhdGUiPgogICAgICA8c3ZnIGNsYXNzPSJoZWFydHN2ZyBzdmctaWNvbiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICAgICAgICA8cGF0aCBkPSJNOS43MTksMTcuMDczbC02LjU2Mi02LjUxYy0wLjI3LTAuMjY4LTAuNTA0LTAuNTY3LTAuNjk2LTAuODg4QzEuMzg1LDcuODksMS42Nyw1LjYxMywzLjE1NSw0LjE0YzAuODY0LTAuODU2LDIuMDEyLTEuMzI5LDMuMjMzLTEuMzI5YzEuOTI0LDAsMy4xMTUsMS4xMiwzLjYxMiwxLjc1MmMwLjQ5OS0wLjYzNCwxLjY4OS0xLjc1MiwzLjYxMi0xLjc1MmMxLjIyMSwwLDIuMzY5LDAuNDcyLDMuMjMzLDEuMzI5YzEuNDg0LDEuNDczLDEuNzcxLDMuNzUsMC42OTMsNS41MzdjLTAuMTksMC4zMi0wLjQyNSwwLjYxOC0wLjY5NSwwLjg4N2wtNi41NjIsNi41MUMxMC4xMjUsMTcuMjI5LDkuODc1LDE3LjIyOSw5LjcxOSwxNy4wNzMgTTYuMzg4LDMuNjFDNS4zNzksMy42MSw0LjQzMSw0LDMuNzE3LDQuNzA3QzIuNDk1LDUuOTIsMi4yNTksNy43OTQsMy4xNDUsOS4yNjVjMC4xNTgsMC4yNjUsMC4zNTEsMC41MSwwLjU3NCwwLjczMUwxMCwxNi4yMjhsNi4yODEtNi4yMzJjMC4yMjQtMC4yMjEsMC40MTYtMC40NjYsMC41NzMtMC43MjljMC44ODctMS40NzIsMC42NTEtMy4zNDYtMC41NzEtNC41NkMxNS41Nyw0LDE0LjYyMSwzLjYxLDEzLjYxMiwzLjYxYy0xLjQzLDAtMi42MzksMC43ODYtMy4yNjgsMS44NjNjLTAuMTU0LDAuMjY0LTAuNTM2LDAuMjY0LTAuNjksMEM5LjAyOSw0LjM5Nyw3LjgyLDMuNjEsNi4zODgsMy42MSI+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgICAgPGRpdiBpZD0iY29sc2NzcyI+CiAgICAgIC5jb2xzJHtjb2xzfSAjcGljcyA+IGEsIAogICAgICAuY29scyR7Y29sc30gI3BpY3MgaW1nLAogICAgICAuY29scyR7Y29sc30gI3BpY3MgLmZpbGUsCiAgICAgIC5jb2xzJHtjb2xzfSAjcGljcyAudmlkZW8tY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAvICR7Y29sc30pOwogICAgICB9CgogICAgICAuY29scyR7Y29sc30gI3BpY3MgPiBhLAogICAgICAuY29scyR7Y29sc30gI3BpY3MgPiAuZmlsZSwKICAgICAgLmNvbHMke2NvbHN9ICNwaWNzID4gLnZpZGVvLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZ3IC8gJHtjb2xzfSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2xzJHtjb2xzfSAucXVlcnksCiAgICAgIC5jb2xzJHtjb2xzfSAubGlrZSB7CiAgICAgICAgZm9udC1zaXplOiBtaW4oMTR2dyAqICgxIC8gJHtjb2xzfSksIDZlbSAqICgxIC8gJHtjb2xzfSkpCiAgICAgIH0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9Im1lZGlhLWZvb3RlciI+CiAgICAgIDxhIGlkPSJwaWMtbGlrZSIgY2xhc3M9Imxpa2UiIGhyZWY9IiMiPjwvYT4KICAgICAgPGEgaWQ9InBpYy1xdWVyeSIgaHJlZj0iIyI+PC9hPgogICAgICA8YSBpZD0icGljLXVzZXIiIGhyZWY9IiMiPjwvYT4KICAgIDwvZGl2PgogICAgPGNlbnRlciBpZD0ibWVkaWEtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0icGljLWNvbnRhaW5lciI+CiAgICAgICAgPGltZyBpZD0icGljIi8+CiAgICAgIDwvZGl2PgogICAgPC9jZW50ZXI+CiAgICA8ZGl2IGlkPSJtZW51LW92ZXJsYXkiPjwvZGl2PgogICAgPGRpdiBpZD0ibWVudS1jb250ZW50IiBjbGFzcz0idGVzdCI+CiAgICAgIDxkaXYgY2xhc3M9Iml0ZW1zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+YXV0b3BsYXk6PC9kaXY+CiAgICAgICAgPGEgY2xhc3M9InNldGF1dG9wbGF5IiBkYXRhLWF1dG9wbGF5PSJvbiIgaHJlZj0iIyI+b248L2E+CiAgICAgICAgPGEgY2xhc3M9InNldGF1dG9wbGF5IiBkYXRhLWF1dG9wbGF5PSJvZmYiIGhyZWY9IiMiPm9mZjwvYT4KICAgICAgICA8YSBjbGFzcz0ic2V0YXV0b3BsYXkiIGRhdGEtYXV0b3BsYXk9ImhvdmVyIiBocmVmPSIjIj5tb3VzZW92ZXI8L2E+CiAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPmNvbHM6PC9kaXY+CiAgICAgICAgPGEgY2xhc3M9InNldGNvbHMiIGRhdGEtY29scz0iMiIgaHJlZj0iIyI+MjwvYT4KICAgICAgICA8YSBjbGFzcz0ic2V0Y29scyIgZGF0YS1jb2xzPSI0IiBocmVmPSIjIj40PC9hPgogICAgICAgIDxhIGNsYXNzPSJzZXRjb2xzIiBkYXRhLWNvbHM9IjYiIGhyZWY9IiMiPjY8L2E+CiAgICAgICAgPGEgY2xhc3M9InNldGNvbHMiIGRhdGEtY29scz0iMTAiIGhyZWY9IiMiPjEwPC9hPgogICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj5saW1pdDo8L2Rpdj4KICAgICAgICA8YSBjbGFzcz0ic2V0bGltaXQiIGRhdGEtbGltaXQ9IjE1IiBocmVmPSIjIj4xNTwvYT4KICAgICAgICA8YSBjbGFzcz0ic2V0bGltaXQiIGRhdGEtbGltaXQ9IjMwIiBocmVmPSIjIj4zMDwvYT4KICAgICAgICA8YSBjbGFzcz0ic2V0bGltaXQiIGRhdGEtbGltaXQ9IjEwMCIgaHJlZj0iIyI+MTAwPC9hPgogICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj5yZWxheXM6PC9kaXY+CiAgICAgICAgPGZvcm0gYWN0aW9uPSIjIiBpZD0icmVsYXlzLWZvcm0iPgogICAgICAgICAgPHRleHRhcmVhIGlkPSJyZWxheXMiPjwvdGV4dGFyZWE+CiAgICAgICAgICA8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ic2F2ZSIvPgogICAgICAgIDwvZm9ybT4KICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+bG9nczo8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJsb2dzIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+bGF0ZXN0IHJlbGVhc2U6PC9kaXY+CiAgICAgICAgPGEgaWQ9InJlbGVhc2UiIGhyZWY9IiMiPjwvYT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImhlYWRlciI+CiAgICAgIDxzcGFuIGlkPSJjb250cm9saW5mbyI+Y29udHJvbHM6IGFycm93cywgZW50ZXIsIGVzYzwvc3Bhbj4KICAgICAgPGEgaWQ9ImZpbHRlci1saWtlcyIgaHJlZj0iIyI+PC9hPgogICAgICA8ZGl2IGNsYXNzPSJpdGVtcyI+CiAgICAgICAgPGEgaWQ9Im1lbnUiIGhyZWY9IiMiPgogICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudXN2ZyBzdmctaWNvbiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCQkgICAgICAgIDxwYXRoIGQ9Ik0xMCwxLjQ0NWMtNC43MjYsMC04LjU1NSwzLjgyOS04LjU1NSw4LjU1NWMwLDQuNzI1LDMuODI5LDguNTU1LDguNTU1LDguNTU1YzQuNzI1LDAsOC41NTUtMy44Myw4LjU1NS04LjU1NUMxOC41NTUsNS4yNzQsMTQuNzI1LDEuNDQ1LDEwLDEuNDQ1IE0xMCwxNy42NTRjLTQuMjIxLDAtNy42NTQtMy40MzQtNy42NTQtNy42NTRjMC00LjIyMSwzLjQzMy03LjY1NCw3LjY1NC03LjY1NGM0LjIyMiwwLDcuNjU0LDMuNDMzLDcuNjU0LDcuNjU0QzE3LjY1NCwxNC4yMjEsMTQuMjIyLDE3LjY1NCwxMCwxNy42NTQgTTE0LjM5LDEwYzAsMC4yNDgtMC4yMDMsMC40NS0wLjQ1LDAuNDVINi4wNmMtMC4yNDgsMC0wLjQ1LTAuMjAzLTAuNDUtMC40NXMwLjIwMy0wLjQ1LDAuNDUtMC40NWg3Ljg3OUMxNC4xODcsOS41NSwxNC4zOSw5Ljc1MiwxNC4zOSwxMCBNMTQuMzksMTIuNzAyYzAsMC4yNDctMC4yMDMsMC40NDktMC40NSwwLjQ0OUg2LjA2Yy0wLjI0OCwwLTAuNDUtMC4yMDItMC40NS0wLjQ0OWMwLTAuMjQ4LDAuMjAzLTAuNDUxLDAuNDUtMC40NTFoNy44NzlDMTQuMTg3LDEyLjI1MSwxNC4zOSwxMi40NTQsMTQuMzksMTIuNzAyIE0xNC4zOSw3LjI5OGMwLDAuMjQ4LTAuMjAzLDAuNDUtMC40NSwwLjQ1SDYuMDZjLTAuMjQ4LDAtMC40NS0wLjIwMy0wLjQ1LTAuNDVzMC4yMDMtMC40NSwwLjQ1LTAuNDVoNy44NzlDMTQuMTg3LDYuODQ4LDE0LjM5LDcuMDUxLDE0LjM5LDcuMjk4Ij48L3BhdGg+CgkgICAgICAgIDwvc3ZnPgogICAgICAgIDwvYT4KICAgICAgICA8YSBpZD0idGl0bGUiIGhyZWY9IiMiPmZpbGVzLmh0bWw8L2E+CiAgICAgICAgPGZvcm0gaWQ9InF1ZXJ5LWZvcm0iIGFjdGlvbj0iIyI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InF1ZXJ5IiBuYW1lPSJxdWVyeSIgaWQ9IiIgLz4KICAgICAgICAgIDxzZWxlY3QgaWQ9InF1ZXJ5LXR5cGUiPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiPmFsbDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJpbWFnZSI+aW1hZ2VzPC9vcHRpb24+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InZpZGVvIj52aWRlb3M8L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPGlucHV0IGlkPSJnbyIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iZ28iLz4KICAgICAgICA8L2Zvcm0+CiAgICAgICAgPHNwYW4gaWQ9InF1ZXJ5ZGlzcGxheSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dCI+PC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nIj51cGRhdGluZzwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0icGljcyI+PC9kaXY+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zbG93bGkuZ2l0aHViLmlvL2JlY2gzMi1idWZmZXIvYXNzZXRzL2pzL2JlY2gzMi1idWZmZXIubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgIGNvbnN0IHVwZGF0ZXNwdWJrZXkgPSAiYWU1YzZlMGI3NDY2MGQyMTk0YzgyNTRiNWMyYzgyNTY3NjU3NmJlMDI5NzM3OWZhMjA1MjMxMTRhNmE4NWU4NyIKICAgICAgY29uc3QgcXVlcmllcyA9IHsKICAgICAgICAiZ2xvYmFsIjogJ1siUkVRIiwiPEk+Iix7ImNhY2hlIjpbImV4cGxvcmUiLHsidGltZWZyYW1lIjoibGF0ZXN0Iiwic2NvcGUiOiJnbG9iYWwiLCJsaW1pdCI6PEw+fV19XScsIAogICAgICAgICJhdXRob3IiOiAnWyJSRVEiLCI8ST4iLHsia2luZHMiOlsxXSwiYXV0aG9ycyI6WyI8UD4iXX1dJywKICAgICAgICAicmVhY3Rpb25zIjogJ1siUkVRIiwiPEk+IiwgeyJraW5kcyI6WzddLCIjZSI6IDxFPn1dJwogICAgICB9CiAgICAgIHFzKCIjcmVsYXlzIikudmFsdWUgPSByZWxheXMoKS5qb2luKCJcbiIpCgogICAgICBjb25zdCBjb2xvcHRzID0gWzIsIDQsIDYsIDEwXQoKICAgICAgY29scyA9ICgpID0+IHBhcnNlSW50KHNldHRpbmcoImNvbHMiLCBjb2xvcHRzWzFdKSwgMTApCiAgICAgIGF1dG9wbGF5ID0gKCkgPT4gc2V0dGluZygiYXV0b3BsYXkiLCAib2ZmIikKICAgICAgbGltaXQgPSAoKSA9PiBwYXJzZUludChzZXR0aW5nKCJsaW1pdCIsIDE1KSwgMTApCiAgICAgIAogICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImNvbHMiICsgY29scygpKQogICAgICAKICAgICAgbGV0IHByb3RvY29sID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTW9iaWxlLykgPyAibm9zdHI6IiA6ICJ3ZWIrbm9zdHI6IgogICAgICBsZXQgc29ja2V0cyA9IFtdCiAgICAgIGxldCByZXNoYW5kbGVycyA9IFtdCiAgICAgIGxldCB1cmxzID0gW10KICAgICAgbGV0IHJlYWN0ZWQgPSBbXQogICAgICBsZXQgaWRjb3VudGVyID0gMAogICAgICBsZXQgcXVlcnl3YWl0ID0gbnVsbAogICAgICBsZXQgdHlwZXMgPSB7CiAgICAgICAgaW1hZ2U6IFsicG5nIiwgImpwZyIsICJqcGVnIiwgIndlYnAiXSwKICAgICAgICB2aWRlbzogWyJtcDQiLCAid2VibSJdCiAgICAgIH0KICAgICAgdHlwZXNbImFsbCJdID0gWy4uLnR5cGVzLmltYWdlLCAuLi50eXBlcy52aWRlb10KICAgICAgbGV0IGltZ3JlZ2V4ID0gL2h0dHAofHMpXDpcL1wvW14gXG5dKj9cLihwbmd8anBnfGpwZWd8d2VicCkvZ2kKICAgICAgbGV0IHZpZGVvcmVnZXggPSAvaHR0cCh8cylcOlwvXC9bXiBcbl0qP1wuKG1wNHx3ZWJtKS9naQogICAgICBsZXQgdmlkZW9leHRyZWdleCA9IC9cLihtcDR8d2VibSkkL2kKICAgICAgd2FpdG1zID0gNTAwMAogICAgICBxdWVyeXN0ciA9ICIiCiAgICAgIGxhc3RxdWVyeXN0ciA9ICIiCiAgICAgIGxhc3RxdWVyeXR5cGUgPSAiIgogICAgICAKICAgICAgdXBkYXRlcXVlcnkoKQogICAgICBxcygiI3BpYy1saWtlIikuaW5uZXJIVE1MID0gcXMoIiNmaWx0ZXItbGlrZXMiKS5pbm5lckhUTUwgPSBxcygiI3RlbXBsYXRlIC5oZWFydHN2ZyIpLm91dGVySFRNTAogICAgICBzZXRhY3RpdmUoInNldGNvbHMiLCAiY29scyIsIGNvbHMoKSkKICAgICAgc2V0YWN0aXZlKCJzZXRhdXRvcGxheSIsICJhdXRvcGxheSIsIGF1dG9wbGF5KCkpCiAgICAgIHNldGFjdGl2ZSgic2V0bGltaXQiLCAibGltaXQiLCBsaW1pdCgpKQoKICAgICAgZnVuY3Rpb24gZnJvbUhleFN0cmluZyhzdHIpewogICAgICAgIGxldCBidWZmZXIgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoIC8gMikKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykgewogICAgICAgICAgYnVmZmVyW2ldID0gcGFyc2VJbnQoc3RyLnN1YnN0cigyICogaSwgMiksIDE2KQogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmZmVyCiAgICAgIH0KICAKICAgICAgZnVuY3Rpb24gcmVsYXlzKCl7CiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oInJlbGF5cyIpKSB8fCBbCiAgICAgICAgICAid3NzOi8vbm9zLmxvbCIsCiAgICAgICAgICAid3NzOi8vcmVsYXkubm9zdHIuYmFuZCIsCiAgICAgICAgICAid3NzOi8vcmVsYXkubW9zdHIucHViIgogICAgICAgIF0KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gc2V0dGluZyhrZXksIGRlZmF1bHR2YWx1ZSl7CiAgICAgICAgY29uc3QgdiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkKICAgICAgICByZXR1cm4gdiAmJiBvcHRpb24oInNldCIgKyBrZXksIGtleSwgdikgJiYgdiB8fCBkZWZhdWx0dmFsdWUKICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gb3B0aW9uKGMsIGtleSwgdmFsKXsKICAgICAgICByZXR1cm4gcXMoIi4iICsgYyArICJbZGF0YS0iICsga2V5ICsgIj0nIiArIHZhbCArICInXSIpCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHFzKHEpewogICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHEpCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHFzYShxKXsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHEpKQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBnaWQoaSl7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHF1ZXJ5dHlwZSgpewogICAgICAgIHJldHVybiBxcygiI3F1ZXJ5LXR5cGUiKS52YWx1ZSB8fCAiYWxsIgogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVxdWVyeSgpewogICAgICAgIGxldCBwYXJ0cyA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSkuc3BsaXQoIi8iKQogICAgICAgIHF1ZXJ5c3RyID0gcXMoIiNxdWVyeWRpc3BsYXkgLnRleHQiKS5pbm5lclRleHQgPSBwYXJ0c1swXQogICAgICAgIHFzKCIjcXVlcnkiKS52YWx1ZSA9IHBhcnRzWzBdCiAgICAgICAgcXMoIiNxdWVyeS10eXBlIikudmFsdWUgPSBwYXJ0c1sxXSB8fCAiYWxsIgogICAgICB9CgogICAgICBmdW5jdGlvbiBhY3RpdmUoKXsKICAgICAgICByZXR1cm4gcXMoIiNwaWNzIC5hY3RpdmUiKQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBwaWNvZmZzZXQob2Zmc2V0KXsKICAgICAgICBjb25zdCBwaWNzID0gcXNhKCIjcGljcyA+IC5pdGVtIikuZmlsdGVyKGUgPT4gZS5zdHlsZS5kaXNwbGF5ID09ICJibG9jayIpCiAgICAgICAgcmV0dXJuIHBpY3NbcGljcy5pbmRleE9mKGFjdGl2ZSgpKStvZmZzZXRdCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGxhc3RhY3RpdmUoKXsKICAgICAgICByZXR1cm4gcXNhKCIjcGljcyAuYWN0aXZlIikucG9wKCkgICAgICAKICAgICAgfQoKICAgICAgZnVuY3Rpb24gbWVudSgpewogICAgICAgIHFzYSgiI21lbnUtY29udGVudCwgI21lbnUtb3ZlcmxheSIpLmZvckVhY2gobiA9PiBuLmNsYXNzTGlzdC50b2dnbGUoIm9wZW4iKSkKICAgICAgfQogIAogICAgICBmdW5jdGlvbiBzZXRhY3RpdmUoYywga2V5LCB2YWwpewogICAgICAgIHFzYSgiLiIgKyBjKS5mb3JFYWNoKG4gPT4gbi5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUiKSkKICAgICAgICBjb25zdCBvcHRpb24gPSBxcygiLiIgKyBjICsgIltkYXRhLSIgKyBrZXkgKyAiPSciICsgdmFsICsgIiddIikKICAgICAgICBvcHRpb24/LmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpCiAgICAgIH0KICAgICAgCiAgICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZXZpZGVvcGxheSgpewogICAgICAgIGxldCBlbmFibGVkdmlkZW9zID0gMAogICAgICAgIGxldCB0b3RhbHZpZGVvcyA9IDAKICAgICAgICBsZXQgcmVhZHl2aWRlb3MgPSAwCiAgICAgICAgCiAgICAgICAgcXNhKCIjcGljcyB2aWRlbyIpLmZvckVhY2goYXN5bmMgdiA9PiB7CiAgICAgICAgICB0b3RhbHZpZGVvcysrCiAgICAgICAgICAKICAgICAgICAgIGlmKHYucmVhZHlTdGF0ZSA9PSA0KXsKICAgICAgICAgICAgcmVhZHl2aWRlb3MrKwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBjb25zdCBhcGxheSA9IGF1dG9wbGF5KCkKICAgICAgICAgIGlmKGFwbGF5ICE9ICJvbiIpewogICAgICAgICAgICB2LnBhdXNlKCkKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgY29uc3QgbiA9IHYucGFyZW50RWxlbWVudAogICAgICAgICAgCiAgICAgICAgICBpZigobi5vZmZzZXRUb3AgKyBuLm9mZnNldEhlaWdodCkgPCBzY3JvbGxZIAogICAgICAgICAgfHwgbi5vZmZzZXRUb3AgPiAoc2Nyb2xsWSArIHZpc3VhbFZpZXdwb3J0LmhlaWdodCkpewogICAgICAgICAgICBpZih2LnJlYWR5U3RhdGUgPT0gNCl7CiAgICAgICAgICAgICAgdi5wYXVzZSgpCiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgIHYucHJlbG9hZCA9ICJub25lIgogICAgICAgICAgICB9CiAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgZW5hYmxlZHZpZGVvcysrCiAgICAgICAgICAgIGlmKHYucmVhZHlTdGF0ZSAhPSA0KXsKICAgICAgICAgICAgICB2LnByZWxvYWQgPSAiYXV0byIKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYoKGFwbGF5ID09ICJvbiIgfHwgYXBsYXkgPT0gImhvdmVyIikgJiYgdi5yZWFkeVN0YXRlID09IDQpewogICAgICAgICAgICAgIHYucGxheSgpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KQogICAgICB9CiAgICAgIAogICAgICBhZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB1cGRhdGV2aWRlb3BsYXkoKSkKICAgICAgCiAgICAgIGxldCB0b3VjaCA9IG51bGwKICAgICAgCiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBlID0+IHsKICAgICAgICB0b3VjaCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0KICAgICAgfSkKICAgICAgCiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgZSA9PiB7CiAgICAgICAgY29uc3QgeGRpZmYgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblggLSB0b3VjaC5zY3JlZW5YCiAgICAgICAgY29uc3QgeWRpZmYgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkgLSB0b3VjaC5zY3JlZW5ZCiAgICAgICAgCiAgICAgICAgaWYoeGRpZmYgPCAtNTApewogICAgICAgICAgbmV4dCgpCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKHhkaWZmID4gNTApewogICAgICAgICAgcHJldigpCiAgICAgICAgfQogICAgICB9KQogICAgICAKICAgICAgcXMoIiNxdWVyeS1mb3JtIikuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IiwgZSA9PiB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgbG9jYXRpb24uaGFzaCA9ICIjIiArIGVuY29kZVVSSUNvbXBvbmVudChxcygiI3F1ZXJ5IikudmFsdWUgKyAiLyIgKyBxdWVyeXR5cGUoKSkKICAgICAgICB1cGRhdGVxdWVyeSgpCiAgICAgICAgcXVlcnl3YWl0LnJlc29sdmUoKQogICAgICB9KQoKICAgICAgcXMoIiNyZWxheXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsIGUgPT4gewogICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICAgIGxldCByID0gSlNPTi5zdHJpbmdpZnkocXMoIiNyZWxheXMiKS52YWx1ZS5zcGxpdCgiXG4iKSkKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVsYXlzIiwgcikKICAgICAgICBkaXNjb25uZWN0KCkKICAgICAgICBjb25uZWN0KCkKICAgICAgfSkKCiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIGFzeW5jIChlKSA9PiB7CiAgICAgICAgaWYoYXV0b3BsYXkoKSA9PSAiaG92ZXIiICYmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygidmlkZW8tY29udGFpbmVyIikpewogICAgICAgICAgZS50YXJnZXQucXVlcnlTZWxlY3RvcigidmlkZW8iKS5wbGF5KCkKICAgICAgICB9CiAgICAgIH0pCiAgICAgIAogICAgICBhZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIGFzeW5jIChlKSA9PiB7CiAgICAgICAgaWYocXMoIiNtZWRpYS1jb250YWluZXIiKS5zdHlsZS5kaXNwbGF5ICE9ICJibG9jayIgJiYgYXV0b3BsYXkoKSA9PSAiaG92ZXIiICYmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygidmlkZW8tY29udGFpbmVyIikpewogICAgICAgICAgcXNhKCJ2aWRlbyIpLmZvckVhY2godiA9PiB2LnBhdXNlKCkpCiAgICAgICAgfQogICAgICB9KQogICAgICAKICAgICAgYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoZSkgPT4gewogICAgICAgIGlmKGUudGFyZ2V0LnR5cGUgPT0gInN1Ym1pdCIgfHwgKGUudGFyZ2V0LnRhZ05hbWUgPT0gIkEiICYmIGUudGFyZ2V0LmhyZWYubWF0Y2goL14ofHdlYlwrKW5vc3RyXDovKSkpewogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgCiAgICAgICAgaWYoZS50YXJnZXQuaWQgPT0gInRpdGxlIil7CiAgICAgICAgICBxcygiI3F1ZXJ5IikudmFsdWUgPSAiIgogICAgICAgICAgcXMoIiNxdWVyeS10eXBlIikudmFsdWUgPSAiYWxsIgogICAgICAgICAgcXMoIiNnbyIpLmNsaWNrKCkKICAgICAgICB9CgogICAgICAgIGUucHJldmVudERlZmF1bHQoKQoKICAgICAgICBpZihlLnRhcmdldC5pZCA9PSAiZmlsdGVyLWxpa2VzIil7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImZpbHRlci1saWtlcyIpCiAgICAgICAgICByZXR1cm4KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzaG93IikpewogICAgICAgICAgYWN0aXZlKCk/LmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZSIpCiAgICAgICAgICBnaWQoZS50YXJnZXQuaWQpLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpCiAgICAgICAgICBzaG93KGUudGFyZ2V0LmlkKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGUudGFyZ2V0LnRhZ05hbWUgIT0gIkEiICYmIChxcygiI3BpYy1jb250YWluZXIiKSA9PSBlLnRhcmdldCB8fCBxcygiI21lZGlhLWNvbnRhaW5lciB2aWRlbyIpID09IGUudGFyZ2V0KSl7CiAgICAgICAgICBoaWRlbWVkaWEoKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICBpZihlLnRhcmdldC5pZCA9PSAibWVudSIgfHwgZS50YXJnZXQuaWQgPT0gIm1lbnUtb3ZlcmxheSIpewogICAgICAgICAgbWVudSgpCiAgICAgICAgICByZXR1cm4KICAgICAgICB9CgogICAgICAgIGlmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygic2V0Y29scyIpKXsKICAgICAgICAgIGZvcihsZXQgYyBvZiBjb2xvcHRzKXsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJjb2xzIiArIGMpCiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgiY29scyIgKyBlLnRhcmdldC5kYXRhc2V0LmNvbHMpCiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29scyIsIGUudGFyZ2V0LmRhdGFzZXQuY29scykKICAgICAgICAgIHNldGFjdGl2ZSgic2V0Y29scyIsICJjb2xzIiwgY29scygpKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICBpZihlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInNldGxpbWl0IikpewogICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbWl0IiwgZS50YXJnZXQuZGF0YXNldC5saW1pdCkKICAgICAgICAgIHNldGFjdGl2ZSgic2V0bGltaXQiLCAibGltaXQiLCBsaW1pdCgpKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogIAogICAgICAgIGlmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygic2V0YXV0b3BsYXkiKSl7CiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYXV0b3BsYXkiLCBlLnRhcmdldC5kYXRhc2V0LmF1dG9wbGF5KQogICAgICAgICAgc2V0YWN0aXZlKCJzZXRhdXRvcGxheSIsICJhdXRvcGxheSIsIGF1dG9wbGF5KCkpCiAgICAgICAgICB1cGRhdGV2aWRlb3BsYXkoKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygibGlrZSIpKXsKICAgICAgICAgIGxpa2UoZS50YXJnZXQpCiAgICAgICAgfQogICAgICB9KQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gbGlrZShsaW5rKXsKICAgICAgICBjb25zdCBldmVudCA9IGxpbmsucGFyZW50RWxlbWVudFsiZGF0YS1ldmVudCJdCiAgICAgICAgY29uc3QgcHVia2V5ID0gYXdhaXQgbm9zdHIuZ2V0UHVibGljS2V5KCkKICAgICAgICBjb25zdCBsaWtlID0gYXdhaXQgbm9zdHIuc2lnbkV2ZW50KHsKICAgICAgICAgICJraW5kIjogNywKICAgICAgICAgICJjb250ZW50IjogIisiLAogICAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAgIFsiZSIsIGV2ZW50LmlkXSwKICAgICAgICAgICAgWyJwIiwgZXZlbnQucHVia2V5XQogICAgICAgICAgXSwKICAgICAgICAgICJwdWJrZXkiOiBwdWJrZXksCiAgICAgICAgICAiY3JlYXRlZF9hdCI6IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwICwgMTApCiAgICAgICAgfSkKICAgICAgICAKICAgICAgICBzb2NrZXRzLmZvckVhY2gocyA9PiBzLnNlbmQoSlNPTi5zdHJpbmdpZnkoWyJFVkVOVCIsIGxpa2VdKSkpCgogICAgICAgIGxpbmsuY2xhc3NMaXN0LmFkZCgicmVhY3RlZCIpCgogICAgICAgIGNvbnN0IHBpY2lkID0gbGlua1siZGF0YS1pdGVtLWlkIl0gfHwgbGluay5kYXRhc2V0LnBpY0lkCiAgICAgICAgCiAgICAgICAgaWYocGljaWQpewogICAgICAgICAgZ2lkKHBpY2lkKS5xdWVyeVNlbGVjdG9yKCIubGlrZSIpLmNsYXNzTGlzdC5hZGQoInJlYWN0ZWQiKQogICAgICAgICAgcmVhY3RlZC5wdXNoKHBpY2lkKQogICAgICAgIH0KICAgICAgfQogICAgCiAgICAgIGZ1bmN0aW9uIHByZXYoKXsKICAgICAgICBpZihwaWNvZmZzZXQoLTEpKXsKICAgICAgICAgIHBpY29mZnNldCgtMSkuY2xhc3NMaXN0LmFkZCgiYWN0aXZlIikKICAgICAgICAgIGxhc3RhY3RpdmUoKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUiKQogICAgICAgICAgdXBkYXRlc2hvdygpCiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBuZXh0KCl7CiAgICAgICAgaWYocGljb2Zmc2V0KDEpKXsKICAgICAgICAgIHBpY29mZnNldCgxKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKQogICAgICAgICAgYWN0aXZlKCkuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIikKICAgICAgICAgIHVwZGF0ZXNob3coKQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gdXBkYXRlc2hvdygpewogICAgICAgIGlmKHFzKCIjbWVkaWEtY29udGFpbmVyIikuc3R5bGUuZGlzcGxheSA9PSAiYmxvY2siKXsKICAgICAgICAgIGhpZGV2aWRlbygpCiAgICAgICAgICBzaG93KGFjdGl2ZSgpLmlkKQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGUgPT4gewogICAgICAgIGlmKFsiVGFiIiwgIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoZS5rZXkpKXsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICAgIH0KCiAgICAgICAgaWYoZS5rZXkgPT0gIkVzY2FwZSIpewogICAgICAgICAgbWVudSgpCiAgICAgICAgICByZXR1cm4KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZS5rZXkgPT0gIkVudGVyIiAmJiBlLnRhcmdldC50YWdOYW1lID09ICJCT0RZIil7CiAgICAgICAgICBpZihxcygiI21lZGlhLWNvbnRhaW5lciIpLnN0eWxlLmRpc3BsYXkgPT0gImJsb2NrIil7CiAgICAgICAgICAgIGhpZGVtZWRpYSgpCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBzaG93KGFjdGl2ZSgpLmlkKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICBpZihlLmtleSA9PSAiQXJyb3dVcCIgJiYgcGljb2Zmc2V0KC1jb2xzKCkpKXsKICAgICAgICAgIHBpY29mZnNldCgtY29scygpKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKQogICAgICAgICAgbGFzdGFjdGl2ZSgpLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZSIpCiAgICAgICAgICB1cGRhdGVzaG93KCkKICAgICAgICB9CgogICAgICAgIGlmKGUua2V5ID09ICJBcnJvd0Rvd24iICYmIHBpY29mZnNldChjb2xzKCkpKXsKICAgICAgICAgIHBpY29mZnNldChjb2xzKCkpLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpCiAgICAgICAgICBhY3RpdmUoKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUiKQogICAgICAgICAgdXBkYXRlc2hvdygpCiAgICAgICAgfQoKICAgICAgICBpZihlLmtleSA9PSAiQXJyb3dMZWZ0Iil7CiAgICAgICAgICBwcmV2KCkKICAgICAgICB9CgogICAgICAgIGlmKGUua2V5ID09ICJBcnJvd1JpZ2h0Iil7CiAgICAgICAgICBuZXh0KCkKICAgICAgICB9CiAgICAgIH0pCgogICAgICBhc3luYyBmdW5jdGlvbiBxdWVyeShzb2NrZXQpewogICAgICAgIGxvZygicXVlcnkiLCBzb2NrZXQudXJsKQogICAgICAgIHFzKCIjbG9hZGluZyIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siCiAgICAgICAgCiAgICAgICAgbGV0IHQgPSBEYXRlLm5vdygpCiAgICAgICAgbGV0IHEgPSBxdWVyeXN0ci50cmltKCkKICAgICAgICBsZXQgdHlwZSA9IHF1ZXJ5dHlwZSgpCiAgICAgICAgbGV0IGwgPSBsaW1pdCgpCiAgICAgICAgbGV0IGkgPSArK2lkY291bnRlcgogICAgICAgIGxldCBxaWQgPSAicXVlcnlfIiArIGkKICAgICAgICBsZXQgZmlsdGVycyA9IFtdCiAgICAgICAgCiAgICAgICAgaWYodHlwZSAhPSAiYWxsIil7CiAgICAgICAgICBmaWx0ZXJzLnB1c2goLi4udHlwZXNbdHlwZV0ubWFwKCh0KSA9PiB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAga2luZHM6IFsxXSwgCiAgICAgICAgICAgICAgc2VhcmNoOiAiLiIgKyB0LAogICAgICAgICAgICAgIGxpbWl0OiBsCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZihxLmxlbmd0aCA+IDApewogICAgICAgICAgZmlsdGVycy5wdXNoKHtraW5kczogWzFdLCBzZWFyY2g6IHF9KQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZihmaWx0ZXJzLmxlbmd0aCA9PSAwKXsKICAgICAgICAgIGZpbHRlcnMucHVzaCh7a2luZHM6IFsxXX0pCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvbnN0IHNlYXJjaG9iaiA9IFsiUkVRIiwgcWlkLCAuLi5maWx0ZXJzXQogICAgICAgIGNvbnN0IHNlYXJjaGpzb24gPSBKU09OLnN0cmluZ2lmeShzZWFyY2hvYmopCgogICAgICAgIHNvY2tldC5zZW5kKHNlYXJjaGpzb24pCiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgd2FpdHJlcyhxaWQpCiAgICAgICAgc2F2ZShzb2NrZXQsIHJlcywgcSwgdHlwZSkKICAgICAgICBsb2coInF1ZXJ5IHJlcyIsIHJlcy5sZW5ndGgsIHNvY2tldC51cmwpCiAgICAgICAgcXMoIiNsb2FkaW5nIikuc3R5bGUuZGlzcGxheSA9ICJub25lIgogICAgICAgIGxldCB3YWl0ID0gd2FpdG1zIC0gKERhdGUubm93KCkgLSB0KQogICAgICAgIHF1ZXJ5d2FpdCA9IHNsZWVwKHdhaXQpCiAgICAgICAgYXdhaXQgcXVlcnl3YWl0LnByb21pc2UKICAgICAgICBxdWVyeShzb2NrZXQpCiAgICAgIH0KICAgICAgCiAgICAgIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5bGlrZXMoc29ja2V0LCBldmVudGlkcyl7CiAgICAgICAgaWYoIXdpbmRvdy5ub3N0cil7CiAgICAgICAgICByZXR1cm4gW10KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgbXlwdWJrZXkgPSBhd2FpdCBub3N0ci5nZXRQdWJsaWNLZXkoKQogICAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgWzddLCBldmVudGlkcywgW215cHVia2V5XSkKICAgICAgICAKICAgICAgICByZXR1cm4gZXZlbnRzLm1hcChlID0+IGUudGFncy5maW5kKHQgPT4gdFswXSA9PSAiZSIpWzFdKQogICAgICB9CgogICAgICBhc3luYyBmdW5jdGlvbiBxdWVyeWV2ZW50cyhzb2NrZXQsIGtpbmRzLCBldmVudGlkcywgYXV0aG9ycyl7CiAgICAgICAgY29uc3QgcXVlcnlpZCA9ICJldmVudHNfIiArICgrK2lkY291bnRlcikKICAgICAgICBjb25zdCBmaWx0ZXJzID0ge30KICAgICAgICAKICAgICAgICBmaWx0ZXJzLmtpbmRzID0ga2luZHMKICAgICAgICAKICAgICAgICBpZihldmVudGlkcyl7CiAgICAgICAgICBmaWx0ZXJzWyIjZSJdID0gZXZlbnRpZHMKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoYXV0aG9ycyl7CiAgICAgICAgICBmaWx0ZXJzWyJhdXRob3JzIl0gPSBhdXRob3JzCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShbCiAgICAgICAgICAiUkVRIiwgCiAgICAgICAgICBxdWVyeWlkLCAKICAgICAgICAgIGZpbHRlcnMKICAgICAgICBdKQogICAgICAgIAogICAgICAgIHNvY2tldC5zZW5kKGpzb24pCiAgICAgICAgCiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRyZXMocXVlcnlpZCkgfHwgW10KICAgICAgfQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gcXVlcnlwdWJrZXkoc29ja2V0LCBwdWJrZXkpewogICAgICAgIGNvbnN0IHF1ZXJ5aWQgPSAicXVlcnlfIiArICgrK2lkY291bnRlcikKICAgICAgICBzb2NrZXQuc2VuZChxdWVyaWVzLmF1dGhvci5yZXBsYWNlKCI8ST4iLCBxdWVyeWlkKS5yZXBsYWNlKCI8UD4iLCBwdWJrZXkpKQoKICAgICAgICByZXR1cm4gKGF3YWl0IHdhaXRyZXMocXVlcnlpZCkpCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHNhdmVyZXN1bHRzKGV2ZW50LCByZWdleCwgbWV0YWV2ZW50cywgcmVhY3RlZGV2ZW50aWRzKXsKICAgICAgICBsZXQgcmVzdWx0cyA9IFtdCiAgICAgICAgCiAgICAgICAgZm9yKGxldCB1cmwgb2YgZXZlbnQuY29udGVudC5tYXRjaChyZWdleCkgfHwgW10pewogICAgICAgICAgaWYoIXVybHMuaW5jbHVkZXModXJsKSl7CiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBtZXRhZXZlbnRzLmZpbmQobyA9PiBvLnB1YmtleSA9PSBldmVudC5wdWJrZXkpCiAgICAgICAgICAgIAogICAgICAgICAgICB1cmxzLnB1c2godXJsKQogICAgICAgICAgICByZXN1bHRzLnB1c2goewogICAgICAgICAgICAgIHJlYWN0ZWQ6IHJlYWN0ZWRldmVudGlkcy5pbmNsdWRlcyhldmVudC5pZCksIAogICAgICAgICAgICAgIHVybDogdXJsLCAKICAgICAgICAgICAgICBldmVudDogZXZlbnQsIAogICAgICAgICAgICAgIGJlY2gzMmlkOiBiZWNoMzIuZW5jb2RlKCJub3RlIiwgZnJvbUhleFN0cmluZyhldmVudC5pZCkpLAogICAgICAgICAgICAgIG1ldGE6IG1ldGEKICAgICAgICAgICAgfSkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHJlc3VsdHMKICAgICAgfQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gc2F2ZShzb2NrZXQsIGV2ZW50ZGIsIHEsIHF0eXBlKXsKICAgICAgICBsZXQgZXZlbnRwdWJrZXlzID0gW10KICAgICAgICBjb25zdCBldmVudHMgPSBldmVudGRiLmZpbHRlcihvID0+IHsKICAgICAgICAgIGlmKHEubGVuZ3RoID4gMCl7CiAgICAgICAgICAgIGZvcihsZXQgd29yZCBvZiBxLnNwbGl0KCIgIikpewogICAgICAgICAgICAgIGlmKG8uY29udGVudC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yod29yZC50b0xvd2VyQ2FzZSgpKSA9PSAtMSl7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgaWYoby5raW5kID09IDEpewogICAgICAgICAgICBldmVudHB1YmtleXMuaW5jbHVkZXMoby5wdWJrZXkpIHx8IGV2ZW50cHVia2V5cy5wdXNoKG8ucHVia2V5KQogICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICB9KQoKICAgICAgICBsZXQgcmVzdWx0cyA9IFtdCiAgICAgICAgY29uc3QgZXZlbnRpZHMgPSBldmVudHMubWFwKGUgPT4gZS5pZCkKICAgICAgICBsZXQgbWV0YWV2ZW50cyA9IFtdCiAgICAgICAgbGV0IHJlYWN0ZWRldmVudGlkcyA9IFtdCiAgICAgICAgCiAgICAgICAgbG9nKCJxdWVyeSBtZXRhIiwgc29ja2V0LnVybCkKICAgICAgICAKICAgICAgICBtZXRhZXZlbnRzLnB1c2goLi4uKGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgWzBdLCBudWxsLCBldmVudHB1YmtleXMpKSkKICAgICAgICByZWFjdGVkZXZlbnRpZHMucHVzaCguLi4oYXdhaXQgcXVlcnlsaWtlcyhzb2NrZXQsIGV2ZW50aWRzKSkpCgogICAgICAgIGZvcihsZXQgZXZlbnQgb2YgZXZlbnRzKXsKICAgICAgICAgIGlmKHF0eXBlICE9ICJ2aWRlbyIpewogICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uc2F2ZXJlc3VsdHMoZXZlbnQsIGltZ3JlZ2V4LCBtZXRhZXZlbnRzLCByZWFjdGVkZXZlbnRpZHMpKQogICAgICAgICAgfQoKICAgICAgICAgIGlmKHF0eXBlICE9ICJpbWFnZSIpewogICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uc2F2ZXJlc3VsdHMoZXZlbnQsIHZpZGVvcmVnZXgsIG1ldGFldmVudHMsIHJlYWN0ZWRldmVudGlkcykpCiAgICAgICAgICB9CiAgICAgICAgfQogIAogICAgICAgIGxvZygic2F2ZSByZXMiLCByZXN1bHRzLmxlbmd0aCwgc29ja2V0LnVybCkKICAgICAgICB1cGRhdGVjb250ZW50KHJlc3VsdHMsIHEpCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZWNvbnRlbnQocmVzdWx0cywgcSl7CiAgICAgICAgcmVzdWx0cy5yZXZlcnNlKCkuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgIGNvbnN0IHR5cGUgPSBpdGVtLnVybC5tYXRjaCh2aWRlb2V4dHJlZ2V4KSAmJiAidmlkZW8iIHx8ICJwaWMiCiAgICAgICAgICBjb25zdCB0ZXh0ID0gKHEgfHwgInZpZXcgbm90ZSIpLnN1YnN0cmluZygtMzApCiAgICAgICAgICBjb25zdCBpZCA9ICJpdGVtXyIgKyAoKytpZGNvdW50ZXIpCiAgICAgICAgICBjb25zdCBjb250ZW50ZWxlbWVudHMgPSAnPGRpdiBjbGFzcz0idHlwZSI+JyArIHR5cGUgKyAnPC9kaXY+PGEgY2xhc3M9Imxpa2UnICsgKGl0ZW0ucmVhY3RlZCA/ICcgcmVhY3RlZCcgOiAnJykgKyAnIiBkYXRhLWl0ZW0taWQ9IicgKyBpZCArIAogICAgICAgICAgICAnIiBocmVmPSIjIj4nICsgcXMoIiN0ZW1wbGF0ZSAuaGVhcnRzdmciKS5vdXRlckhUTUwgKyAnPC9hPjxhIGNsYXNzPSJxdWVyeSIgaHJlZj0iJyArIHByb3RvY29sICsgCiAgICAgICAgICAgIGl0ZW0uYmVjaDMyaWQgKyAnIj4nICsgdGV4dCArICc8L2E+JwogICAgICAgICAgbGV0IHJvb3QgPSBudWxsCiAgICAgICAgICAKICAgICAgICAgIGlmKGl0ZW0udXJsLm1hdGNoKHZpZGVvZXh0cmVnZXgpKXsKICAgICAgICAgICAgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpCiAgICAgICAgICAgIHJvb3QuY2xhc3NMaXN0LmFkZCgidmlkZW8tY29udGFpbmVyIikKICAgICAgICAgICAgcm9vdC5pbm5lckhUTUwgPSBjb250ZW50ZWxlbWVudHMKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IHYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpCiAgICAgICAgICAgIHZbImRhdGEtaXRlbS1pZCJdID0gaWQKICAgICAgICAgICAgdi5wcmVsb2FkID0gIm5vbmUiCiAgICAgICAgICAgIHYubG9vcCA9IHRydWUKICAgICAgICAgICAgdi5tdXRlZCA9IHRydWUKICAgICAgICAgICAgdi5wbGF5c2lubGluZSA9ICIiCiAgICAgICAgICAgIC8vcm9vdC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIgogICAgICAgICAgICAKICAgICAgICAgICAgdi5vbmNhbnBsYXkgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBhc3BlY3QgPSB0aGlzLnZpZGVvV2lkdGggLyB0aGlzLnZpZGVvSGVpZ2h0CiAgICAgICAgICAgICAgaWYoYXNwZWN0ID4gMSl7CiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLndpZHRoID0gKGFzcGVjdCAqIDEwMCkgKyAiJSIKICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gKDEgLyBhc3BlY3QgKiAxMDApICsgIiUiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIHVwZGF0ZXZpZGVvcGxheSgpCiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siCiAgICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICAgIGNvbnN0IGV4dCA9IGl0ZW0udXJsLm1hdGNoKHZpZGVvZXh0cmVnZXgpWzFdCiAgICAgICAgICAgIHYuaW5uZXJIVE1MID0gJzxzb3VyY2Ugc3JjPSInICsgaXRlbS51cmwgKyAnIiB0eXBlPSJ2aWRlby8nICsgZXh0ICsgJyI+PC9zb3VyY2U+JwogICAgICAgICAgICAKICAgICAgICAgICAgcm9vdC5hcHBlbmQodikKICAgICAgICAgIH1lbHNlewogICAgICAgICAgICByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpCiAgICAgICAgICAgIHJvb3QuaHJlZiA9ICIjIgogICAgICAgICAgICByb290LmlubmVySFRNTCA9IGNvbnRlbnRlbGVtZW50cwogICAgICAgICAgICAgIAogICAgICAgICAgICBpZih0eXBlID09ICJwaWMiKXsKICAgICAgICAgICAgICByb290LmlubmVySFRNTCArPSAnPGltZyBvbmxvYWQ9ImdpZChcJycgKyBpZCArICdcJykuc3R5bGUuZGlzcGxheT1cJ2Jsb2NrXCciIHNyYz0iJyArIGl0ZW0udXJsICsgJyIvPicKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgcm9vdC5pbm5lckhUTUwgKz0gJzxzcGFuIGNsYXNzPSJmaWxlIj4nICsgaXRlbS51cmwgKyAnPC9zcGFuPicKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICByb290LmlkID0gaWQKICAgICAgICAgIHJvb3RbImRhdGEtaXRlbSJdID0gaXRlbQogICAgICAgICAgcm9vdFsiZGF0YS1ldmVudCJdID0gaXRlbS5ldmVudAogICAgICAgICAgcm9vdFsiZGF0YS1xdWVyeSJdID0gcQogICAgICAgICAgcm9vdFsiZGF0YS10ZXh0Il0gPSB0ZXh0CiAgICAgICAgICAKICAgICAgICAgIHJvb3QuY2xhc3NMaXN0LmFkZCh0eXBlKQogICAgICAgICAgcm9vdC5jbGFzc0xpc3QuYWRkKCJpdGVtIikKICAgICAgICAgIHJvb3QuY2xhc3NMaXN0LmFkZCgic2hvdyIpCiAgICAgICAgICAKICAgICAgICAgIGlmKGl0ZW0ucmVhY3RlZCl7CiAgICAgICAgICAgIHJvb3QuY2xhc3NMaXN0LmFkZCgicmVhY3RlZCIpCiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIHFzKCIjcGljcyIpLnByZXBlbmQocm9vdCkKICAgICAgICB9KQoKICAgICAgICBpZihhY3RpdmUoKSA9PSBudWxsKXsKICAgICAgICAgIHFzKCIjcGljcyAuaXRlbSIpPy5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKQogICAgICAgIH0KICAgICAgICAKICAgICAgICB1cGRhdGV2aWRlb3BsYXkoKQogICAgICB9CgogICAgICBmdW5jdGlvbiBoaWRlbWVkaWEoKXsKICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gInNjcm9sbCIKICAgICAgICBxc2EoIiNtZWRpYS1jb250YWluZXIsICNwaWMsICNtZWRpYS1mb290ZXIiKS5mb3JFYWNoKG4gPT4gbi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiKQogICAgICAgIGdpZCgicGljLWxpa2UiKS5jbGFzc0xpc3QucmVtb3ZlKCJyZWFjdGVkIikKICAgICAgICBoaWRldmlkZW8oKQogICAgICB9CgogICAgICBmdW5jdGlvbiBoaWRldmlkZW8oKXsKICAgICAgICBjb25zdCB2ID0gcXMoIiNtZWRpYS1jb250YWluZXIgdmlkZW8iKQogICAgICAgIAogICAgICAgIGlmKHYpewogICAgICAgICAgdi5tdXRlZCA9IHRydWUKICAgICAgICAgIGdpZCh2WyJkYXRhLWl0ZW0taWQiXSkuYXBwZW5kQ2hpbGQodikKICAgICAgICAgIHVwZGF0ZXZpZGVvcGxheSgpCiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiB3YWl0cmVzKGtleSl7CiAgICAgICAgbGV0IGV2ZW50cyA9IFtdCiAgICAgICAgCiAgICAgICAgbGV0IHJlc2hhbmRsZXIgPSBmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewogICAgICAgICAgdGhpcy5oYW5kbGUgPSBmdW5jdGlvbihyZXMpewogICAgICAgICAgICB0aGlzLmtleSA9IGtleQogICAgICAgICAgICBsZXQgbyA9IEpTT04ucGFyc2UocmVzLmRhdGEpCiAgICAgICAgICAgIGlmKG9bMV0gPT0ga2V5KXsKICAgICAgICAgICAgICBpZihvWzBdID09ICJFT1NFIil7CiAgICAgICAgICAgICAgICByZXNvbHZlKGV2ZW50cykKICAgICAgICAgICAgICAgIHJlc2hhbmRsZXJzLnNwbGljZShyZXNoYW5kbGVycy5pbmRleE9mKHRoaXMpLCAxKQogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBldmVudHMucHVzaChvWzJdKQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgIHJlc2hhbmRsZXJzLnB1c2gobmV3IHJlc2hhbmRsZXIocmVzb2x2ZSwgcmVqZWN0KSkKICAgICAgICB9KQogICAgICB9CiAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gY2hlY2t1cGRhdGUoc29ja2V0KXsKICAgICAgICBjb25zdCB1cGRhdGVzcmVzID0gYXdhaXQgcXVlcnlwdWJrZXkoc29ja2V0LCB1cGRhdGVzcHVia2V5KQogICAgICAgIGNvbnN0IHVwZGF0ZW5vdGUgPSB1cGRhdGVzcmVzLmZpbmQobiA9PiBuLmNvbnRlbnQubWF0Y2goL15odHRwc1w6XC9cLy8pKQogICAgICAgIAogICAgICAgIGlmKCF1cGRhdGVub3RlKXsKICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgICAKICAgICAgICBjb25zdCBhZ2UgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC8gMTAwMCAtIHVwZGF0ZW5vdGUuY3JlYXRlZF9hdCkgLyAzNjAwIC8gMjQpCiAgICAgICAgY29uc3Qgbm90ZWlkID0gYmVjaDMyLmVuY29kZSgibm90ZSIsIGZyb21IZXhTdHJpbmcodXBkYXRlbm90ZS5pZCkpCiAgICAgICAgcXMoIiNyZWxlYXNlIikuaHJlZiA9IHByb3RvY29sICsgbm90ZWlkCiAgICAgICAgcXMoIiNyZWxlYXNlIikuaW5uZXJUZXh0ID0gKGFnZSA9PSAwICYmICJ0b2RheSIgfHwgYWdlICsgIiBkYXkocykgYWdvIikKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2xlZXAobXMpewogICAgICAgIHJldHVybiBuZXcgZnVuY3Rpb24oKXsKICAgICAgICAgIGxldCB0aW1lb3V0ID0gbnVsbAogICAgICAgICAgbGV0IHIgPSBudWxsCiAgICAgICAgICAKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByb21pc2U6IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7CiAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCBtcykKICAgICAgICAgICAgICByID0gcmVzb2x2ZQogICAgICAgICAgICB9KSwKICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCkKICAgICAgICAgICAgICByKCkKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gc2hvdyhpZCl7CiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iCiAgICAgICAgY29uc3QgaXRlbSA9IGdpZChpZClbImRhdGEtaXRlbSJdCiAgICAgICAgY29uc3QgbWVkaWEgPSBnaWQoIm1lZGlhLWNvbnRhaW5lciIpCiAgICAgICAgCiAgICAgICAgaWYoaXRlbS51cmwubWF0Y2godmlkZW9leHRyZWdleCkpewogICAgICAgICAgY29uc3QgdiA9IGdpZChpZCkucXVlcnlTZWxlY3RvcigidmlkZW8iKQogICAgICAgICAgcXMoIiNtZWRpYS1jb250YWluZXIiKS5hcHBlbmRDaGlsZCh2KQogICAgICAgICAgdi5tdXRlZCA9IGZhbHNlCiAgICAgICAgICB2LnBsYXkoKQogICAgICAgIH1lbHNlewogICAgICAgICAgY29uc3QgcGljID0gZ2lkKCJwaWMiKQogICAgICAgICAgcGljLnNyYyA9IGl0ZW0udXJsCiAgICAgICAgICBwaWMub25sb2FkID0gKCkgPT4gKHBpYy5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIikKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoaXRlbS5tZXRhKXsKICAgICAgICAgIGNvbnN0IG1ldGFjb250ZW50ID0gSlNPTi5wYXJzZShpdGVtLm1ldGEuY29udGVudCkKICAgICAgICAgIGNvbnN0IG5hbWUgPSBtZXRhY29udGVudC5kaXNwbGF5X25hbWUgfHwgbWV0YWNvbnRlbnQubmFtZQogICAgICAgICAgcXMoIiNwaWMtdXNlciIpLmhyZWYgPSBwcm90b2NvbCArIGJlY2gzMi5lbmNvZGUoIm5wdWIiLCBmcm9tSGV4U3RyaW5nKGl0ZW0ubWV0YS5wdWJrZXkpKQogICAgICAgICAgcXMoIiNwaWMtdXNlciIpLmlubmVyVGV4dCA9IG5hbWUKICAgICAgICB9CgogICAgICAgIGdpZCgicGljLWxpa2UiKVsiZGF0YS1pdGVtLWlkIl0gPSBpZAogICAgICAgIGdpZCgibWVkaWEtZm9vdGVyIilbImRhdGEtZXZlbnQiXSA9IGl0ZW0uZXZlbnQKCiAgICAgICAgaWYoaXRlbS5yZWFjdGVkIHx8IHJlYWN0ZWQuaW5jbHVkZXMoaWQpKXsKICAgICAgICAgIGdpZCgicGljLWxpa2UiKS5jbGFzc0xpc3QuYWRkKCJyZWFjdGVkIikKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgYSA9IHFzKCIjcGljLXF1ZXJ5IikKICAgICAgICBhLmhyZWYgPSBwcm90b2NvbCArIGl0ZW0uYmVjaDMyaWQKICAgICAgICBhLmlubmVyVGV4dCA9IGdpZChpZClbImRhdGEtdGV4dCJdCiAgICAgICAgICAKICAgICAgICBtZWRpYS5zdHlsZS5kaXNwbGF5ID0gZ2lkKCJtZWRpYS1mb290ZXIiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIgogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb25uY291bnQoKXsKICAgICAgICByZXR1cm4gc29ja2V0cy5maWx0ZXIociA9PiByLnJlYWR5U3RhdGUgPT0gMSkubGVuZ3RoCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKXsKICAgICAgICBmb3IobGV0IHNvY2tldCBvZiBzb2NrZXRzKXsKICAgICAgICAgIHNvY2tldC5jbG9zZSgpCiAgICAgICAgfQogICAgICAgIAogICAgICAgIHNvY2tldHMuc3BsaWNlKDApCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpewogICAgICAgIGxldCBzY3JvbGwgPSBxcygiI2xvZ3MiKS5zY3JvbGxUb3AgPT0gcXMoIiNsb2dzIikuc2Nyb2xsVG9wTWF4CiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikKICAgICAgICBkaXYuaW5uZXJUZXh0ID0gQXJyYXkuZnJvbShhcmd1bWVudHMpLmpvaW4oIiAiKQogICAgICAgIHFzKCIjbG9ncyIpLmFwcGVuZChkaXYpCiAgICAgICAgCiAgICAgICAgaWYoc2Nyb2xsKXsKICAgICAgICAgIHFzKCIjbG9ncyIpLnNjcm9sbFRvKDAsIHFzKCIjbG9ncyIpLnNjcm9sbFRvcE1heCkKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGNvbm5lY3QoKXsKICAgICAgICBmb3IobGV0IHJlbGF5IG9mIHJlbGF5cygpKXsKICAgICAgICAgIGlmKHJlbGF5LnJlYWR5U3RhdGUgPT0gMSl7CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIGxvZygiY29ubmVjdGluZyIsIHJlbGF5KQogICAgICAgICAgbGV0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQocmVsYXkpCiAgICAgICAgICBzb2NrZXRzLnB1c2goc29ja2V0KQogICAgICAgICAgc29ja2V0Lm9ubWVzc2FnZSA9IG1lc3NhZ2UgPT4gcmVzaGFuZGxlcnMuZm9yRWFjaChyaCA9PiByaC5oYW5kbGUobWVzc2FnZSkpCiAgICAgICAgICBzb2NrZXQub25jbG9zZSA9IGFzeW5jIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGxvZygiZGlzY29ubmVjdGVkIiwgdGhpcy51cmwsIGNvbm5jb3VudCgpKQogICAgICAgICAgfQogICAgICAgICAgc29ja2V0Lm9ub3BlbiA9IGFzeW5jIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBsb2coImNvbm5lY3RlZCIsIHRoaXMudXJsLCBjb25uY291bnQoKSkKICAgICAgICAgICAgY2hlY2t1cGRhdGUodGhpcykKICAgICAgICAgICAgcXVlcnkoc29ja2V0KQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25uZWN0KCkKICAgICAgICAKICAgICAgICBhd2FpdCBzbGVlcCgxMDApLnByb21pc2UKICAgICAgICAKICAgICAgICBpZih3aW5kb3cubm9zdHIpewogICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJub3N0ciIpCiAgICAgICAgfQogICAgICB9KQogICAgICAKICAgICAgZm9yKGxldCBjIG9mIGNvbG9wdHMpewogICAgICAgIGRvY3VtZW50LndyaXRlKCc8c3R5bGU+JyArIGNvbHNjc3MuaW5uZXJUZXh0LnJlcGxhY2UoL1wkXHtjb2xzXH0vZywgYykgKyAnPC9zdHlsZT4nKQogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K

Reply to this note

Please Login to reply.

Discussion

No replies yet.