@sprig-technologies/sprig-browser 2.14.4 → 2.14.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controller/controller.d.ts.map +1 -1
- package/controller/encodedViewJs.d.ts +2 -1
- package/controller/encodedViewJs.d.ts.map +1 -1
- package/controller/encodedViewJs.js +1 -1
- package/controller/queue.d.ts +1 -17
- package/controller/queue.d.ts.map +1 -1
- package/package.json +1 -1
- package/shared/network.js +2 -2
- package/controller/recordingAPI/index.js +0 -202
- package/controller/recordingAPI/permissionStubs.json +0 -65
|
@@ -1 +1 @@
|
|
|
1
|
-
export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjQuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezkzMTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7c2V0VGltZW91dChuLmJpbmQobnVsbCxlKSx0KX0pKX1uLnIoZSksbi5kKGUse2RlbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LE5FVFdPUktfQ09ORklHOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7dmFyIG89e1JBVEVMSU1JVF9SRVNFVF9ERUZBVUxUOjEwfX0sNzc4ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZCB7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDE5cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBtYXJnaW46IDE1cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1tb2JpbGUge1xuICBib3JkZXItd2lkdGg6IDA7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDIwcHggMjBweCA1cHggMjBweDtcbiAgZmxleDogMSAxIGF1dG87XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLnVsLXF1ZXN0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTI1JTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FwdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjNmM2YzZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZC0tbXVsdGlwbGUge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fY2hvaWNlcyB7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xuICBmbGV4OiAxIDA7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmNob2ljZS0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZS0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2Uge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuXG4gIG1hcmdpbi1ib3R0b206IDdweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMTBweCAyMHB4IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6YWN0aXZlLFxuLmNob2ljZS0tbW9iaWxlOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi51bC1jYXJkLS10aGFua3Mge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtdGhhbmtzLWNoZWNrIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4udWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyMHB4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1xdWVzdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi51bC1jYXJkLS10aGFua3MgLnVsLWNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBoeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5hdGUtbGltaXQtbGluZXM6IG5vLWxpbWl0O1xufVxuXG4uc2VsZWN0LWNoZWNrYm94IHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMzIzMjMyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2hhZG93OiBpbnNldCAzcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICd0cmFuc3BhcmVudCc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VsZWN0LXJhZGlvIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogTGluayBzdHVkaWVzIHdpZGUgc2NyZWVuIHZpZXcgKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIHtcbiAgLnVsLWNhcmRfX2NvbnRhaW5lci0tZGVza3RvcCB7XG4gICAgYm94LXNoYWRvdzogdW5zZXQ7XG4gIH1cblxuICAudWwtY2FyZF9fY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uZmFkZS1pbi10cmFuc2l0aW9uIHtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbW96LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1vLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tcy1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tb3ota2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1vLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbXMta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDcwNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTg5ODYpLG89bigxMDY2OSksaT1uKDc3ODgpLGE9big4NjU1OCksYz1uKDYwNjMyKSxzPW4oNDIwMDUpLHU9big3NjQyOCksbD1uKDczNTIzKSxmPW4oNjM1NTMpOyhlPXIoITEpKS5pKG8pLGUuaShpKSxlLmkoYSksZS5pKGMpLGUuaShzKSxlLmkodSksZS5pKGwpLGUuaShmKSxlLnB1c2goW3QuaWQsImh0bWwsXG5ib2R5IHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xufVxuXG5iIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuI3VsLWFwcCB7XG4gIG9wYWNpdHk6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgZWFzZS1vdXQ7XG59XG5cbiN1bC1hcHAudWwtYXBwLS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgYm90dG9tOiAwO1xufVxuXG4udWwtYXBwX19jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cblxuLnVsLWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw4NjU1ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbnBzLmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1saWtlcnQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHMge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLm5wcy1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubnBzLW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5ucHMtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItMCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubnBzLW51bWJlci0xMCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sMTA2Njk6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyoqXG4gKiBtaW5pcmVzZXQuY3NzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamd0aG1zL21pbmlyZXNldC5jc3NcbiAqL1xuXG5odG1sLFxuYm9keSxcbnAsXG5vbCxcbnVsLFxubGksXG5kbCxcbmR0LFxuZGQsXG5ibG9ja3F1b3RlLFxuZmlndXJlLFxuZmllbGRzZXQsXG5sZWdlbmQsXG50ZXh0YXJlYSxcbnByZSxcbmlmcmFtZSxcbmhyLFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbnVsIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIG1hcmdpbjogMDtcbn1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosICo6YmVmb3JlLCAqOmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzY0Mjg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXRleHQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyLFxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5Omxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIHtcbiAgbWluLWhlaWdodDogMmVtO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MzU1MzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC0tdmlkZW8ge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4jdWwtY2FyZC12b2ljZV9fdmlkZW8ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uLnVsLWJ1dHRvbi1pbmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjNWQ2OTZmICFpbXBvcnRhbnQ7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgd2lkdGg6IC1tb3otYXZhaWxhYmxlOyAvKiBXZWJLaXQtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7IC8qIE1vemlsbGEtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IGZpbGwtYXZhaWxhYmxlO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MjU4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19fSw0NDYyMTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuLHIsbyxpLGEpe3RyeXt2YXIgYz10W2ldKGEpLHM9Yy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuKHQpfWMuZG9uZT9lKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGkpe3ZhciBhPXQuYXBwbHkobixyKTtmdW5jdGlvbiBjKHQpe2UoYSxvLGksYyxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2UoYSxvLGksYyxzLCJ0aHJvdyIsdCl9Yyh2b2lkIDApfSkpfX19LDMwNTkzOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfX0sNDQ1MzpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19LDY0MTU3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9fSw2NjA4MTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuZXhwb3J0cz1lPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQuZXhwb3J0cz1lfSw5NDI2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9fSw5NDU2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0sOTI4MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1ODIpLG89big5NDI2NiksaT1uKDk0NTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl8fG8odCl8fGkoKX19LDc2MzkwOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTp0LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGUobil9dC5leHBvcnRzPWV9LDQ0Njc0OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9big0NjY3OSl9LDk3MzQzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvO3I9W3QsZV0sbj1mdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyLG89ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOihuPVtdLHI9W10se2hhczpmdW5jdGlvbih0KXtyZXR1cm4gbi5pbmRleE9mKHQpPi0xfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7LTE9PT1uLmluZGV4T2YodCkmJihuLnB1c2godCksci5wdXNoKGUpKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5kZXhPZih0KTtlPi0xJiYobi5zcGxpY2UoZSwxKSxyLnNwbGljZShlLDEpKX19KSxpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXZlbnQodCx7YnViYmxlczohMH0pfTt0cnl7bmV3IEV2ZW50KCJ0ZXN0Iil9Y2F0Y2godCl7aT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMSksZX19ZnVuY3Rpb24gYSh0KXtpZih0JiZ0Lm5vZGVOYW1lJiYiVEVYVEFSRUEiPT09dC5ub2RlTmFtZSYmIW8uaGFzKHQpKXt2YXIgZT1udWxsLG49bnVsbCxyPW51bGwsYT1mdW5jdGlvbigpe3QuY2xpZW50V2lkdGghPT1uJiZkKCl9LGM9ZnVuY3Rpb24oZSl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dC5zdHlsZVtuXT1lW25dfSkpLG8uZGVsZXRlKHQpfS5iaW5kKHQse2hlaWdodDp0LnN0eWxlLmhlaWdodCxyZXNpemU6dC5zdHlsZS5yZXNpemUsb3ZlcmZsb3dZOnQuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDp0LnN0eWxlLm92ZXJmbG93WCx3b3JkV3JhcDp0LnN0eWxlLndvcmRXcmFwfSk7dC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSwib25wcm9wZXJ0eWNoYW5nZSJpbiB0JiYib25pbnB1dCJpbiB0JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixkLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixhLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixkLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksdC5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIsdC5zdHlsZS53b3JkV3JhcD0iYnJlYWstd29yZCIsby5zZXQodCx7ZGVzdHJveTpjLHVwZGF0ZTpkfSkscygpfWZ1bmN0aW9uIHMoKXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpOyJ2ZXJ0aWNhbCI9PT1uLnJlc2l6ZT90LnN0eWxlLnJlc2l6ZT0ibm9uZSI6ImJvdGgiPT09bi5yZXNpemUmJih0LnN0eWxlLnJlc2l6ZT0iaG9yaXpvbnRhbCIpLGU9ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nPy0ocGFyc2VGbG9hdChuLnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQobi5wYWRkaW5nQm90dG9tKSk6cGFyc2VGbG9hdChuLmJvcmRlclRvcFdpZHRoKStwYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpLGlzTmFOKGUpJiYoZT0wKSxkKCl9ZnVuY3Rpb24gdShlKXt2YXIgbj10LnN0eWxlLndpZHRoO3Quc3R5bGUud2lkdGg9IjBweCIsdC5vZmZzZXRXaWR0aCx0LnN0eWxlLndpZHRoPW4sdC5zdHlsZS5vdmVyZmxvd1k9ZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXTt0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7KXQucGFyZW50Tm9kZS5zY3JvbGxUb3AmJmUucHVzaCh7bm9kZTp0LnBhcmVudE5vZGUsc2Nyb2xsVG9wOnQucGFyZW50Tm9kZS5zY3JvbGxUb3B9KSx0PXQucGFyZW50Tm9kZTtyZXR1cm4gZX1mdW5jdGlvbiBmKCl7aWYoMCE9PXQuc2Nyb2xsSGVpZ2h0KXt2YXIgcj1sKHQpLG89ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO3Quc3R5bGUuaGVpZ2h0PSIiLHQuc3R5bGUuaGVpZ2h0PXQuc2Nyb2xsSGVpZ2h0K2UrInB4IixuPXQuY2xpZW50V2lkdGgsci5mb3JFYWNoKChmdW5jdGlvbih0KXt0Lm5vZGUuc2Nyb2xsVG9wPXQuc2Nyb2xsVG9wfSkpLG8mJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPW8pfX1mdW5jdGlvbiBkKCl7ZigpO3ZhciBlPU1hdGgucm91bmQocGFyc2VGbG9hdCh0LnN0eWxlLmhlaWdodCkpLG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQobi5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodDtpZihvPGU/ImhpZGRlbiI9PT1uLm92ZXJmbG93WSYmKHUoInNjcm9sbCIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCk6ImhpZGRlbiIhPT1uLm92ZXJmbG93WSYmKHUoImhpZGRlbiIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCksciE9PW8pe3I9bzt2YXIgYT1pKCJhdXRvc2l6ZTpyZXNpemVkIik7dHJ5e3QuZGlzcGF0Y2hFdmVudChhKX1jYXRjaCh0KXt9fX19ZnVuY3Rpb24gYyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLmRlc3Ryb3koKX1mdW5jdGlvbiBzKHQpe3ZhciBlPW8uZ2V0KHQpO2UmJmUudXBkYXRlKCl9dmFyIHU9bnVsbDsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlPygodT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fSk6KCh1PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSksdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sYyksdH0sdS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0scyksdH0pLGUuZGVmYXVsdD11LHQuZXhwb3J0cz1lLmRlZmF1bHR9LHZvaWQgMD09PShvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuKXx8KHQuZXhwb3J0cz1vKX0sNDAwNDY6ZnVuY3Rpb24odCxlLG4pe24oNjU2NzkpLG4oNTEwOTApLG4oMjQ3ODUpLG4oODkxNyksbig1NDc4NiksbigxMjgxNiksbig2MTkyNCksbig5ODMwNiksbigxMjAyNSksbigyODMzKSxuKDk2NDUzKSxuKDcwODYzKSxuKDI0ODAyKSxuKDE4MjczKSxuKDQyNDExKSxuKDM3NDgxKSxuKDQ1NTUwKSxuKDU4MTY1KSxuKDUxMTczKSxuKDg3NDMpLG4oNzU4MDQpLG4oNDYxNDYpLG4oMTUwNzcpLG4oNTgzMjkpLG4oNjA1MjUpLG4oNzQ5NTMpLG4oNTQ3ODEpLG4oNTE2Niksbig4OTc1OCksbigxODM3OCksbig5MjUyKSxuKDkzMjcyKSxuKDU2MTU4KSxuKDQxNDU2KSxuKDcyODUxKSxuKDM0NTI5KSxuKDE5Mjc4KSxuKDkxMjA5KSxuKDcyNTYwKSxuKDEwNjMpLG4oOTY0OTgpLG4oMjI0NDIpLG4oNzU4OTQpLG4oNzE2MjIpLG4oNzQ1MzgpLG4oMjEyNyksbig2OTk4OCksbig1NzM4NyksbigzMDgxNyksbig1MjA1NSksbig3MzM2MCksbig0NzUwMiksbigzMzE5NSksbig5MDkxMiksbigyODIwMyksbig3OTIyNyksbig0MzU5MSksbigyMjI3NyksbigyNDEyOSksbig3NDEyMCksbig5NDk2MyksbigyNzM4OCksbig4MDUyMiksbig0NTUyOCksbig4MDExNiksbigyOTExMCksbig4NTU5NCksbig2NzgxMiksbigzMzc5Miksbig4NjIxNCksbig3MDE0Niksbig3MTg0Niksbig1MDA2MyksbigxMDc0Myksbig4MDUxMSksbigxNTM3Myksbig5NzY4OCksbig3NDU2Myksbig2NTAwMyksbig4MTI3Nyksbig0NDAxOSksbigzODIpLG4oMTg4MjMpLG4oMzMzMjIpLG4oMzMwNjUpLG4oMTc0OTQpLG4oODAzNjMpLG4oNDMzOTYpLG4oNjkxODgpLG4oNzQ3OTUpLG4oODIyMDEpLG4oNDE3NzMpLG4oMzA0MDIpLG4oMTgxNzUpLG4oNjY4OTYpLG4oODU3NjcpLG4oODQzNiksbig5MjE5MiksbigxMjE1NSksbigyNjAxNiksbig3NDExNyksbigyODAwMyksbig2Nzk0MSksbig0NDA1MSksbig0OTQ5NSksbig4NzIwOSksbigxODI3NiksbigzNzU0KSxuKDMzNDM3KSxuKDE5NDMzKSxuKDcxODI3KSxuKDI2MDYzKSxuKDk2NyksbigzMzEwMCksbig0MTkyOCksbigxNTg2OSksbig4ODcxNSksbigzNjk5NSksbigxMTIyNCksbig2Mzc2NSksbigxMzA2NCksbigzMjI5MyksbigyMTAzMiksbigzNzkzNiksbig5Mzk5NSksbigxMzM5MyksbigxMTI4MSksbigzODAzNiksbigxMTM4KSxuKDQ2MDc4KSxuKDMwMDgzKSxuKDQ3MzgzKSxuKDcxNTU4KSxuKDk5MjE4KSxuKDk4OTc4KSxuKDgwNjkpLG4oNzAyMDQpLG4oODU3NTgpLG4oMTE3NzMpLG4oMTU3NjMpLG4oNDE2MzIpLG4oMzYyMzMpLG4oNDAwNDUpLG4oMjEzNzYpLG4oODQwNyksbigxNjUwKSxuKDgxMTA0KSxuKDExNjg4KSxuKDE3NjI5KSxuKDQyNDkwKSxuKDk0OTA2KSxuKDc0MDYxKSxuKDU4NjA2KSxuKDQ1MTU3KSxuKDYxMjQ1KSxuKDI5MjczKSxuKDkwNTYwKSxuKDQ1MTU0KSxuKDcwMzczKSxuKDgwNzU3KSxuKDY5ODc5KSxuKDI0NDk4KSxuKDE2OTc4KSxuKDE3MTUyKSxuKDM3OTg3KSxuKDI2ODApLG4oMzgyODApLG4oMTg1NTkpLG4oNTA0ODIpLG4oNzQyMzApLG4oMTg1MDYpLG4oMjAyNDIpLG4oMjgxNTUpLG4oMzM5MDEpLG4oNzY0NDIpLG4oODg2MzYpLG4oODE0NjMpLG4oOTUxNjMpLG4oODM2NzMpLG4oMjM1NjgpLG4oMjcyOTQpLG4oMjQ0NTcpLG4oMzkzMiksbig3NTQ5OSksbig4NzU2NCksbig4NDUwKSxuKDE3NjA1KSxuKDczNTYyKSxuKDExODc4KSxuKDYwOTI5KSxuKDQzOTUxKSxuKDkxMzQ3KSxuKDI5Mjg0KSxuKDYxOTQzKSxuKDI2OTg2KSxuKDEzNjYpLG4oODMzMTApLG4oNDY1OTcpLG4oNzAxMzYpLG4oNjA4NjUpLG4oNjc3MDgpLG4oOTY2MzgpLG4oMzk3MzApLG4oNzQxMTUpLG4oODU2ODYpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw2MDQ5MTpmdW5jdGlvbih0LGUsbil7big0MDA0NiksbigxNTYyNCksbig5MjQwNCk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDg2NDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LDc5ODYxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKTtyZXR1cm4gdH19LDc2NTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oNTA4NjgpLGk9big2Njk3MSksYT1yKCJ1bnNjb3BhYmxlcyIpLGM9QXJyYXkucHJvdG90eXBlO251bGw9PWNbYV0mJmkoYyxhLG8obnVsbCkpLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtjW2FdW3RdPSEwfX0sNTMxNDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwMTQwKS5jaGFyQXQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSsobj9yKHQsZSkubGVuZ3RoOjEpfX0sNTkzNzk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCAiKyhuP24rIiAiOiIiKSsiaW52b2NhdGlvbiIpO3JldHVybiB0fX0sODc1Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpO3JldHVybiB0fX0sNzMwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDEwNTkyKSxjPW4oNzYyOTgpLHM9big1OTU5MSksdT1uKDY2OTcxKSxsPW4oOTI5MTMpLGY9bigzNzYyMCkuZixkPW4oNjQ5NjUpLHA9big3MTg0MiksaD1uKDIzNzI0KSx2PW4oNjcyOSksZz1pLkRhdGFWaWV3LHk9ZyYmZy5wcm90b3R5cGUsbT1pLkludDhBcnJheSxiPW0mJm0ucHJvdG90eXBlLHg9aS5VaW50OENsYW1wZWRBcnJheSx3PXgmJngucHJvdG90eXBlLEU9bSYmZChtKSxqPWImJmQoYiksQz1PYmplY3QucHJvdG90eXBlLGs9Qy5pc1Byb3RvdHlwZU9mLFM9aCgidG9TdHJpbmdUYWciKSxPPXYoIlRZUEVEX0FSUkFZX1RBRyIpLEk9ISghaS5BcnJheUJ1ZmZlcnx8IWcpLEE9SSYmISFwJiYiT3BlcmEiIT09cyhpLm9wZXJhKSxUPSExLE09e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxfPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZjKE0scyh0KSl9O2ZvcihyIGluIE0paVtyXXx8KEE9ITEpO2lmKCghQXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEV8fEU9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoRT1mdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sQSkpZm9yKHIgaW4gTSlpW3JdJiZwKGlbcl0sRSk7aWYoKCFBfHwhanx8aj09PUMpJiYoaj1FLnByb3RvdHlwZSxBKSlmb3IociBpbiBNKWlbcl0mJnAoaVtyXS5wcm90b3R5cGUsaik7aWYoQSYmZCh3KSE9PWomJnAodyxqKSxvJiYhYyhqLFMpKWZvcihyIGluIFQ9ITAsZihqLFMse2dldDpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpP3RoaXNbT106dm9pZCAwfX0pLE0paVtyXSYmdShpW3JdLE8scik7SSYmcCYmZCh5KSE9PUMmJnAoeSxDKSx0LmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVI6SSxOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOkEsVFlQRURfQVJSQVlfVEFHOlQmJk8sYVR5cGVkQXJyYXk6ZnVuY3Rpb24odCl7aWYoXyh0KSlyZXR1cm4gdDt0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2lmKHApe2lmKGsuY2FsbChFLHQpKXJldHVybiB0fWVsc2UgZm9yKHZhciBlIGluIE0paWYoYyhNLHIpKXt2YXIgbj1pW2VdO2lmKG4mJih0PT09bnx8ay5jYWxsKG4sdCkpKXJldHVybiB0fXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLG4pe2lmKG8pe2lmKG4pZm9yKHZhciByIGluIE0pe3ZhciBhPWlbcl07YSYmYyhhLnByb3RvdHlwZSx0KSYmZGVsZXRlIGEucHJvdG90eXBlW3RdfWpbdF0mJiFufHxsKGosdCxuP2U6QSYmYlt0XXx8ZSl9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhO2lmKG8pe2lmKHApe2lmKG4pZm9yKHIgaW4gTSkoYT1pW3JdKSYmYyhhLHQpJiZkZWxldGUgYVt0XTtpZihFW3RdJiYhbilyZXR1cm47dHJ5e3JldHVybiBsKEUsdCxuP2U6QSYmbVt0XXx8ZSl9Y2F0Y2godCl7fX1mb3IociBpbiBNKSEoYT1pW3JdKXx8YVt0XSYmIW58fGwoYSx0LGUpfX0saXNWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXModCk7cmV0dXJuIkRhdGFWaWV3Ij09PWV8fGMoTSxlKX0saXNUeXBlZEFycmF5Ol8sVHlwZWRBcnJheTpFLFR5cGVkQXJyYXlQcm90b3R5cGU6an19LDgyODM1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDYyNTU2KSxpPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVIsYT1uKDY2OTcxKSxjPW4oMTkyNikscz1uKDMyMTg3KSx1PW4oNTkzNzkpLGw9big0MzQxNiksZj1uKDI3ODg0KSxkPW4oODM5MTQpLHA9big5MDcyNSksaD1uKDEzMzM0KS5mLHY9bigzNzYyMCkuZixnPW4oNjU4OTUpLHk9big1MTEyOCksbT1uKDg5ODI3KSxiPW0uZ2V0LHg9bS5zZXQsdz0iQXJyYXlCdWZmZXIiLEU9IkRhdGFWaWV3IixqPSJXcm9uZyBpbmRleCIsQz1yLkFycmF5QnVmZmVyLGs9QyxTPXIuRGF0YVZpZXcsTz1yLlJhbmdlRXJyb3IsST1wLnBhY2ssQT1wLnVucGFjayxUPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdF19LE09ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1XX0sXz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTUsdD4+MTYmMjU1LHQ+PjI0JjI1NV19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX0sUj1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LDIzLDQpfSxQPWZ1bmN0aW9uKHQpe3JldHVybiBJKHQsNTIsOCl9LE49ZnVuY3Rpb24odCxlKXt2KHQucHJvdG90eXBlLGUse2dldDpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpW2VdfX0pfSxEPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWQobiksaT1iKHQpO2lmKG8rZT5pLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTt2YXIgYT1iKGkuYnVmZmVyKS5ieXRlcyxjPW8raS5ieXRlT2Zmc2V0LHM9YS5zbGljZShjLGMrZSk7cmV0dXJuIHI/czpzLnJldmVyc2UoKX0sRj1mdW5jdGlvbih0LGUsbixyLG8saSl7dmFyIGE9ZChuKSxjPWIodCk7aWYoYStlPmMuYnl0ZUxlbmd0aCl0aHJvdyBPKGopO2Zvcih2YXIgcz1iKGMuYnVmZmVyKS5ieXRlcyx1PWErYy5ieXRlT2Zmc2V0LGw9cigrbyksZj0wO2Y8ZTtmKyspc1t1K2ZdPWxbaT9mOmUtZi0xXX07aWYoaSl7aWYoIXMoKGZ1bmN0aW9uKCl7QygxKX0pKXx8IXMoKGZ1bmN0aW9uKCl7bmV3IEMoLTEpfSkpfHxzKChmdW5jdGlvbigpe3JldHVybiBuZXcgQyxuZXcgQygxLjUpLG5ldyBDKE5hTiksQy5uYW1lIT13fSkpKXtmb3IodmFyIFUsQj0oaz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0aGlzLGspLG5ldyBDKGQodCkpfSkucHJvdG90eXBlPUMucHJvdG90eXBlLHo9aChDKSxWPTA7ei5sZW5ndGg+VjspKFU9eltWKytdKWluIGt8fGEoayxVLENbVV0pO0IuY29uc3RydWN0b3I9a312YXIgSD1uZXcgUyhuZXcgaygyKSkscT1TLnByb3RvdHlwZS5zZXRJbnQ4O0guc2V0SW50OCgwLDIxNDc0ODM2NDgpLEguc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFILmdldEludDgoMCkmJkguZ2V0SW50OCgxKXx8YyhTLnByb3RvdHlwZSx7c2V0SW50ODpmdW5jdGlvbih0LGUpe3EuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9fSx7dW5zYWZlOiEwfSl9ZWxzZSBrPWZ1bmN0aW9uKHQpe3UodGhpcyxrLHcpO3ZhciBlPWQodCk7eCh0aGlzLHtieXRlczpnLmNhbGwobmV3IEFycmF5KGUpLDApLGJ5dGVMZW5ndGg6ZX0pLG98fCh0aGlzLmJ5dGVMZW5ndGg9ZSl9LFM9ZnVuY3Rpb24odCxlLG4pe3UodGhpcyxTLEUpLHUodCxrLEUpO3ZhciByPWIodCkuYnl0ZUxlbmd0aCxpPWwoZSk7aWYoaTwwfHxpPnIpdGhyb3cgTygiV3Jvbmcgb2Zmc2V0Iik7aWYoaSsobj12b2lkIDA9PT1uP3ItaTpmKG4pKT5yKXRocm93IE8oIldyb25nIGxlbmd0aCIpO3godGhpcyx7YnVmZmVyOnQsYnl0ZUxlbmd0aDpuLGJ5dGVPZmZzZXQ6aX0pLG98fCh0aGlzLmJ1ZmZlcj10LHRoaXMuYnl0ZUxlbmd0aD1uLHRoaXMuYnl0ZU9mZnNldD1pKX0sbyYmKE4oaywiYnl0ZUxlbmd0aCIpLE4oUywiYnVmZmVyIiksTihTLCJieXRlTGVuZ3RoIiksTihTLCJieXRlT2Zmc2V0IikpLGMoUy5wcm90b3R5cGUse2dldEludDg6ZnVuY3Rpb24odCl7cmV0dXJuIEQodGhpcywxLHQpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9RCh0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuKGVbMV08PDh8ZVswXSk8PDE2Pj4xNn0sZ2V0VWludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybiBlWzFdPDw4fGVbMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKX0sZ2V0VWludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEEoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksMjMpfSxnZXRGbG9hdDY0OmZ1bmN0aW9uKHQpe3JldHVybiBBKEQodGhpcyw4LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDUyKX0sc2V0SW50ODpmdW5jdGlvbih0LGUpe0YodGhpcywxLHQsVCxlKX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LFQsZSl9LHNldEludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxNLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMix0LE0sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LF8sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LFIsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtGKHRoaXMsOCx0LFAsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9fSk7eShrLHcpLHkoUyxFKSx0LmV4cG9ydHM9e0FycmF5QnVmZmVyOmssRGF0YVZpZXc6U319LDk5NDMxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpLGE9TWF0aC5taW47dC5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzKSxjPWkobi5sZW5ndGgpLHM9byh0LGMpLHU9byhlLGMpLGw9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj1hKCh2b2lkIDA9PT1sP2M6byhsLGMpKS11LGMtcyksZD0xO2Zvcih1PHMmJnM8dStmJiYoZD0tMSx1Kz1mLTEscys9Zi0xKTtmLS0gPjA7KXUgaW4gbj9uW3NdPW5bdV06ZGVsZXRlIG5bc10scys9ZCx1Kz1kO3JldHVybiBufX0sNjU4OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjA5KSxvPW4oNzY5NzYpLGk9bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLGM9byhhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHU9dm9pZCAwPT09cz9uOm8ocyxuKTt1PmM7KWVbYysrXT10O3JldHVybiBlfX0sMzEzNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMwMDI1KS5mb3JFYWNoLG89bigyMjkwOSk7dC5leHBvcnRzPW8oImZvckVhY2giKT9mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTpbXS5mb3JFYWNofSw4NTE2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDYxMzApLG89bigxOTIwOSksaT1uKDEyMjc4KSxhPW4oNDQ5ODQpLGM9bigyNzg4NCkscz1uKDU4ODEwKSx1PW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLGwsZixkLHA9byh0KSxoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksdj1hcmd1bWVudHMubGVuZ3RoLGc9dj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAseT12b2lkIDAhPT1nLG09MCxiPXUocCk7aWYoeSYmKGc9cihnLHY+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1ifHxoPT1BcnJheSYmYShiKSlmb3Iobj1uZXcgaChlPWMocC5sZW5ndGgpKTtlPm07bSsrKXMobixtLHk/ZyhwW21dLG0pOnBbbV0pO2Vsc2UgZm9yKGQ9KGY9Yi5jYWxsKHApKS5uZXh0LG49bmV3IGg7IShsPWQuY2FsbChmKSkuZG9uZTttKyspcyhuLG0seT9pKGYsZyxbbC52YWx1ZSxtXSwhMCk6bC52YWx1ZSk7cmV0dXJuIG4ubGVuZ3RoPW0sbn19LDg1ODAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYSl7dmFyIGMscz1yKGUpLHU9byhzLmxlbmd0aCksbD1pKGEsdSk7aWYodCYmbiE9bil7Zm9yKDt1Pmw7KWlmKChjPXNbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+bDtsKyspaWYoKHR8fGwgaW4gcykmJnNbbF09PT1uKXJldHVybiB0fHxsfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6YSghMCksaW5kZXhPZjphKCExKX19LDMwMDI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2MTMwKSxvPW4oMjQ5OCksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big3MDA5KSxzPVtdLnB1c2gsdT1mdW5jdGlvbih0KXt2YXIgZT0xPT10LG49Mj09dCx1PTM9PXQsbD00PT10LGY9Nj09dCxkPTU9PXR8fGY7cmV0dXJuIGZ1bmN0aW9uKHAsaCx2LGcpe2Zvcih2YXIgeSxtLGI9aShwKSx4PW8oYiksdz1yKGgsdiwzKSxFPWEoeC5sZW5ndGgpLGo9MCxDPWd8fGMsaz1lP0MocCxFKTpuP0MocCwwKTp2b2lkIDA7RT5qO2orKylpZigoZHx8aiBpbiB4KSYmKG09dyh5PXhbal0saixiKSx0KSlpZihlKWtbal09bTtlbHNlIGlmKG0pc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHk7Y2FzZSA2OnJldHVybiBqO2Nhc2UgMjpzLmNhbGwoayx5KX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6dXx8bD9sOmt9fTt0LmV4cG9ydHM9e2ZvckVhY2g6dSgwKSxtYXA6dSgxKSxmaWx0ZXI6dSgyKSxzb21lOnUoMyksZXZlcnk6dSg0KSxmaW5kOnUoNSksZmluZEluZGV4OnUoNil9fSw0OTI0OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDQzNDE2KSxpPW4oMjc4ODQpLGE9bigyMjkwOSksYz1NYXRoLm1pbixzPVtdLmxhc3RJbmRleE9mLHU9ISFzJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwLGw9YSgibGFzdEluZGV4T2YiKTt0LmV4cG9ydHM9dXx8bD9mdW5jdGlvbih0KXtpZih1KXJldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1uLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGE9YyhhLG8oYXJndW1lbnRzWzFdKSkpLGE8MCYmKGE9bithKTthPj0wO2EtLSlpZihhIGluIGUmJmVbYV09PT10KXJldHVybiBhfHwwO3JldHVybi0xfTpzfSw2MTk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDIzNzI0KSxpPW4oNzkwNzEpLGE9bygic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT49NTF8fCFyKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVthXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX19LDEyMzY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKSxvPW4oMTkyMDkpLGk9bigyNDk4KSxhPW4oMjc4ODQpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjLHMpe3Iobik7dmFyIHU9byhlKSxsPWkodSksZj1hKHUubGVuZ3RoKSxkPXQ/Zi0xOjAscD10Py0xOjE7aWYoYzwyKWZvcig7Oyl7aWYoZCBpbiBsKXtzPWxbZF0sZCs9cDticmVha31pZihkKz1wLHQ/ZDwwOmY8PWQpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9Zm9yKDt0P2Q+PTA6Zj5kO2QrPXApZCBpbiBsJiYocz1uKHMsbFtkXSxkLHUpKTtyZXR1cm4gc319O3QuZXhwb3J0cz17bGVmdDpjKCExKSxyaWdodDpjKCEwKX19LDcwMDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big2MTk5KSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG8odCkmJigiZnVuY3Rpb24iIT10eXBlb2Yobj10LmNvbnN0cnVjdG9yKXx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSk/cihuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApOm49dm9pZCAwKSxuZXcodm9pZCAwPT09bj9BcnJheTpuKSgwPT09ZT8wOmUpfX0sNDU2NjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oODc1NzkpLGk9big3NzAxKSgiUHJvbWlzZSIpLGE9W10ucHVzaCxjPWZ1bmN0aW9uKHQpe3ZhciBlPTA9PXQsbj0xPT10LGM9Mj09dCxzPTM9PXQ7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7byh0KTt2YXIgbD1yKHQubmV4dCksZj1lP1tdOnZvaWQgMDtyZXR1cm4gZXx8cih1KSxuZXcgaSgoZnVuY3Rpb24ocixkKXt2YXIgcD1mdW5jdGlvbigpe3RyeXtpLnJlc29sdmUobyhsLmNhbGwodCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYobyh0KS5kb25lKXIoZT9mOiFzJiYoY3x8dm9pZCAwKSk7ZWxzZXt2YXIgbD10LnZhbHVlO2U/KGEuY2FsbChmLGwpLHAoKSk6aS5yZXNvbHZlKHUobCkpLnRoZW4oKGZ1bmN0aW9uKHQpe24/cCgpOmM/dD9wKCk6cighMSk6dD9yKHN8fGwpOnAoKX0pLGQpfX1jYXRjaCh0KXtkKHQpfX0pLGQpfWNhdGNoKHQpe2QodCl9fTtwKCl9KSl9fTt0LmV4cG9ydHM9e3RvQXJyYXk6YygwKSxmb3JFYWNoOmMoMSksZXZlcnk6YygyKSxzb21lOmMoMyksZmluZDpjKDQpfX0sNjM4NDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1uKDg5NTU4KSxhPW4oMzQ3NDEpLGM9big2NDk2NSkscz1uKDc2Mjk4KSx1PW4oNjY5NzEpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPWwoImFzeW5jSXRlcmF0b3IiKSxwPWkuQXN5bmNJdGVyYXRvcixoPWEuQXN5bmNJdGVyYXRvclByb3RvdHlwZTtpZighZilpZihoKXI9aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBwKXI9cC5wcm90b3R5cGU7ZWxzZSBpZihhLlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUnx8aS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1IpdHJ5e289YyhjKGMoRnVuY3Rpb24oInJldHVybiBhc3luYyBmdW5jdGlvbiooKXt9KCkiKSgpKSkpLGMobyk9PT1PYmplY3QucHJvdG90eXBlJiYocj1vKX1jYXRjaCh0KXt9cnx8KHI9e30pLHMocixkKXx8dShyLGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXJ9LDQ2MTMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKHIodCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmNhbGwoZSl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuY2FsbChlLG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuY2FsbChlLG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiB0LmNhbGwoZSxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSwxMjI3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8pe3RyeXtyZXR1cm4gbz9lKHIobilbMF0sblsxXSk6ZShuKX1jYXRjaChlKXt2YXIgaT10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbCh0KSksZX19fSw0Nzk2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT0wLGE9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIWkrK319LHJldHVybjpmdW5jdGlvbigpe289ITB9fTthW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oYSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKHQpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPXt9O2lbcl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LHQoaSl9Y2F0Y2godCl7fXJldHVybiBufX0sMjQ1OTQ6ZnVuY3Rpb24odCl7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSw1OTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDYxMyksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpLGE9IkFyZ3VtZW50cyI9PW8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKHQpe319KGU9T2JqZWN0KHQpLGkpKT9uOmE/byhlKToiT2JqZWN0Ij09KHI9byhlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZT8iQXJndW1lbnRzIjpyfX0sOTgxNzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yKHRoaXMpLGU9byh0LmFkZCksbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKWUuY2FsbCh0LGFyZ3VtZW50c1tuXSk7cmV0dXJuIHR9fSwxNDY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1yKHRoaXMpLG49byhlLmRlbGV0ZSksaT0hMCxhPTAsYz1hcmd1bWVudHMubGVuZ3RoO2E8YzthKyspdD1uLmNhbGwoZSxhcmd1bWVudHNbYV0pLGk9aSYmdDtyZXR1cm4hIWl9fSwxMjkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89big0NjEzMCksaT1uKDQxMzM0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixhLGMscz1hcmd1bWVudHMubGVuZ3RoLHU9cz4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIHIodGhpcyksKGU9dm9pZCAwIT09dSkmJnIodSksbnVsbD09dD9uZXcgdGhpczoobj1bXSxlPyhhPTAsYz1vKHUscz4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMiksaSh0LChmdW5jdGlvbih0KXtuLnB1c2goYyh0LGErKykpfSkpKTppKHQsbi5wdXNoLG4pLG5ldyB0aGlzKG4pKX19LDI1MDI2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KTt0LS07KWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBuZXcgdGhpcyhlKX19LDY0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM3NjIwKS5mLG89big1MDg2OCksaT1uKDE5MjYpLGE9big0NjEzMCksYz1uKDU5Mzc5KSxzPW4oNDEzMzQpLHU9big0NjA2MSksbD1uKDY3NTM4KSxmPW4oNjI1NTYpLGQ9big5NjAzKS5mYXN0S2V5LHA9big4OTgyNyksaD1wLnNldCx2PXAuZ2V0dGVyRm9yO3QuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLG4sdSl7dmFyIGw9dCgoZnVuY3Rpb24odCxyKXtjKHQsbCxlKSxoKHQse3R5cGU6ZSxpbmRleDpvKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxmfHwodC5zaXplPTApLG51bGwhPXImJnMocix0W3VdLHQsbil9KSkscD12KGUpLGc9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1wKHQpLGE9eSh0LGUpO3JldHVybiBhP2EudmFsdWU9bjooaS5sYXN0PWE9e2luZGV4Om89ZChlLCEwKSxrZXk6ZSx2YWx1ZTpuLHByZXZpb3VzOnI9aS5sYXN0LG5leHQ6dm9pZCAwLHJlbW92ZWQ6ITF9LGkuZmlyc3R8fChpLmZpcnN0PWEpLHImJihyLm5leHQ9YSksZj9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT1hKSksdH0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9cCh0KSxvPWQoZSk7aWYoIkYiIT09bylyZXR1cm4gci5pbmRleFtvXTtmb3Iobj1yLmZpcnN0O247bj1uLm5leHQpaWYobi5rZXk9PWUpcmV0dXJuIG59O3JldHVybiBpKGwucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD1wKHRoaXMpLGU9dC5pbmRleCxuPXQuZmlyc3Q7bjspbi5yZW1vdmVkPSEwLG4ucHJldmlvdXMmJihuLnByZXZpb3VzPW4ucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW24uaW5kZXhdLG49bi5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxmP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXAoZSkscj15KGUsdCk7aWYocil7dmFyIG89ci5uZXh0LGk9ci5wcmV2aW91cztkZWxldGUgbi5pbmRleFtyLmluZGV4XSxyLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxuLmZpcnN0PT1yJiYobi5maXJzdD1vKSxuLmxhc3Q9PXImJihuLmxhc3Q9aSksZj9uLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49cCh0aGlzKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtlPWU/ZS5uZXh0Om4uZmlyc3Q7KWZvcihyKGUudmFsdWUsZS5rZXksdGhpcyk7ZSYmZS5yZW1vdmVkOyllPWUucHJldmlvdXN9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXkodGhpcyx0KX19KSxpKGwucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT15KHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGYmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKS5zaXplfX0pLGx9LHNldFN0cm9uZzpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZSsiIEl0ZXJhdG9yIixvPXYoZSksaT12KHIpO3UodCxlLChmdW5jdGlvbih0LGUpe2godGhpcyx7dHlwZTpyLHRhcmdldDp0LHN0YXRlOm8odCksa2luZDplLGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxuPXQubGFzdDtuJiZuLnJlbW92ZWQ7KW49bi5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9bj1uP24ubmV4dDp0LnN0YXRlLmZpcnN0KT8ia2V5cyI9PWU/e3ZhbHVlOm4ua2V5LGRvbmU6ITF9OiJ2YWx1ZXMiPT1lP3t2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9Ont2YWx1ZTpbbi5rZXksbi52YWx1ZV0sZG9uZTohMX06KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX0pLG4/ImVudHJpZXMiOiJ2YWx1ZXMiLCFuLCEwKSxsKGUpfX19LDcxMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTI2KSxvPW4oOTYwMykuZ2V0V2Vha0RhdGEsaT1uKDg3NTc5KSxhPW4oMTA1OTIpLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oMzAwMjUpLGw9big3NjI5OCksZj1uKDg5ODI3KSxkPWYuc2V0LHA9Zi5nZXR0ZXJGb3IsaD11LmZpbmQsdj11LmZpbmRJbmRleCxnPTAseT1mdW5jdGlvbih0KXtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgbSl9LG09ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXM9W119LGI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LmVudHJpZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKX07bS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7aWYoZSlyZXR1cm4gZVsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYih0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKHRoaXMsdCk7bj9uWzFdPWU6dGhpcy5lbnRyaWVzLnB1c2goW3QsZV0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLmVudHJpZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKTtyZXR1cm5+ZSYmdGhpcy5lbnRyaWVzLnNwbGljZShlLDEpLCEhfmV9fSx0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBmPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGYsZSksZCh0LHt0eXBlOmUsaWQ6ZysrLGZyb3plbjp2b2lkIDB9KSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLGg9cChlKSx2PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oKHQpLGE9byhpKGUpLCEwKTtyZXR1cm4hMD09PWE/eShyKS5zZXQoZSxuKTphW3IuaWRdPW4sdH07cmV0dXJuIHIoZi5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZGVsZXRlKHQpOm4mJmwobixlLmlkKSYmZGVsZXRlIG5bZS5pZF19LGhhczpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuaGFzKHQpOm4mJmwobixlLmlkKX19KSxyKGYucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKGEodCkpe3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZ2V0KHQpOm4/bltlLmlkXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdih0aGlzLHQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdCwhMCl9fSksZn19fSw4MTk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big5NjAzKSxzPW4oNDEzMzQpLHU9big1OTM3OSksbD1uKDEwNTkyKSxmPW4oMzIxODcpLGQ9big0Nzk2KSxwPW4oNTExMjgpLGg9bigzMDI3Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdj0tMSE9PXQuaW5kZXhPZigiTWFwIiksZz0tMSE9PXQuaW5kZXhPZigiV2VhayIpLHk9dj8ic2V0IjoiYWRkIixtPW9bdF0sYj1tJiZtLnByb3RvdHlwZSx4PW0sdz17fSxFPWZ1bmN0aW9uKHQpe3ZhciBlPWJbdF07YShiLHQsImFkZCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJnZXQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBnJiYhbCh0KT92b2lkIDA6ZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImhhcyI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCxuKSx0aGlzfSl9O2lmKGkodCwiZnVuY3Rpb24iIT10eXBlb2YgbXx8IShnfHxiLmZvckVhY2gmJiFmKChmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSkpKXg9bi5nZXRDb25zdHJ1Y3RvcihlLHQsdix5KSxjLlJFUVVJUkVEPSEwO2Vsc2UgaWYoaSh0LCEwKSl7dmFyIGo9bmV3IHgsQz1qW3ldKGc/e306LTAsMSkhPWosaz1mKChmdW5jdGlvbigpe2ouaGFzKDEpfSkpLFM9ZCgoZnVuY3Rpb24odCl7bmV3IG0odCl9KSksTz0hZyYmZigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IG0sZT01O2UtLTspdFt5XShlLGUpO3JldHVybiF0LmhhcygtMCl9KSk7U3x8KCh4PWUoKGZ1bmN0aW9uKGUsbil7dShlLHgsdCk7dmFyIHI9aChuZXcgbSxlLHgpO3JldHVybiBudWxsIT1uJiZzKG4sclt5XSxyLHYpLHJ9KSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9eCksKGt8fE8pJiYoRSgiZGVsZXRlIiksRSgiaGFzIiksdiYmRSgiZ2V0IikpLChPfHxDKSYmRSh5KSxnJiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1yZXR1cm4gd1t0XT14LHIoe2dsb2JhbDohMCxmb3JjZWQ6eCE9bX0sdykscCh4LHQpLGd8fG4uc2V0U3Ryb25nKHgsdCx2KSx4fX0sNzQ2ODU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQ5MDYpLG89big1ODYwNiksaT1uKDUwODY4KSxhPW4oMTA1OTIpLGM9ZnVuY3Rpb24oKXt0aGlzLm9iamVjdD1udWxsLHRoaXMuc3ltYm9sPW51bGwsdGhpcy5wcmltaXRpdmVzPW51bGwsdGhpcy5vYmplY3RzQnlJbmRleD1pKG51bGwpfTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t0XXx8KHRoaXNbdF09ZSgpKX0sYy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0LGUsbil7dmFyIGk9bj90aGlzLm9iamVjdHNCeUluZGV4W3RdfHwodGhpcy5vYmplY3RzQnlJbmRleFt0XT1uZXcgbyk6dGhpcy5wcmltaXRpdmVzfHwodGhpcy5wcmltaXRpdmVzPW5ldyByKSxhPWkuZ2V0KGUpO3JldHVybiBhfHxpLnNldChlLGE9bmV3IGMpLGF9O3ZhciBzPW5ldyBjO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbj1zLHI9YXJndW1lbnRzLmxlbmd0aDtmb3IodD0wO3Q8cjt0KyspYShlPWFyZ3VtZW50c1t0XSkmJihuPW4ubmV4dCh0LGUsITApKTtpZih0aGlzPT09T2JqZWN0JiZuPT09cyl0aHJvdyBUeXBlRXJyb3IoIkNvbXBvc2l0ZSBrZXlzIG11c3QgY29udGFpbiBhIG5vbi1wcmltaXRpdmUgY29tcG9uZW50Iik7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pfHwobj1uLm5leHQodCxlLCExKSk7cmV0dXJuIG59fSw5OTYyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDI0NDE1KSxpPW4oOTcyNTcpLGE9bigzNzYyMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW8oZSksYz1hLmYscz1pLmYsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgbD1uW3VdO3IodCxsKXx8Yyh0LGwscyhlLGwpKX19fSw5MzkxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIm1hdGNoIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gobil7dHJ5e3JldHVybiBlW3JdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHQpe319cmV0dXJuITF9fSw3MTYwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwyNzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPW4oNzcwMSkoIlByb21pc2UiKSxkPWwuc2V0LHA9bC5nZXQsaD11KCJ0b1N0cmluZ1RhZyIpLHY9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP2YucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp0fSk6aShuLmNhbGwoZSx0KSl9LGc9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7cmV0dXJuIHZvaWQgMD09PW4/Zi5yZWplY3QodCk6bi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGQodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgbj1wKHRoaXMpO2lmKG4uZG9uZSlyZXR1cm4gZi5yZXNvbHZlKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO3RyeXtyZXR1cm4gZi5yZXNvbHZlKGkodC5jYWxsKG4sZSxmKSkpfWNhdGNoKHQpe3JldHVybiBmLnJlamVjdCh0KX19LHJldHVybjp2LHRocm93Omd9KSxlfHxjKG4ucHJvdG90eXBlLGgsIkdlbmVyYXRvciIpLG59fSwzMTM1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0vIi9nO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT1TdHJpbmcocih0KSksYz0iPCIrZTtyZXR1cm4iIiE9PW4mJihjKz0iICIrbisnPSInK1N0cmluZyhpKS5yZXBsYWNlKG8sIiZxdW90OyIpKyciJyksYysiPiIrYSsiPC8iK2UrIj4ifX0sNzEyMDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxvPW4oNTA4NjgpLGk9bigxNDIwOSksYT1uKDUxMTI4KSxjPW4oMTIzNSkscz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB1PWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPW8ocix7bmV4dDppKDEsbil9KSxhKHQsdSwhMSwhMCksY1t1XT1zLHR9fSw4ODA3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjIzOCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big1MDg2OCksYz1uKDY2OTcxKSxzPW4oMTkyNiksdT1uKDIzNzI0KSxsPW4oODk4MjcpLGY9bC5zZXQsZD1sLmdldCxwPXUoInRvU3RyaW5nVGFnIiksaD1mdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMpLml0ZXJhdG9yLG49ZS5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/e2RvbmU6ITAsdmFsdWU6dH06aShuLmNhbGwoZSx0KSl9LHY9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7aWYodm9pZCAwPT09bil0aHJvdyB0O3JldHVybiBuLmNhbGwoZSx0KX07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7dC5uZXh0PW8odC5pdGVyYXRvci5uZXh0KSx0LmRvbmU9ITEsZih0aGlzLHQpfTtyZXR1cm4gbi5wcm90b3R5cGU9cyhhKHIuSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbigpe3ZhciBlPWQodGhpcyksbj1lLmRvbmU/dm9pZCAwOnQuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybntkb25lOmUuZG9uZSx2YWx1ZTpufX0scmV0dXJuOmgsdGhyb3c6dn0pLGV8fGMobi5wcm90b3R5cGUscCwiR2VuZXJhdG9yIiksbn19LDY2OTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPXI/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvLmYodCxlLGkoMSxuKSl9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1uLHR9fSwxNDIwOTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSw1ODgxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTM0OTgpLG89bigzNzYyMCksaT1uKDE0MjA5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXIoZSk7YSBpbiB0P28uZih0LGEsaSgwLG4pKTp0W2FdPW59fSw3OTE2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpLG89bigyNjU3Mykuc3RhcnQsaT1NYXRoLmFicyxhPURhdGUucHJvdG90eXBlLGM9YS5nZXRUaW1lLHM9YS50b0lTT1N0cmluZzt0LmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSkpfHwhcigoZnVuY3Rpb24oKXtzLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoYy5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgdD10aGlzLGU9dC5nZXRVVENGdWxsWWVhcigpLG49dC5nZXRVVENNaWxsaXNlY29uZHMoKSxyPWU8MD8iLSI6ZT45OTk5PyIrIjoiIjtyZXR1cm4gcitvKGkoZSkscj82OjQsMCkrIi0iK28odC5nZXRVVENNb250aCgpKzEsMiwwKSsiLSIrbyh0LmdldFVUQ0RhdGUoKSwyLDApKyJUIitvKHQuZ2V0VVRDSG91cnMoKSwyLDApKyI6IitvKHQuZ2V0VVRDTWludXRlcygpLDIsMCkrIjoiK28odC5nZXRVVENTZWNvbmRzKCksMiwwKSsiLiIrbyhuLDMsMCkrIloifTpzfSw3Njk3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big1MzQ5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT09dCYmIm51bWJlciIhPT10JiYiZGVmYXVsdCIhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gbyhyKHRoaXMpLCJudW1iZXIiIT09dCl9fSw0NjA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MTEyOCkscz1uKDY2OTcxKSx1PW4oOTI5MTMpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPW4oMTIzNSkscD1uKDY0MTc2KSxoPXAuSXRlcmF0b3JQcm90b3R5cGUsdj1wLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsZz1sKCJpdGVyYXRvciIpLHk9ImtleXMiLG09InZhbHVlcyIsYj0iZW50cmllcyIseD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbCxwLHcsRSl7byhuLGUsbCk7dmFyIGosQyxrLFM9ZnVuY3Rpb24odCl7aWYodD09PXAmJk0pcmV0dXJuIE07aWYoIXYmJnQgaW4gQSlyZXR1cm4gQVt0XTtzd2l0Y2godCl7Y2FzZSB5OmNhc2UgbTpjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LE89ZSsiIEl0ZXJhdG9yIixJPSExLEE9dC5wcm90b3R5cGUsVD1BW2ddfHxBWyJAQGl0ZXJhdG9yIl18fHAmJkFbcF0sTT0hdiYmVHx8UyhwKSxfPSJBcnJheSI9PWUmJkEuZW50cmllc3x8VDtpZihfJiYoaj1pKF8uY2FsbChuZXcgdCkpLGghPT1PYmplY3QucHJvdG90eXBlJiZqLm5leHQmJihmfHxpKGopPT09aHx8KGE/YShqLGgpOiJmdW5jdGlvbiIhPXR5cGVvZiBqW2ddJiZzKGosZyx4KSksYyhqLE8sITAsITApLGYmJihkW09dPXgpKSkscD09bSYmVCYmVC5uYW1lIT09bSYmKEk9ITAsTT1mdW5jdGlvbigpe3JldHVybiBULmNhbGwodGhpcyl9KSxmJiYhRXx8QVtnXT09PU18fHMoQSxnLE0pLGRbZV09TSxwKWlmKEM9e3ZhbHVlczpTKG0pLGtleXM6dz9NOlMoeSksZW50cmllczpTKGIpfSxFKWZvcihrIGluIEMpKHZ8fEl8fCEoayBpbiBBKSkmJnUoQSxrLENba10pO2Vsc2Ugcih7dGFyZ2V0OmUscHJvdG86ITAsZm9yY2VkOnZ8fEl9LEMpO3JldHVybiBDfX0sOTIyNzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big3NjI5OCksaT1uKDczOTE2KSxhPW4oMzc2MjApLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIuU3ltYm9sfHwoci5TeW1ib2w9e30pO28oZSx0KXx8YShlLHQse3ZhbHVlOmkuZih0KX0pfX0sNjI1NTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sMTkyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDEwNTkyKSxpPXIuZG9jdW1lbnQsYT1vKGkpJiZvKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LDQ3MDk0OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH19LDU5MTM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwxNDA0NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk3MjU3KS5mLGk9big2Njk3MSksYT1uKDkyOTEzKSxjPW4oOTgyNjkpLHM9big5OTYyNSksdT1uKDY0NTA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixsLGYsZCxwLGg9dC50YXJnZXQsdj10Lmdsb2JhbCxnPXQuc3RhdDtpZihuPXY/cjpnP3JbaF18fGMoaCx7fSk6KHJbaF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gZSl7aWYoZD1lW2xdLGY9dC5ub1RhcmdldEdldD8ocD1vKG4sbCkpJiZwLnZhbHVlOm5bbF0sIXUodj9sOmgrKGc/Ii4iOiIjIikrbCx0LmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBkPT10eXBlb2YgZiljb250aW51ZTtzKGQsZil9KHQuc2hhbXx8ZiYmZi5zaGFtKSYmaShkLCJzaGFtIiwhMCksYShuLGwsZCx0KX19fSwzMjE4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LDM1ODYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2Njk3MSksbz1uKDkyOTEzKSxpPW4oMzIxODcpLGE9bigyMzcyNCksYz1uKDM4NTk4KSxzPWEoInNwZWNpZXMiKSx1PSFpKChmdW5jdGlvbigpe3ZhciB0PS8uLztyZXR1cm4gdC5leGVjPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHQuZ3JvdXBzPXthOiI3In0sdH0sIjciIT09IiIucmVwbGFjZSh0LCIkPGE+Iil9KSksbD0haSgoZnVuY3Rpb24oKXt2YXIgdD0vKD86KS8sZT10LmV4ZWM7dC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgbj0iYWIiLnNwbGl0KHQpO3JldHVybiAyIT09bi5sZW5ndGh8fCJhIiE9PW5bMF18fCJiIiE9PW5bMV19KSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGYpe3ZhciBkPWEodCkscD0haSgoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtkXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIlt0XShlKX0pKSxoPXAmJiFpKChmdW5jdGlvbigpe3ZhciBlPSExLG49L2EvO3JldHVybiJzcGxpdCI9PT10JiYoKG49e30pLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3Jbc109ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbi5mbGFncz0iIixuW2RdPS8uL1tkXSksbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsbnVsbH0sbltkXSgiIiksIWV9KSk7aWYoIXB8fCFofHwicmVwbGFjZSI9PT10JiYhdXx8InNwbGl0Ij09PXQmJiFsKXt2YXIgdj0vLi9bZF0sZz1uKGQsIiJbdF0sKGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIGUuZXhlYz09PWM/cCYmIW8/e2RvbmU6ITAsdmFsdWU6di5jYWxsKGUsbixyKX06e2RvbmU6ITAsdmFsdWU6dC5jYWxsKG4sZSxyKX06e2RvbmU6ITF9fSkpLHk9Z1swXSxtPWdbMV07byhTdHJpbmcucHJvdG90eXBlLHQseSksbyhSZWdFeHAucHJvdG90eXBlLGQsMj09ZT9mdW5jdGlvbih0LGUpe3JldHVybiBtLmNhbGwodCx0aGlzLGUpfTpmdW5jdGlvbih0KXtyZXR1cm4gbS5jYWxsKHQsdGhpcyl9KSxmJiZyKFJlZ0V4cC5wcm90b3R5cGVbZF0sInNoYW0iLCEwKX19fSw4MDY2NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjE5OSksbz1uKDI3ODg0KSxpPW4oNDYxMzApLGE9ZnVuY3Rpb24odCxlLG4sYyxzLHUsbCxmKXtmb3IodmFyIGQscD1zLGg9MCx2PSEhbCYmaShsLGYsMyk7aDxjOyl7aWYoaCBpbiBuKXtpZihkPXY/dihuW2hdLGgsZSk6bltoXSx1PjAmJnIoZCkpcD1hKHQsZSxkLG8oZC5sZW5ndGgpLHAsdS0xKS0xO2Vsc2V7aWYocD49OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBUeXBlRXJyb3IoIkV4Y2VlZCB0aGUgYWNjZXB0YWJsZSBhcnJheSBsZW5ndGgiKTt0W3BdPWR9cCsrfWgrK31yZXR1cm4gcH07dC5leHBvcnRzPWF9LDQ3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NTY3Miksbz1uKDg5NTU4KSxpPW4oMzIxODcpO3QuZXhwb3J0cz1yfHwhaSgoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsKGZ1bmN0aW9uKCl7fSkpLGRlbGV0ZSBvW3RdfSkpfSw1MjEyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbigpe3ZhciBlPSIiW3RdKCciJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJyInKS5sZW5ndGg+M30pKX19LDg0NzU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oNTAwNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXtyZXR1cm4hIW9bdF0oKXx8IuKAi8KF4aCOIiE9IuKAi8KF4aCOIlt0XSgpfHxvW3RdLm5hbWUhPT10fSkpfX0sNzQ1MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKX0sNzM3Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oMTA1OTIpLGk9W10uc2xpY2UsYT17fSxjPWZ1bmN0aW9uKHQsZSxuKXtpZighKGUgaW4gYSkpe2Zvcih2YXIgcj1bXSxvPTA7bzxlO28rKylyW29dPSJhWyIrbysiXSI7YVtlXT1GdW5jdGlvbigiQyxhIiwicmV0dXJuIG5ldyBDKCIrci5qb2luKCIsIikrIikiKX1yZXR1cm4gYVtlXSh0LG4pfTt0LmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzKSxuPWkuY2FsbChhcmd1bWVudHMsMSksYT1mdW5jdGlvbigpe3ZhciByPW4uY29uY2F0KGkuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/YyhlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIG8oZS5wcm90b3R5cGUpJiYoYS5wcm90b3R5cGU9ZS5wcm90b3R5cGUpLGF9fSw2NjkyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3Mzg5MCksbz1uKDIzNzI0KSgiYXN5bmNJdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10W29dO3JldHVybiB2b2lkIDA9PT1lP3IodCk6ZX19LDc3MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big4OTU1OCksaT1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMH07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pKHJbdF0pfHxpKG9bdF0pOnJbdF0mJnJbdF1bZV18fG9bdF0mJm9bdF1bZV19fSw3Mzg5MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OTU5MSksbz1uKDEyMzUpLGk9bigyMzcyNCkoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpcmV0dXJuIHRbaV18fHRbIkBAaXRlcmF0b3IiXXx8b1tyKHQpXX19LDMxMDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vKHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gcihlLmNhbGwodCkpfX0sNDE5ODk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gTWFwLnByb3RvdHlwZS5lbnRyaWVzLmNhbGwodCl9fSw0MTQ3NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDMxMDc0KTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3JldHVybiBTZXQucHJvdG90eXBlLnZhbHVlcy5jYWxsKHQpfX0sODk1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PU1hdGgmJnR9O3QuZXhwb3J0cz1yKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHIoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHIoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cigib2JqZWN0Ij09dHlwZW9mIG4uZyYmbi5nKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sNzYyOTg6ZnVuY3Rpb24odCl7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sMjMwNzA6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw4MzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb25zb2xlO24mJm4uZXJyb3ImJigxPT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKHQpOm4uZXJyb3IodCxlKSl9fSw1MTU3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNjI3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDE5MjMpO3QuZXhwb3J0cz0hciYmIW8oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDkwNzI1OmZ1bmN0aW9uKHQpe3ZhciBlPTEvMCxuPU1hdGguYWJzLHI9TWF0aC5wb3csbz1NYXRoLmZsb29yLGk9TWF0aC5sb2csYT1NYXRoLkxOMjt0LmV4cG9ydHM9e3BhY2s6ZnVuY3Rpb24odCxjLHMpe3ZhciB1LGwsZixkPW5ldyBBcnJheShzKSxwPTgqcy1jLTEsaD0oMTw8cCktMSx2PWg+PjEsZz0yMz09PWM/cigyLC0yNCktcigyLC03Nyk6MCx5PXQ8MHx8MD09PXQmJjEvdDwwPzE6MCxtPTA7Zm9yKCh0PW4odCkpIT10fHx0PT09ZT8obD10IT10PzE6MCx1PWgpOih1PW8oaSh0KS9hKSx0KihmPXIoMiwtdSkpPDEmJih1LS0sZio9MiksKHQrPXUrdj49MT9nL2Y6ZypyKDIsMS12KSkqZj49MiYmKHUrKyxmLz0yKSx1K3Y+PWg/KGw9MCx1PWgpOnUrdj49MT8obD0odCpmLTEpKnIoMixjKSx1Kz12KToobD10KnIoMix2LTEpKnIoMixjKSx1PTApKTtjPj04O2RbbSsrXT0yNTUmbCxsLz0yNTYsYy09OCk7Zm9yKHU9dTw8Y3xsLHArPWM7cD4wO2RbbSsrXT0yNTUmdSx1Lz0yNTYscC09OCk7cmV0dXJuIGRbLS1tXXw9MTI4KnksZH0sdW5wYWNrOmZ1bmN0aW9uKHQsbil7dmFyIG8saT10Lmxlbmd0aCxhPTgqaS1uLTEsYz0oMTw8YSktMSxzPWM+PjEsdT1hLTcsbD1pLTEsZj10W2wtLV0sZD0xMjcmZjtmb3IoZj4+PTc7dT4wO2Q9MjU2KmQrdFtsXSxsLS0sdS09OCk7Zm9yKG89ZCYoMTw8LXUpLTEsZD4+PS11LHUrPW47dT4wO289MjU2Km8rdFtsXSxsLS0sdS09OCk7aWYoMD09PWQpZD0xLXM7ZWxzZXtpZihkPT09YylyZXR1cm4gbz9OYU46Zj8tMS8wOmU7bys9cigyLG4pLGQtPXN9cmV0dXJuKGY/LTE6MSkqbypyKDIsZC1uKX19fSwyNDk4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjQ1OTQpLGk9IiIuc3BsaXQ7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1vKHQpP2kuY2FsbCh0LCIiKTpPYmplY3QodCl9Ok9iamVjdH0sMzAyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big3MTg0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhO3JldHVybiBvJiYiZnVuY3Rpb24iPT10eXBlb2YoaT1lLmNvbnN0cnVjdG9yKSYmaSE9PW4mJnIoYT1pLnByb3RvdHlwZSkmJmEhPT1uLnByb3RvdHlwZSYmbyh0LGEpLHR9fSw3Njc3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNDc0MSksbz1GdW5jdGlvbi50b1N0cmluZzsiZnVuY3Rpb24iIT10eXBlb2Ygci5pbnNwZWN0U291cmNlJiYoci5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNhbGwodCl9KSx0LmV4cG9ydHM9ci5pbnNwZWN0U291cmNlfSw5NjAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzMDcwKSxvPW4oMTA1OTIpLGk9big3NjI5OCksYT1uKDM3NjIwKS5mLGM9big2NzI5KSxzPW4oNzQ1MjApLHU9YygibWV0YSIpLGw9MCxmPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGQ9ZnVuY3Rpb24odCl7YSh0LHUse3ZhbHVlOntvYmplY3RJRDoiTyIrICsrbCx3ZWFrRGF0YTp7fX19KX0scD10LmV4cG9ydHM9e1JFUVVJUkVEOiExLGZhc3RLZXk6ZnVuY3Rpb24odCxlKXtpZighbyh0KSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDooInN0cmluZyI9PXR5cGVvZiB0PyJTIjoiUCIpK3Q7aWYoIWkodCx1KSl7aWYoIWYodCkpcmV0dXJuIkYiO2lmKCFlKXJldHVybiJFIjtkKHQpfXJldHVybiB0W3VdLm9iamVjdElEfSxnZXRXZWFrRGF0YTpmdW5jdGlvbih0LGUpe2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiEwO2lmKCFlKXJldHVybiExO2QodCl9cmV0dXJuIHRbdV0ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZwLlJFUVVJUkVEJiZmKHQpJiYhaSh0LHUpJiZkKHQpLHR9fTtyW3VdPSEwfSw4OTgyNzpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9bigxOTU5MSksYz1uKDg5NTU4KSxzPW4oMTA1OTIpLHU9big2Njk3MSksbD1uKDc2Mjk4KSxmPW4oODMxOTcpLGQ9bigyMzA3MCkscD1jLldlYWtNYXA7aWYoYSl7dmFyIGg9bmV3IHAsdj1oLmdldCxnPWguaGFzLHk9aC5zZXQ7cj1mdW5jdGlvbih0LGUpe3JldHVybiB5LmNhbGwoaCx0LGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHYuY2FsbChoLHQpfHx7fX0saT1mdW5jdGlvbih0KXtyZXR1cm4gZy5jYWxsKGgsdCl9fWVsc2V7dmFyIG09Zigic3RhdGUiKTtkW21dPSEwLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LG0sZSksZX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LG0pP3RbbV06e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKX19dC5leHBvcnRzPXtzZXQ6cixnZXQ6byxoYXM6aSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP28odCk6cih0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighcyhlKXx8KG49byhlKSkudHlwZSE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIG59fX19LDQ0OTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oMTIzNSksaT1yKCJpdGVyYXRvciIpLGE9QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKG8uQXJyYXk9PT10fHxhW2ldPT09dCl9fSw2MTk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIkFycmF5Ij09cih0KX19LDY0NTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPS8jfFwucHJvdG90eXBlXC4vLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1jW2EodCldO3JldHVybiBuPT11fHxuIT1zJiYoImZ1bmN0aW9uIj09dHlwZW9mIGU/cihlKTohIWUpfSxhPWkubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShvLCIuIikudG9Mb3dlckNhc2UoKX0sYz1pLmRhdGE9e30scz1pLk5BVElWRT0iTiIsdT1pLlBPTFlGSUxMPSJQIjt0LmV4cG9ydHM9aX0sMzgyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIXIodCkmJmlzRmluaXRlKHQpJiZvKHQpPT09dH19LDIxMjMxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9LyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHIpfSwxMDU5MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0sNjU2NzI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSExfSw0MzIyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gcih0KSYmKHZvaWQgMCE9PShlPXRbaV0pPyEhZToiUmVnRXhwIj09byh0KSl9fSw0MTMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDQ0OTg0KSxpPW4oMjc4ODQpLGE9big0NjEzMCksYz1uKDczODkwKSxzPW4oMTIyNzgpLHU9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwsZil7dmFyIGQscCxoLHYsZyx5LG0sYj1hKGUsbixsPzI6MSk7aWYoZilkPXQ7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YocD1jKHQpKSl0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgaXRlcmFibGUiKTtpZihvKHApKXtmb3IoaD0wLHY9aSh0Lmxlbmd0aCk7dj5oO2grKylpZigoZz1sP2IocihtPXRbaF0pWzBdLG1bMV0pOmIodFtoXSkpJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfWQ9cC5jYWxsKHQpfWZvcih5PWQubmV4dDshKG09eS5jYWxsKGQpKS5kb25lOylpZigib2JqZWN0Ij09dHlwZW9mKGc9cyhkLGIsbS52YWx1ZSxsKSkmJmcmJmcgaW5zdGFuY2VvZiB1KXJldHVybiBnO3JldHVybiBuZXcgdSghMSl9KS5zdG9wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSghMCx0KX19LDY0MTc2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGE9big2NDk2NSksYz1uKDY2OTcxKSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY1NjcyKSxmPXUoIml0ZXJhdG9yIiksZD0hMTtbXS5rZXlzJiYoIm5leHQiaW4oaT1bXS5rZXlzKCkpPyhvPWEoYShpKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byk6ZD0hMCksbnVsbD09ciYmKHI9e30pLGx8fHMocixmKXx8YyhyLGYsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpyLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6ZH19LDEyMzU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw0NzkyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89cih0aGlzKSxpPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIkF0IGxlYXN0IG9uZSBjYWxsYmFjayByZXF1aXJlZCIpO3JldHVybiBvLmhhcyh0KT8obj1vLmdldCh0KSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZShuKSxvLnNldCh0LG4pKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihuPWkoKSxvLnNldCh0LG4pKSxufX0sNzI5NzA6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5leHBtMSxuPU1hdGguZXhwO3QuZXhwb3J0cz0hZXx8ZSgxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxlKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fC0yZS0xNyE9ZSgtMmUtMTcpP2Z1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDp0Pi0xZS02JiZ0PDFlLTY/dCt0KnQvMjpuKHQpLTF9OmV9LDUzMjUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4Nzg3KSxvPU1hdGguYWJzLGk9TWF0aC5wb3csYT1pKDIsLTUyKSxjPWkoMiwtMjMpLHM9aSgyLDEyNykqKDItYyksdT1pKDIsLTEyNik7dC5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbih0KXt2YXIgZSxuLGk9byh0KSxsPXIodCk7cmV0dXJuIGk8dT9sKihpL3UvYysxL2EtMS9hKSp1KmM6KG49KGU9KDErYy9hKSppKS0oZS1pKSk+c3x8biE9bj9sKigxLzApOmwqbn19LDIxOTMyOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubG9nO3QuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOmUoMSt0KX19LDc3NDI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2NhbGV8fGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHx0IT10fHxlIT1lfHxuIT1ufHxyIT1yfHxvIT1vP05hTjp0PT09MS8wfHx0PT09LTEvMD90Oih0LWUpKihvLXIpLyhuLWUpK3J9fSwzODc4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSw2NTU1NTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmPW4oODk1NTgpLGQ9big5NzI1NykuZixwPW4oMjQ1OTQpLGg9bigyMTc0NCkuc2V0LHY9bigyMTIzMSksZz1mLk11dGF0aW9uT2JzZXJ2ZXJ8fGYuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix5PWYucHJvY2VzcyxtPWYuUHJvbWlzZSxiPSJwcm9jZXNzIj09cCh5KSx4PWQoZiwicXVldWVNaWNyb3Rhc2siKSx3PXgmJngudmFsdWU7d3x8KHI9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihiJiYodD15LmRvbWFpbikmJnQuZXhpdCgpO287KXtlPW8uZm4sbz1vLm5leHQ7dHJ5e2UoKX1jYXRjaCh0KXt0aHJvdyBvP2EoKTppPXZvaWQgMCx0fX1pPXZvaWQgMCx0JiZ0LmVudGVyKCl9LGI/YT1mdW5jdGlvbigpe3kubmV4dFRpY2socil9OmcmJiF2PyhjPSEwLHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyBnKHIpLm9ic2VydmUocyx7Y2hhcmFjdGVyRGF0YTohMH0pLGE9ZnVuY3Rpb24oKXtzLmRhdGE9Yz0hY30pOm0mJm0ucmVzb2x2ZT8odT1tLnJlc29sdmUodm9pZCAwKSxsPXUudGhlbixhPWZ1bmN0aW9uKCl7bC5jYWxsKHUscil9KTphPWZ1bmN0aW9uKCl7aC5jYWxsKGYscil9KSx0LmV4cG9ydHM9d3x8ZnVuY3Rpb24odCl7dmFyIGU9e2ZuOnQsbmV4dDp2b2lkIDB9O2kmJihpLm5leHQ9ZSksb3x8KG89ZSxhKCkpLGk9ZX19LDM5NDU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9ci5Qcm9taXNlfSw5MDE0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcigoZnVuY3Rpb24oKXtyZXR1cm4hU3RyaW5nKFN5bWJvbCgpKX0pKX0sNTc1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDY1NjcyKSxhPW8oIml0ZXJhdG9yIik7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3ZhciB0PW5ldyBVUkwoImI/YT0xJmI9MiZjPTMiLCJodHRwOi8vYSIpLGU9dC5zZWFyY2hQYXJhbXMsbj0iIjtyZXR1cm4gdC5wYXRobmFtZT0iYyUyMGQiLGUuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlLmRlbGV0ZSgiYiIpLG4rPXIrdH0pKSxpJiYhdC50b0pTT058fCFlLnNvcnR8fCJodHRwOi8vYS9jJTIwZD9hPTEmYz0zIiE9PXQuaHJlZnx8IjMiIT09ZS5nZXQoImMiKXx8ImE9MSIhPT1TdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygiP2E9MSIpKXx8IWVbYV18fCJhIiE9PW5ldyBVUkwoImh0dHBzOi8vYUBiIikudXNlcm5hbWV8fCJiIiE9PW5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygiYT1iIikpLmdldCgiYSIpfHwieG4tLWUxYXliYyIhPT1uZXcgVVJMKCJodHRwOi8v0YLQtdGB0YIiKS5ob3N0fHwiIyVEMCVCMSIhPT1uZXcgVVJMKCJodHRwOi8vYSPQsSIpLmhhc2h8fCJhMWMzIiE9PW58fCJ4IiE9PW5ldyBVUkwoImh0dHA6Ly94Iix2b2lkIDApLmhvc3R9KSl9LDE5NTkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNzY3NzMpLGk9ci5XZWFrTWFwO3QuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgaSYmL25hdGl2ZSBjb2RlLy50ZXN0KG8oaSkpfSw4MzA4MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89ZnVuY3Rpb24odCl7dmFyIGUsbjt0aGlzLnByb21pc2U9bmV3IHQoKGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09ZXx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7ZT10LG49cn0pKSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCl9fSw5OTM0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzIyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHIodCkpdGhyb3cgVHlwZUVycm9yKCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMiKTtyZXR1cm4gdH19LDg5NTQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KS5pc0Zpbml0ZTt0LmV4cG9ydHM9TnVtYmVyLmlzRmluaXRlfHxmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnIodCl9fSw3ODY4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDI1NTA3KSxhPW4oNTY5OTEpLGM9big0MTYyOCkscz1uKDE5MjA5KSx1PW4oMjQ5OCksbD1PYmplY3QuYXNzaWduLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz0hbHx8bygoZnVuY3Rpb24oKXtpZihyJiYxIT09bCh7YjoxfSxsKGYoe30sImEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2YodGhpcywiYiIse3ZhbHVlOjMsZW51bWVyYWJsZTohMX0pfX0pLHtiOjJ9KSkuYilyZXR1cm4hMDt2YXIgdD17fSxlPXt9LG49U3ltYm9sKCksbz0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiB0W25dPTcsby5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT10fSkpLDchPWwoe30sdClbbl18fGkobCh7fSxlKSkuam9pbigiIikhPW99KSk/ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49cyh0KSxvPWFyZ3VtZW50cy5sZW5ndGgsbD0xLGY9YS5mLGQ9Yy5mO28+bDspZm9yKHZhciBwLGg9dShhcmd1bWVudHNbbCsrXSksdj1mP2koaCkuY29uY2F0KGYoaCkpOmkoaCksZz12Lmxlbmd0aCx5PTA7Zz55OylwPXZbeSsrXSxyJiYhZC5jYWxsKGgscCl8fChuW3BdPWhbcF0pO3JldHVybiBufTpsfSw1MDg2ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDAxKSxpPW4oNTkxMzUpLGE9bigyMzA3MCksYz1uKDUxNTcxKSxzPW4oMTkyMyksdT1uKDgzMTk3KSgiSUVfUFJPVE8iKSxsPWZ1bmN0aW9uKCl7fSxmPWZ1bmN0aW9uKCl7dmFyIHQsZT1zKCJpZnJhbWUiKSxuPWkubGVuZ3RoO2ZvcihlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGMuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKCJqYXZhc2NyaXB0OiIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksdC5jbG9zZSgpLGY9dC5GO24tLTspZGVsZXRlIGYucHJvdG90eXBlW2lbbl1dO3JldHVybiBmKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBudWxsIT09dD8obC5wcm90b3R5cGU9cih0KSxuPW5ldyBsLGwucHJvdG90eXBlPW51bGwsblt1XT10KTpuPWYoKSx2b2lkIDA9PT1lP246byhuLGUpfSxhW3VdPSEwfSw4NjQwMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oODc1NzkpLGE9bigyNTUwNyk7dC5leHBvcnRzPXI/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtpKHQpO2Zvcih2YXIgbixyPWEoZSksYz1yLmxlbmd0aCxzPTA7Yz5zOylvLmYodCxuPXJbcysrXSxlW25dKTtyZXR1cm4gdH19LDM3NjIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNjI3OTkpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cj9jOmZ1bmN0aW9uKHQsZSxuKXtpZihpKHQpLGU9YShlLCEwKSxpKG4pLG8pdHJ5e3JldHVybiBjKHQsZSxuKX1jYXRjaCh0KXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3JldHVybiJ2YWx1ZSJpbiBuJiYodFtlXT1uLnZhbHVlKSx0fX0sOTcyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big0MTYyOCksaT1uKDE0MjA5KSxhPW4oOTU3MyksYz1uKDUzNDk4KSxzPW4oNzYyOTgpLHU9big2Mjc5OSksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1yP2w6ZnVuY3Rpb24odCxlKXtpZih0PWEodCksZT1jKGUsITApLHUpdHJ5e3JldHVybiBsKHQsZSl9Y2F0Y2godCl7fWlmKHModCxlKSlyZXR1cm4gaSghby5mLmNhbGwodCxlKSx0W2VdKX19LDI2OTM3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigxMzMzNCkuZixpPXt9LnRvU3RyaW5nLGE9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gYSYmIltvYmplY3QgV2luZG93XSI9PWkuY2FsbCh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIG8odCl9Y2F0Y2godCl7cmV0dXJuIGEuc2xpY2UoKX19KHQpOm8ocih0KSl9fSwxMzMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sNTY5OTE6ZnVuY3Rpb24odCxlKXtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sNjQ5NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigxOTIwOSksaT1uKDgzMTk3KSxhPW4oNzE2MDgpLGM9aSgiSUVfUFJPVE8iKSxzPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPWE/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8odCkscih0LGMpP3RbY106ImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3ImJnQgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yP3QuY29uc3RydWN0b3IucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBPYmplY3Q/czpudWxsfX0sODY0MDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5ODI3KSxvPW4oNzEyMDEpLGk9big3NjI5OCksYT1uKDI1NTA3KSxjPW4oMTkyMDkpLHM9Ik9iamVjdCBJdGVyYXRvciIsdT1yLnNldCxsPXIuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1vKChmdW5jdGlvbih0LGUpe3ZhciBuPWModCk7dSh0aGlzLHt0eXBlOnMsbW9kZTplLG9iamVjdDpuLGtleXM6YShuKSxpbmRleDowfSl9KSwiT2JqZWN0IiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bCh0aGlzKSxlPXQua2V5czs7KXtpZihudWxsPT09ZXx8dC5pbmRleD49ZS5sZW5ndGgpcmV0dXJuIHQub2JqZWN0PXQua2V5cz1udWxsLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIG49ZVt0LmluZGV4KytdLHI9dC5vYmplY3Q7aWYoaShyLG4pKXtzd2l0Y2godC5tb2RlKXtjYXNlImtleXMiOnJldHVybnt2YWx1ZTpuLGRvbmU6ITF9O2Nhc2UidmFsdWVzIjpyZXR1cm57dmFsdWU6cltuXSxkb25lOiExfX1yZXR1cm57dmFsdWU6W24scltuXV0sZG9uZTohMX19fX0pKX0sNDE3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDk1NzMpLGk9big4NTgwMykuaW5kZXhPZixhPW4oMjMwNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGM9byh0KSxzPTAsdT1bXTtmb3IobiBpbiBjKSFyKGEsbikmJnIoYyxuKSYmdS5wdXNoKG4pO2Zvcig7ZS5sZW5ndGg+czspcihjLG49ZVtzKytdKSYmKH5pKHUsbil8fHUucHVzaChuKSk7cmV0dXJuIHV9fSwyNTUwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDQxNjI4OmZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3ZhciBuPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPXImJiFuLmNhbGwoezE6Mn0sMSk7ZS5mPW8/ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpufSw3MTg0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDc5ODYxKTt0LmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxuPXt9O3RyeXsodD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkuY2FsbChuLFtdKSxlPW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIobiksbyhpKSxlP3QuY2FsbChuLGkpOm4uX19wcm90b19fPWksbn19KCk6dm9pZCAwKX0sMzU2NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDI1NTA3KSxpPW4oOTU3MyksYT1uKDQxNjI4KS5mLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbixjPWkoZSkscz1vKGMpLHU9cy5sZW5ndGgsbD0wLGY9W107dT5sOyluPXNbbCsrXSxyJiYhYS5jYWxsKGMsbil8fGYucHVzaCh0P1tuLGNbbl1dOmNbbl0pO3JldHVybiBmfX07dC5leHBvcnRzPXtlbnRyaWVzOmMoITApLHZhbHVlczpjKCExKX19LDE5NzU4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MDYxMyksbz1uKDU5NTkxKTt0LmV4cG9ydHM9cj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbyh0aGlzKSsiXSJ9fSwyNDQxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKSxvPW4oMTMzMzQpLGk9big1Njk5MSksYT1uKDg3NTc5KTt0LmV4cG9ydHM9cigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9by5mKGEodCkpLG49aS5mO3JldHVybiBuP2UuY29uY2F0KG4odCkpOmV9fSwyNDQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlRmxvYXQsYz0xL2EoaSsiLTAiKSE9LTEvMDt0LmV4cG9ydHM9Yz9mdW5jdGlvbih0KXt2YXIgZT1vKFN0cmluZyh0KSksbj1hKGUpO3JldHVybiAwPT09biYmIi0iPT1lLmNoYXJBdCgwKT8tMDpufTphfSw3ODQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oODIzNTApLnRyaW0saT1uKDUwMDU1KSxhPXIucGFyc2VJbnQsYz0vXlsrLV0/MFtYeF0vLHM9OCE9PWEoaSsiMDgiKXx8MjIhPT1hKGkrIjB4MTYiKTt0LmV4cG9ydHM9cz9mdW5jdGlvbih0LGUpe3ZhciBuPW8oU3RyaW5nKHQpKTtyZXR1cm4gYShuLGU+Pj4wfHwoYy50ZXN0KG4pPzE2OjEwKSl9OmF9LDU2MjM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMzExNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTp0KCl9fWNhdGNoKHQpe3JldHVybntlcnJvcjohMCx2YWx1ZTp0fX19fSw2MzEzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDEwNTkyKSxpPW4oODMwODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCksbyhlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIG49aS5mKHQpO3JldHVybigwLG4ucmVzb2x2ZSkoZSksbi5wcm9taXNlfX0sNjk5Mjc6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPTIxNDc0ODM2NDcsbj0vW15cMC1cdTAwN0VdLyxyPS9bLlx1MzAwMlx1RkYwRVx1RkY2MV0vZyxvPSJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsaT1NYXRoLmZsb29yLGE9U3RyaW5nLmZyb21DaGFyQ29kZSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0KzIyKzc1Kih0PDI2KX0scz1mdW5jdGlvbih0LGUsbil7dmFyIHI9MDtmb3IodD1uP2kodC83MDApOnQ+PjEsdCs9aSh0L2UpO3Q+NDU1O3IrPTM2KXQ9aSh0LzM1KTtyZXR1cm4gaShyKzM2KnQvKHQrMzgpKX0sdT1mdW5jdGlvbih0KXt2YXIgbj1bXTt0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTAscj10Lmxlbmd0aDtuPHI7KXt2YXIgbz10LmNoYXJDb2RlQXQobisrKTtpZihvPj01NTI5NiYmbzw9NTYzMTkmJm48cil7dmFyIGk9dC5jaGFyQ29kZUF0KG4rKyk7NTYzMjA9PSg2NDUxMiZpKT9lLnB1c2goKCgxMDIzJm8pPDwxMCkrKDEwMjMmaSkrNjU1MzYpOihlLnB1c2gobyksbi0tKX1lbHNlIGUucHVzaChvKX1yZXR1cm4gZX0odCk7dmFyIHIsdSxsPXQubGVuZ3RoLGY9MTI4LGQ9MCxwPTcyO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk8MTI4JiZuLnB1c2goYSh1KSk7dmFyIGg9bi5sZW5ndGgsdj1oO2ZvcihoJiZuLnB1c2goIi0iKTt2PGw7KXt2YXIgZz1lO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk+PWYmJnU8ZyYmKGc9dSk7dmFyIHk9disxO2lmKGctZj5pKChlLWQpL3kpKXRocm93IFJhbmdlRXJyb3Iobyk7Zm9yKGQrPShnLWYpKnksZj1nLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYoKHU9dFtyXSk8ZiYmKytkPmUpdGhyb3cgUmFuZ2VFcnJvcihvKTtpZih1PT1mKXtmb3IodmFyIG09ZCxiPTM2OztiKz0zNil7dmFyIHg9Yjw9cD8xOmI+PXArMjY/MjY6Yi1wO2lmKG08eClicmVhazt2YXIgdz1tLXgsRT0zNi14O24ucHVzaChhKGMoeCt3JUUpKSksbT1pKHcvRSl9bi5wdXNoKGEoYyhtKSkpLHA9cyhkLHksdj09aCksZD0wLCsrdn19KytkLCsrZn1yZXR1cm4gbi5qb2luKCIiKX07dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG8saT1bXSxhPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHIsIi4iKS5zcGxpdCgiLiIpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspbz1hW2VdLGkucHVzaChuLnRlc3Qobyk/InhuLS0iK3Uobyk6byk7cmV0dXJuIGkuam9pbigiLiIpfX0sMTkyNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIG8gaW4gZSlyKHQsbyxlW29dLG4pO3JldHVybiB0fX0sOTI5MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSksaT1uKDc2Mjk4KSxhPW4oOTgyNjkpLGM9big3Njc3Mykscz1uKDg5ODI3KSx1PXMuZ2V0LGw9cy5lbmZvcmNlLGY9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYyl7dmFyIHM9ISFjJiYhIWMudW5zYWZlLHU9ISFjJiYhIWMuZW51bWVyYWJsZSxkPSEhYyYmISFjLm5vVGFyZ2V0R2V0OyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoInN0cmluZyIhPXR5cGVvZiBlfHxpKG4sIm5hbWUiKXx8byhuLCJuYW1lIixlKSxsKG4pLnNvdXJjZT1mLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0IT09cj8ocz8hZCYmdFtlXSYmKHU9ITApOmRlbGV0ZSB0W2VdLHU/dFtlXT1uOm8odCxlLG4pKTp1P3RbZV09bjphKGUsbil9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdSh0aGlzKS5zb3VyY2V8fGModGhpcyl9KSl9LDc3MDIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big2MjA1NCkoIm1ldGFkYXRhIiksYT1pLnN0b3JlfHwoaS5zdG9yZT1uZXcgbyksYz1mdW5jdGlvbih0LGUsbil7dmFyIG89YS5nZXQodCk7aWYoIW8pe2lmKCFuKXJldHVybjthLnNldCh0LG89bmV3IHIpfXZhciBpPW8uZ2V0KGUpO2lmKCFpKXtpZighbilyZXR1cm47by5zZXQoZSxpPW5ldyByKX1yZXR1cm4gaX07dC5leHBvcnRzPXtzdG9yZTphLGdldE1hcDpjLGhhczpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDAhPT1yJiZyLmhhcyh0KX0sZ2V0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jKGUsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpfSxzZXQ6ZnVuY3Rpb24odCxlLG4scil7YyhuLHIsITApLnNldCh0LGUpfSxrZXlzOmZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0LGUsITEpLHI9W107cmV0dXJuIG4mJm4uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyLnB1c2goZSl9KSkscn0sdG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fCJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX19fSwzNTQ1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCksbz1uKDM4NTk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBpPW4uY2FsbCh0LGUpO2lmKCJvYmplY3QiIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBpfWlmKCJSZWdFeHAiIT09cih0KSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gby5jYWxsKHQsZSl9fSwzODU5ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saT1uKDI1NDE5KSxhPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxjPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxzPWEsdT0ocj0vYS8sbz0vYiovZyxhLmNhbGwociwiYSIpLGEuY2FsbChvLCJhIiksMCE9PXIubGFzdEluZGV4fHwwIT09by5sYXN0SW5kZXgpLGw9dm9pZCAwIT09LygpPz8vLmV4ZWMoIiIpWzFdOyh1fHxsKSYmKHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8scz10aGlzO3JldHVybiBsJiYobj1uZXcgUmVnRXhwKCJeIitzLnNvdXJjZSsiJCg/IVxccykiLGkuY2FsbChzKSkpLHUmJihlPXMubGFzdEluZGV4KSxyPWEuY2FsbChzLHQpLHUmJnImJihzLmxhc3RJbmRleD1zLmdsb2JhbD9yLmluZGV4K3JbMF0ubGVuZ3RoOmUpLGwmJnImJnIubGVuZ3RoPjEmJmMuY2FsbChyWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKG89MTtvPGFyZ3VtZW50cy5sZW5ndGgtMjtvKyspdm9pZCAwPT09YXJndW1lbnRzW29dJiYocltvXT12b2lkIDApfSkpLHJ9KSx0LmV4cG9ydHM9c30sMjU0MTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1yKHRoaXMpLGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LDcwMTMyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH19LDM4MTg5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LDc2NDgyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PTEvZTp0IT10JiZlIT1lfX0sOTgyNjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e28ocix0LGUpfWNhdGNoKG4pe3JbdF09ZX1yZXR1cm4gZX19LDY3NTM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3NzAxKSxvPW4oMzc2MjApLGk9bigyMzcyNCksYT1uKDYyNTU2KSxjPWkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPW8uZjthJiZlJiYhZVtjXSYmbihlLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDUxMTI4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3NjIwKS5mLG89big3NjI5OCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QmJiFvKHQ9bj90OnQucHJvdG90eXBlLGkpJiZyKHQsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LDgzMTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyMDU0KSxvPW4oNjcyOSksaT1yKCJrZXlzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT1vKHQpKX19LDM0NzQxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oOTgyNjkpLGk9Il9fY29yZS1qc19zaGFyZWRfXyIsYT1yW2ldfHxvKGkse30pO3QuZXhwb3J0cz1hfSw2MjA1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDM0NzQxKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bdF18fChvW3RdPXZvaWQgMCE9PWU/ZTp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOiIzLjUuMCIsbW9kZTpyPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LDIyOTA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuIW58fCFyKChmdW5jdGlvbigpe24uY2FsbChudWxsLGV8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9fSwxMzk3OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYT1yKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHxudWxsPT0obj1yKGEpW2ldKT9lOm8obil9fSw2MDE0MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpLGEsYz1TdHJpbmcobyhlKSkscz1yKG4pLHU9Yy5sZW5ndGg7cmV0dXJuIHM8MHx8cz49dT90PyIiOnZvaWQgMDooaT1jLmNoYXJDb2RlQXQocykpPDU1Mjk2fHxpPjU2MzE5fHxzKzE9PT11fHwoYT1jLmNoYXJDb2RlQXQocysxKSk8NTYzMjB8fGE+NTczNDM/dD9jLmNoYXJBdChzKTppOnQ/Yy5zbGljZShzLHMrMik6YS01NjMyMCsoaS01NTI5Njw8MTApKzY1NTM2fX07dC5leHBvcnRzPXtjb2RlQXQ6aSghMSksY2hhckF0OmkoITApfX0sMjY1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc4ODQpLG89big2ODI1MyksaT1uKDcwMTMyKSxhPU1hdGguY2VpbCxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyl7dmFyIHMsdSxsPVN0cmluZyhpKGUpKSxmPWwubGVuZ3RoLGQ9dm9pZCAwPT09Yz8iICI6U3RyaW5nKGMpLHA9cihuKTtyZXR1cm4gcDw9Znx8IiI9PWQ/bDoocz1wLWYsKHU9by5jYWxsKGQsYShzL2QubGVuZ3RoKSkpLmxlbmd0aD5zJiYodT11LnNsaWNlKDAscykpLHQ/bCt1OnUrbCl9fTt0LmV4cG9ydHM9e3N0YXJ0OmMoITEpLGVuZDpjKCEwKX19LDY4MjUzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKTt0LmV4cG9ydHM9IiIucmVwZWF0fHxmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcobyh0aGlzKSksbj0iIixpPXIodCk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtpPjA7KGk+Pj49MSkmJihlKz1lKSkxJmkmJihuKz1lKTtyZXR1cm4gbn19LDgyMzUwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKSxvPSJbIituKDUwMDU1KSsiXSIsaT1SZWdFeHAoIl4iK28rbysiKiIpLGE9UmVnRXhwKG8rbysiKiQiKSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1TdHJpbmcocihlKSk7cmV0dXJuIDEmdCYmKG49bi5yZXBsYWNlKGksIiIpKSwyJnQmJihuPW4ucmVwbGFjZShhLCIiKSksbn19O3QuZXhwb3J0cz17c3RhcnQ6YygxKSxlbmQ6YygyKSx0cmltOmMoMyl9fSwyMTc0NDpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9big4OTU1OCksYz1uKDMyMTg3KSxzPW4oMjQ1OTQpLHU9big0NjEzMCksbD1uKDUxNTcxKSxmPW4oMTkyMyksZD1uKDIxMjMxKSxwPWEubG9jYXRpb24saD1hLnNldEltbWVkaWF0ZSx2PWEuY2xlYXJJbW1lZGlhdGUsZz1hLnByb2Nlc3MseT1hLk1lc3NhZ2VDaGFubmVsLG09YS5EaXNwYXRjaCxiPTAseD17fSx3PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLEU9ZnVuY3Rpb24odCl7aWYoeC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9eFt0XTtkZWxldGUgeFt0XSxlKCl9fSxqPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0UodCl9fSxDPWZ1bmN0aW9uKHQpe0UodC5kYXRhKX0saz1mdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHQrIiIscC5wcm90b2NvbCsiLy8iK3AuaG9zdCl9O2gmJnZ8fChoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyllLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiB4WysrYl09ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSkuYXBwbHkodm9pZCAwLGUpfSxyKGIpLGJ9LHY9ZnVuY3Rpb24odCl7ZGVsZXRlIHhbdF19LCJwcm9jZXNzIj09cyhnKT9yPWZ1bmN0aW9uKHQpe2cubmV4dFRpY2soaih0KSl9Om0mJm0ubm93P3I9ZnVuY3Rpb24odCl7bS5ub3coaih0KSl9OnkmJiFkPyhpPShvPW5ldyB5KS5wb3J0MixvLnBvcnQxLm9ubWVzc2FnZT1DLHI9dShpLnBvc3RNZXNzYWdlLGksMSkpOiFhLmFkZEV2ZW50TGlzdGVuZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBwb3N0TWVzc2FnZXx8YS5pbXBvcnRTY3JpcHRzfHxjKGspP3I9dyBpbiBmKCJzY3JpcHQiKT9mdW5jdGlvbih0KXtsLmFwcGVuZENoaWxkKGYoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtsLnJlbW92ZUNoaWxkKHRoaXMpLEUodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGoodCksMCl9OihyPWssYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixDLCExKSkpLHQuZXhwb3J0cz17c2V0OmgsY2xlYXI6dn19LDUzOTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0JiYiTnVtYmVyIiE9cih0KSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIik7cmV0dXJuK3R9fSw3Njk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1heCxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodCk7cmV0dXJuIG48MD9vKG4rZSwwKTppKG4sZSl9fSw4MzkxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDI3ODg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gMDt2YXIgZT1yKHQpLG49byhlKTtpZihlIT09bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGggb3IgaW5kZXgiKTtyZXR1cm4gbn19LDk1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ5OCksbz1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIobyh0KSl9fSw0MzQxNjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP246ZSkodCl9fSwyNzg4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKHIodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDE5MjA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyKHQpKX19LDYwNTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ1NjgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO2lmKG4lZSl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn19LDQ1NjgwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KTtpZihlPDApdGhyb3cgUmFuZ2VFcnJvcigiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwIik7cmV0dXJuIGV9fSw1MzQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIG4sbztpZihlJiYiZnVuY3Rpb24iPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPXQudmFsdWVPZikmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZighZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sOTA2MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O3JbbigyMzcyNCkoInRvU3RyaW5nVGFnIildPSJ6Iix0LmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKHIpfSw5MzAxNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDYyNTU2KSxhPW4oMzU2MjcpLGM9big3MzA3NCkscz1uKDgyODM1KSx1PW4oNTkzNzkpLGw9bigxNDIwOSksZj1uKDY2OTcxKSxkPW4oMjc4ODQpLHA9big4MzkxNCksaD1uKDYwNTU4KSx2PW4oNTM0OTgpLGc9big3NjI5OCkseT1uKDU5NTkxKSxtPW4oMTA1OTIpLGI9big1MDg2OCkseD1uKDcxODQyKSx3PW4oMTMzMzQpLmYsRT1uKDIwNDU1KSxqPW4oMzAwMjUpLmZvckVhY2gsQz1uKDY3NTM4KSxrPW4oMzc2MjApLFM9big5NzI1NyksTz1uKDg5ODI3KSxJPW4oMzAyNzIpLEE9Ty5nZXQsVD1PLnNldCxNPWsuZixfPVMuZixMPU1hdGgucm91bmQsUj1vLlJhbmdlRXJyb3IsUD1zLkFycmF5QnVmZmVyLE49cy5EYXRhVmlldyxEPWMuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxGPWMuVFlQRURfQVJSQVlfVEFHLFU9Yy5UeXBlZEFycmF5LEI9Yy5UeXBlZEFycmF5UHJvdG90eXBlLHo9Yy5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLFY9Yy5pc1R5cGVkQXJyYXksSD0iQllURVNfUEVSX0VMRU1FTlQiLHE9Ildyb25nIGxlbmd0aCIsVz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgsbz1uZXcoeih0KSkocik7cj5uOylvW25dPWVbbisrXTtyZXR1cm4gb30sRz1mdW5jdGlvbih0LGUpe00odCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzKVtlXX19KX0sWj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFB8fCJBcnJheUJ1ZmZlciI9PShlPXkodCkpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT1lfSwkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFYodCkmJiJzeW1ib2wiIT10eXBlb2YgZSYmZSBpbiB0JiZTdHJpbmcoK2UpPT1TdHJpbmcoZSl9LFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJCh0LGU9dihlLCEwKSk/bCgyLHRbZV0pOl8odCxlKX0sSz1mdW5jdGlvbih0LGUsbil7cmV0dXJuISgkKHQsZT12KGUsITApKSYmbShuKSYmZyhuLCJ2YWx1ZSIpKXx8ZyhuLCJnZXQiKXx8ZyhuLCJzZXQiKXx8bi5jb25maWd1cmFibGV8fGcobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fGcobiwiZW51bWVyYWJsZSIpJiYhbi5lbnVtZXJhYmxlP00odCxlLG4pOih0W2VdPW4udmFsdWUsdCl9O2k/KER8fChTLmY9WSxrLmY9SyxHKEIsImJ1ZmZlciIpLEcoQiwiYnl0ZU9mZnNldCIpLEcoQiwiYnl0ZUxlbmd0aCIpLEcoQiwibGVuZ3RoIikpLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohRH0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpZLGRlZmluZVByb3BlcnR5Okt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQubWF0Y2goL1xkKyQvKVswXS84LGM9dCsobj8iQ2xhbXBlZCI6IiIpKyJBcnJheSIscz0iZ2V0Iit0LGw9InNldCIrdCx2PW9bY10sZz12LHk9ZyYmZy5wcm90b3R5cGUsaz17fSxTPWZ1bmN0aW9uKHQsZSl7TSh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPUEodCk7cmV0dXJuIG4udmlld1tzXShlKmkrbi5ieXRlT2Zmc2V0LCEwKX0odGhpcyxlKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG89QSh0KTtuJiYocj0ocj1MKHIpKTwwPzA6cj4yNTU/MjU1OjI1NSZyKSxvLnZpZXdbbF0oZSppK28uYnl0ZU9mZnNldCxyLCEwKX0odGhpcyxlLHQpfSxlbnVtZXJhYmxlOiEwfSl9O0Q/YSYmKGc9ZSgoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHUodCxnLGMpLEkobShlKT9aKGUpP3ZvaWQgMCE9PXI/bmV3IHYoZSxoKG4saSkscik6dm9pZCAwIT09bj9uZXcgdihlLGgobixpKSk6bmV3IHYoZSk6VihlKT9XKGcsZSk6RS5jYWxsKGcsZSk6bmV3IHYocChlKSksdCxnKX0pKSx4JiZ4KGcsVSksaih3KHYpLChmdW5jdGlvbih0KXt0IGluIGd8fGYoZyx0LHZbdF0pfSkpLGcucHJvdG90eXBlPXkpOihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3UodCxnLGMpO3ZhciBvLGEscyxsPTAsZj0wO2lmKG0oZSkpe2lmKCFaKGUpKXJldHVybiBWKGUpP1coZyxlKTpFLmNhbGwoZyxlKTtvPWUsZj1oKG4saSk7dmFyIHY9ZS5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PXIpe2lmKHYlaSl0aHJvdyBSKHEpO2lmKChhPXYtZik8MCl0aHJvdyBSKHEpfWVsc2UgaWYoKGE9ZChyKSppKStmPnYpdGhyb3cgUihxKTtzPWEvaX1lbHNlIHM9cChlKSxvPW5ldyBQKGE9cyppKTtmb3IoVCh0LHtidWZmZXI6byxieXRlT2Zmc2V0OmYsYnl0ZUxlbmd0aDphLGxlbmd0aDpzLHZpZXc6bmV3IE4obyl9KTtsPHM7KVModCxsKyspfSkpLHgmJngoZyxVKSx5PWcucHJvdG90eXBlPWIoQikpLHkuY29uc3RydWN0b3IhPT1nJiZmKHksImNvbnN0cnVjdG9yIixnKSxGJiZmKHksRixjKSxrW2NdPWcscih7Z2xvYmFsOiEwLGZvcmNlZDpnIT12LHNoYW06IUR9LGspLEggaW4gZ3x8ZihnLEgsaSksSCBpbiB5fHxmKHksSCxpKSxDKGMpfSk6dC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMjA0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkyMDkpLG89bigyNzg4NCksaT1uKDczODkwKSxhPW4oNDQ5ODQpLGM9big0NjEzMCkscz1uKDczMDc0KS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLHUsbCxmLGQscD1yKHQpLGg9YXJndW1lbnRzLmxlbmd0aCx2PWg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGc9dm9pZCAwIT09dix5PWkocCk7aWYobnVsbCE9eSYmIWEoeSkpZm9yKGQ9KGY9eS5jYWxsKHApKS5uZXh0LHA9W107IShsPWQuY2FsbChmKSkuZG9uZTspcC5wdXNoKGwudmFsdWUpO2ZvcihnJiZoPjImJih2PWModixhcmd1bWVudHNbMl0sMikpLG49byhwLmxlbmd0aCksdT1uZXcocyh0aGlzKSkobiksZT0wO24+ZTtlKyspdVtlXT1nP3YocFtlXSxlKTpwW2VdO3JldHVybiB1fX0sMzU2Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigzMjE4NyksaT1uKDQ3OTYpLGE9big3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxjPXIuQXJyYXlCdWZmZXIscz1yLkludDhBcnJheTt0LmV4cG9ydHM9IWF8fCFvKChmdW5jdGlvbigpe3MoMSl9KSl8fCFvKChmdW5jdGlvbigpe25ldyBzKC0xKX0pKXx8IWkoKGZ1bmN0aW9uKHQpe25ldyBzLG5ldyBzKG51bGwpLG5ldyBzKDEuNSksbmV3IHModCl9KSwhMCl8fG8oKGZ1bmN0aW9uKCl7cmV0dXJuIDEhPT1uZXcgcyhuZXcgYygyKSwxLHZvaWQgMCkubGVuZ3RofSkpfSw2NzI5OmZ1bmN0aW9uKHQpe3ZhciBlPTAsbj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIrU3RyaW5nKHZvaWQgMD09PXQ/IiI6dCkrIilfIisoKytlK24pLnRvU3RyaW5nKDM2KX19LDE2NDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwMTQpO3QuZXhwb3J0cz1yJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCl9LDM5NDc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpO3QuZXhwb3J0cz1yKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LDc5MDcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM5NDc2KSxjPWkucHJvY2VzcyxzPWMmJmMudmVyc2lvbnMsdT1zJiZzLnY4O3U/bz0ocj11LnNwbGl0KCIuIikpWzBdK3JbMV06YSYmKCEocj1hLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8clsxXT49NzQpJiYocj1hLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYobz1yWzFdKSx0LmV4cG9ydHM9byYmK299LDQyMTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9L1ZlcnNpb25cLzEwXC5cZCsoXC5cZCspPyggTW9iaWxlXC9cdyspPyBTYWZhcmlcLy8udGVzdChyKX0sMjM3MjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2MjA1NCksaT1uKDc2Mjk4KSxhPW4oNjcyOSksYz1uKDkwMTQpLHM9bigxNjQxMCksdT1vKCJ3a3MiKSxsPXIuU3ltYm9sLGY9cz9sOmE7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHUsdCl8fChjJiZpKGwsdCk/dVt0XT1sW3RdOnVbdF09ZigiU3ltYm9sLiIrdCkpLHVbdF19fSw1MDA1NTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9Ilx0XG5cdlxmXHIgwqDhmoDigIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MzkxNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCk7ZS5mPXJ9LDYxMjQ1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oODI4MzUpLGE9big2NzUzOCksYz0iQXJyYXlCdWZmZXIiLHM9aS5BcnJheUJ1ZmZlcjtyKHtnbG9iYWw6ITAsZm9yY2VkOm8uQXJyYXlCdWZmZXIhPT1zfSx7QXJyYXlCdWZmZXI6c30pLGEoYyl9LDI5MjczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzMwNzQpO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHN0YXQ6ITAsZm9yY2VkOiFvLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1N9LHtpc1ZpZXc6by5pc1ZpZXd9KX0sOTA1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big4MjgzNSksYT1uKDg3NTc5KSxjPW4oNzY5NzYpLHM9bigyNzg4NCksdT1uKDEzOTc5KSxsPWkuQXJyYXlCdWZmZXIsZj1pLkRhdGFWaWV3LGQ9bC5wcm90b3R5cGUuc2xpY2U7cih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIscHJvdG86ITAsdW5zYWZlOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFuZXcgbCgyKS5zbGljZSgxLHZvaWQgMCkuYnl0ZUxlbmd0aH0pKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZCYmdm9pZCAwPT09ZSlyZXR1cm4gZC5jYWxsKGEodGhpcyksdCk7Zm9yKHZhciBuPWEodGhpcykuYnl0ZUxlbmd0aCxyPWModCxuKSxvPWModm9pZCAwPT09ZT9uOmUsbiksaT1uZXcodSh0aGlzLGwpKShzKG8tcikpLHA9bmV3IGYodGhpcyksaD1uZXcgZihpKSx2PTA7cjxvOyloLnNldFVpbnQ4KHYrKyxwLmdldFVpbnQ4KHIrKykpO3JldHVybiBpfX0pfSw1NzM4NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDYxOTkpLGE9bigxMDU5MiksYz1uKDE5MjA5KSxzPW4oMjc4ODQpLHU9big1ODgxMCksbD1uKDcwMDkpLGY9big2MTk2MyksZD1uKDIzNzI0KSxwPW4oNzkwNzEpLGg9ZCgiaXNDb25jYXRTcHJlYWRhYmxlIiksdj05MDA3MTk5MjU0NzQwOTkxLGc9Ik1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIseT1wPj01MXx8IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbaF09ITEsdC5jb25jYXQoKVswXSE9PXR9KSksbT1mKCJjb25jYXQiKSxiPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPXRbaF07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOmkodCl9O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDoheXx8IW19LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhPWModGhpcyksZj1sKGEsMCksZD0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKGIoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKXtpZihkKyhvPXMoaS5sZW5ndGgpKT52KXRocm93IFR5cGVFcnJvcihnKTtmb3Iobj0wO248bztuKyssZCsrKW4gaW4gaSYmdShmLGQsaVtuXSl9ZWxzZXtpZihkPj12KXRocm93IFR5cGVFcnJvcihnKTt1KGYsZCsrLGkpfXJldHVybiBmLmxlbmd0aD1kLGZ9fSl9LDMwODE3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTk0MzEpLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtjb3B5V2l0aGluOm99KSxpKCJjb3B5V2l0aGluIil9LDUyMDU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5ldmVyeTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoImV2ZXJ5Iil9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw3MzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDY1ODk1KSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmlsbDpvfSksaSgiZmlsbCIpfSw0NzUwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigzMjE4NyksYT1uKDYxOTYzKSgiZmlsdGVyIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5maWx0ZXIuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw5MDkxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9big3NjUxMyksYT0iZmluZEluZGV4IixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZEluZGV4KChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKGEpfSwzMzE5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZCxpPW4oNzY1MTMpLGE9ImZpbmQiLGM9ITA7YSBpbltdJiZBcnJheSgxKS5maW5kKChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sNzkyMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7dmFyIGUsbj1pKHRoaXMpLHI9YShuLmxlbmd0aCk7cmV0dXJuIGModCksKGU9cyhuLDApKS5sZW5ndGg9byhlLG4sbixyLDAsMSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxlfX0pfSwyODIwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MDY2NSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big0MzQxNikscz1uKDcwMDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmxhdDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCxlPWkodGhpcyksbj1hKGUubGVuZ3RoKSxyPXMoZSwwKTtyZXR1cm4gci5sZW5ndGg9byhyLGUsZSxuLDAsdm9pZCAwPT09dD8xOmModCkpLHJ9fSl9LDQzNTkxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzY4KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6W10uZm9yRWFjaCE9b30se2ZvckVhY2g6b30pfSw3NDUzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg1MTY2KTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohbig0Nzk2KSgoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pKX0se2Zyb206b30pfSwyMjI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NTgwMykuaW5jbHVkZXMsaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaSgiaW5jbHVkZXMiKX0sMjQxMjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1uKDIyOTA5KSxhPVtdLmluZGV4T2YsYz0hIWEmJjEvWzFdLmluZGV4T2YoMSwtMCk8MCxzPWkoImluZGV4T2YiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y3x8c30se2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGM/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6byh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwyMTI3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzQXJyYXk6big2MTk5KX0pfSw1MDA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDc2NTEzKSxpPW4oMTIzNSksYT1uKDg5ODI3KSxjPW4oNDYwNjEpLHM9IkFycmF5IEl0ZXJhdG9yIix1PWEuc2V0LGw9YS5nZXR0ZXJGb3Iocyk7dC5leHBvcnRzPWMoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24odCxlKXt1KHRoaXMse3R5cGU6cyx0YXJnZXQ6cih0KSxpbmRleDowLGtpbmQ6ZX0pfSksKGZ1bmN0aW9uKCl7dmFyIHQ9bCh0aGlzKSxlPXQudGFyZ2V0LG49dC5raW5kLHI9dC5pbmRleCsrO3JldHVybiFlfHxyPj1lLmxlbmd0aD8odC50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOiJrZXlzIj09bj97dmFsdWU6cixkb25lOiExfToidmFsdWVzIj09bj97dmFsdWU6ZVtyXSxkb25lOiExfTp7dmFsdWU6W3IsZVtyXV0sZG9uZTohMX19KSwidmFsdWVzIiksaS5Bcmd1bWVudHM9aS5BcnJheSxvKCJrZXlzIiksbygidmFsdWVzIiksbygiZW50cmllcyIpfSw3NDEyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNDk4KSxpPW4oOTU3MyksYT1uKDIyOTA5KSxjPVtdLmpvaW4scz1vIT1PYmplY3QsdT1hKCJqb2luIiwiLCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpzfHx1fSx7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKGkodGhpcyksdm9pZCAwPT09dD8iLCI6dCl9fSl9LDk0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNDkyNDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvIT09W10ubGFzdEluZGV4T2Z9LHtsYXN0SW5kZXhPZjpvfSl9LDI3Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5tYXAsaT1uKDMyMTg3KSxhPW4oNjE5NjMpKCJtYXAiKSxjPWEmJiFpKChmdW5jdGlvbigpe1tdLm1hcC5jYWxsKHtsZW5ndGg6LTEsMDoxfSwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKX0pKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF8fCFjfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY5OTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwodClpbnN0YW5jZW9mIHQpfSkpfSx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkoZSk7ZT50OylpKG4sdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIG4ubGVuZ3RoPWUsbn19KX0sNDU1Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLnJpZ2h0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlUmlnaHQiKX0se3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODA1MjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLmxlZnQ7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJyZWR1Y2UiKX0se3JlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwMTE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9W10ucmV2ZXJzZSxhPVsxLDJdO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpTdHJpbmcoYSk9PT1TdHJpbmcoYS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpJiYodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGgpLGkuY2FsbCh0aGlzKX19KX0sMjkxMTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big2MTk5KSxhPW4oNzY5NzYpLGM9bigyNzg4NCkscz1uKDk1NzMpLHU9big1ODgxMCksbD1uKDYxOTYzKSxmPW4oMjM3MjQpKCJzcGVjaWVzIiksZD1bXS5zbGljZSxwPU1hdGgubWF4O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic2xpY2UiKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLGg9cyh0aGlzKSx2PWMoaC5sZW5ndGgpLGc9YSh0LHYpLHk9YSh2b2lkIDA9PT1lP3Y6ZSx2KTtpZihpKGgpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49aC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpP28obikmJm51bGw9PT0obj1uW2ZdKSYmKG49dm9pZCAwKTpuPXZvaWQgMCxuPT09QXJyYXl8fHZvaWQgMD09PW4pKXJldHVybiBkLmNhbGwoaCxnLHkpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKHAoeS1nLDApKSxsPTA7Zzx5O2crKyxsKyspZyBpbiBoJiZ1KHIsbCxoW2ddKTtyZXR1cm4gci5sZW5ndGg9bCxyfX0pfSw4NTU5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuc29tZTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInNvbWUiKX0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjc4MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9bigxOTIwOSksYT1uKDMyMTg3KSxjPW4oMjI5MDkpLHM9W10sdT1zLnNvcnQsbD1hKChmdW5jdGlvbigpe3Muc29ydCh2b2lkIDApfSkpLGY9YSgoZnVuY3Rpb24oKXtzLnNvcnQobnVsbCl9KSksZD1jKCJzb3J0Iik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmx8fCFmfHxkfSx7c29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD91LmNhbGwoaSh0aGlzKSk6dS5jYWxsKGkodGhpcyksbyh0KSl9fSl9LDg2MjE0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3NTM4KSgiQXJyYXkiKX0sMzM3OTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzY5NzYpLGk9big0MzQxNiksYT1uKDI3ODg0KSxjPW4oMTkyMDkpLHM9big3MDA5KSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1NYXRoLm1heCxkPU1hdGgubWluLHA9OTAwNzE5OTI1NDc0MDk5MSxoPSJNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkIjtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNwbGljZSIpfSx7c3BsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLHYsZyx5LG09Yyh0aGlzKSxiPWEobS5sZW5ndGgpLHg9byh0LGIpLHc9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dz9uPXI9MDoxPT09dz8obj0wLHI9Yi14KToobj13LTIscj1kKGYoaShlKSwwKSxiLXgpKSxiK24tcj5wKXRocm93IFR5cGVFcnJvcihoKTtmb3IobD1zKG0sciksdj0wO3Y8cjt2KyspKGc9eCt2KWluIG0mJnUobCx2LG1bZ10pO2lmKGwubGVuZ3RoPXIsbjxyKXtmb3Iodj14O3Y8Yi1yO3YrKyl5PXYrbiwoZz12K3IpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9Yjt2PmItcituO3YtLSlkZWxldGUgbVt2LTFdfWVsc2UgaWYobj5yKWZvcih2PWItcjt2Png7di0tKXk9dituLTEsKGc9dityLTEpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9MDt2PG47disrKW1bdit4XT1hcmd1bWVudHNbdisyXTtyZXR1cm4gbS5sZW5ndGg9Yi1yK24sbH19KX0sNzE4NDY6ZnVuY3Rpb24odCxlLG4pe24oNzY1MTMpKCJmbGF0TWFwIil9LDcwMTQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdCIpfSw0NTE1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDgyODM1KTtyKHtnbG9iYWw6ITAsZm9yY2VkOiFuKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSfSx7RGF0YVZpZXc6by5EYXRhVmlld30pfSw0MTYzMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRGF0ZSIsc3RhdDohMH0se25vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSw0MDA0NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc5MTY3KTtyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PW99LHt0b0lTT1N0cmluZzpvfSl9LDM2MjMzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big1MzQ5OCk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIG58fGlzRmluaXRlKG4pP2UudG9JU09TdHJpbmcoKTpudWxsfX0pfSw4NDA3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2OTcxKSxvPW4oNzY5NzQpLGk9bigyMzcyNCkoInRvUHJpbWl0aXZlIiksYT1EYXRlLnByb3RvdHlwZTtpIGluIGF8fHIoYSxpLG8pfSwyMTM3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyksbz1EYXRlLnByb3RvdHlwZSxpPSJJbnZhbGlkIERhdGUiLGE9InRvU3RyaW5nIixjPW8udG9TdHJpbmcscz1vLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9aSYmcihvLGEsKGZ1bmN0aW9uKCl7dmFyIHQ9cy5jYWxsKHRoaXMpO3JldHVybiB0PT10P2MuY2FsbCh0aGlzKTppfSkpfSw5NjQ5ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwfSx7YmluZDpuKDczNzM5KX0pfSw3NTg5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTA1OTIpLG89bigzNzYyMCksaT1uKDY0OTY1KSxhPW4oMjM3MjQpKCJoYXNJbnN0YW5jZSIpLGM9RnVuY3Rpb24ucHJvdG90eXBlO2EgaW4gY3x8by5mKGMsYSx7dmFsdWU6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFyKHQpKXJldHVybiExO2lmKCFyKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sMjI0NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCkuZixpPUZ1bmN0aW9uLnByb3RvdHlwZSxhPWkudG9TdHJpbmcsYz0vXlxzKmZ1bmN0aW9uIChbXiAoXSopLyxzPSJuYW1lIjtyJiYhKHMgaW4gaSkmJm8oaSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLmNhbGwodGhpcykubWF0Y2goYylbMV19Y2F0Y2godCl7cmV0dXJuIiJ9fX0pfSw3MTYyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe2dsb2JhbDohMH0se2dsb2JhbFRoaXM6big4OTU1OCl9KX0sMTY1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9bigzMjE4NyksYT1vKCJKU09OIiwic3RyaW5naWZ5IiksYz0vW1x1RDgwMC1cdURGRkZdL2cscz0vXltcdUQ4MDAtXHVEQkZGXSQvLHU9L15bXHVEQzAwLVx1REZGRl0kLyxsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmNoYXJBdChlLTEpLG89bi5jaGFyQXQoZSsxKTtyZXR1cm4gcy50ZXN0KHQpJiYhdS50ZXN0KG8pfHx1LnRlc3QodCkmJiFzLnRlc3Qocik/IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTp0fSxmPWkoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09YSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09YSgiXHVkZWFkIil9KSk7YSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDpmfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/ci5yZXBsYWNlKGMsbCk6cn19KX0sODExMDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO24oNTExMjgpKHIuSlNPTiwiSlNPTiIsITApfSw5NDkwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSwyMTAzMjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDIxOTMyKSxpPU1hdGguYWNvc2gsYT1NYXRoLmxvZyxjPU1hdGguc3FydCxzPU1hdGguTE4yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fDcxMCE9TWF0aC5mbG9vcihpKE51bWJlci5NQVhfVkFMVUUpKXx8aSgxLzApIT0xLzB9LHthY29zaDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk8MT9OYU46dD45NDkwNjI2NS42MjQyNTE1Nj9hKHQpK3M6byh0LTErYyh0LTEpKmModCsxKSl9fSl9LDM3OTM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXNpbmgsaT1NYXRoLmxvZyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKDApPjApfSx7YXNpbmg6ZnVuY3Rpb24gdChlKXtyZXR1cm4gaXNGaW5pdGUoZT0rZSkmJjAhPWU/ZTwwPy10KC1lKTppKGUrYShlKmUrMSkpOmV9fSl9LDkzOTk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXRhbmgsaT1NYXRoLmxvZztyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKC0wKTwwKX0se2F0YW5oOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDppKCgxK3QpLygxLXQpKS8yfX0pfSwxMzM5MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4Nzg3KSxpPU1hdGguYWJzLGE9TWF0aC5wb3c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2JydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0PSt0KSphKGkodCksMS8zKX19KX0sMTEyODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MT0cyRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbHozMjpmdW5jdGlvbih0KXtyZXR1cm4odD4+Pj0wKT8zMS1vKGkodCsuNSkqYSk6MzJ9fSl9LDM4MDM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5jb3NoLGE9TWF0aC5hYnMsYz1NYXRoLkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohaXx8aSg3MTApPT09MS8wfSx7Y29zaDpmdW5jdGlvbih0KXt2YXIgZT1vKGEodCktMSkrMTtyZXR1cm4oZSsxLyhlKmMqYykpKihjLzIpfX0pfSwxMTM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6byE9TWF0aC5leHBtMX0se2V4cG0xOm99KX0sNDYwNzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtmcm91bmQ6big1MzI1MSl9KX0sMzAwODM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5oeXBvdCxpPU1hdGguYWJzLGE9TWF0aC5zcXJ0O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ISFvJiZvKDEvMCxOYU4pIT09MS8wfSx7aHlwb3Q6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixvPTAsYz0wLHM9YXJndW1lbnRzLmxlbmd0aCx1PTA7YzxzOyl1PChuPWkoYXJndW1lbnRzW2MrK10pKT8obz1vKihyPXUvbikqcisxLHU9bik6bys9bj4wPyhyPW4vdSkqcjpuO3JldHVybiB1PT09MS8wPzEvMDp1KmEobyl9fSl9LDQ3MzgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9TWF0aC5pbXVsO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tNSE9aSg0Mjk0OTY3Mjk1LDUpfHwyIT1pLmxlbmd0aH0pKX0se2ltdWw6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1uJnIsYT1uJm87cmV0dXJuIDB8aSphKygobiZyPj4+MTYpKmEraSoobiZvPj4+MTYpPDwxNj4+PjApfX0pfSw3MTU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmxvZyxpPU1hdGguTE9HMTBFO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpKml9fSl9LDk5MjE4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMXA6bigyMTkzMil9KX0sOTg5Nzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpL2l9fSl9LDgwNjk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduOm4oMzg3ODcpfSl9LDcwMjA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big3Mjk3MCksYT1NYXRoLmFicyxjPU1hdGguZXhwLHM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tMmUtMTchPU1hdGguc2luaCgtMmUtMTcpfSkpfSx7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0PSt0KTwxPyhpKHQpLWkoLXQpKS8yOihjKHQtMSktYygtdC0xKSkqKHMvMil9fSl9LDg1NzU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5leHA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dGFuaDpmdW5jdGlvbih0KXt2YXIgZT1vKHQ9K3QpLG49bygtdCk7cmV0dXJuIGU9PTEvMD8xOm49PTEvMD8tMTooZS1uKS8oaSh0KStpKC10KSl9fSl9LDExNzczOmZ1bmN0aW9uKHQsZSxuKXtuKDUxMTI4KShNYXRoLCJNYXRoIiwhMCl9LDE1NzYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9pOm8pKHQpfX0pfSw3MTgyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big3NjI5OCkscz1uKDI0NTk0KSx1PW4oMzAyNzIpLGw9big1MzQ5OCksZj1uKDMyMTg3KSxkPW4oNTA4NjgpLHA9bigxMzMzNCkuZixoPW4oOTcyNTcpLmYsdj1uKDM3NjIwKS5mLGc9big4MjM1MCkudHJpbSx5PSJOdW1iZXIiLG09by5OdW1iZXIsYj1tLnByb3RvdHlwZSx4PXMoZChiKSk9PXksdz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzLHU9bCh0LCExKTtpZigic3RyaW5nIj09dHlwZW9mIHUmJnUubGVuZ3RoPjIpaWYoNDM9PT0oZT0odT1nKHUpKS5jaGFyQ29kZUF0KDApKXx8NDU9PT1lKXtpZig4OD09PShuPXUuY2hhckNvZGVBdCgyKSl8fDEyMD09PW4pcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09ZSl7c3dpdGNoKHUuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4OnI9MixvPTQ5O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6cj04LG89NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rdX1mb3IoYT0oaT11LnNsaWNlKDIpKS5sZW5ndGgsYz0wO2M8YTtjKyspaWYoKHM9aS5jaGFyQ29kZUF0KGMpKTw0OHx8cz5vKXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KGkscil9cmV0dXJuK3V9O2lmKGkoeSwhbSgiIDBvMSIpfHwhbSgiMGIxIil8fG0oIisweDEiKSkpe2Zvcih2YXIgRSxqPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQsbj10aGlzO3JldHVybiBuIGluc3RhbmNlb2YgaiYmKHg/ZigoZnVuY3Rpb24oKXtiLnZhbHVlT2YuY2FsbChuKX0pKTpzKG4pIT15KT91KG5ldyBtKHcoZSkpLG4saik6dyhlKX0sQz1yP3AobSk6Ik1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyIi5zcGxpdCgiLCIpLGs9MDtDLmxlbmd0aD5rO2srKyljKG0sRT1DW2tdKSYmIWMoaixFKSYmdihqLEUsaChtLEUpKTtqLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9aixhKG8seSxqKX19LDI2MDYzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5Njc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzRmluaXRlOm4oODk1NDIpfSl9LDMzMTAwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0ludGVnZXI6bigzODI1Nyl9KX0sNDE5Mjg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzTmFOOmZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0pfSwxNTg2OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4MjU3KSxpPU1hdGguYWJzO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSYmaSh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sODg3MTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSwzNjk5NTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSwxMTIyNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sNjM3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxMzA2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDUzOTk3KSxhPW4oNjgyNTMpLGM9bigzMjE4Nykscz0xLi50b0ZpeGVkLHU9TWF0aC5mbG9vcixsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWU/bjplJTI9PTE/bCh0LGUtMSxuKnQpOmwodCp0LGUvMixuKX07cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpzJiYoIjAuMDAwIiE9PThlLTUudG9GaXhlZCgzKXx8IjEiIT09LjkudG9GaXhlZCgwKXx8IjEuMjUiIT09MS4yNTUudG9GaXhlZCgyKXx8IjEwMDAwMDAwMDAwMDAwMDAxMjgiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IWMoKGZ1bmN0aW9uKCl7cy5jYWxsKHt9KX0pKX0se3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGMscz1pKHRoaXMpLGY9byh0KSxkPVswLDAsMCwwLDAsMF0scD0iIixoPSIwIix2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZTsrK248Njspcis9dCpkW25dLGRbbl09ciUxZTcscj11KHIvMWU3KX0sZz1mdW5jdGlvbih0KXtmb3IodmFyIGU9NixuPTA7LS1lPj0wOyluKz1kW2VdLGRbZV09dShuL3QpLG49biV0KjFlN30seT1mdW5jdGlvbigpe2Zvcih2YXIgdD02LGU9IiI7LS10Pj0wOylpZigiIiE9PWV8fDA9PT10fHwwIT09ZFt0XSl7dmFyIG49U3RyaW5nKGRbdF0pO2U9IiI9PT1lP246ZSthLmNhbGwoIjAiLDctbi5sZW5ndGgpK259cmV0dXJuIGV9O2lmKGY8MHx8Zj4yMCl0aHJvdyBSYW5nZUVycm9yKCJJbmNvcnJlY3QgZnJhY3Rpb24gZGlnaXRzIik7aWYocyE9cylyZXR1cm4iTmFOIjtpZihzPD0tMWUyMXx8cz49MWUyMSlyZXR1cm4gU3RyaW5nKHMpO2lmKHM8MCYmKHA9Ii0iLHM9LXMpLHM+MWUtMjEpaWYobj0oZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQ7bj49NDA5NjspZSs9MTIsbi89NDA5Njtmb3IoO24+PTI7KWUrPTEsbi89MjtyZXR1cm4gZX0ocypsKDIsNjksMSkpLTY5KTwwP3MqbCgyLC1lLDEpOnMvbCgyLGUsMSksbio9NDUwMzU5OTYyNzM3MDQ5NiwoZT01Mi1lKT4wKXtmb3IodigwLG4pLHI9ZjtyPj03Oyl2KDFlNywwKSxyLT03O2Zvcih2KGwoMTAsciwxKSwwKSxyPWUtMTtyPj0yMzspZygxPDwyMyksci09MjM7ZygxPDxyKSx2KDEsMSksZygyKSxoPXkoKX1lbHNlIHYoMCxuKSx2KDE8PC1lLDApLGg9eSgpK2EuY2FsbCgiMCIsZik7cmV0dXJuIGg9Zj4wP3ArKChjPWgubGVuZ3RoKTw9Zj8iMC4iK2EuY2FsbCgiMCIsZi1jKStoOmguc2xpY2UoMCxjLWYpKyIuIitoLnNsaWNlKGMtZikpOnAraH19KX0sMzIyOTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big1Mzk5NyksYT0xLi50b1ByZWNpc2lvbjtyKHt0YXJnZXQ6Ik51bWJlciIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIjEiIT09YS5jYWxsKDEsdm9pZCAwKX0pKXx8IW8oKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKX0se3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChpKHRoaXMpKTphLmNhbGwoaSh0aGlzKSx0KX19KX0sMzc0ODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODY4NSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5hc3NpZ24hPT1vfSx7YXNzaWduOm99KX0sNDU1NTA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFuKDYyNTU2KX0se2NyZWF0ZTpuKDUwODY4KX0pfSwxOTI3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7Z2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sNTExNzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1Nik7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFvLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0aWVzOm4oODY0MDEpfSl9LDU4MTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6bigzNzYyMCkuZn0pfSw5MTIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7c2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sODc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM1NjcpLmVudHJpZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSw3NTgwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0NTIwKSxpPW4oMzIxODcpLGE9bigxMDU5MiksYz1uKDk2MDMpLm9uRnJlZXplLHM9T2JqZWN0LmZyZWV6ZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6aSgoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IW99LHtmcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJmEodCk/cyhjKHQpKTp0fX0pfSw0NjE0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIG8odCwoZnVuY3Rpb24odCxuKXtpKGUsdCxuKX0pLHZvaWQgMCwhMCksZX19KX0sMTUwNzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDk1NzMpLGE9big5NzI1NykuZixjPW4oNjI1NTYpLHM9bygoZnVuY3Rpb24oKXthKDEpfSkpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohY3x8cyxzaGFtOiFjfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0KSxlKX19KX0sNTgzMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDI0NDE1KSxhPW4oOTU3MyksYz1uKDk3MjU3KSxzPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLHNoYW06IW99LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9YSh0KSxvPWMuZix1PWkociksbD17fSxmPTA7dS5sZW5ndGg+Zjspdm9pZCAwIT09KG49byhyLGU9dVtmKytdKSkmJnMobCxlLG4pO3JldHVybiBsfX0pfSw2MDUyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMjY5MzcpLmY7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpfSkpfSx7Z2V0T3duUHJvcGVydHlOYW1lczppfSl9LDc0OTUzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxOTIwOSksYT1uKDY0OTY1KSxjPW4oNzE2MDgpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSksc2hhbTohY30se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX0pfSw1MTY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuISFpKHQpJiYoIWF8fGEodCkpfX0pfSw4OTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRnJvemVuO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0Zyb3plbjpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSwxODM3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzU2VhbGVkO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc1NlYWxlZDpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSw1NDc4MTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXM6big3NjQ4Mil9KX0sOTI1MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDE5MjA5KSxpPW4oMjU1MDcpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtpKDEpfSkpfSx7a2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sNzI1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5nZXR9d2hpbGUobj1zKG4pKX19KX0sMTA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big1MzQ5OCkscz1uKDY0OTY1KSx1PW4oOTcyNTcpLmY7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19sb29rdXBTZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxuPWEodGhpcykscj1jKHQsITApO2Rve2lmKGU9dShuLHIpKXJldHVybiBlLnNldH13aGlsZShuPXMobikpfX0pfSw5MzI3MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oOTYwMykub25GcmVlemUsYT1uKDc0NTIwKSxjPW4oMzIxODcpLHM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNTYxNTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5zZWFsO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3NlYWw6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJm8odCk/cyhpKHQpKTp0fX0pfSw0MTQ1NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6big3MTg0Mil9KX0sMzQ1Mjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89big5MjkxMyksaT1uKDE5NzU4KTtyfHxvKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixpLHt1bnNhZmU6ITB9KX0sNzI4NTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS52YWx1ZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHt2YWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9fSl9LDE5NDMzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ0OTcpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VGbG9hdCE9b30se3BhcnNlRmxvYXQ6b30pfSwzMzQzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4NDYpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VJbnQhPW99LHtwYXJzZUludDpvfSl9LDE3NjI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODMwODMpLGE9bigzMTE1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWkuZihlKSxyPW4ucmVzb2x2ZSxzPW4ucmVqZWN0LHU9YSgoZnVuY3Rpb24oKXt2YXIgbj1vKGUucmVzb2x2ZSksaT1bXSxhPTAscz0xO2ModCwoZnVuY3Rpb24odCl7dmFyIG89YSsrLGM9ITE7aS5wdXNoKHZvaWQgMCkscysrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTp0fSwtLXN8fHIoaSkpfSksKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp0fSwtLXN8fHIoaSkpfSkpfSkpLC0tc3x8cihpKX0pKTtyZXR1cm4gdS5lcnJvciYmcyh1LnZhbHVlKSxuLnByb21pc2V9fSl9LDQyNDkwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMzk0NTcpLGE9bigzMjE4NyksYz1uKDc3MDEpLHM9bigxMzk3OSksdT1uKDYzMTM0KSxsPW4oOTI5MTMpO3Ioe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ISFpJiZhKChmdW5jdGlvbigpe2kucHJvdG90eXBlLmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzLGMoIlByb21pc2UiKSksbj0iZnVuY3Rpb24iPT10eXBlb2YgdDtyZXR1cm4gdGhpcy50aGVuKG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9OnQsbj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXt0aHJvdyBufSkpfTp0KX19KSxvfHwiZnVuY3Rpb24iIT10eXBlb2YgaXx8aS5wcm90b3R5cGUuZmluYWxseXx8bChpLnByb3RvdHlwZSwiZmluYWxseSIsYygiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5KX0sMTE2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGksYSxjPW4oMTQwNDQpLHM9big2NTY3MiksdT1uKDg5NTU4KSxsPW4oNzcwMSksZj1uKDM5NDU3KSxkPW4oOTI5MTMpLHA9bigxOTI2KSxoPW4oNTExMjgpLHY9big2NzUzOCksZz1uKDEwNTkyKSx5PW4oODY0NzApLG09big1OTM3OSksYj1uKDI0NTk0KSx4PW4oNzY3NzMpLHc9big0MTMzNCksRT1uKDQ3OTYpLGo9bigxMzk3OSksQz1uKDIxNzQ0KS5zZXQsaz1uKDY1NTU1KSxTPW4oNjMxMzQpLE89big4MzYyMCksST1uKDgzMDgzKSxBPW4oMzExNSksVD1uKDg5ODI3KSxNPW4oNjQ1MDQpLF89bigyMzcyNCksTD1uKDc5MDcxKSxSPV8oInNwZWNpZXMiKSxQPSJQcm9taXNlIixOPVQuZ2V0LEQ9VC5zZXQsRj1ULmdldHRlckZvcihQKSxVPWYsQj11LlR5cGVFcnJvcix6PXUuZG9jdW1lbnQsVj11LnByb2Nlc3MsSD1sKCJmZXRjaCIpLHE9SS5mLFc9cSxHPSJwcm9jZXNzIj09YihWKSxaPSEhKHomJnouY3JlYXRlRXZlbnQmJnUuZGlzcGF0Y2hFdmVudCksJD0idW5oYW5kbGVkcmVqZWN0aW9uIixZPU0oUCwoZnVuY3Rpb24oKXtpZighKHgoVSkhPT1TdHJpbmcoVSkpKXtpZig2Nj09PUwpcmV0dXJuITA7aWYoIUcmJiJmdW5jdGlvbiIhPXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpcmV0dXJuITB9aWYocyYmIVUucHJvdG90eXBlLmZpbmFsbHkpcmV0dXJuITA7aWYoTD49NTEmJi9uYXRpdmUgY29kZS8udGVzdChVKSlyZXR1cm4hMTt2YXIgdD1VLnJlc29sdmUoMSksZT1mdW5jdGlvbih0KXt0KChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX07cmV0dXJuKHQuY29uc3RydWN0b3I9e30pW1JdPWUsISh0LnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBlKX0pKSxLPVl8fCFFKChmdW5jdGlvbih0KXtVLmFsbCh0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9KSksSj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFnKHQpfHwiZnVuY3Rpb24iIT10eXBlb2YoZT10LnRoZW4pKSYmZX0sWD1mdW5jdGlvbih0LGUsbil7aWYoIWUubm90aWZpZWQpe2Uubm90aWZpZWQ9ITA7dmFyIHI9ZS5yZWFjdGlvbnM7aygoZnVuY3Rpb24oKXtmb3IodmFyIG89ZS52YWx1ZSxpPTE9PWUuc3RhdGUsYT0wO3IubGVuZ3RoPmE7KXt2YXIgYyxzLHUsbD1yW2ErK10sZj1pP2wub2s6bC5mYWlsLGQ9bC5yZXNvbHZlLHA9bC5yZWplY3QsaD1sLmRvbWFpbjt0cnl7Zj8oaXx8KDI9PT1lLnJlamVjdGlvbiYmbnQodCxlKSxlLnJlamVjdGlvbj0xKSwhMD09PWY/Yz1vOihoJiZoLmVudGVyKCksYz1mKG8pLGgmJihoLmV4aXQoKSx1PSEwKSksYz09PWwucHJvbWlzZT9wKEIoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KHM9SihjKSk/cy5jYWxsKGMsZCxwKTpkKGMpKTpwKG8pfWNhdGNoKHQpe2gmJiF1JiZoLmV4aXQoKSxwKHQpfX1lLnJlYWN0aW9ucz1bXSxlLm5vdGlmaWVkPSExLG4mJiFlLnJlamVjdGlvbiYmdHQodCxlKX0pKX19LFE9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG87Wj8oKHI9ei5jcmVhdGVFdmVudCgiRXZlbnQiKSkucHJvbWlzZT1lLHIucmVhc29uPW4sci5pbml0RXZlbnQodCwhMSwhMCksdS5kaXNwYXRjaEV2ZW50KHIpKTpyPXtwcm9taXNlOmUscmVhc29uOm59LChvPXVbIm9uIit0XSk/byhyKTp0PT09JCYmTygiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixuKX0sdHQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXt2YXIgbixyPWUudmFsdWU7aWYoZXQoZSkmJihuPUEoKGZ1bmN0aW9uKCl7Rz9WLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIscix0KTpRKCQsdCxyKX0pKSxlLnJlamVjdGlvbj1HfHxldChlKT8yOjEsbi5lcnJvcikpdGhyb3cgbi52YWx1ZX0pKX0sZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LnJlamVjdGlvbiYmIXQucGFyZW50fSxudD1mdW5jdGlvbih0LGUpe0MuY2FsbCh1LChmdW5jdGlvbigpe0c/Vi5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIix0KTpRKCJyZWplY3Rpb25oYW5kbGVkIix0LGUudmFsdWUpfSkpfSxydD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24obyl7dChlLG4sbyxyKX19LG90PWZ1bmN0aW9uKHQsZSxuLHIpe2UuZG9uZXx8KGUuZG9uZT0hMCxyJiYoZT1yKSxlLnZhbHVlPW4sZS5zdGF0ZT0yLFgodCxlLCEwKSl9LGl0PWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxyJiYoZT1yKTt0cnl7aWYodD09PW4pdGhyb3cgQigiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgbz1KKG4pO28/aygoZnVuY3Rpb24oKXt2YXIgcj17ZG9uZTohMX07dHJ5e28uY2FsbChuLHJ0KGl0LHQscixlKSxydChvdCx0LHIsZSkpfWNhdGNoKG4pe290KHQscixuLGUpfX0pKTooZS52YWx1ZT1uLGUuc3RhdGU9MSxYKHQsZSwhMSkpfWNhdGNoKG4pe290KHQse2RvbmU6ITF9LG4sZSl9fX07WSYmKFU9ZnVuY3Rpb24odCl7bSh0aGlzLFUsUCkseSh0KSxyLmNhbGwodGhpcyk7dmFyIGU9Tih0aGlzKTt0cnl7dChydChpdCx0aGlzLGUpLHJ0KG90LHRoaXMsZSkpfWNhdGNoKHQpe290KHRoaXMsZSx0KX19LChyPWZ1bmN0aW9uKHQpe0QodGhpcyx7dHlwZTpQLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpbXSxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1wKFUucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49Rih0aGlzKSxyPXEoaih0aGlzLFUpKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgdHx8dCxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUsci5kb21haW49Rz9WLmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAsbi5yZWFjdGlvbnMucHVzaChyKSwwIT1uLnN0YXRlJiZYKHRoaXMsbiwhMSksci5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxvPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHIsZT1OKHQpO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1ydChpdCx0LGUpLHRoaXMucmVqZWN0PXJ0KG90LHQsZSl9LEkuZj1xPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09VXx8dD09PWk/bmV3IG8odCk6Vyh0KX0sc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGZ8fChhPWYucHJvdG90eXBlLnRoZW4sZChmLnByb3RvdHlwZSwidGhlbiIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IFUoKGZ1bmN0aW9uKHQsZSl7YS5jYWxsKG4sdCxlKX0pKS50aGVuKHQsZSl9KSx7dW5zYWZlOiEwfSksImZ1bmN0aW9uIj09dHlwZW9mIEgmJmMoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3JldHVybiBTKFUsSC5hcHBseSh1LGFyZ3VtZW50cykpfX0pKSksYyh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOll9LHtQcm9taXNlOlV9KSxoKFUsUCwhMSwhMCksdihQKSxpPWwoUCksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6WX0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1xKHRoaXMpO3JldHVybiBlLnJlamVjdC5jYWxsKHZvaWQgMCx0KSxlLnByb21pc2V9fSksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6c3x8WX0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIFMocyYmdGhpcz09PWk/VTp0aGlzLHQpfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOkt9LHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlc29sdmUsbz1uLnJlamVjdCxpPUEoKGZ1bmN0aW9uKCl7dmFyIG49eShlLnJlc29sdmUpLGk9W10sYT0wLGM9MTt3KHQsKGZ1bmN0aW9uKHQpe3ZhciBzPWErKyx1PSExO2kucHVzaCh2b2lkIDApLGMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXt1fHwodT0hMCxpW3NdPXQsLS1jfHxyKGkpKX0pLG8pfSkpLC0tY3x8cihpKX0pKTtyZXR1cm4gaS5lcnJvciYmbyhpLnZhbHVlKSxuLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlamVjdCxvPUEoKGZ1bmN0aW9uKCl7dmFyIG89eShlLnJlc29sdmUpO3codCwoZnVuY3Rpb24odCl7by5jYWxsKGUsdCkudGhlbihuLnJlc29sdmUscil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJnIoby52YWx1ZSksbi5wcm9taXNlfX0pfSwyOTI4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMzIxODcpLHM9bygiUmVmbGVjdCIsImFwcGx5IiksdT1GdW5jdGlvbi5hcHBseTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOiFjKChmdW5jdGlvbigpe3MoKGZ1bmN0aW9uKCl7fSkpfSkpfSx7YXBwbHk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpKHQpLGEobikscz9zKHQsZSxuKTp1LmNhbGwodCxlLG4pfX0pfSw2MTk0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTA1OTIpLHM9big1MDg2OCksdT1uKDczNzM5KSxsPW4oMzIxODcpLGY9bygiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGQ9bCgoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoZigoZnVuY3Rpb24oKXt9KSxbXSx0KWluc3RhbmNlb2YgdCl9KSkscD0hbCgoZnVuY3Rpb24oKXtmKChmdW5jdGlvbigpe30pKX0pKSxoPWR8fHA7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpoLHNoYW06aH0se2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe2kodCksYShlKTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dDppKGFyZ3VtZW50c1syXSk7aWYocCYmIWQpcmV0dXJuIGYodCxlLG4pO2lmKHQ9PW4pe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10pfXZhciByPVtudWxsXTtyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSksbmV3KHUuYXBwbHkodCxyKSl9dmFyIG89bi5wcm90b3R5cGUsbD1zKGMobyk/bzpPYmplY3QucHJvdG90eXBlKSxoPUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxsLGUpO3JldHVybiBjKGgpP2g6bH19KX0sMjY5ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oNTM0OTgpLGM9bigzNzYyMCk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KGMuZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSkpLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7aSh0KTt2YXIgcj1hKGUsITApO2kobik7dHJ5e3JldHVybiBjLmYodCxyLG4pLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sMTM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oOTcyNTcpLmY7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odCxlKXt2YXIgbj1pKG8odCksZSk7cmV0dXJuIShuJiYhbi5jb25maWd1cmFibGUpJiZkZWxldGUgdFtlXX19KX0sNDY1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oOTcyNTcpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZihpKHQpLGUpfX0pfSw3MDEzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDcxNjA4KX0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSw4MzMxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oODc1NzkpLGE9big3NjI5OCksYz1uKDk3MjU3KSxzPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsdSxsPWFyZ3VtZW50cy5sZW5ndGg8Mz9lOmFyZ3VtZW50c1syXTtyZXR1cm4gaShlKT09PWw/ZVtuXToocj1jLmYoZSxuKSk/YShyLCJ2YWx1ZSIpP3IudmFsdWU6dm9pZCAwPT09ci5nZXQ/dm9pZCAwOnIuZ2V0LmNhbGwobCk6byh1PXMoZSkpP3QodSxuLGwpOnZvaWQgMH19KX0sNjA4NjU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fX0pfSw2NzcwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPU9iamVjdC5pc0V4dGVuc2libGU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLCFpfHxpKHQpfX0pfSw5NjYzODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se293bktleXM6bigyNDQxNSl9KX0sMzk3MzA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODc1NzkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDc0NTIwKX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3ZhciBlPW8oIk9iamVjdCIsInByZXZlbnRFeHRlbnNpb25zIik7cmV0dXJuIGUmJmUodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw4NTY4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNzk4NjEpLGE9big3MTg0Mik7YSYmcih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCxlKXtvKHQpLGkoZSk7dHJ5e3JldHVybiBhKHQsZSksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw3NDExNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMTA1OTIpLGE9big3NjI5OCksYz1uKDMyMTg3KSxzPW4oMzc2MjApLHU9big5NzI1NyksbD1uKDY0OTY1KSxmPW4oMTQyMDkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXt2YXIgdD1zLmYoe30sImEiLHtjb25maWd1cmFibGU6ITB9KTtyZXR1cm4hMSE9PVJlZmxlY3Quc2V0KGwodCksImEiLDEsdCl9KSl9LHtzZXQ6ZnVuY3Rpb24gdChlLG4scil7dmFyIGMsZCxwPWFyZ3VtZW50cy5sZW5ndGg8ND9lOmFyZ3VtZW50c1szXSxoPXUuZihvKGUpLG4pO2lmKCFoKXtpZihpKGQ9bChlKSkpcmV0dXJuIHQoZCxuLHIscCk7aD1mKDApfWlmKGEoaCwidmFsdWUiKSl7aWYoITE9PT1oLndyaXRhYmxlfHwhaShwKSlyZXR1cm4hMTtpZihjPXUuZihwLG4pKXtpZihjLmdldHx8Yy5zZXR8fCExPT09Yy53cml0YWJsZSlyZXR1cm4hMTtjLnZhbHVlPXIscy5mKHAsbixjKX1lbHNlIHMuZihwLG4sZigwLHIpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09aC5zZXQmJihoLnNldC5jYWxsKHAsciksITApfX0pfSw0OTQ5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9bigzMDI3MiksYz1uKDM3NjIwKS5mLHM9bigxMzMzNCkuZix1PW4oNDMyMjMpLGw9bigyNTQxOSksZj1uKDkyOTEzKSxkPW4oMzIxODcpLHA9big2NzUzOCksaD1uKDIzNzI0KSgibWF0Y2giKSx2PW8uUmVnRXhwLGc9di5wcm90b3R5cGUseT0vYS9nLG09L2EvZyxiPW5ldyB2KHkpIT09eTtpZihyJiZpKCJSZWdFeHAiLCFifHxkKChmdW5jdGlvbigpe3JldHVybiBtW2hdPSExLHYoeSkhPXl8fHYobSk9PW18fCIvYS9pIiE9dih5LCJpIil9KSkpKXtmb3IodmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzIGluc3RhbmNlb2YgeCxyPXUodCksbz12b2lkIDA9PT1lO3JldHVybiFuJiZyJiZ0LmNvbnN0cnVjdG9yPT09eCYmbz90OmEoYj9uZXcgdihyJiYhbz90LnNvdXJjZTp0LGUpOnYoKHI9dCBpbnN0YW5jZW9mIHgpP3Quc291cmNlOnQsciYmbz9sLmNhbGwodCk6ZSksbj90aGlzOmcseCl9LHc9ZnVuY3Rpb24odCl7dCBpbiB4fHxjKHgsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7dlt0XT1lfX0pfSxFPXModiksaj0wO0UubGVuZ3RoPmo7KXcoRVtqKytdKTtnLmNvbnN0cnVjdG9yPXgseC5wcm90b3R5cGU9ZyxmKG8sIlJlZ0V4cCIseCl9cCgiUmVnRXhwIil9LDg3MjA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDM4NTk4KTtyKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09b30se2V4ZWM6b30pfSwxODI3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMjU0MTkpO3ImJiJnIiE9Ly4vZy5mbGFncyYmby5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDppfSl9LDM3NTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkyOTEzKSxvPW4oODc1NzkpLGk9bigzMjE4NyksYT1uKDI1NDE5KSxjPSJ0b1N0cmluZyIscz1SZWdFeHAucHJvdG90eXBlLHU9cy50b1N0cmluZyxsPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIi9hL2IiIT11LmNhbGwoe3NvdXJjZToiYSIsZmxhZ3M6ImIifSl9KSksZj11Lm5hbWUhPWM7KGx8fGYpJiZyKFJlZ0V4cC5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXt2YXIgdD1vKHRoaXMpLGU9U3RyaW5nKHQuc291cmNlKSxuPXQuZmxhZ3M7cmV0dXJuIi8iK2UrIi8iK1N0cmluZyh2b2lkIDA9PT1uJiZ0IGluc3RhbmNlb2YgUmVnRXhwJiYhKCJmbGFncyJpbiBzKT9hLmNhbGwodCk6bil9KSx7dW5zYWZlOiEwfSl9LDc0MDYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MTk1MSksbz1uKDY0NTApO3QuZXhwb3J0cz1yKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbyl9LDQxNzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJhbmNob3IiKX0se2FuY2hvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJhIiwibmFtZSIsdCl9fSl9LDMwNDAyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJiaWciKX0se2JpZzpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJpZyIsIiIsIiIpfX0pfSwxODE3NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmxpbmsiKX0se2JsaW5rOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYmxpbmsiLCIiLCIiKX19KX0sNjY4OTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJvbGQiKX0se2JvbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiIiwiIiwiIil9fSl9LDE1MzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jb2RlQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7Y29kZVBvaW50QXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sOTc2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5lbmRzV2l0aCxkPU1hdGgubWluLHA9dSgiZW5kc1dpdGgiKTtvKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEhKGx8fHB8fChyPWkoU3RyaW5nLnByb3RvdHlwZSwiZW5kc1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9YShlLmxlbmd0aCksbz12b2lkIDA9PT1uP3I6ZChhKG4pLHIpLGk9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLGksbyk6ZS5zbGljZShvLWkubGVuZ3RoLG8pPT09aX19KX0sODU3Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZpeGVkIil9LHtmaXhlZDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInR0IiwiIiwiIil9fSl9LDg0MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZvbnRjb2xvciIpfSx7Zm9udGNvbG9yOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJjb2xvciIsdCl9fSl9LDkyMTkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250c2l6ZSIpfSx7Zm9udHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiZm9udCIsInNpemUiLHQpfX0pfSwxMDc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPVN0cmluZy5mcm9tQ2hhckNvZGUsYT1TdHJpbmcuZnJvbUNvZGVQb2ludDtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMCxmb3JjZWQ6ISFhJiYxIT1hLmxlbmd0aH0se2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49W10scj1hcmd1bWVudHMubGVuZ3RoLGE9MDtyPmE7KXtpZihlPSthcmd1bWVudHNbYSsrXSxvKGUsMTExNDExMSkhPT1lKXRocm93IFJhbmdlRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtuLnB1c2goZTw2NTUzNj9pKGUpOmkoNTUyOTYrKChlLT02NTUzNik+PjEwKSxlJTEwMjQrNTYzMjApKX1yZXR1cm4gbi5qb2luKCIiKX19KX0sNzQ1NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oOTkzNDYpLGk9big3MDEzMik7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohbig5MzkxNSkoImluY2x1ZGVzIil9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4hIX5TdHJpbmcoaSh0aGlzKSkuaW5kZXhPZihvKHQpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMTIxNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoIml0YWxpY3MiKX0se2l0YWxpY3M6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJpIiwiIiwiIil9fSl9LDgyMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0LG89big4OTgyNyksaT1uKDQ2MDYxKSxhPSJTdHJpbmcgSXRlcmF0b3IiLGM9by5zZXQscz1vLmdldHRlckZvcihhKTtpKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7Yyh0aGlzLHt0eXBlOmEsc3RyaW5nOlN0cmluZyh0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPXModGhpcyksbj1lLnN0cmluZyxvPWUuaW5kZXg7cmV0dXJuIG8+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLG8pLGUuaW5kZXgrPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pKX0sMjYwMTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImxpbmsiKX0se2xpbms6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsImhyZWYiLHQpfX0pfSw4MTI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oMjc4ODQpLGM9big4NjQ3MCkscz1uKDg3NTc5KSx1PW4oMjQ1OTQpLGw9big0MzIyMyksZj1uKDI1NDE5KSxkPW4oNjY5NzEpLHA9bigzMjE4NyksaD1uKDIzNzI0KSx2PW4oMTM5NzkpLGc9big1MzE0MSkseT1uKDg5ODI3KSxtPW4oNjU2NzIpLGI9aCgibWF0Y2hBbGwiKSx4PSJSZWdFeHAgU3RyaW5nIix3PSJSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yIixFPXkuc2V0LGo9eS5nZXR0ZXJGb3IodyksQz1SZWdFeHAucHJvdG90eXBlLGs9Qy5leGVjLFM9IiIubWF0Y2hBbGwsTz0hIVMmJiFwKChmdW5jdGlvbigpeyJhIi5tYXRjaEFsbCgvLi8pfSkpLEk9bygoZnVuY3Rpb24odCxlLG4scil7RSh0aGlzLHt0eXBlOncscmVnZXhwOnQsc3RyaW5nOmUsZ2xvYmFsOm4sdW5pY29kZTpyLGRvbmU6ITF9KX0pLHgsKGZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKTtpZih0LmRvbmUpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgZT10LnJlZ2V4cCxuPXQuc3RyaW5nLHI9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2Ygcil7aWYoIm9iamVjdCIhPXR5cGVvZihuPXIuY2FsbCh0LGUpKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBleGVjIHJlc3VsdCIpO3JldHVybiBufXJldHVybiBrLmNhbGwodCxlKX0oZSxuKTtyZXR1cm4gbnVsbD09PXI/e3ZhbHVlOnZvaWQgMCxkb25lOnQuZG9uZT0hMH06dC5nbG9iYWw/KCIiPT1TdHJpbmcoclswXSkmJihlLmxhc3RJbmRleD1nKG4sYShlLmxhc3RJbmRleCksdC51bmljb2RlKSkse3ZhbHVlOnIsZG9uZTohMX0pOih0LmRvbmU9ITAse3ZhbHVlOnIsZG9uZTohMX0pfSkpLEE9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxjLHU9cyh0aGlzKSxsPVN0cmluZyh0KTtyZXR1cm4gZT12KHUsUmVnRXhwKSx2b2lkIDA9PT0obj11LmZsYWdzKSYmdSBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gQykmJihuPWYuY2FsbCh1KSkscj12b2lkIDA9PT1uPyIiOlN0cmluZyhuKSxvPW5ldyBlKGU9PT1SZWdFeHA/dS5zb3VyY2U6dSxyKSxpPSEhfnIuaW5kZXhPZigiZyIpLGM9ISF+ci5pbmRleE9mKCJ1Iiksby5sYXN0SW5kZXg9YSh1Lmxhc3RJbmRleCksbmV3IEkobyxsLGksYyl9O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6T30se21hdGNoQWxsOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPWkodGhpcyk7aWYobnVsbCE9dCl7aWYobCh0KSYmIX5TdHJpbmcoaSgiZmxhZ3MiaW4gQz90LmZsYWdzOmYuY2FsbCh0KSkpLmluZGV4T2YoImciKSl0aHJvdyBUeXBlRXJyb3IoImAubWF0Y2hBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKE8pcmV0dXJuIFMuYXBwbHkobyxhcmd1bWVudHMpO2lmKHZvaWQgMD09PShuPXRbYl0pJiZtJiYiUmVnRXhwIj09dSh0KSYmKG49QSksbnVsbCE9bilyZXR1cm4gYyhuKS5jYWxsKHQsbyl9ZWxzZSBpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gZT1TdHJpbmcobykscj1uZXcgUmVnRXhwKHQsImciKSxtP0EuY2FsbChyLGUpOnJbYl0oZSl9fSksbXx8YiBpbiBDfHxkKEMsYixBKX0sNjUwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigyNzg4NCksYT1uKDcwMTMyKSxjPW4oNTMxNDEpLHM9bigzNTQ1NSk7cigibWF0Y2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49YSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGE9byh0KSx1PVN0cmluZyh0aGlzKTtpZighYS5nbG9iYWwpcmV0dXJuIHMoYSx1KTt2YXIgbD1hLnVuaWNvZGU7YS5sYXN0SW5kZXg9MDtmb3IodmFyIGYsZD1bXSxwPTA7bnVsbCE9PShmPXMoYSx1KSk7KXt2YXIgaD1TdHJpbmcoZlswXSk7ZFtwXT1oLCIiPT09aCYmKGEubGFzdEluZGV4PWModSxpKGEubGFzdEluZGV4KSxsKSkscCsrfXJldHVybiAwPT09cD9udWxsOmR9XX0pKX0sNDQwMTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLmVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNDIxODQpfSx7cGFkRW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDM4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNjU3Mykuc3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTExOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTU3MyksaT1uKDI3ODg0KTtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMH0se3JhdzpmdW5jdGlvbih0KXtmb3IodmFyIGU9byh0LnJhdyksbj1pKGUubGVuZ3RoKSxyPWFyZ3VtZW50cy5sZW5ndGgsYT1bXSxjPTA7bj5jOylhLnB1c2goU3RyaW5nKGVbYysrXSkpLGM8ciYmYS5wdXNoKFN0cmluZyhhcmd1bWVudHNbY10pKTtyZXR1cm4gYS5qb2luKCIiKX19KX0sMTg4MjM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBlYXQ6big2ODI1Myl9KX0sMzMzMjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDEzMiksdT1uKDUzMTQxKSxsPW4oMzU0NTUpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPU1hdGguZmxvb3IsaD0vXCQoWyQmJ2BdfFxkXGQ/fDxbXj5dKj4pL2csdj0vXCQoWyQmJ2BdfFxkXGQ/KS9nO3IoInJlcGxhY2UiLDIsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24obixyKXt2YXIgbz1zKHRoaXMpLGk9bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwobixvLHIpOmUuY2FsbChTdHJpbmcobyksbixyKX0sZnVuY3Rpb24odCxpKXt2YXIgcz1uKGUsdCx0aGlzLGkpO2lmKHMuZG9uZSlyZXR1cm4gcy52YWx1ZTt2YXIgcD1vKHQpLGg9U3RyaW5nKHRoaXMpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGk7dnx8KGk9U3RyaW5nKGkpKTt2YXIgZz1wLmdsb2JhbDtpZihnKXt2YXIgeT1wLnVuaWNvZGU7cC5sYXN0SW5kZXg9MH1mb3IodmFyIG09W107Oyl7dmFyIGI9bChwLGgpO2lmKG51bGw9PT1iKWJyZWFrO2lmKG0ucHVzaChiKSwhZylicmVhazsiIj09PVN0cmluZyhiWzBdKSYmKHAubGFzdEluZGV4PXUoaCxhKHAubGFzdEluZGV4KSx5KSl9Zm9yKHZhciB4LHc9IiIsRT0wLGo9MDtqPG0ubGVuZ3RoO2orKyl7Yj1tW2pdO2Zvcih2YXIgQz1TdHJpbmcoYlswXSksaz1mKGQoYyhiLmluZGV4KSxoLmxlbmd0aCksMCksUz1bXSxPPTE7TzxiLmxlbmd0aDtPKyspUy5wdXNoKHZvaWQgMD09PSh4PWJbT10pP3g6U3RyaW5nKHgpKTt2YXIgST1iLmdyb3VwcztpZih2KXt2YXIgQT1bQ10uY29uY2F0KFMsayxoKTt2b2lkIDAhPT1JJiZBLnB1c2goSSk7dmFyIFQ9U3RyaW5nKGkuYXBwbHkodm9pZCAwLEEpKX1lbHNlIFQ9cihDLGgsayxTLEksaSk7az49RSYmKHcrPWguc2xpY2UoRSxrKStULEU9aytDLmxlbmd0aCl9cmV0dXJuIHcraC5zbGljZShFKX1dO2Z1bmN0aW9uIHIodCxuLHIsbyxhLGMpe3ZhciBzPXIrdC5sZW5ndGgsdT1vLmxlbmd0aCxsPXY7cmV0dXJuIHZvaWQgMCE9PWEmJihhPWkoYSksbD1oKSxlLmNhbGwoYyxsLChmdW5jdGlvbihlLGkpe3ZhciBjO3N3aXRjaChpLmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gdDtjYXNlImAiOnJldHVybiBuLnNsaWNlKDAscik7Y2FzZSInIjpyZXR1cm4gbi5zbGljZShzKTtjYXNlIjwiOmM9YVtpLnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBsPStpO2lmKDA9PT1sKXJldHVybiBlO2lmKGw+dSl7dmFyIGY9cChsLzEwKTtyZXR1cm4gMD09PWY/ZTpmPD11P3ZvaWQgMD09PW9bZi0xXT9pLmNoYXJBdCgxKTpvW2YtMV0raS5jaGFyQXQoMSk6ZX1jPW9bbC0xXX1yZXR1cm4gdm9pZCAwPT09Yz8iIjpjfSkpfX0pKX0sMzMwNjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9big3MDEzMiksYT1uKDc2NDgyKSxjPW4oMzU0NTUpO3IoInNlYXJjaCIsMSwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihlKXt2YXIgbj1pKHRoaXMpLHI9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09cj9yLmNhbGwoZSxuKTpuZXcgUmVnRXhwKGUpW3RdKFN0cmluZyhuKSl9LGZ1bmN0aW9uKHQpe3ZhciByPW4oZSx0LHRoaXMpO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgaT1vKHQpLHM9U3RyaW5nKHRoaXMpLHU9aS5sYXN0SW5kZXg7YSh1LDApfHwoaS5sYXN0SW5kZXg9MCk7dmFyIGw9YyhpLHMpO3JldHVybiBhKGkubGFzdEluZGV4LHUpfHwoaS5sYXN0SW5kZXg9dSksbnVsbD09PWw/LTE6bC5pbmRleH1dfSkpfSw3NDExNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic21hbGwiKX0se3NtYWxsOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic21hbGwiLCIiLCIiKX19KX0sMTc0OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oNDMyMjMpLGk9big4NzU3OSksYT1uKDcwMTMyKSxjPW4oMTM5NzkpLHM9big1MzE0MSksdT1uKDI3ODg0KSxsPW4oMzU0NTUpLGY9bigzODU5OCksZD1uKDMyMTg3KSxwPVtdLnB1c2gsaD1NYXRoLm1pbix2PTQyOTQ5NjcyOTUsZz0hZCgoZnVuY3Rpb24oKXtyZXR1cm4hUmVnRXhwKHYsInkiKX0pKTtyKCJzcGxpdCIsMiwoZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9ImFiIi5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aHx8NCE9Ii4iLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aD9mdW5jdGlvbih0LG4pe3ZhciByPVN0cmluZyhhKHRoaXMpKSxpPXZvaWQgMD09PW4/djpuPj4+MDtpZigwPT09aSlyZXR1cm5bXTtpZih2b2lkIDA9PT10KXJldHVybltyXTtpZighbyh0KSlyZXR1cm4gZS5jYWxsKHIsdCxpKTtmb3IodmFyIGMscyx1LGw9W10sZD0odC5pZ25vcmVDYXNlPyJpIjoiIikrKHQubXVsdGlsaW5lPyJtIjoiIikrKHQudW5pY29kZT8idSI6IiIpKyh0LnN0aWNreT8ieSI6IiIpLGg9MCxnPW5ldyBSZWdFeHAodC5zb3VyY2UsZCsiZyIpOyhjPWYuY2FsbChnLHIpKSYmISgocz1nLmxhc3RJbmRleCk+aCYmKGwucHVzaChyLnNsaWNlKGgsYy5pbmRleCkpLGMubGVuZ3RoPjEmJmMuaW5kZXg8ci5sZW5ndGgmJnAuYXBwbHkobCxjLnNsaWNlKDEpKSx1PWNbMF0ubGVuZ3RoLGg9cyxsLmxlbmd0aD49aSkpOylnLmxhc3RJbmRleD09PWMuaW5kZXgmJmcubGFzdEluZGV4Kys7cmV0dXJuIGg9PT1yLmxlbmd0aD8hdSYmZy50ZXN0KCIiKXx8bC5wdXNoKCIiKTpsLnB1c2goci5zbGljZShoKSksbC5sZW5ndGg+aT9sLnNsaWNlKDAsaSk6bH06IjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PW4/W106ZS5jYWxsKHRoaXMsdCxuKX06ZSxbZnVuY3Rpb24oZSxuKXt2YXIgbz1hKHRoaXMpLGk9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwoZSxvLG4pOnIuY2FsbChTdHJpbmcobyksZSxuKX0sZnVuY3Rpb24odCxvKXt2YXIgYT1uKHIsdCx0aGlzLG8sciE9PWUpO2lmKGEuZG9uZSlyZXR1cm4gYS52YWx1ZTt2YXIgZj1pKHQpLGQ9U3RyaW5nKHRoaXMpLHA9YyhmLFJlZ0V4cCkseT1mLnVuaWNvZGUsbT0oZi5pZ25vcmVDYXNlPyJpIjoiIikrKGYubXVsdGlsaW5lPyJtIjoiIikrKGYudW5pY29kZT8idSI6IiIpKyhnPyJ5IjoiZyIpLGI9bmV3IHAoZz9mOiJeKD86IitmLnNvdXJjZSsiKSIsbSkseD12b2lkIDA9PT1vP3Y6bz4+PjA7aWYoMD09PXgpcmV0dXJuW107aWYoMD09PWQubGVuZ3RoKXJldHVybiBudWxsPT09bChiLGQpP1tkXTpbXTtmb3IodmFyIHc9MCxFPTAsaj1bXTtFPGQubGVuZ3RoOyl7Yi5sYXN0SW5kZXg9Zz9FOjA7dmFyIEMsaz1sKGIsZz9kOmQuc2xpY2UoRSkpO2lmKG51bGw9PT1rfHwoQz1oKHUoYi5sYXN0SW5kZXgrKGc/MDpFKSksZC5sZW5ndGgpKT09PXcpRT1zKGQsRSx5KTtlbHNle2lmKGoucHVzaChkLnNsaWNlKHcsRSkpLGoubGVuZ3RoPT09eClyZXR1cm4gajtmb3IodmFyIFM9MTtTPD1rLmxlbmd0aC0xO1MrKylpZihqLnB1c2goa1tTXSksai5sZW5ndGg9PT14KXJldHVybiBqO0U9dz1DfX1yZXR1cm4gai5wdXNoKGQuc2xpY2UodykpLGp9XX0pLCFnKX0sODAzNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5zdGFydHNXaXRoLGQ9TWF0aC5taW4scD11KCJzdGFydHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se3N0YXJ0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHModGhpcykpO2ModCk7dmFyIG49YShkKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGUubGVuZ3RoKSkscj1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUscixuKTplLnNsaWNlKG4sbityLmxlbmd0aCk9PT1yfX0pfSwyODAwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3RyaWtlIil9LHtzdHJpa2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sNjc5NDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN1YiIpfSx7c3ViOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3ViIiwiIiwiIil9fSl9LDQ0MDUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdXAiKX0se3N1cDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1cCIsIiIsIiIpfX0pfSw3NDc5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkuZW5kLGk9big4NDc1NCkoInRyaW1FbmQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbUVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOml9LHt0cmltRW5kOmEsdHJpbVJpZ2h0OmF9KX0sNjkxODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnN0YXJ0LGk9big4NDc1NCkoInRyaW1TdGFydCIpLGE9aT9mdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfToiIi50cmltU3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbVN0YXJ0OmEsdHJpbUxlZnQ6YX0pfSw0MzM5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkudHJpbTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oODQ3NTQpKCJ0cmltIil9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDUxMDkwOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNJdGVyYXRvciIpfSwyNDc4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg5NTU4KSxhPW4oNzYyOTgpLGM9bigxMDU5Mikscz1uKDM3NjIwKS5mLHU9big5OTYyNSksbD1pLlN5bWJvbDtpZihvJiYiZnVuY3Rpb24iPT10eXBlb2YgbCYmKCEoImRlc2NyaXB0aW9uImluIGwucHJvdG90eXBlKXx8dm9pZCAwIT09bCgpLmRlc2NyaXB0aW9uKSl7dmFyIGY9e30sZD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8MXx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpTdHJpbmcoYXJndW1lbnRzWzBdKSxlPXRoaXMgaW5zdGFuY2VvZiBkP25ldyBsKHQpOnZvaWQgMD09PXQ/bCgpOmwodCk7cmV0dXJuIiI9PT10JiYoZltlXT0hMCksZX07dShkLGwpO3ZhciBwPWQucHJvdG90eXBlPWwucHJvdG90eXBlO3AuY29uc3RydWN0b3I9ZDt2YXIgaD1wLnRvU3RyaW5nLHY9IlN5bWJvbCh0ZXN0KSI9PVN0cmluZyhsKCJ0ZXN0IikpLGc9L15TeW1ib2xcKCguKilcKVteKV0rJC87cyhwLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMpP3RoaXMudmFsdWVPZigpOnRoaXMsZT1oLmNhbGwodCk7aWYoYShmLHQpKXJldHVybiIiO3ZhciBuPXY/ZS5zbGljZSg3LC0xKTplLnJlcGxhY2UoZywiJDEiKTtyZXR1cm4iIj09PW4/dm9pZCAwOm59fSkscih7Z2xvYmFsOiEwLGZvcmNlZDohMH0se1N5bWJvbDpkfSl9fSw4OTE3OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaGFzSW5zdGFuY2UiKX0sNTQ3ODY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpc0NvbmNhdFNwcmVhZGFibGUiKX0sMTI4MTY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpdGVyYXRvciIpfSw2NTY3OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDc3MDEpLGE9big2NTY3MiksYz1uKDYyNTU2KSxzPW4oOTAxNCksdT1uKDE2NDEwKSxsPW4oMzIxODcpLGY9big3NjI5OCksZD1uKDYxOTkpLHA9bigxMDU5MiksaD1uKDg3NTc5KSx2PW4oMTkyMDkpLGc9big5NTczKSx5PW4oNTM0OTgpLG09bigxNDIwOSksYj1uKDUwODY4KSx4PW4oMjU1MDcpLHc9bigxMzMzNCksRT1uKDI2OTM3KSxqPW4oNTY5OTEpLEM9big5NzI1Nyksaz1uKDM3NjIwKSxTPW4oNDE2MjgpLE89big2Njk3MSksST1uKDkyOTEzKSxBPW4oNjIwNTQpLFQ9big4MzE5NyksTT1uKDIzMDcwKSxfPW4oNjcyOSksTD1uKDIzNzI0KSxSPW4oNzM5MTYpLFA9big5MjI3NSksTj1uKDUxMTI4KSxEPW4oODk4MjcpLEY9bigzMDAyNSkuZm9yRWFjaCxVPVQoImhpZGRlbiIpLEI9IlN5bWJvbCIsej1MKCJ0b1ByaW1pdGl2ZSIpLFY9RC5zZXQsSD1ELmdldHRlckZvcihCKSxxPU9iamVjdC5wcm90b3R5cGUsVz1vLlN5bWJvbCxHPWkoIkpTT04iLCJzdHJpbmdpZnkiKSxaPUMuZiwkPWsuZixZPUUuZixLPVMuZixKPUEoInN5bWJvbHMiKSxYPUEoIm9wLXN5bWJvbHMiKSxRPUEoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSx0dD1BKCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5IiksZXQ9QSgid2tzIiksbnQ9by5RT2JqZWN0LHJ0PSFudHx8IW50LnByb3RvdHlwZXx8IW50LnByb3RvdHlwZS5maW5kQ2hpbGQsb3Q9YyYmbCgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9YigkKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICQodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj1aKHEsZSk7ciYmZGVsZXRlIHFbZV0sJCh0LGUsbiksciYmdCE9PXEmJiQocSxlLHIpfTokLGl0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Slt0XT1iKFcucHJvdG90eXBlKTtyZXR1cm4gVihuLHt0eXBlOkIsdGFnOnQsZGVzY3JpcHRpb246ZX0pLGN8fChuLmRlc2NyaXB0aW9uPWUpLG59LGF0PXMmJiJzeW1ib2wiPT10eXBlb2YgVy5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QodClpbnN0YW5jZW9mIFd9LGN0PWZ1bmN0aW9uKHQsZSxuKXt0PT09cSYmY3QoWCxlLG4pLGgodCk7dmFyIHI9eShlLCEwKTtyZXR1cm4gaChuKSxmKEoscik/KG4uZW51bWVyYWJsZT8oZih0LFUpJiZ0W1VdW3JdJiYodFtVXVtyXT0hMSksbj1iKG4se2VudW1lcmFibGU6bSgwLCExKX0pKTooZih0LFUpfHwkKHQsVSxtKDEse30pKSx0W1VdW3JdPSEwKSxvdCh0LHIsbikpOiQodCxyLG4pfSxzdD1mdW5jdGlvbih0LGUpe2godCk7dmFyIG49ZyhlKSxyPXgobikuY29uY2F0KGR0KG4pKTtyZXR1cm4gRihyLChmdW5jdGlvbihlKXtjJiYhdXQuY2FsbChuLGUpfHxjdCh0LGUsbltlXSl9KSksdH0sdXQ9ZnVuY3Rpb24odCl7dmFyIGU9eSh0LCEwKSxuPUsuY2FsbCh0aGlzLGUpO3JldHVybiEodGhpcz09PXEmJmYoSixlKSYmIWYoWCxlKSkmJighKG58fCFmKHRoaXMsZSl8fCFmKEosZSl8fGYodGhpcyxVKSYmdGhpc1tVXVtlXSl8fG4pfSxsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWcodCkscj15KGUsITApO2lmKG4hPT1xfHwhZihKLHIpfHxmKFgscikpe3ZhciBvPVoobixyKTtyZXR1cm4hb3x8IWYoSixyKXx8ZihuLFUpJiZuW1VdW3JdfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sZnQ9ZnVuY3Rpb24odCl7dmFyIGU9WShnKHQpKSxuPVtdO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQpe2YoSix0KXx8ZihNLHQpfHxuLnB1c2godCl9KSksbn0sZHQ9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXEsbj1ZKGU/WDpnKHQpKSxyPVtdO3JldHVybiBGKG4sKGZ1bmN0aW9uKHQpeyFmKEosdCl8fGUmJiFmKHEsdCl8fHIucHVzaChKW3RdKX0pKSxyfTsoc3x8KFc9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgVyl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9TdHJpbmcoYXJndW1lbnRzWzBdKTp2b2lkIDAsZT1fKHQpLG49ZnVuY3Rpb24odCl7dGhpcz09PXEmJm4uY2FsbChYLHQpLGYodGhpcyxVKSYmZih0aGlzW1VdLGUpJiYodGhpc1tVXVtlXT0hMSksb3QodGhpcyxlLG0oMSx0KSl9O3JldHVybiBjJiZydCYmb3QocSxlLHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxpdChlLHQpfSxJKFcucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykudGFnfSkpLFMuZj11dCxrLmY9Y3QsQy5mPWx0LHcuZj1FLmY9ZnQsai5mPWR0LGMmJigkKFcucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0aGlzKS5kZXNjcmlwdGlvbn19KSxhfHxJKHEsInByb3BlcnR5SXNFbnVtZXJhYmxlIix1dCx7dW5zYWZlOiEwfSkpKSx1fHwoUi5mPWZ1bmN0aW9uKHQpe3JldHVybiBpdChMKHQpLHQpfSkscih7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFzLHNoYW06IXN9LHtTeW1ib2w6V30pLEYoeChldCksKGZ1bmN0aW9uKHQpe1AodCl9KSkscih7dGFyZ2V0OkIsc3RhdDohMCxmb3JjZWQ6IXN9LHtmb3I6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHQpO2lmKGYoUSxlKSlyZXR1cm4gUVtlXTt2YXIgbj1XKGUpO3JldHVybiBRW2VdPW4sdHRbbl09ZSxufSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoIWF0KHQpKXRocm93IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7aWYoZih0dCx0KSlyZXR1cm4gdHRbdF19LHVzZVNldHRlcjpmdW5jdGlvbigpe3J0PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtydD0hMX19KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXMsc2hhbTohY30se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2IodCk6c3QoYih0KSxlKX0sZGVmaW5lUHJvcGVydHk6Y3QsZGVmaW5lUHJvcGVydGllczpzdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6bHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXN9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOmZ0LGdldE93blByb3BlcnR5U3ltYm9sczpkdH0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpsKChmdW5jdGlvbigpe2ouZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXtyZXR1cm4gai5mKHYodCkpfX0pLEcpJiZyKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsZm9yY2VkOiFzfHxsKChmdW5jdGlvbigpe3ZhciB0PVcoKTtyZXR1cm4iW251bGxdIiE9RyhbdF0pfHwie30iIT1HKHthOnR9KXx8Int9IiE9RyhPYmplY3QodCkpfSkpfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsbz1bdF0saT0xO2FyZ3VtZW50cy5sZW5ndGg+aTspby5wdXNoKGFyZ3VtZW50c1tpKytdKTtpZihyPWUsKHAoZSl8fHZvaWQgMCE9PXQpJiYhYXQodCkpcmV0dXJuIGQoZSl8fChlPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHImJihlPXIuY2FsbCh0aGlzLHQsZSkpLCFhdChlKSlyZXR1cm4gZX0pLG9bMV09ZSxHLmFwcGx5KG51bGwsbyl9fSk7Vy5wcm90b3R5cGVbel18fE8oVy5wcm90b3R5cGUseixXLnByb3RvdHlwZS52YWx1ZU9mKSxOKFcsQiksTVtVXT0hMH0sOTgzMDY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaEFsbCIpfSw2MTkyNDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm1hdGNoIil9LDEyMDI1OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicmVwbGFjZSIpfSwyODMzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic2VhcmNoIil9LDk2NDUzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic3BlY2llcyIpfSw3MDg2MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwbGl0Iil9LDI0ODAyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9QcmltaXRpdmUiKX0sMTgyNzM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ0b1N0cmluZ1RhZyIpfSw0MjQxMTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInVuc2NvcGFibGVzIil9LDc0MjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDk5NDMxKSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FsbChpKHRoaXMpLHQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSl9LDE4NTA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5ldmVyeSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZXZlcnkiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyMDI0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big2NTg5NSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI4MTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maWx0ZXIsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmlsdGVyIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPWkodGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxyPTAscz1lLmxlbmd0aCx1PW5ldyhjKG4pKShzKTtzPnI7KXVbcl09ZVtyKytdO3JldHVybiB1fSkpfSw3NjQ0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kSW5kZXgiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwzMzkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI2ODA6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJGbG9hdDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDM4MjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQ2NCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4ODYzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZm9yRWFjaCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZm9yRWFjaCIsKGZ1bmN0aW9uKHQpe28oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTg1NTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1NjI3KTsoMCxuKDczMDc0KS5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgiZnJvbSIsbigyMDQ1NSkscil9LDgxNDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDg1ODAzKS5pbmNsdWRlcyxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5jbHVkZXMiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw5NTE2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5kZXhPZixpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI0NDk4OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMTcxNTI6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw3MDM3MzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODM2NzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9big1MDA2MyksYT1uKDIzNzI0KSgiaXRlcmF0b3IiKSxjPXIuVWludDhBcnJheSxzPWkudmFsdWVzLHU9aS5rZXlzLGw9aS5lbnRyaWVzLGY9by5hVHlwZWRBcnJheSxkPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxwPWMmJmMucHJvdG90eXBlW2FdLGg9ISFwJiYoInZhbHVlcyI9PXAubmFtZXx8bnVsbD09cC5uYW1lKSx2PWZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbChmKHRoaXMpKX07ZCgiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbChmKHRoaXMpKX0pKSxkKCJrZXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKGYodGhpcykpfSkpLGQoInZhbHVlcyIsdiwhaCksZChhLHYsIWgpfSwyMzU2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPVtdLmpvaW47aSgiam9pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLmFwcGx5KG8odGhpcyksYXJndW1lbnRzKX0pKX0sMjcyOTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNDkyNDkpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJsYXN0SW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKX0pKX0sMjQ0NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLm1hcCxpPW4oMTM5NzkpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJtYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhjKGkodCx0LmNvbnN0cnVjdG9yKSkpKGUpfSkpfSkpfSw1MDQ4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzNTYyNyksaT1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgib2YiLChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyhpKHRoaXMpKShlKTtlPnQ7KW5bdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG59KSxvKX0sNzU0OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLnJpZ2h0LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2VSaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzkzMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMjM2NikubGVmdCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw4NzU2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPU1hdGguZmxvb3I7aSgicmV2ZXJzZSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxuPW8oZSkubGVuZ3RoLHI9YShuLzIpLGk9MDtpPHI7KXQ9ZVtpXSxlW2krK109ZVstLW5dLGVbbl09dDtyZXR1cm4gZX0pKX0sODQ1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDYwNTU4KSxhPW4oMTkyMDkpLGM9bigzMjE4Nykscz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInNldCIsKGZ1bmN0aW9uKHQpe3ModGhpcyk7dmFyIGU9aShhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwxKSxuPXRoaXMubGVuZ3RoLHI9YSh0KSxjPW8oci5sZW5ndGgpLHU9MDtpZihjK2U+bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGgiKTtmb3IoO3U8YzspdGhpc1tlK3VdPXJbdSsrXX0pLGMoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zZXQoe30pfSkpKX0sMTc2MDU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTM5NzkpLGk9bigzMjE4NyksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLHM9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9W10uc2xpY2U7cygic2xpY2UiLChmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj11LmNhbGwoYSh0aGlzKSx0LGUpLHI9byh0aGlzLHRoaXMuY29uc3RydWN0b3IpLGk9MCxzPW4ubGVuZ3RoLGw9bmV3KGMocikpKHMpO3M+aTspbFtpXT1uW2krK107cmV0dXJuIGx9KSxpKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2xpY2UoKX0pKSl9LDczNTYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5zb21lLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzb21lIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTE4Nzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5zb3J0O2koInNvcnQiLChmdW5jdGlvbih0KXtyZXR1cm4gYS5jYWxsKG8odGhpcyksdCl9KSl9LDYwOTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDI3ODg0KSxpPW4oNzY5NzYpLGE9bigxMzk3OSksYz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInN1YmFycmF5IiwoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHRoaXMpLHI9bi5sZW5ndGgscz1pKHQscik7cmV0dXJuIG5ldyhhKG4sbi5jb25zdHJ1Y3RvcikpKG4uYnVmZmVyLG4uYnl0ZU9mZnNldCtzKm4uQllURVNfUEVSX0VMRU1FTlQsbygodm9pZCAwPT09ZT9yOmkoZSxyKSktcykpfSkpfSw0Mzk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big3MzA3NCksaT1uKDMyMTg3KSxhPXIuSW50OEFycmF5LGM9by5hVHlwZWRBcnJheSxzPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnRvTG9jYWxlU3RyaW5nLGw9W10uc2xpY2UsZj0hIWEmJmkoKGZ1bmN0aW9uKCl7dS5jYWxsKG5ldyBhKDEpKX0pKTtzKCJ0b0xvY2FsZVN0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYXBwbHkoZj9sLmNhbGwoYyh0aGlzKSk6Yyh0aGlzKSxhcmd1bWVudHMpfSksaSgoZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgYShbMSwyXSkudG9Mb2NhbGVTdHJpbmcoKX0pKXx8IWkoKGZ1bmN0aW9uKCl7YS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSkpfSw5MTM0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Qsbz1uKDMyMTg3KSxpPW4oODk1NTgpLlVpbnQ4QXJyYXksYT1pJiZpLnByb3RvdHlwZXx8e30sYz1bXS50b1N0cmluZyxzPVtdLmpvaW47bygoZnVuY3Rpb24oKXtjLmNhbGwoe30pfSkpJiYoYz1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyl9KTt2YXIgdT1hLnRvU3RyaW5nIT1jO3IoInRvU3RyaW5nIixjLHUpfSwxNjk3ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQxNiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzNzk4NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4MDc1NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDY5ODc5OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pLCEwKX0sNTg2MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oODk1NTgpLGk9bigxOTI2KSxhPW4oOTYwMyksYz1uKDgxOTUxKSxzPW4oNzEzMDMpLHU9bigxMDU5MiksbD1uKDg5ODI3KS5lbmZvcmNlLGY9bigxOTU5MSksZD0hby5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBvLHA9T2JqZWN0LmlzRXh0ZW5zaWJsZSxoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHY9dC5leHBvcnRzPWMoIldlYWtNYXAiLGgscyk7aWYoZiYmZCl7cj1zLmdldENvbnN0cnVjdG9yKGgsIldlYWtNYXAiLCEwKSxhLlJFUVVJUkVEPSEwO3ZhciBnPXYucHJvdG90eXBlLHk9Zy5kZWxldGUsbT1nLmhhcyxiPWcuZ2V0LHg9Zy5zZXQ7aShnLHtkZWxldGU6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLHkuY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5kZWxldGUodCl9cmV0dXJuIHkuY2FsbCh0aGlzLHQpfSxoYXM6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5oYXModCl9cmV0dXJuIG0uY2FsbCh0aGlzLHQpfSxnZXQ6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP2IuY2FsbCh0aGlzLHQpOmUuZnJvemVuLmdldCh0KX1yZXR1cm4gYi5jYWxsKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe2lmKHUodCkmJiFwKHQpKXt2YXIgbj1sKHRoaXMpO24uZnJvemVufHwobi5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP3guY2FsbCh0aGlzLHQsZSk6bi5mcm96ZW4uc2V0KHQsZSl9ZWxzZSB4LmNhbGwodGhpcyx0LGUpO3JldHVybiB0aGlzfX0pfX0sNDUxNTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgxOTUxKSgiV2Vha1NldCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxuKDcxMzAzKSl9LDk2NzUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjQ5NjUpLGE9big3MTg0MiksYz1uKDUwODY4KSxzPW4oMzc2MjApLHU9bigxNDIwOSksbD1uKDQxMzM0KSxmPW4oNjY5NzEpLGQ9big4OTgyNykscD1kLnNldCxoPWQuZ2V0dGVyRm9yKCJBZ2dyZWdhdGVFcnJvciIpLHY9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2EmJihuPWEobmV3IEVycm9yKGUpLGkobikpKTt2YXIgcj1bXTtyZXR1cm4gbCh0LHIucHVzaCxyKSxvP3Aobix7ZXJyb3JzOnIsdHlwZToiQWdncmVnYXRlRXJyb3IifSk6bi5lcnJvcnM9cix2b2lkIDAhPT1lJiZmKG4sIm1lc3NhZ2UiLFN0cmluZyhlKSksbn07di5wcm90b3R5cGU9YyhFcnJvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnUoNSx2KSxtZXNzYWdlOnUoNSwiIiksbmFtZTp1KDUsIkFnZ3JlZ2F0ZUVycm9yIil9KSxvJiZzLmYodi5wcm90b3R5cGUsImVycm9ycyIse2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpLmVycm9yc30sY29uZmlndXJhYmxlOiEwfSkscih7Z2xvYmFsOiEwfSx7QWdncmVnYXRlRXJyb3I6dn0pfSwxNDA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9T2JqZWN0LmlzRnJvemVuLGE9ZnVuY3Rpb24odCxlKXtpZighaXx8IW8odCl8fCFpKHQpKXJldHVybiExO2Zvcih2YXIgbixyPTAsYT10Lmxlbmd0aDtyPGE7KWlmKCEoInN0cmluZyI9PXR5cGVvZihuPXRbcisrXSl8fGUmJnZvaWQgMD09PW4pKXJldHVybiExO3JldHVybiAwIT09YX07cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzVGVtcGxhdGVPYmplY3Q6ZnVuY3Rpb24odCl7aWYoIWEodCwhMCkpcmV0dXJuITE7dmFyIGU9dC5yYXc7cmV0dXJuIShlLmxlbmd0aCE9PXQubGVuZ3RofHwhYShlLCExKSl9fSl9LDQ5MzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oNzY1MTMpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oMzc2MjApLmY7ciYmISgibGFzdEluZGV4ImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJbmRleCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/MDplLTF9fSksbygibGFzdEluZGV4IikpfSw2MzY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJdGVtImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJdGVtIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1hKHQubGVuZ3RoKTtyZXR1cm4gMD09ZT92b2lkIDA6dFtlLTFdfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5sZW5ndGgpO3JldHVybiBlWzA9PW4/MDpuLTFdPXR9fSksbygibGFzdEl0ZW0iKSl9LDQ3MDA0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLml0ZXJhdG9yO3JldHVybiBlLnJlc29sdmUobyhuLm5leHQuY2FsbChyLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG8odCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOntkb25lOiExLHZhbHVlOltuLmluZGV4KyssdC52YWx1ZV19fSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNjEyOTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNTkzNzkpLGk9big2Njk3MSksYT1uKDc2Mjk4KSxjPW4oMjM3MjQpLHM9big2Mzg0NSksdT1uKDY1NjcyKSxsPWMoInRvU3RyaW5nVGFnIiksZj1mdW5jdGlvbigpe28odGhpcyxmKX07Zi5wcm90b3R5cGU9cyxhKHMsbCl8fGkocyxsLCJBc3luY0l0ZXJhdG9yIiksYShzLCJjb25zdHJ1Y3RvciIpJiZzLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxpKHMsImNvbnN0cnVjdG9yIixmKSxyKHtnbG9iYWw6ITAsZm9yY2VkOnV9LHtBc3luY0l0ZXJhdG9yOmZ9KX0sNjc0NjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgZSgoZnVuY3Rpb24ocixpKXt2YXIgYT1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUobyhuLm5leHQuY2FsbChuLml0ZXJhdG9yLG4ucmVtYWluaW5nP3ZvaWQgMDp0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtvKHQpLmRvbmU/KG4uZG9uZT0hMCxyKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pKTpuLnJlbWFpbmluZz8obi5yZW1haW5pbmctLSxhKCkpOnIoe2RvbmU6ITEsdmFsdWU6dC52YWx1ZX0pfWNhdGNoKHQpe2kodCl9fSksaSl9Y2F0Y2godCl7aSh0KX19O2EoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtkcm9wOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw5MDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5ldmVyeTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyMDEyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLmZpbHRlcmVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24obyxhKXt2YXIgYz1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKGkodCkuZG9uZSluLmRvbmU9ITAsbyh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTtlbHNle3ZhciBzPXQudmFsdWU7ZS5yZXNvbHZlKHIocykpLnRoZW4oKGZ1bmN0aW9uKHQpe3Q/byh7ZG9uZTohMSx2YWx1ZTpzfSk6YygpfSksYSl9fWNhdGNoKHQpe2EodCl9fSksYSl9Y2F0Y2godCl7YSh0KX19O2MoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLGZpbHRlcmVyOm8odCl9KX19KX0sMjEzNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZpbmQ7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzODk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpLGM9big2NjkyMCkscz1hKChmdW5jdGlvbih0LGUpe3ZhciBuLHIsYT10aGlzLHM9YS5tYXBwZXI7cmV0dXJuIG5ldyBlKChmdW5jdGlvbih1LGwpe3ZhciBmPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShpKGEubmV4dC5jYWxsKGEuaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aSh0KS5kb25lPyhhLmRvbmU9ITAsdSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6ZS5yZXNvbHZlKHModC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZih2b2lkIDAhPT0ocj1jKHQpKSlyZXR1cm4gYS5pbm5lckl0ZXJhdG9yPW49aShyLmNhbGwodCkpLGEuaW5uZXJOZXh0PW8obi5uZXh0KSxkKCk7bChUeXBlRXJyb3IoIi5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0IikpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfX0sZD1mdW5jdGlvbigpe2lmKG49YS5pbm5lckl0ZXJhdG9yKXRyeXtlLnJlc29sdmUoaShhLmlubmVyTmV4dC5jYWxsKG4pKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5pbm5lckl0ZXJhdG9yPWEuaW5uZXJOZXh0PW51bGwsZigpKTp1KHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9ZWxzZSBmKCl9O2QoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNjkyMzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZvckVhY2g7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyNjQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oMjcwMDQpLHU9big2NjkyMCksbD1vLkFzeW5jSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKX0pLCEwKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHN0YXQ6ITB9LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG49Yyh0KSxyPXUobik7aWYobnVsbCE9cil7aWYoKGU9aShyKS5jYWxsKG4pKWluc3RhbmNlb2YgbClyZXR1cm4gZX1lbHNlIGU9bjtyZXR1cm4gbmV3IGYoe2l0ZXJhdG9yOmV9KX19KX0sNTMxNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5tYXBwZXI7cmV0dXJuIGUucmVzb2x2ZShpKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5kb25lPyhuLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk6ZS5yZXNvbHZlKHIodC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybntkb25lOiExLHZhbHVlOnR9fSkpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sNzM5NDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDc3MDEpKCJQcm9taXNlIik7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1vKGUubmV4dCkscj1hcmd1bWVudHMubGVuZ3RoPDIsYz1yP3ZvaWQgMDphcmd1bWVudHNbMV07cmV0dXJuIG8odCksbmV3IGEoKGZ1bmN0aW9uKG8scyl7dmFyIHU9ZnVuY3Rpb24oKXt0cnl7YS5yZXNvbHZlKGkobi5jYWxsKGUpKSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e2lmKGkoZSkuZG9uZSlyP3MoVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIikpOm8oYyk7ZWxzZXt2YXIgbj1lLnZhbHVlO3I/KHI9ITEsYz1uLHUoKSk6YS5yZXNvbHZlKHQoYyxuKSkudGhlbigoZnVuY3Rpb24odCl7Yz10LHUoKX0pLHMpfX1jYXRjaCh0KXtzKHQpfX0pLHMpfWNhdGNoKHQpe3ModCl9fTt1KCl9KSl9fSl9LDg4MjExOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5zb21lO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sNzM3NjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLS0/dGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KToodGhpcy5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3Rha2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDQyMTk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS50b0FycmF5O3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sMzY1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpLGE9big1MDg2OCksYz1mdW5jdGlvbigpe3ZhciB0PWkoIk9iamVjdCIsImZyZWV6ZSIpO3JldHVybiB0P3QoYShudWxsKSk6YShudWxsKX07cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYXBwbHkoT2JqZWN0LGFyZ3VtZW50cykuZ2V0KCJvYmplY3QiLGMpfX0pfSw0MzA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0Njg1KSxpPW4oNzcwMSk7cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlU3ltYm9sOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1swXT9pKCJTeW1ib2wiKS5mb3IoYXJndW1lbnRzWzBdKTpvLmFwcGx5KG51bGwsYXJndW1lbnRzKS5nZXQoInN5bWJvbCIsaSgiU3ltYm9sIikpfX0pfSw5OTYyODpmdW5jdGlvbih0LGUsbil7big3MTYyMil9LDkyNjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODgwNykoKGZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7aWYoISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVyblt0aGlzLmluZGV4KyssZS52YWx1ZV19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNDMzMzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big1OTM3OSksYT1uKDY2OTcxKSxjPW4oMzIxODcpLHM9big3NjI5OCksdT1uKDIzNzI0KSxsPW4oNjQxNzYpLkl0ZXJhdG9yUHJvdG90eXBlLGY9big2NTY3MiksZD11KCJpdGVyYXRvciIpLHA9dSgidG9TdHJpbmdUYWciKSxoPW8uSXRlcmF0b3Isdj1mfHwiZnVuY3Rpb24iIT10eXBlb2YgaHx8aC5wcm90b3R5cGUhPT1sfHwhYygoZnVuY3Rpb24oKXtoKHt9KX0pKSxnPWZ1bmN0aW9uKCl7aSh0aGlzLGcpfTtmJiZhKGw9e30sZCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKGwscCl8fGEobCxwLCJJdGVyYXRvciIpLCF2JiZzKGwsImNvbnN0cnVjdG9yIikmJmwuY29uc3RydWN0b3IhPT1PYmplY3R8fGEobCwiY29uc3RydWN0b3IiLGcpLGcucHJvdG90eXBlPWwscih7Z2xvYmFsOiEwLGZvcmNlZDp2fSx7SXRlcmF0b3I6Z30pfSwyMDQ3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuaXRlcmF0b3Iscj10aGlzLm5leHQ7dGhpcy5yZW1haW5pbmc7KWlmKHRoaXMucmVtYWluaW5nLS0sZT1vKHIuY2FsbChuKSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihlPW8oci5jYWxsKG4sdCkpLCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNTQ1NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSwhbyh0aGlzLChmdW5jdGlvbihlKXtpZighdChlKSlyZXR1cm4gby5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDQwNjM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLml0ZXJhdG9yLG89dGhpcy5maWx0ZXJlcixhPXRoaXMubmV4dDs7KXtpZihlPWkoYS5jYWxsKHIsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1lLnZhbHVlLGMocixvLG4pKXJldHVybiBufX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDk2NjU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcChlKX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSwxNDY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNzM4OTApLGM9big4ODA3KSxzPW4oMTIyNzgpLHU9YygoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixjLHU9dGhpcy5pdGVyYXRvcjs7KXtpZihjPXRoaXMuaW5uZXJJdGVyYXRvcil7aWYoIShlPWkodGhpcy5pbm5lck5leHQuY2FsbChjKSkpLmRvbmUpcmV0dXJuIGUudmFsdWU7dGhpcy5pbm5lckl0ZXJhdG9yPXRoaXMuaW5uZXJOZXh0PW51bGx9aWYoZT1pKHRoaXMubmV4dC5jYWxsKHUsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1zKHUsdGhpcy5tYXBwZXIsZS52YWx1ZSksdm9pZCAwPT09KHI9YShuKSkpdGhyb3cgVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpO3RoaXMuaW5uZXJJdGVyYXRvcj1jPWkoci5jYWxsKG4pKSx0aGlzLmlubmVyTmV4dD1vKGMubmV4dCl9fSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNzM3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtvKGkodGhpcyksdCx2b2lkIDAsITEsITApfX0pfSwyNzQyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oODgwNyksdT1uKDczODkwKSxsPW8uSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pLCEwKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDMzNDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pdGVyYXRvcixuPWkodGhpcy5uZXh0LmNhbGwoZSx0KSk7aWYoISh0aGlzLmRvbmU9ISFuLmRvbmUpKXJldHVybiBjKGUsdGhpcy5tYXBwZXIsbi52YWx1ZSl9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sODQzODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe2EodGhpcyksaSh0KTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDIsbj1lP3ZvaWQgMDphcmd1bWVudHNbMV07aWYobyh0aGlzLChmdW5jdGlvbihyKXtlPyhlPSExLG49cik6bj10KG4scil9KSx2b2lkIDAsITEsITApLGUpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG59fSl9LDU5NjIzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjg1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2lmKHRoaXMucmVtYWluaW5nLS0pe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7cmV0dXJuKHRoaXMuZG9uZT0hIWUuZG9uZSk/dm9pZCAwOmUudmFsdWV9dGhpcy5kb25lPSEwfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw2NzA3MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KSxhPVtdLnB1c2g7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gbyhpKHRoaXMpLGEsdCwhMSwhMCksdH19KX0sNDg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSwzNTU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCxuKXtpZighcihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSwxODg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtyKG4sdCxlKSYmZC5jYWxsKG8sdCxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNDkwNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzNTY1NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKG4pfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDM4NzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDUzNTEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7Z3JvdXBCeTpmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB0aGlzO2koZSk7dmFyIHI9aShuLmhhcyksYT1pKG4uZ2V0KSxjPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWUodCk7ci5jYWxsKG4sbyk/YS5jYWxsKG4sbykucHVzaCh0KTpjLmNhbGwobixvLFt0XSl9KSksbn19KX0sOTM4NDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oMzgxODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gcyhhKGkodGhpcykpLChmdW5jdGlvbihlLG4pe2lmKGMobix0KSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDk5MjU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLGUodCksdCl9KSksbn19KX0sNjYyMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7a2V5T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihuPT09dClyZXR1cm4gYy5zdG9wKGUpfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDcxNzAwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtkLmNhbGwobyxyKG4sdCxlKSxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNjk1Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcFZhbHVlczpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8sdCxyKG4sdCxlKSl9KSx2b2lkIDAsITAsITApLG99fSl9LDI3NzM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHRoaXMpLG49YShlLnNldCkscj0wO3I8YXJndW1lbnRzLmxlbmd0aDspYyhhcmd1bWVudHNbcisrXSxuLGUsITApO3JldHVybiBlfX0pfSwxOTkwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw3NzM2OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obixpKXtyPyhyPSExLG89aSk6bz10KG8saSxuLGUpfSksdm9pZCAwLCEwLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sNjk4NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw0MzI5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cGRhdGVPckluc2VydDpuKDQ3OTI3KX0pfSw5NzkyODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIG49aSh0aGlzKSxyPWFyZ3VtZW50cy5sZW5ndGg7YShlKTt2YXIgbz1uLmhhcyh0KTtpZighbyYmcjwzKXRocm93IFR5cGVFcnJvcigiVXBkYXRpbmcgYWJzZW50IHZhbHVlIik7dmFyIGM9bz9uLmdldCh0KTphKHI+Mj9hcmd1bWVudHNbMl06dm9pZCAwKSh0LG4pO3JldHVybiBuLnNldCh0LGUoYyx0LG4pKSxufX0pfSwxNDY4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNzAyMjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5taW4saT1NYXRoLm1heDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG8obixpKGUsdCkpfX0pfSwyMzk5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7REVHX1BFUl9SQUQ6TWF0aC5QSS8xODB9KX0sMTY4MDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89MTgwL01hdGguUEk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZGVncmVlczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSw2NzE0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3NDIpLGk9big1MzI1MSk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnNjYWxlOmZ1bmN0aW9uKHQsZSxuLHIsYSl7cmV0dXJuIGkobyh0LGUsbixyLGEpKX19KX0sMzA2MTM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpYWRkaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCkrKHI+Pj4wKSsoKG8maXwob3xpKSZ+KG8raT4+PjApKT4+PjMxKXwwfX0pfSw0OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4xNixzPW8+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+MTYpKygoaSpzPj4+MCkrKHUmbik+PjE2KX19KX0sNjg0MDY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpc3ViaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCktKHI+Pj4wKS0oKH5vJml8fihvXmkpJm8taT4+PjApPj4+MzEpfDB9fSl9LDkwNzY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7UkFEX1BFUl9ERUc6MTgwL01hdGguUEl9KX0sNTc4OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5QSS8xODA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7cmFkaWFuczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSwxNTcyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NjYWxlOm4oNzc0Mil9KX0sMTc2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODk1NDIpLGE9big3MTIwMSksYz1uKDg5ODI3KSxzPSJTZWVkZWQgUmFuZG9tIix1PSJTZWVkZWQgUmFuZG9tIEdlbmVyYXRvciIsbD1jLnNldCxmPWMuZ2V0dGVyRm9yKHUpLGQ9YSgoZnVuY3Rpb24odCl7bCh0aGlzLHt0eXBlOnUsc2VlZDp0JTIxNDc0ODM2NDd9KX0pLHMsKGZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzKTtyZXR1cm57dmFsdWU6KDEwNzM3NDE4MjMmKHQuc2VlZD0oMTEwMzUxNTI0NSp0LnNlZWQrMTIzNDUpJTIxNDc0ODM2NDcpKS8xMDczNzQxODIzLGRvbmU6ITF9fSkpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ITB9LHtzZWVkZWRQUk5HOmZ1bmN0aW9uKHQpe3ZhciBlPW8odCkuc2VlZDtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoJ01hdGguc2VlZGVkUFJORygpIGFyZ3VtZW50IHNob3VsZCBoYXZlIGEgInNlZWQiIGZpZWxkIHdpdGggYSBmaW5pdGUgdmFsdWUuJyk7cmV0dXJuIG5ldyBkKGUpfX0pfSw3NzkwNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NpZ25iaXQ6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPT10JiYwPT10PzEvdD09LTEvMDp0PDB9fSl9LDQ0NjQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4+MTYscz1vPj4+MTYsdT0oYyphPj4+MCkrKGkqYT4+PjE2KTtyZXR1cm4gYypzKyh1Pj4+MTYpKygoaSpzPj4+MCkrKHUmbik+Pj4xNil9fSl9LDc1NjQ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQzNDE2KSxpPW4oNzg0NiksYT0iSW52YWxpZCBudW1iZXIgcmVwcmVzZW50YXRpb24iLGM9L15bXGRhLXpdKyQvO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7ZnJvbVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBuLHIscz0xO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoYSk7aWYoIXQubGVuZ3RoKXRocm93IFN5bnRheEVycm9yKGEpO2lmKCItIj09dC5jaGFyQXQoMCkmJihzPS0xLCEodD10LnNsaWNlKDEpKS5sZW5ndGgpKXRocm93IFN5bnRheEVycm9yKGEpO2lmKChuPXZvaWQgMD09PWU/MTA6byhlKSk8Mnx8bj4zNil0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHJhZGl4Iik7aWYoIWMudGVzdCh0KXx8KHI9aSh0LG4pKS50b1N0cmluZyhuKSE9PXQpdGhyb3cgU3ludGF4RXJyb3IoYSk7cmV0dXJuIHMqcn19KX0sODQzMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImVudHJpZXMiKX19KX0sNzI5NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImtleXMiKX19KX0sNTYzNTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZVZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwidmFsdWVzIil9fSl9LDIwMjM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjc1MzgpLGE9big4NjQ3MCksYz1uKDg3NTc5KSxzPW4oMTA1OTIpLHU9big1OTM3OSksbD1uKDM3NjIwKS5mLGY9big2Njk3MSksZD1uKDE5MjYpLHA9bigzMTA3NCksaD1uKDQxMzM0KSx2PW4oODM2MjApLGc9bigyMzcyNCkseT1uKDg5ODI3KSxtPWcoIm9ic2VydmFibGUiKSxiPXkuZ2V0LHg9eS5zZXQsdz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6YSh0KX0sRT1mdW5jdGlvbih0KXt2YXIgZT10LmNsZWFudXA7aWYoZSl7dC5jbGVhbnVwPXZvaWQgMDt0cnl7ZSgpfWNhdGNoKHQpe3YodCl9fX0saj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5vYnNlcnZlcn0sQz1mdW5jdGlvbih0LGUpe2lmKCFvKXt0LmNsb3NlZD0hMDt2YXIgbj1lLnN1YnNjcmlwdGlvbk9ic2VydmVyO24mJihuLmNsb3NlZD0hMCl9ZS5vYnNlcnZlcj12b2lkIDB9LGs9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXgodGhpcyx7Y2xlYW51cDp2b2lkIDAsb2JzZXJ2ZXI6Yyh0KSxzdWJzY3JpcHRpb25PYnNlcnZlcjp2b2lkIDB9KTtvfHwodGhpcy5jbG9zZWQ9ITEpO3RyeXsobj13KHQuc3RhcnQpKSYmbi5jYWxsKHQsdGhpcyl9Y2F0Y2godCl7dih0KX1pZighaihyKSl7dmFyIGk9ci5zdWJzY3JpcHRpb25PYnNlcnZlcj1uZXcgUyh0aGlzKTt0cnl7dmFyIHM9ZShpKSx1PXM7bnVsbCE9cyYmKHIuY2xlYW51cD0iZnVuY3Rpb24iPT10eXBlb2Ygcy51bnN1YnNjcmliZT9mdW5jdGlvbigpe3UudW5zdWJzY3JpYmUoKX06YShzKSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgaS5lcnJvcih0KX1qKHIpJiZFKHIpfX07ay5wcm90b3R5cGU9ZCh7fSx7dW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpO2oodCl8fChDKHRoaXMsdCksRSh0KSl9fSksbyYmbChrLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIodGhpcykpfX0pO3ZhciBTPWZ1bmN0aW9uKHQpe3godGhpcyx7c3Vic2NyaXB0aW9uOnR9KSxvfHwodGhpcy5jbG9zZWQ9ITEpfTtTLnByb3RvdHlwZT1kKHt9LHtuZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPWIoYih0aGlzKS5zdWJzY3JpcHRpb24pO2lmKCFqKGUpKXt2YXIgbj1lLm9ic2VydmVyO3RyeXt2YXIgcj13KG4ubmV4dCk7ciYmci5jYWxsKG4sdCl9Y2F0Y2godCl7dih0KX19fSxlcnJvcjpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMpLnN1YnNjcmlwdGlvbixuPWIoZSk7aWYoIWoobikpe3ZhciByPW4ub2JzZXJ2ZXI7QyhlLG4pO3RyeXt2YXIgbz13KHIuZXJyb3IpO28/by5jYWxsKHIsdCk6dih0KX1jYXRjaCh0KXt2KHQpfUUobil9fSxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciB0PWIodGhpcykuc3Vic2NyaXB0aW9uLGU9Yih0KTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjtDKHQsZSk7dHJ5e3ZhciByPXcobi5jb21wbGV0ZSk7ciYmci5jYWxsKG4pfWNhdGNoKHQpe3YodCl9RShlKX19fSksbyYmbChTLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIoYih0aGlzKS5zdWJzY3JpcHRpb24pKX19KTt2YXIgTz1mdW5jdGlvbih0KXt1KHRoaXMsTywiT2JzZXJ2YWJsZSIpLHgodGhpcyx7c3Vic2NyaWJlcjphKHQpfSl9O2QoTy5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBuZXcgaygiZnVuY3Rpb24iPT10eXBlb2YgdD97bmV4dDp0LGVycm9yOmU+MT9hcmd1bWVudHNbMV06dm9pZCAwLGNvbXBsZXRlOmU+Mj9hcmd1bWVudHNbMl06dm9pZCAwfTpzKHQpP3Q6e30sYih0aGlzKS5zdWJzY3JpYmVyKX19KSxkKE8se2Zyb206ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpPLG49dyhjKHQpW21dKTtpZihuKXt2YXIgcj1jKG4uY2FsbCh0KSk7cmV0dXJuIHIuY29uc3RydWN0b3I9PT1lP3I6bmV3IGUoKGZ1bmN0aW9uKHQpe3JldHVybiByLnN1YnNjcmliZSh0KX0pKX12YXIgbz1wKHQpO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odCl7aChvLChmdW5jdGlvbihlKXtpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuIGguc3RvcCgpfSksdm9pZCAwLCExLCEwKSx0LmNvbXBsZXRlKCl9KSl9LG9mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT1hcmd1bWVudHNbcisrXTtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8ZTtyKyspaWYodC5uZXh0KG5bcl0pLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KSl9fSksZihPLnByb3RvdHlwZSxtLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHIoe2dsb2JhbDohMH0se09ic2VydmFibGU6T30pLGkoIk9ic2VydmFibGUiKX0sMjc3NTpmdW5jdGlvbih0LGUsbil7bigxNzYyOSl9LDczMjIwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oNzcwMSksYT1uKDgzMDgzKSxjPW4oMzExNSkscz1uKDQxMzM0KSx1PSJObyBvbmUgcHJvbWlzZSByZXNvbHZlZCI7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1hLmYoZSkscj1uLnJlc29sdmUsbD1uLnJlamVjdCxmPWMoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGE9W10sYz0wLGY9MSxkPSExO3ModCwoZnVuY3Rpb24odCl7dmFyIG89YysrLHM9ITE7YS5wdXNoKHZvaWQgMCksZisrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fGR8fChkPSEwLHIodCkpfSksKGZ1bmN0aW9uKHQpe3N8fGR8fChzPSEwLGFbb109dCwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpKX0pKX0pKSwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpfSkpO3JldHVybiBmLmVycm9yJiZsKGYudmFsdWUpLG4ucHJvbWlzZX19KX0sMTEwNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODMwODMpLGk9bigzMTE1KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9by5mKHRoaXMpLG49aSh0KTtyZXR1cm4obi5lcnJvcj9lLnJlamVjdDplLnJlc29sdmUpKG4udmFsdWUpLGUucHJvbWlzZX19KX0sNDk2NDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDw0P3ZvaWQgMDphKGFyZ3VtZW50c1szXSk7Yyh0LGUsaShuKSxyKX19KX0sNzQ5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLmdldE1hcCxzPW8uc3RvcmU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSxyPWMoaShlKSxuLCExKTtpZih2b2lkIDA9PT1yfHwhci5kZWxldGUodCkpcmV0dXJuITE7aWYoci5zaXplKXJldHVybiEwO3ZhciBvPXMuZ2V0KGUpO3JldHVybiBvLmRlbGV0ZShuKSwhIW8uc2l6ZXx8cy5kZWxldGUoZSl9fSl9LDQ5MTU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQwNjEpLGk9big3NzAyMCksYT1uKDg3NTc5KSxjPW4oNjQ5NjUpLHM9big0MTMzNCksdT1pLmtleXMsbD1pLnRvS2V5LGY9ZnVuY3Rpb24odCxlKXt2YXIgbj11KHQsZSkscj1jKHQpO2lmKG51bGw9PT1yKXJldHVybiBuO3ZhciBpLGEsbD1mKHIsZSk7cmV0dXJuIGwubGVuZ3RoP24ubGVuZ3RoPyhpPW5ldyBvKG4uY29uY2F0KGwpKSxzKGksKGE9W10pLnB1c2gsYSksYSk6bDpufTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpsKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGYoYSh0KSxlKX19KX0sNjk0NTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLmdldCx1PW8udG9LZXksbD1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuIHModCxlLG4pO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yP2wodCxyLG4pOnZvaWQgMH07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKTtyZXR1cm4gbCh0LGkoZSksbil9fSl9LDg3NDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmtleXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmMoYXJndW1lbnRzWzFdKTtyZXR1cm4gYShpKHQpLGUpfX0pfSwyNjg5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5nZXQsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSw5NzQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9big2NDk2NSksYz1vLmhhcyxzPW8udG9LZXksdT1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuITA7dmFyIHI9YShlKTtyZXR1cm4gbnVsbCE9PXImJnUodCxyLG4pfTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6cyhhcmd1bWVudHNbMl0pO3JldHVybiB1KHQsaShlKSxuKX19KX0sNzEwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5oYXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSwyMzYzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uc2V0O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se21ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7Yyh0LGUsaShuKSxhKHIpKX19fSl9LDkzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDk4MTc5KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNjE0Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sOTgzNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl9KSksbn19KX0sMTYxMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtldmVyeTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4hcyhuLChmdW5jdGlvbih0KXtpZighcih0LHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw1MzU4OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxNDc1KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJTZXQiKSkpLGQ9YyhvLmFkZCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCl7cih0LHQsZSkmJmQuY2FsbChvLHQpfSksdm9pZCAwLCExLCEwKSxvfX0pfSw4MTA0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCl7aWYocih0LHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSw5NzI4NDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw0MTcxODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbnRlcnNlY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKSxyPWMoZS5oYXMpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKGUsdCkmJm8uY2FsbChuLHQpfSkpLG59fSl9LDU3MzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzRGlzam9pbnRGcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUuaGFzKTtyZXR1cm4hYyh0LChmdW5jdGlvbih0KXtpZighMD09PW4uY2FsbChlLHQpKXJldHVybiBjLnN0b3AoKX0pKS5zdG9wcGVkfX0pfSw4OTIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMzEwNzQpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1YnNldE9mOmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyksbj1hKHQpLHI9bi5oYXM7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHImJihuPW5ldyhpKCJTZXQiKSkodCkscj1jKG4uaGFzKSksIXUoZSwoZnVuY3Rpb24odCl7aWYoITE9PT1yLmNhbGwobix0KSlyZXR1cm4gdS5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDMyMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzU3VwZXJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITE9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sMTY3NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxNDc1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7am9pbjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKSxyPXZvaWQgMD09PXQ/IiwiOlN0cmluZyh0KSxvPVtdO3JldHVybiBjKG4sby5wdXNoLG8sITEsITApLG8uam9pbihyKX19KX0sMTEwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcDpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe2QuY2FsbChvLHIodCx0LGUpKX0pLHZvaWQgMCwhMSwhMCksb319KX0sMjQ1OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDMzNTM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG89cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKGEodCkscyhuLChmdW5jdGlvbihuKXtyPyhyPSExLG89bik6bz10KG8sbixuLGUpfSksdm9pZCAwLCExLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IHNldCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sMjQxMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNjYxODE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c3ltbWV0cmljRGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSksbz1jKG4uYWRkKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwobix0KXx8by5jYWxsKG4sdCl9KSksbn19KX0sNjI5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHt1bmlvbjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpO3JldHVybiB1KHQsYyhuLmFkZCksbiksbn19KX0sNzM0NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjAxNDApLmNoYXJBdDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzMjA2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oODk4MjcpLGM9big2MDE0MCkscz1jLmNvZGVBdCx1PWMuY2hhckF0LGw9IlN0cmluZyBJdGVyYXRvciIsZj1hLnNldCxkPWEuZ2V0dGVyRm9yKGwpLHA9bygoZnVuY3Rpb24odCl7Zih0aGlzLHt0eXBlOmwsc3RyaW5nOnQsaW5kZXg6MH0pfSksIlN0cmluZyIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1kKHRoaXMpLG49ZS5zdHJpbmcscj1lLmluZGV4O3JldHVybiByPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXUobixyKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6e2NvZGVQb2ludDpzKHQsMCkscG9zaXRpb246cn0sZG9uZTohMX0pfSkpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAoU3RyaW5nKGkodGhpcykpKX19KX0sNzQ1MjU6ZnVuY3Rpb24odCxlLG4pe24oODEyNzcpfSw2NDAyNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MDEzMiksaT1uKDQzMjIzKSxhPW4oMjU0MTkpLGM9bigyMzcyNCkscz1uKDY1NjcyKSx1PWMoInJlcGxhY2UiKSxsPVJlZ0V4cC5wcm90b3R5cGU7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsYyxmLGQscCxoLHYsZyx5PW8odGhpcyk7aWYobnVsbCE9ZSl7aWYoKHI9aShlKSkmJiF+U3RyaW5nKG8oImZsYWdzImluIGw/ZS5mbGFnczphLmNhbGwoZSkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKHZvaWQgMCE9PShjPWVbdV0pKXJldHVybiBjLmNhbGwoZSx5LG4pO2lmKHMmJnIpcmV0dXJuIFN0cmluZyh5KS5yZXBsYWNlKGUsbil9aWYoZj1TdHJpbmcoeSksIiI9PT0oZD1TdHJpbmcoZSkpKXJldHVybiB0LmNhbGwoZiwvKD86KS9nLG4pO2lmKHA9Zi5zcGxpdChkKSwiZnVuY3Rpb24iIT10eXBlb2YgbilyZXR1cm4gcC5qb2luKFN0cmluZyhuKSk7Zm9yKHY9KGg9cFswXSkubGVuZ3RoLGc9MTtnPHAubGVuZ3RoO2crKyloKz1TdHJpbmcobihkLHYsZikpLHYrPWQubGVuZ3RoK3BbZ10ubGVuZ3RoLGgrPXBbZ107cmV0dXJuIGh9fSl9LDY5NDI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJhc3luY0Rpc3Bvc2UiKX0sOTQyNDk6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJkaXNwb3NlIil9LDUxMzc0OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgib2JzZXJ2YWJsZSIpfSw1Mzc3MjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInBhdHRlcm5NYXRjaCIpfSw4NjA3NzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2VBbGwiKX0sNjQ4MTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk5OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSwxODIwNTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDg3NTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNjg5OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJXZWFrU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7YWRkQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw1MzgyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sODU4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw2NDg5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDY3MDM5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9bigzMTM2OCksYT1uKDY2OTcxKTtmb3IodmFyIGMgaW4gbyl7dmFyIHM9cltjXSx1PXMmJnMucHJvdG90eXBlO2lmKHUmJnUuZm9yRWFjaCE9PWkpdHJ5e2EodSwiZm9yRWFjaCIsaSl9Y2F0Y2godCl7dS5mb3JFYWNoPWl9fX0sNzk3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big0NzA5NCksaT1uKDUwMDYzKSxhPW4oNjY5NzEpLGM9bigyMzcyNCkscz1jKCJpdGVyYXRvciIpLHU9YygidG9TdHJpbmdUYWciKSxsPWkudmFsdWVzO2Zvcih2YXIgZiBpbiBvKXt2YXIgZD1yW2ZdLHA9ZCYmZC5wcm90b3R5cGU7aWYocCl7aWYocFtzXSE9PWwpdHJ5e2EocCxzLGwpfWNhdGNoKHQpe3Bbc109bH1pZihwW3VdfHxhKHAsdSxmKSxvW2ZdKWZvcih2YXIgaCBpbiBpKWlmKHBbaF0hPT1pW2hdKXRyeXthKHAsaCxpW2hdKX1jYXRjaCh0KXtwW2hdPWlbaF19fX19LDc0MDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigyMTc0NCk7cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6IW8uc2V0SW1tZWRpYXRlfHwhby5jbGVhckltbWVkaWF0ZX0se3NldEltbWVkaWF0ZTppLnNldCxjbGVhckltbWVkaWF0ZTppLmNsZWFyfSl9LDY1OTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NTU1NSksYT1uKDI0NTk0KSxjPW8ucHJvY2VzcyxzPSJwcm9jZXNzIj09YShjKTtyKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxub1RhcmdldEdldDohMH0se3F1ZXVlTWljcm90YXNrOmZ1bmN0aW9uKHQpe3ZhciBlPXMmJmMuZG9tYWluO2koZT9lLmJpbmQodCk6dCl9fSl9LDgxOTk0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigzOTQ3NiksYT1bXS5zbGljZSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixvPXI/YS5jYWxsKGFyZ3VtZW50cywyKTp2b2lkIDA7cmV0dXJuIHQocj9mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgZT9lOkZ1bmN0aW9uKGUpKS5hcHBseSh0aGlzLG8pfTplLG4pfX07cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZm9yY2VkOi9NU0lFIC5cLi8udGVzdChpKX0se3NldFRpbWVvdXQ6YyhvLnNldFRpbWVvdXQpLHNldEludGVydmFsOmMoby5zZXRJbnRlcnZhbCl9KX0sNTU1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oNTAwNjMpO3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oNTc1OTcpLGE9big5MjkxMyksYz1uKDE5MjYpLHM9big1MTEyOCksdT1uKDcxMjAxKSxsPW4oODk4MjcpLGY9big1OTM3OSksZD1uKDc2Mjk4KSxwPW4oNDYxMzApLGg9big1OTU5MSksdj1uKDg3NTc5KSxnPW4oMTA1OTIpLHk9big1MDg2OCksbT1uKDE0MjA5KSxiPW4oMzEwNzQpLHg9big3Mzg5MCksdz1uKDIzNzI0KSxFPW8oImZldGNoIiksaj1vKCJIZWFkZXJzIiksQz13KCJpdGVyYXRvciIpLGs9IlVSTFNlYXJjaFBhcmFtcyIsUz0iVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IiLE89bC5zZXQsST1sLmdldHRlckZvcihrKSxBPWwuZ2V0dGVyRm9yKFMpLFQ9L1wrL2csTT1BcnJheSg0KSxfPWZ1bmN0aW9uKHQpe3JldHVybiBNW3QtMV18fChNW3QtMV09UmVnRXhwKCIoKD86JVtcXGRhLWZdezJ9KXsiK3QrIn0pIiwiZ2kiKSl9LEw9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fSxSPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZShULCIgIiksbj00O3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe2Zvcig7bjspZT1lLnJlcGxhY2UoXyhuLS0pLEwpO3JldHVybiBlfX0sUD0vWyEnKCl+XXwlMjAvZyxOPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIn0sRD1mdW5jdGlvbih0KXtyZXR1cm4gTlt0XX0sRj1mdW5jdGlvbih0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoUCxEKX0sVT1mdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciBuLHIsbz1lLnNwbGl0KCImIiksaT0wO2k8by5sZW5ndGg7KShuPW9baSsrXSkubGVuZ3RoJiYocj1uLnNwbGl0KCI9IiksdC5wdXNoKHtrZXk6UihyLnNoaWZ0KCkpLHZhbHVlOlIoci5qb2luKCI9IikpfSkpfSxCPWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5sZW5ndGg9MCxVKHRoaXMuZW50cmllcyx0KX0sej1mdW5jdGlvbih0LGUpe2lmKHQ8ZSl0aHJvdyBUeXBlRXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIil9LFY9dSgoZnVuY3Rpb24odCxlKXtPKHRoaXMse3R5cGU6UyxpdGVyYXRvcjpiKEkodCkuZW50cmllcyksa2luZDplfSl9KSwiSXRlcmF0b3IiLChmdW5jdGlvbigpe3ZhciB0PUEodGhpcyksZT10LmtpbmQsbj10Lml0ZXJhdG9yLm5leHQoKSxyPW4udmFsdWU7cmV0dXJuIG4uZG9uZXx8KG4udmFsdWU9ImtleXMiPT09ZT9yLmtleToidmFsdWVzIj09PWU/ci52YWx1ZTpbci5rZXksci52YWx1ZV0pLG59KSksSD1mdW5jdGlvbigpe2YodGhpcyxILGspO3ZhciB0LGUsbixyLG8saSxhLGMscyx1PWFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwLGw9dGhpcyxwPVtdO2lmKE8obCx7dHlwZTprLGVudHJpZXM6cCx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt9LHVwZGF0ZVNlYXJjaFBhcmFtczpCfSksdm9pZCAwIT09dSlpZihnKHUpKWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0PXgodSkpKWZvcihuPShlPXQuY2FsbCh1KSkubmV4dDshKHI9bi5jYWxsKGUpKS5kb25lOyl7aWYoKGE9KGk9KG89Yih2KHIudmFsdWUpKSkubmV4dCkuY2FsbChvKSkuZG9uZXx8KGM9aS5jYWxsKG8pKS5kb25lfHwhaS5jYWxsKG8pLmRvbmUpdGhyb3cgVHlwZUVycm9yKCJFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyIik7cC5wdXNoKHtrZXk6YS52YWx1ZSsiIix2YWx1ZTpjLnZhbHVlKyIifSl9ZWxzZSBmb3IocyBpbiB1KWQodSxzKSYmcC5wdXNoKHtrZXk6cyx2YWx1ZTp1W3NdKyIifSk7ZWxzZSBVKHAsInN0cmluZyI9PXR5cGVvZiB1PyI/Ij09PXUuY2hhckF0KDApP3Uuc2xpY2UoMSk6dTp1KyIiKX0scT1ILnByb3RvdHlwZTtjKHEse2FwcGVuZDpmdW5jdGlvbih0LGUpe3ooYXJndW1lbnRzLmxlbmd0aCwyKTt2YXIgbj1JKHRoaXMpO24uZW50cmllcy5wdXNoKHtrZXk6dCsiIix2YWx1ZTplKyIifSksbi51cGRhdGVVUkwoKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9SSh0aGlzKSxuPWUuZW50cmllcyxyPXQrIiIsbz0wO288bi5sZW5ndGg7KW5bb10ua2V5PT09cj9uLnNwbGljZShvLDEpOm8rKztlLnVwZGF0ZVVSTCgpfSxnZXQ6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLmtleT09PW4pcmV0dXJuIGVbcl0udmFsdWU7cmV0dXJuIG51bGx9LGdldEFsbDpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcykuZW50cmllcyxuPXQrIiIscj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5rZXk9PT1uJiZyLnB1c2goZVtvXS52YWx1ZSk7cmV0dXJuIHJ9LGhhczpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcykuZW50cmllcyxuPXQrIiIscj0wO3I8ZS5sZW5ndGg7KWlmKGVbcisrXS5rZXk9PT1uKXJldHVybiEwO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBuLHI9SSh0aGlzKSxvPXIuZW50cmllcyxpPSExLGE9dCsiIixjPWUrIiIscz0wO3M8by5sZW5ndGg7cysrKShuPW9bc10pLmtleT09PWEmJihpP28uc3BsaWNlKHMtLSwxKTooaT0hMCxuLnZhbHVlPWMpKTtpfHxvLnB1c2goe2tleTphLHZhbHVlOmN9KSxyLnVwZGF0ZVVSTCgpfSxzb3J0OmZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9SSh0aGlzKSxvPXIuZW50cmllcyxpPW8uc2xpY2UoKTtmb3Ioby5sZW5ndGg9MCxuPTA7bjxpLmxlbmd0aDtuKyspe2Zvcih0PWlbbl0sZT0wO2U8bjtlKyspaWYob1tlXS5rZXk+dC5rZXkpe28uc3BsaWNlKGUsMCx0KTticmVha31lPT09biYmby5wdXNoKHQpfXIudXBkYXRlVVJMKCl9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49SSh0aGlzKS5lbnRyaWVzLHI9cCh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89MDtvPG4ubGVuZ3RoOylyKChlPW5bbysrXSkudmFsdWUsZS5rZXksdGhpcyl9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywia2V5cyIpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywidmFsdWVzIil9LGVudHJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywiZW50cmllcyIpfX0se2VudW1lcmFibGU6ITB9KSxhKHEsQyxxLmVudHJpZXMpLGEocSwidG9TdHJpbmciLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPUkodGhpcykuZW50cmllcyxuPVtdLHI9MDtyPGUubGVuZ3RoOyl0PWVbcisrXSxuLnB1c2goRih0LmtleSkrIj0iK0YodC52YWx1ZSkpO3JldHVybiBuLmpvaW4oIiYiKX0pLHtlbnVtZXJhYmxlOiEwfSkscyhILGspLHIoe2dsb2JhbDohMCxmb3JjZWQ6IWl9LHtVUkxTZWFyY2hQYXJhbXM6SH0pLGl8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHwiZnVuY3Rpb24iIT10eXBlb2Yganx8cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG89W3RdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJihnKGU9YXJndW1lbnRzWzFdKSYmKG49ZS5ib2R5LGgobik9PT1rJiYoKHI9ZS5oZWFkZXJzP25ldyBqKGUuaGVhZGVycyk6bmV3IGopLmhhcygiY29udGVudC10eXBlIil8fHIuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpLGU9eShlLHtib2R5Om0oMCxTdHJpbmcobikpLGhlYWRlcnM6bSgwLHIpfSkpKSxvLnB1c2goZSkpLEUuYXBwbHkodGhpcyxvKX19KSx0LmV4cG9ydHM9e1VSTFNlYXJjaFBhcmFtczpILGdldFN0YXRlOkl9fSwxMzkxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oODIyMDEpO3ZhciByLG89bigxNDA0NCksaT1uKDYyNTU2KSxhPW4oNTc1OTcpLGM9big4OTU1OCkscz1uKDg2NDAxKSx1PW4oOTI5MTMpLGw9big1OTM3OSksZj1uKDc2Mjk4KSxkPW4oNzg2ODUpLHA9big4NTE2NiksaD1uKDYwMTQwKS5jb2RlQXQsdj1uKDY5OTI3KSxnPW4oNTExMjgpLHk9big1NTU3KSxtPW4oODk4MjcpLGI9Yy5VUkwseD15LlVSTFNlYXJjaFBhcmFtcyx3PXkuZ2V0U3RhdGUsRT1tLnNldCxqPW0uZ2V0dGVyRm9yKCJVUkwiKSxDPU1hdGguZmxvb3Isaz1NYXRoLnBvdyxTPSJJbnZhbGlkIHNjaGVtZSIsTz0iSW52YWxpZCBob3N0IixJPSJJbnZhbGlkIHBvcnQiLEE9L1tBLVphLXpdLyxUPS9bXGQrXC0uQS1aYS16XS8sTT0vXGQvLF89L14oMHh8MFgpLyxMPS9eWzAtN10rJC8sUj0vXlxkKyQvLFA9L15bXGRBLUZhLWZdKyQvLE49L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIyUvOj9AW1xcXV0vLEQ9L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIy86P0BbXFxdXS8sRj0vXltcdTAwMDAtXHUwMDFGIF0rfFtcdTAwMDAtXHUwMDFGIF0rJC9nLFU9L1tcdTAwMDlcdTAwMEFcdTAwMERdL2csQj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsbztpZigiWyI9PWUuY2hhckF0KDApKXtpZigiXSIhPWUuY2hhckF0KGUubGVuZ3RoLTEpKXJldHVybiBPO2lmKCEobj1WKGUuc2xpY2UoMSwtMSkpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNlIGlmKEsodCkpe2lmKGU9dihlKSxOLnRlc3QoZSkpcmV0dXJuIE87aWYobnVsbD09PShuPXooZSkpKXJldHVybiBPO3QuaG9zdD1ufWVsc2V7aWYoRC50ZXN0KGUpKXJldHVybiBPO2ZvcihuPSIiLHI9cChlKSxvPTA7bzxyLmxlbmd0aDtvKyspbis9JChyW29dLHEpO3QuaG9zdD1ufX0sej1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPXQuc3BsaXQoIi4iKTtpZihzLmxlbmd0aCYmIiI9PXNbcy5sZW5ndGgtMV0mJnMucG9wKCksKGU9cy5sZW5ndGgpPjQpcmV0dXJuIHQ7Zm9yKG49W10scj0wO3I8ZTtyKyspe2lmKCIiPT0obz1zW3JdKSlyZXR1cm4gdDtpZihpPTEwLG8ubGVuZ3RoPjEmJiIwIj09by5jaGFyQXQoMCkmJihpPV8udGVzdChvKT8xNjo4LG89by5zbGljZSg4PT1pPzE6MikpLCIiPT09bylhPTA7ZWxzZXtpZighKDEwPT1pP1I6OD09aT9MOlApLnRlc3QobykpcmV0dXJuIHQ7YT1wYXJzZUludChvLGkpfW4ucHVzaChhKX1mb3Iocj0wO3I8ZTtyKyspaWYoYT1uW3JdLHI9PWUtMSl7aWYoYT49aygyNTYsNS1lKSlyZXR1cm4gbnVsbH1lbHNlIGlmKGE+MjU1KXJldHVybiBudWxsO2ZvcihjPW4ucG9wKCkscj0wO3I8bi5sZW5ndGg7cisrKWMrPW5bcl0qaygyNTYsMy1yKTtyZXR1cm4gY30sVj1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPVswLDAsMCwwLDAsMCwwLDBdLHU9MCxsPW51bGwsZj0wLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jaGFyQXQoZil9O2lmKCI6Ij09ZCgpKXtpZigiOiIhPXQuY2hhckF0KDEpKXJldHVybjtmKz0yLGw9Kyt1fWZvcig7ZCgpOyl7aWYoOD09dSlyZXR1cm47aWYoIjoiIT1kKCkpe2ZvcihlPW49MDtuPDQmJlAudGVzdChkKCkpOyllPTE2KmUrcGFyc2VJbnQoZCgpLDE2KSxmKyssbisrO2lmKCIuIj09ZCgpKXtpZigwPT1uKXJldHVybjtpZihmLT1uLHU+NilyZXR1cm47Zm9yKHI9MDtkKCk7KXtpZihvPW51bGwscj4wKXtpZighKCIuIj09ZCgpJiZyPDQpKXJldHVybjtmKyt9aWYoIU0udGVzdChkKCkpKXJldHVybjtmb3IoO00udGVzdChkKCkpOyl7aWYoaT1wYXJzZUludChkKCksMTApLG51bGw9PT1vKW89aTtlbHNle2lmKDA9PW8pcmV0dXJuO289MTAqbytpfWlmKG8+MjU1KXJldHVybjtmKyt9c1t1XT0yNTYqc1t1XStvLDIhPSsrciYmNCE9cnx8dSsrfWlmKDQhPXIpcmV0dXJuO2JyZWFrfWlmKCI6Ij09ZCgpKXtpZihmKyssIWQoKSlyZXR1cm59ZWxzZSBpZihkKCkpcmV0dXJuO3NbdSsrXT1lfWVsc2V7aWYobnVsbCE9PWwpcmV0dXJuO2YrKyxsPSsrdX19aWYobnVsbCE9PWwpZm9yKGE9dS1sLHU9NzswIT11JiZhPjA7KWM9c1t1XSxzW3UtLV09c1tsK2EtMV0sc1tsKy0tYV09YztlbHNlIGlmKDghPXUpcmV0dXJuO3JldHVybiBzfSxIPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvO2lmKCJudW1iZXIiPT10eXBlb2YgdCl7Zm9yKGU9W10sbj0wO248NDtuKyspZS51bnNoaWZ0KHQlMjU2KSx0PUModC8yNTYpO3JldHVybiBlLmpvaW4oIi4iKX1pZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihlPSIiLHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwsbj0xLHI9bnVsbCxvPTAsaT0wO2k8ODtpKyspMCE9PXRbaV0/KG8+biYmKGU9cixuPW8pLHI9bnVsbCxvPTApOihudWxsPT09ciYmKHI9aSksKytvKTtyZXR1cm4gbz5uJiYoZT1yLG49byksZX0odCksbj0wO248ODtuKyspbyYmMD09PXRbbl18fChvJiYobz0hMSkscj09PW4/KGUrPW4/IjoiOiI6OiIsbz0hMCk6KGUrPXRbbl0udG9TdHJpbmcoMTYpLG48NyYmKGUrPSI6IikpKTtyZXR1cm4iWyIrZSsiXSJ9cmV0dXJuIHR9LHE9e30sVz1kKHt9LHEseyIgIjoxLCciJzoxLCI8IjoxLCI+IjoxLCJgIjoxfSksRz1kKHt9LFcseyIjIjoxLCI/IjoxLCJ7IjoxLCJ9IjoxfSksWj1kKHt9LEcseyIvIjoxLCI6IjoxLCI7IjoxLCI9IjoxLCJAIjoxLCJbIjoxLCJcXCI6MSwiXSI6MSwiXiI6MSwifCI6MX0pLCQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1oKHQsMCk7cmV0dXJuIG4+MzImJm48MTI3JiYhZihlLHQpP3Q6ZW5jb2RlVVJJQ29tcG9uZW50KHQpfSxZPXtmdHA6MjEsZmlsZTpudWxsLGh0dHA6ODAsaHR0cHM6NDQzLHdzOjgwLHdzczo0NDN9LEs9ZnVuY3Rpb24odCl7cmV0dXJuIGYoWSx0LnNjaGVtZSl9LEo9ZnVuY3Rpb24odCl7cmV0dXJuIiIhPXQudXNlcm5hbWV8fCIiIT10LnBhc3N3b3JkfSxYPWZ1bmN0aW9uKHQpe3JldHVybiF0Lmhvc3R8fHQuY2Fubm90QmVBQmFzZVVSTHx8ImZpbGUiPT10LnNjaGVtZX0sUT1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiAyPT10Lmxlbmd0aCYmQS50ZXN0KHQuY2hhckF0KDApKSYmKCI6Ij09KG49dC5jaGFyQXQoMSkpfHwhZSYmInwiPT1uKX0sdHQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQubGVuZ3RoPjEmJlEodC5zbGljZSgwLDIpKSYmKDI9PXQubGVuZ3RofHwiLyI9PT0oZT10LmNoYXJBdCgyKSl8fCJcXCI9PT1lfHwiPyI9PT1lfHwiIyI9PT1lKX0sZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXRoLG49ZS5sZW5ndGg7IW58fCJmaWxlIj09dC5zY2hlbWUmJjE9PW4mJlEoZVswXSwhMCl8fGUucG9wKCl9LG50PWZ1bmN0aW9uKHQpe3JldHVybiIuIj09PXR8fCIlMmUiPT09dC50b0xvd2VyQ2FzZSgpfSxydD17fSxvdD17fSxpdD17fSxhdD17fSxjdD17fSxzdD17fSx1dD17fSxsdD17fSxmdD17fSxkdD17fSxwdD17fSxodD17fSx2dD17fSxndD17fSx5dD17fSxtdD17fSxidD17fSx4dD17fSx3dD17fSxFdD17fSxqdD17fSxDdD1mdW5jdGlvbih0LGUsbixvKXt2YXIgaSxhLGMscyx1LGw9bnx8cnQsZD0wLGg9IiIsdj0hMSxnPSExLHk9ITE7Zm9yKG58fCh0LnNjaGVtZT0iIix0LnVzZXJuYW1lPSIiLHQucGFzc3dvcmQ9IiIsdC5ob3N0PW51bGwsdC5wb3J0PW51bGwsdC5wYXRoPVtdLHQucXVlcnk9bnVsbCx0LmZyYWdtZW50PW51bGwsdC5jYW5ub3RCZUFCYXNlVVJMPSExLGU9ZS5yZXBsYWNlKEYsIiIpKSxlPWUucmVwbGFjZShVLCIiKSxpPXAoZSk7ZDw9aS5sZW5ndGg7KXtzd2l0Y2goYT1pW2RdLGwpe2Nhc2UgcnQ6aWYoIWF8fCFBLnRlc3QoYSkpe2lmKG4pcmV0dXJuIFM7bD1pdDtjb250aW51ZX1oKz1hLnRvTG93ZXJDYXNlKCksbD1vdDticmVhaztjYXNlIG90OmlmKGEmJihULnRlc3QoYSl8fCIrIj09YXx8Ii0iPT1hfHwiLiI9PWEpKWgrPWEudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9YSl7aWYobilyZXR1cm4gUztoPSIiLGw9aXQsZD0wO2NvbnRpbnVlfWlmKG4mJihLKHQpIT1mKFksaCl8fCJmaWxlIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpfHwiZmlsZSI9PXQuc2NoZW1lJiYhdC5ob3N0KSlyZXR1cm47aWYodC5zY2hlbWU9aCxuKXJldHVybiB2b2lkKEsodCkmJllbdC5zY2hlbWVdPT10LnBvcnQmJih0LnBvcnQ9bnVsbCkpO2g9IiIsImZpbGUiPT10LnNjaGVtZT9sPWd0OksodCkmJm8mJm8uc2NoZW1lPT10LnNjaGVtZT9sPWF0OksodCk/bD1sdDoiLyI9PWlbZCsxXT8obD1jdCxkKyspOih0LmNhbm5vdEJlQUJhc2VVUkw9ITAsdC5wYXRoLnB1c2goIiIpLGw9d3QpfWJyZWFrO2Nhc2UgaXQ6aWYoIW98fG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiIT1hKXJldHVybiBTO2lmKG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiPT1hKXt0LnNjaGVtZT1vLnNjaGVtZSx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsdC5jYW5ub3RCZUFCYXNlVVJMPSEwLGw9anQ7YnJlYWt9bD0iZmlsZSI9PW8uc2NoZW1lP2d0OnN0O2NvbnRpbnVlO2Nhc2UgYXQ6aWYoIi8iIT1hfHwiLyIhPWlbZCsxXSl7bD1zdDtjb250aW51ZX1sPWZ0LGQrKzticmVhaztjYXNlIGN0OmlmKCIvIj09YSl7bD1kdDticmVha31sPXh0O2NvbnRpbnVlO2Nhc2Ugc3Q6aWYodC5zY2hlbWU9by5zY2hlbWUsYT09cil0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIi8iPT1hfHwiXFwiPT1hJiZLKHQpKWw9dXQ7ZWxzZSBpZigiPyI9PWEpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucGF0aC5wb3AoKSxsPXh0O2NvbnRpbnVlfXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fWJyZWFrO2Nhc2UgdXQ6aWYoIUsodCl8fCIvIiE9YSYmIlxcIiE9YSl7aWYoIi8iIT1hKXt0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCxsPXh0O2NvbnRpbnVlfWw9ZHR9ZWxzZSBsPWZ0O2JyZWFrO2Nhc2UgbHQ6aWYobD1mdCwiLyIhPWF8fCIvIiE9aC5jaGFyQXQoZCsxKSljb250aW51ZTtkKys7YnJlYWs7Y2FzZSBmdDppZigiLyIhPWEmJiJcXCIhPWEpe2w9ZHQ7Y29udGludWV9YnJlYWs7Y2FzZSBkdDppZigiQCI9PWEpe3YmJihoPSIlNDAiK2gpLHY9ITAsYz1wKGgpO2Zvcih2YXIgbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgYj1jW21dO2lmKCI6IiE9Ynx8eSl7dmFyIHg9JChiLFopO3k/dC5wYXNzd29yZCs9eDp0LnVzZXJuYW1lKz14fWVsc2UgeT0hMH1oPSIifWVsc2UgaWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSyh0KSl7aWYodiYmIiI9PWgpcmV0dXJuIkludmFsaWQgYXV0aG9yaXR5IjtkLT1wKGgpLmxlbmd0aCsxLGg9IiIsbD1wdH1lbHNlIGgrPWE7YnJlYWs7Y2FzZSBwdDpjYXNlIGh0OmlmKG4mJiJmaWxlIj09dC5zY2hlbWUpe2w9bXQ7Y29udGludWV9aWYoIjoiIT1hfHxnKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpKXtpZihLKHQpJiYiIj09aClyZXR1cm4gTztpZihuJiYiIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpKXJldHVybjtpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9YnQsbilyZXR1cm47Y29udGludWV9IlsiPT1hP2c9ITA6Il0iPT1hJiYoZz0hMSksaCs9YX1lbHNle2lmKCIiPT1oKXJldHVybiBPO2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKGg9IiIsbD12dCxuPT1odClyZXR1cm59YnJlYWs7Y2FzZSB2dDppZighTS50ZXN0KGEpKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpfHxuKXtpZigiIiE9aCl7dmFyIHc9cGFyc2VJbnQoaCwxMCk7aWYodz42NTUzNSlyZXR1cm4gSTt0LnBvcnQ9Syh0KSYmdz09PVlbdC5zY2hlbWVdP251bGw6dyxoPSIifWlmKG4pcmV0dXJuO2w9YnQ7Y29udGludWV9cmV0dXJuIEl9aCs9YTticmVhaztjYXNlIGd0OmlmKHQuc2NoZW1lPSJmaWxlIiwiLyI9PWF8fCJcXCI9PWEpbD15dDtlbHNle2lmKCFvfHwiZmlsZSIhPW8uc2NoZW1lKXtsPXh0O2NvbnRpbnVlfWlmKGE9PXIpdC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIj8iPT1hKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dHQoaS5zbGljZShkKS5qb2luKCIiKSl8fCh0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSxldCh0KSksbD14dDtjb250aW51ZX10Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fX1icmVhaztjYXNlIHl0OmlmKCIvIj09YXx8IlxcIj09YSl7bD1tdDticmVha31vJiYiZmlsZSI9PW8uc2NoZW1lJiYhdHQoaS5zbGljZShkKS5qb2luKCIiKSkmJihRKG8ucGF0aFswXSwhMCk/dC5wYXRoLnB1c2goby5wYXRoWzBdKTp0Lmhvc3Q9by5ob3N0KSxsPXh0O2NvbnRpbnVlO2Nhc2UgbXQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hfHwiPyI9PWF8fCIjIj09YSl7aWYoIW4mJlEoaCkpbD14dDtlbHNlIGlmKCIiPT1oKXtpZih0Lmhvc3Q9IiIsbilyZXR1cm47bD1idH1lbHNle2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKCJsb2NhbGhvc3QiPT10Lmhvc3QmJih0Lmhvc3Q9IiIpLG4pcmV0dXJuO2g9IiIsbD1idH1jb250aW51ZX1oKz1hO2JyZWFrO2Nhc2UgYnQ6aWYoSyh0KSl7aWYobD14dCwiLyIhPWEmJiJcXCIhPWEpY29udGludWV9ZWxzZSBpZihufHwiPyIhPWEpaWYobnx8IiMiIT1hKXtpZihhIT1yJiYobD14dCwiLyIhPWEpKWNvbnRpbnVlfWVsc2UgdC5mcmFnbWVudD0iIixsPWp0O2Vsc2UgdC5xdWVyeT0iIixsPUV0O2JyZWFrO2Nhc2UgeHQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hJiZLKHQpfHwhbiYmKCI/Ij09YXx8IiMiPT1hKSl7aWYoIi4uIj09PSh1PSh1PWgpLnRvTG93ZXJDYXNlKCkpfHwiJTJlLiI9PT11fHwiLiUyZSI9PT11fHwiJTJlJTJlIj09PXU/KGV0KHQpLCIvIj09YXx8IlxcIj09YSYmSyh0KXx8dC5wYXRoLnB1c2goIiIpKTpudChoKT8iLyI9PWF8fCJcXCI9PWEmJksodCl8fHQucGF0aC5wdXNoKCIiKTooImZpbGUiPT10LnNjaGVtZSYmIXQucGF0aC5sZW5ndGgmJlEoaCkmJih0Lmhvc3QmJih0Lmhvc3Q9IiIpLGg9aC5jaGFyQXQoMCkrIjoiKSx0LnBhdGgucHVzaChoKSksaD0iIiwiZmlsZSI9PXQuc2NoZW1lJiYoYT09cnx8Ij8iPT1hfHwiIyI9PWEpKWZvcig7dC5wYXRoLmxlbmd0aD4xJiYiIj09PXQucGF0aFswXTspdC5wYXRoLnNoaWZ0KCk7Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YSYmKHQuZnJhZ21lbnQ9IiIsbD1qdCl9ZWxzZSBoKz0kKGEsRyk7YnJlYWs7Y2FzZSB3dDoiPyI9PWE/KHQucXVlcnk9IiIsbD1FdCk6IiMiPT1hPyh0LmZyYWdtZW50PSIiLGw9anQpOmEhPXImJih0LnBhdGhbMF0rPSQoYSxxKSk7YnJlYWs7Y2FzZSBFdDpufHwiIyIhPWE/YSE9ciYmKCInIj09YSYmSyh0KT90LnF1ZXJ5Kz0iJTI3Ijp0LnF1ZXJ5Kz0iIyI9PWE/IiUyMyI6JChhLHEpKToodC5mcmFnbWVudD0iIixsPWp0KTticmVhaztjYXNlIGp0OmEhPXImJih0LmZyYWdtZW50Kz0kKGEsVykpfWQrK319LGt0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1sKHRoaXMsa3QsIlVSTCIpLG89YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYT1TdHJpbmcodCksYz1FKHIse3R5cGU6IlVSTCJ9KTtpZih2b2lkIDAhPT1vKWlmKG8gaW5zdGFuY2VvZiBrdCllPWoobyk7ZWxzZSBpZihuPUN0KGU9e30sU3RyaW5nKG8pKSl0aHJvdyBUeXBlRXJyb3Iobik7aWYobj1DdChjLGEsbnVsbCxlKSl0aHJvdyBUeXBlRXJyb3Iobik7dmFyIHM9Yy5zZWFyY2hQYXJhbXM9bmV3IHgsdT13KHMpO3UudXBkYXRlU2VhcmNoUGFyYW1zKGMucXVlcnkpLHUudXBkYXRlVVJMPWZ1bmN0aW9uKCl7Yy5xdWVyeT1TdHJpbmcocyl8fG51bGx9LGl8fChyLmhyZWY9T3QuY2FsbChyKSxyLm9yaWdpbj1JdC5jYWxsKHIpLHIucHJvdG9jb2w9QXQuY2FsbChyKSxyLnVzZXJuYW1lPVR0LmNhbGwociksci5wYXNzd29yZD1NdC5jYWxsKHIpLHIuaG9zdD1fdC5jYWxsKHIpLHIuaG9zdG5hbWU9THQuY2FsbChyKSxyLnBvcnQ9UnQuY2FsbChyKSxyLnBhdGhuYW1lPVB0LmNhbGwociksci5zZWFyY2g9TnQuY2FsbChyKSxyLnNlYXJjaFBhcmFtcz1EdC5jYWxsKHIpLHIuaGFzaD1GdC5jYWxsKHIpKX0sU3Q9a3QucHJvdG90eXBlLE90PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC51c2VybmFtZSxyPXQucGFzc3dvcmQsbz10Lmhvc3QsaT10LnBvcnQsYT10LnBhdGgsYz10LnF1ZXJ5LHM9dC5mcmFnbWVudCx1PWUrIjoiO3JldHVybiBudWxsIT09bz8odSs9Ii8vIixKKHQpJiYodSs9bisocj8iOiIrcjoiIikrIkAiKSx1Kz1IKG8pLG51bGwhPT1pJiYodSs9IjoiK2kpKToiZmlsZSI9PWUmJih1Kz0iLy8iKSx1Kz10LmNhbm5vdEJlQUJhc2VVUkw/YVswXTphLmxlbmd0aD8iLyIrYS5qb2luKCIvIik6IiIsbnVsbCE9PWMmJih1Kz0iPyIrYyksbnVsbCE9PXMmJih1Kz0iIyIrcyksdX0sSXQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5zY2hlbWUsbj10LnBvcnQ7aWYoImJsb2IiPT1lKXRyeXtyZXR1cm4gbmV3IFVSTChlLnBhdGhbMF0pLm9yaWdpbn1jYXRjaCh0KXtyZXR1cm4ibnVsbCJ9cmV0dXJuImZpbGUiIT1lJiZLKHQpP2UrIjovLyIrSCh0Lmhvc3QpKyhudWxsIT09bj8iOiIrbjoiIik6Im51bGwifSxBdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnNjaGVtZSsiOiJ9LFR0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykudXNlcm5hbWV9LE10PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykucGFzc3dvcmR9LF90PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuaG9zdCxuPXQucG9ydDtyZXR1cm4gbnVsbD09PWU/IiI6bnVsbD09PW4/SChlKTpIKGUpKyI6IitufSxMdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuaG9zdDtyZXR1cm4gbnVsbD09PXQ/IiI6SCh0KX0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLnBvcnQ7cmV0dXJuIG51bGw9PT10PyIiOlN0cmluZyh0KX0sUHQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5wYXRoO3JldHVybiB0LmNhbm5vdEJlQUJhc2VVUkw/ZVswXTplLmxlbmd0aD8iLyIrZS5qb2luKCIvIik6IiJ9LE50PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5xdWVyeTtyZXR1cm4gdD8iPyIrdDoiIn0sRHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zZWFyY2hQYXJhbXN9LEZ0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5mcmFnbWVudDtyZXR1cm4gdD8iIyIrdDoiIn0sVXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57Z2V0OnQsc2V0OmUsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fTtpZihpJiZzKFN0LHtocmVmOlV0KE90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49U3RyaW5nKHQpLHI9Q3QoZSxuKTtpZihyKXRocm93IFR5cGVFcnJvcihyKTt3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksb3JpZ2luOlV0KEl0KSxwcm90b2NvbDpVdChBdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtDdChlLFN0cmluZyh0KSsiOiIscnQpfSkpLHVzZXJuYW1lOlV0KFR0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnVzZXJuYW1lPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUudXNlcm5hbWUrPSQobltyXSxaKX19KSkscGFzc3dvcmQ6VXQoTXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1wKFN0cmluZyh0KSk7aWYoIVgoZSkpe2UucGFzc3dvcmQ9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS5wYXNzd29yZCs9JChuW3JdLFopfX0pKSxob3N0OlV0KF90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCkscHQpfSkpLGhvc3RuYW1lOlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCksaHQpfSkpLHBvcnQ6VXQoUnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7WChlKXx8KCIiPT0odD1TdHJpbmcodCkpP2UucG9ydD1udWxsOkN0KGUsdCx2dCkpfSkpLHBhdGhuYW1lOlV0KFB0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8KGUucGF0aD1bXSxDdChlLHQrIiIsYnQpKX0pKSxzZWFyY2g6VXQoTnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiI9PSh0PVN0cmluZyh0KSk/ZS5xdWVyeT1udWxsOigiPyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLnF1ZXJ5PSIiLEN0KGUsdCxFdCkpLHcoZS5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyhlLnF1ZXJ5KX0pKSxzZWFyY2hQYXJhbXM6VXQoRHQpLGhhc2g6VXQoRnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiIhPSh0PVN0cmluZyh0KSk/KCIjIj09dC5jaGFyQXQoMCkmJih0PXQuc2xpY2UoMSkpLGUuZnJhZ21lbnQ9IiIsQ3QoZSx0LGp0KSk6ZS5mcmFnbWVudD1udWxsfSkpfSksdShTdCwidG9KU09OIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksdShTdCwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBPdC5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSxiKXt2YXIgQnQ9Yi5jcmVhdGVPYmplY3RVUkwsenQ9Yi5yZXZva2VPYmplY3RVUkw7QnQmJnUoa3QsImNyZWF0ZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiBCdC5hcHBseShiLGFyZ3VtZW50cyl9KSksenQmJnUoa3QsInJldm9rZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiB6dC5hcHBseShiLGFyZ3VtZW50cyl9KSl9ZyhrdCwiVVJMIiksbyh7Z2xvYmFsOiEwLGZvcmNlZDohYSxzaGFtOiFpfSx7VVJMOmt0fSl9LDk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IlVSTCIscHJvdG86ITAsZW51bWVyYWJsZTohMH0se3RvSlNPTjpmdW5jdGlvbigpe3JldHVybiBVUkwucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9fSl9LDM2NDY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDg2KX0sNjY1NTQ6ZnVuY3Rpb24odCxlLG4pe24oNDkzMCksbig2MzY0KX0sOTMyNzA6ZnVuY3Rpb24odCxlLG4pe24oNTM1MTMpLG4oOTkyNTUpLG4oNDg0NCksbigzNTU0KSxuKDE4ODQ0KSxuKDM1NjU2KSxuKDQ5MDUwKSxuKDkzODQzKSxuKDY2MjI0KSxuKDcxNzAwKSxuKDY5NTI5KSxuKDI3NzM0KSxuKDc3MzY5KSxuKDY5ODQyKSxuKDk3OTI4KSxuKDkzOSksbig2MTQ2NyksbigxNjEyNyksbig1MzU4OSksbig4MTA0MiksbigxNjc1NyksbigxMTA3NCksbigzMzUzOSksbigyNDEwMyksbig2NDgxMyksbig2ODk5OSksbig1MzgyNCl9LDg5NzQwOmZ1bmN0aW9uKHQsZSxuKXtuKDM4NzkyKSxuKDE5OTApLG4oOTcyODQpLG4oMjQ1OTgpLG4oOTk5NzkpLG4oMTgyMDUpLG4oODU4KSxuKDY0ODk5KX0sNjgwMDE6ZnVuY3Rpb24odCxlLG4pe24oMzA2MTMpLG4oNjg0MDYpLG4oNDk3OSksbig0NDY0Nil9LDI4Njk5OmZ1bmN0aW9uKHQsZSxuKXtuKDk5NjI4KTt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMTU2MjQ6ZnVuY3Rpb24odCxlLG4pe24oNTczNjApfSw4MTIxMzpmdW5jdGlvbih0LGUsbil7big2MTI5OCksbig0NzAwNCksbig2NzQ2Miksbig5MDY3KSxuKDIwMTI0KSxuKDIxMzcxKSxuKDM4OTg0KSxuKDY5MjM3KSxuKDI2NDk3KSxuKDUzMTY4KSxuKDczOTQ5KSxuKDg4MjExKSxuKDczNzYxKSxuKDQyMTk2KSxuKDQzMzMyKSxuKDkyNjAxKSxuKDIwNDc0KSxuKDU0NTU2KSxuKDQwNjM4KSxuKDk2NjU5KSxuKDE0Njg4KSxuKDczNzgpLG4oMjc0MjgpLG4oMzM0MzYpLG4oODQzODgpLG4oNTk2MjMpLG4oMzI4NTMpLG4oNjcwNzIpfSw2MjY3NzpmdW5jdGlvbih0LGUsbil7bigzNjU3MSksbig0MzA4Nil9LDM3NjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDQzMjkwKSxuKDE0NjgyKSxuKDg3NTU1KX0sMTQ3MTU6ZnVuY3Rpb24odCxlLG4pe24oNzAyMjUpLG4oMjM5OSksbigxNjgwOSksbig2NzE0MSksbig5MDc2OSksbig1Nzg5MSksbigxNTcyMil9LDM2Njg2OmZ1bmN0aW9uKHQsZSxuKXtuKDc3OTA3KX0sNjc3OTM6ZnVuY3Rpb24odCxlLG4pe24oNzU2NDcpfSw5NDc3OmZ1bmN0aW9uKHQsZSxuKXtuKDg0MzA5KSxuKDcyOTYzKSxuKDU2MzU5KX0sNzIzNTQ6ZnVuY3Rpb24odCxlLG4pe24oMjAyMzQpLG4oNTEzNzQpfSw3NDY3OTpmdW5jdGlvbih0LGUsbil7big1Mzc3Mil9LDk0Nzk6ZnVuY3Rpb24odCxlLG4pe24oMjc3NSl9LDg1NjU5OmZ1bmN0aW9uKHQsZSxuKXtuKDk2NzUxKSxuKDczMjIwKX0sNTQ5ODY6ZnVuY3Rpb24odCxlLG4pe24oMTEwNzEpfSwxODgxOmZ1bmN0aW9uKHQsZSxuKXtuKDQ5NjQwKSxuKDc0OTYzKSxuKDY5NDU5KSxuKDQ5MTU1KSxuKDI2ODk2KSxuKDg3NDc0KSxuKDk3NDMzKSxuKDcxMDgpLG4oMjM2MzEpfSw1NzYwMzpmdW5jdGlvbih0LGUsbil7bigxNzY1KX0sODE1NDg6ZnVuY3Rpb24odCxlLG4pe24oOTgzNTApLG4oNDE3MTgpLG4oNTczNzEpLG4oODkyMzApLG4oMzIzMDMpLG4oNjI5MSksbig2NjE4MSl9LDIzMTAyOmZ1bmN0aW9uKHQsZSxuKXtuKDczNDYwKX0sNDQxNTM6ZnVuY3Rpb24odCxlLG4pe24oMzIwNjIpfSw3MzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDc0NTI1KX0sNzc3OTpmdW5jdGlvbih0LGUsbil7big2NDAyNiksbig4NjA3Nyl9LDYwODI2OmZ1bmN0aW9uKHQsZSxuKXtuKDEzOTEwKSxuKDk4NCksbig1NTU3KX0sNTU5MzM6ZnVuY3Rpb24odCxlLG4pe24oNjk0Miksbig5NDI0OSl9LDg3NjAyOmZ1bmN0aW9uKHQsZSxuKXtuKDY4MDAxKSxuKDIzMTAyKSxuKDYwODI2KTt2YXIgcj1uKDk1OTY4KTt0LmV4cG9ydHM9cn0sOTU5Njg6ZnVuY3Rpb24odCxlLG4pe24oNjY1NTQpLG4oOTMyNzApLG4oODk3NDApLG4oNjI2NzcpLG4oMTQ3MTUpLG4oMzY2ODYpLG4oNjc3OTMpLG4oOTQ3Nyksbig3MjM1NCksbig3NDY3OSksbig1NDk4Niksbig1NzYwMyksbig0NDE1Myk7dmFyIHI9big0Nzk3Mik7dC5leHBvcnRzPXJ9LDQ3OTcyOmZ1bmN0aW9uKHQsZSxuKXtuKDM2NDY3KSxuKDgxMjEzKSxuKDM3NjEzKSxuKDgxNTQ4KSxuKDU1OTMzKTt2YXIgcj1uKDU5MDExKTt0LmV4cG9ydHM9cn0sNTkwMTE6ZnVuY3Rpb24odCxlLG4pe24oODU2NTkpLG4oNzc3OSk7dmFyIHI9big2ODY4NSk7dC5leHBvcnRzPXJ9LDY4Njg1OmZ1bmN0aW9uKHQsZSxuKXtuKDI4Njk5KSxuKDk0NzkpLG4oNzM5Mik7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDU3MzYwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzMzM1KTt0LmV4cG9ydHM9cn0sNTMzMzU6ZnVuY3Rpb24odCxlLG4pe24oMTg4MSk7dmFyIHI9big4NzYwMik7dC5leHBvcnRzPXJ9LDkyNDA0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3MDM5KSxuKDc5Nzk5KSxuKDc0MDEwKSxuKDY1OTc2KSxuKDgxOTk0KSxuKDEzOTEwKSxuKDk4NCksbig1NTU3KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sMTg5ODY6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdfHwiIixyPXRbM107aWYoIXIpcmV0dXJuIG47aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShhPXIsYz1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSxzPSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChjKSwiLyojICIuY29uY2F0KHMsIiAqLyIpKSxpPXIuc291cmNlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIvKiMgc291cmNlVVJMPSIuY29uY2F0KHIuc291cmNlUm9vdCkuY29uY2F0KHQsIiAqLyIpfSkpO3JldHVybltuXS5jb25jYXQoaSkuY29uY2F0KFtvXSkuam9pbigiXG4iKX12YXIgYSxjLHM7cmV0dXJuW25dLmpvaW4oIlxuIil9KGUsdCk7cmV0dXJuIGVbMl0/IkBtZWRpYSAiLmNvbmNhdChlWzJdLCIgeyIpLmNvbmNhdChuLCJ9Iik6bn0pKS5qb2luKCIiKX0sZS5pPWZ1bmN0aW9uKHQsbil7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bW251bGwsdCwiIl1dKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89W10uY29uY2F0KHRbcl0pO24mJihvWzJdP29bMl09IiIuY29uY2F0KG4sIiBhbmQgIikuY29uY2F0KG9bMl0pOm9bMl09biksZS5wdXNoKG8pfX0sZX19LDQ2Njc5OmZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYT1vLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGM9by50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2godCl7cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bn19ZnVuY3Rpb24gdSh0LGUsbixyKXt2YXIgbz1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgSShyfHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZjtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihyPT09cCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihyPT09aCl7aWYoInRocm93Ij09PW8pdGhyb3cgaTtyZXR1cm4gVCgpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgYz1rKGEsbik7aWYoYyl7aWYoYz09PXYpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihyPT09Zil0aHJvdyByPWgsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtyPXA7dmFyIHM9bCh0LGUsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKHI9bi5kb25lP2g6ZCxzLmFyZz09PXYpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19KHQsbixhKSxpfWZ1bmN0aW9uIGwodCxlLG4pe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUsbil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9dTt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGQ9InN1c3BlbmRlZFlpZWxkIixwPSJleGVjdXRpbmciLGg9ImNvbXBsZXRlZCIsdj17fTtmdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gbSgpe312YXIgYj17fTtzKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz14JiZ4KHgoQShbXSkpKTt3JiZ3IT09biYmci5jYWxsKHcsaSkmJihiPXcpO3ZhciBFPW0ucHJvdG90eXBlPWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYik7ZnVuY3Rpb24gaih0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQyh0LGUpe2Z1bmN0aW9uIG4obyxpLGEsYyl7dmFyIHM9bCh0W29dLHQsaSk7aWYoInRocm93IiE9PXMudHlwZSl7dmFyIHU9cy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09dHlwZW9mIGYmJnIuY2FsbChmLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7bigibmV4dCIsdCxhLGMpfSksKGZ1bmN0aW9uKHQpe24oInRocm93Iix0LGEsYyl9KSk6ZS5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxhKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJ0aHJvdyIsdCxhLGMpfSkpfWMocy5hcmcpfXZhciBvO3RoaXMuX2ludm9rZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbyl7bih0LHIsZSxvKX0pKX1yZXR1cm4gbz1vP28udGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gayh0LG4pe3ZhciByPXQuaXRlcmF0b3Jbbi5tZXRob2RdO2lmKHI9PT1lKXtpZihuLmRlbGVnYXRlPW51bGwsInRocm93Ij09PW4ubWV0aG9kKXtpZih0Lml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPSJyZXR1cm4iLG4uYXJnPWUsayh0LG4pLCJ0aHJvdyI9PT1uLm1ldGhvZCkpcmV0dXJuIHY7bi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIHZ9dmFyIG89bChyLHQuaXRlcmF0b3Isbi5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLHY7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW3QucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09bi5tZXRob2QmJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksbi5kZWxlZ2F0ZT1udWxsLHYpOmk6KG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxuLmRlbGVnYXRlPW51bGwsdil9ZnVuY3Rpb24gUyh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiBJKHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goUyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBBKHQpe2lmKHQpe3ZhciBuPXRbaV07aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG89LTEsYT1mdW5jdGlvbiBuKCl7Zm9yKDsrK288dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG8pKXJldHVybiBuLnZhbHVlPXRbb10sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9ZSxuLmRvbmU9ITAsbn07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19cmV0dXJuIHkucHJvdG90eXBlPW0scyhFLCJjb25zdHJ1Y3RvciIsbSkscyhtLCJjb25zdHJ1Y3RvciIseSkseS5kaXNwbGF5TmFtZT1zKG0sYywiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXl8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LG0pOih0Ll9fcHJvdG9fXz1tLHModCxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEUpLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LGooQy5wcm90b3R5cGUpLHMoQy5wcm90b3R5cGUsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9Qyx0LmFzeW5jPWZ1bmN0aW9uKGUsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IEModShlLG4scixvKSxpKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOmEubmV4dCgpfSkpfSxqKEUpLHMoRSxjLCJHZW5lcmF0b3IiKSxzKEUsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKEUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciByPWUucG9wKCk7aWYociBpbiB0KXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sdC52YWx1ZXM9QSxJLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SSxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goTyksIXQpZm9yKHZhciBuIGluIHRoaXMpInQiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT1lKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBuPXRoaXM7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBjLnR5cGU9InRocm93IixjLmFyZz10LG4ubmV4dD1yLG8mJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxjPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbygiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksdT1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJnUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIG89dGhpcy50cnlFbnRyaWVzW25dO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx2KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHZ9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksTyhuKSx2fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4udHJ5TG9jPT09dCl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1yLnR5cGUpe3ZhciBvPXIuYXJnO08obil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpBKHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9ZSksdn19LHR9KHQuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT1lfWNhdGNoKHQpeyJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZT1lOkZ1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKGUpfX19LGU9e307ZnVuY3Rpb24gbihyKXt2YXIgbz1lW3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT1lW3JdPXtpZDpyLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31uLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5yPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXt9O24ucih0KSxuLmQodCx7ZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBDdH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0fX0pO3ZhciBlPW4oNjQxNTcpLHI9bi5uKGUpLG89KG4oNjA0OTEpLG4oNDY2NzkpLCJVUkxTZWFyY2hQYXJhbXMiaW4gc2VsZiksaT0iU3ltYm9sImluIHNlbGYmJiJpdGVyYXRvciJpbiBTeW1ib2wsYT0iRmlsZVJlYWRlciJpbiBzZWxmJiYiQmxvYiJpbiBzZWxmJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGM9IkZvcm1EYXRhImluIHNlbGYscz0iQXJyYXlCdWZmZXIiaW4gc2VsZjtpZihzKXZhciB1PVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sbD1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ1LmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKT4tMX07ZnVuY3Rpb24gZih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0PVN0cmluZyh0KSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLHR9ZnVuY3Rpb24gcCh0KXt2YXIgZT17bmV4dDpmdW5jdGlvbigpe3ZhciBlPXQuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT1lLHZhbHVlOmV9fX07cmV0dXJuIGkmJihlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gZX0pLGV9ZnVuY3Rpb24gaCh0KXt0aGlzLm1hcD17fSx0IGluc3RhbmNlb2YgaD90LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dGhpcy5hcHBlbmQoZSx0KX0pLHRoaXMpOkFycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0WzBdLHRbMV0pfSksdGhpcyk6dCYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dGhpcy5hcHBlbmQoZSx0W2VdKX0pLHRoaXMpfWZ1bmN0aW9uIHYodCl7aWYodC5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO3QuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsbil7dC5vbmxvYWQ9ZnVuY3Rpb24oKXtlKHQucmVzdWx0KX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7bih0LmVycm9yKX19KSl9ZnVuY3Rpb24geSh0KXt2YXIgZT1uZXcgRmlsZVJlYWRlcixuPWcoZSk7cmV0dXJuIGUucmVhZEFzQXJyYXlCdWZmZXIodCksbn1mdW5jdGlvbiBtKHQpe2lmKHQuc2xpY2UpcmV0dXJuIHQuc2xpY2UoMCk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodC5ieXRlTGVuZ3RoKTtyZXR1cm4gZS5zZXQobmV3IFVpbnQ4QXJyYXkodCkpLGUuYnVmZmVyfWZ1bmN0aW9uIGIoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9ib2R5SW5pdD10LHQ/InN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX2JvZHlUZXh0PXQ6YSYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5QmxvYj10OmMmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlGb3JtRGF0YT10Om8mJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5VGV4dD10LnRvU3RyaW5nKCk6cyYmYSYmKChlPXQpJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOnMmJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KXx8bCh0KSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPW0odCk6dGhpcy5fYm9keVRleHQ9dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCgic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxhJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTtpZih0KXJldHVybiB0O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP3YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oeSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj12KHRoaXMpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIHQ9dGhpcy5fYm9keUJsb2IsZT1uZXcgRmlsZVJlYWRlcixuPWcoZSksZS5yZWFkQXNUZXh0KHQpLG47aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiBuLmpvaW4oIiIpfSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sYyYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihFKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWgucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3Q9Zih0KSxlPWQoZSk7dmFyIG49dGhpcy5tYXBbdF07dGhpcy5tYXBbdF09bj9uKyIsICIrZTplfSxoLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMubWFwW2YodCldfSxoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Zih0KSx0aGlzLmhhcyh0KT90aGlzLm1hcFt0XTpudWxsfSxoLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGYodCkpfSxoLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLm1hcFtmKHQpXT1kKGUpfSxoLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KG4pJiZ0LmNhbGwoZSx0aGlzLm1hcFtuXSxuLHRoaXMpfSxoLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2gobil9KSkscCh0KX0saC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHAodCl9LGgucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3QucHVzaChbbixlXSl9KSkscCh0KX0saSYmKGgucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09aC5wcm90b3R5cGUuZW50cmllcyk7dmFyIHg9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiB3KHQsZSl7dmFyIG4scixvPShlPWV8fHt9KS5ib2R5O2lmKHQgaW5zdGFuY2VvZiB3KXtpZih0LmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpO3RoaXMudXJsPXQudXJsLHRoaXMuY3JlZGVudGlhbHM9dC5jcmVkZW50aWFscyxlLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgodC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9dC5tZXRob2QsdGhpcy5tb2RlPXQubW9kZSx0aGlzLnNpZ25hbD10LnNpZ25hbCxvfHxudWxsPT10Ll9ib2R5SW5pdHx8KG89dC5fYm9keUluaXQsdC5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcodCk7aWYodGhpcy5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLCFlLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaChlLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD0obj1lLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiLHI9bi50b1VwcGVyQ2FzZSgpLHguaW5kZXhPZihyKT4tMT9yOm4pLHRoaXMubW9kZT1lLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnNpZ25hbD1lLnNpZ25hbHx8dGhpcy5zaWduYWwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShvKX1mdW5jdGlvbiBFKHQpe3ZhciBlPW5ldyBGb3JtRGF0YTtyZXR1cm4gdC50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0KXt2YXIgbj10LnNwbGl0KCI9Iikscj1uLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLG89bi5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2UuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChyKSxkZWNvZGVVUklDb21wb25lbnQobykpfX0pKSxlfWZ1bmN0aW9uIGoodCl7dmFyIGU9bmV3IGg7cmV0dXJuIHQucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuc3BsaXQoIjoiKSxyPW4uc2hpZnQoKS50cmltKCk7aWYocil7dmFyIG89bi5qb2luKCI6IikudHJpbSgpO2UuYXBwZW5kKHIsbyl9fSkpLGV9ZnVuY3Rpb24gQyh0LGUpe2V8fChlPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPXZvaWQgMD09PWUuc3RhdHVzPzIwMDplLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gZT9lLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSx0aGlzLnVybD1lLnVybHx8IiIsdGhpcy5faW5pdEJvZHkodCl9dy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHcodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxiLmNhbGwody5wcm90b3R5cGUpLGIuY2FsbChDLnByb3RvdHlwZSksQy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEModGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBoKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LEMuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQyhudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIHQudHlwZT0iZXJyb3IiLHR9O3ZhciBrPVszMDEsMzAyLDMwMywzMDcsMzA4XTtDLnJlZGlyZWN0PWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1rLmluZGV4T2YoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IEMobnVsbCx7c3RhdHVzOmUsaGVhZGVyczp7bG9jYXRpb246dH19KX07dmFyIFM9c2VsZi5ET01FeGNlcHRpb247dHJ5e25ldyBTfWNhdGNoKHQpeyhTPWZ1bmN0aW9uKHQsZSl7dGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPWU7dmFyIG49RXJyb3IodCk7dGhpcy5zdGFjaz1uLnN0YWNrfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TfWZ1bmN0aW9uIE8odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIG89bmV3IHcodCxlKTtpZihvLnNpZ25hbCYmby5zaWduYWwuYWJvcnRlZClyZXR1cm4gcihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSk7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIGMoKXtpLmFib3J0KCl9aS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD17c3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6aihpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O3QudXJsPSJyZXNwb25zZVVSTCJpbiBpP2kucmVzcG9uc2VVUkw6dC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBlPSJyZXNwb25zZSJpbiBpP2kucmVzcG9uc2U6aS5yZXNwb25zZVRleHQ7bihuZXcgQyhlLHQpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9udGltZW91dD1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7cihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LGkub3BlbihvLm1ldGhvZCxvLnVybCwhMCksImluY2x1ZGUiPT09by5jcmVkZW50aWFscz9pLndpdGhDcmVkZW50aWFscz0hMDoib21pdCI9PT1vLmNyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4gaSYmYSYmKGkucmVzcG9uc2VUeXBlPSJibG9iIiksby5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aS5zZXRSZXF1ZXN0SGVhZGVyKGUsdCl9KSksby5zaWduYWwmJihvLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09aS5yZWFkeVN0YXRlJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9KSxpLnNlbmQodm9pZCAwPT09by5fYm9keUluaXQ/bnVsbDpvLl9ib2R5SW5pdCl9KSl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgbj1bXSxyPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS0gPjI7KW4ucHVzaChhcmd1bWVudHNbb10pO2Zvcig7bi5sZW5ndGg7KXt2YXIgaT1uLnBvcCgpO2lmKGkmJmkucG9wKWZvcihvPWkubGVuZ3RoO28tLTspbi5wdXNoKGlbb10pO2Vsc2UgbnVsbCE9aSYmITAhPT1pJiYhMSE9PWkmJnIucHVzaChpKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KGV8fHt9LHIpOntub2RlTmFtZTp0LGF0dHJpYnV0ZXM6ZXx8e30sY2hpbGRyZW46cixrZXk6ZSYmZS5rZXl9fU8ucG9seWZpbGw9ITAsc2VsZi5mZXRjaHx8KHNlbGYuZmV0Y2g9TyxzZWxmLkhlYWRlcnM9aCxzZWxmLlJlcXVlc3Q9dyxzZWxmLlJlc3BvbnNlPUMpO3ZhciBBPW4oNjYwODEpLFQ9bi5uKEEpLE09big5MjgxNiksXz1uLm4oTSksTD1uKDQ0Njc0KSxSPW4ubihMKSxQPW4oNDQ2MjEpLE49bi5uKFApLEQ9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBGKHQpe3ZhciBlLG4scj10eXBlb2YgdCxvPSIiO2lmKCJzdHJpbmciPT09cnx8Im51bWJlciI9PT1yKXJldHVybiB0fHwiIjtpZihEKHQpJiZ0Lmxlbmd0aD4wKWZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKSIiIT09KHI9Rih0W2VdKSkmJihvKz0obyYmIiAiKStyKTtlbHNlIGZvcihlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSYmKG8rPShvJiYiICIpK2UpO3JldHVybiBvfXZhciBVPSJ4LXVsLWVudmlyb25tZW50LWlkIixCPSJ4LXVsLWFub255bW91cy1pZCIsej0ieC11bC11c2VyLWlkIixWPSJ4LXVsLXZpc2l0b3ItaWQiLEg9IngtdWwtaW5zdGFsbGF0aW9uLW1ldGhvZCIscT0id2ViLWd0bSIsVz0id2ViLXNlZ21lbnQiLEc9IndlYi1zbmlwcGV0IixaPSJ1bC1jdXN0b20tc3R5bGUiLCQ9InVsLWNhcmRfX2NvbnRhaW5lciIsWT0idWwtY2FyZC0tdmlkZW8iLEs9ImNsb3NlLWNvbnRhaW5lciIsSj0iY2xvc2UtYnRuIixYPSJsaWtlcnQtbnVtYmVyIixRPSJucHMtbnVtYmVyIix0dD0iY2hvaWNlIixldD0ic2VsZWN0LWxhYmVsIixudD0ic2VsZWN0LWNoZWNrYm94IixydD0ic2VsZWN0LXJhZGlvIixvdD0idWwtY2FyZF9fY2hvaWNlcyIsaXQ9InVsLWNhcmQtdGV4dF9faW5wdXQiLGF0PSItLWRlc2t0b3AiLGN0PSItLW1vYmlsZSIsc3Q9InVsLXF1ZXN0aW9uIix1dD0idWwtY2FwdGlvbiIsbHQ9ImZhZGUtaW4tdHJhbnNpdGlvbiIsZnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCsoZT9jdDphdCksdF19O2Z1bmN0aW9uIGR0KHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHB0KHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBwdCh0LGUpfSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsbz1mdW5jdGlvbigpe307cmV0dXJue3M6byxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6b319dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLGE9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIGE9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7Yz0hMCxpPXR9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gcHQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgaHQ9InVsLWFwcCIsdnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcDtuLnJ1bm5pbmd8fGUuZGVzdHJveShodCk7dmFyIG8saT1uLmRlY2suY2FyZHNbbi5kZWNrLmluZGV4XSxhPWkuQ2FyZCxjPWkucHJvcHMscz1pLnR5cGUsdT1pLm5hbWUsbD1uLmJvcmRlcixmPWZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsZS5jbG9zZShodCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD1uLmRlY2suY2FyZHMscD1uLmRlY2suaW5kZXgsaD1uLmZvbnRGYW1pbHk/e2ZvbnRGYW1pbHk6bi5mb250RmFtaWx5LnJlcGxhY2UoIjsiLCIiKX06e30sdj1uLmVuZENhcmQsZz1mdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChuKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmUuYXBwLm5leHQoe2RhdGE6bixjb21wbGV0ZVN1cnZleTpmdW5jdGlvbigpe2UuZGVzdHJveShodCl9LGVuZENhcmQ6dn0pO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx5PWR0KG4uYW5zd2Vyc3x8W10pO3RyeXt2YXIgbT1mdW5jdGlvbigpe3ZhciB0PW8udmFsdWU7aWYodC5xdWVzdGlvbklkPT09dSl7dmFyIGU7aWYoIm11bHRpcGxlY2hvaWNlIj09PXMpe3ZhciBuPWMub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQudmFsdWV9KSk7aWYoIW4pcmV0dXJuImJyZWFrIjtlPXIoKSh7fSxuLmlkLG4udmFsdWUpfWVsc2UgZT10LnZhbHVlO3JldHVybiBnKHt2YWx1ZTplfSksImJyZWFrIn19O2Zvcih5LnMoKTshKG89eS5uKCkpLmRvbmU7KXtpZigiYnJlYWsiPT09bSgpKWJyZWFrfX1jYXRjaCh0KXt5LmUodCl9ZmluYWxseXt5LmYoKX1yZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHAiLGlkOmh0LG9uY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1bInRyYW5zaXRpb25lbmQiLCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwibW96VHJhbnNpdGlvbkVuZCJdLG89ITEsaT1mdW5jdGlvbiBuKCl7aWYoIW8mJndpbmRvdy5mcmFtZUVsZW1lbnQpe3ZhciBpPW5ldyBFdmVudCgidWw6ZnJhbWU6cmVuZGVyZWQiKTt3aW5kb3cuZnJhbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoaSl9bz0hMCxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfSkpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0pLDMwMCl9O3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hZGRFdmVudExpc3RlbmVyKGUsaSl9KSksbi5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2soKGZ1bmN0aW9uKCl7ZS5jbG9zZShodCl9KSksZS51cGRhdGUoaHQpfSh0KX0sb251cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfSxzdHlsZTpofSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWFwcF9fY29udGFpbmVyIn0sSSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKGZ0KCQsbi51c2VNb2JpbGVTdHlsaW5nKSkpLHN0eWxlOntib3JkZXJDb2xvcjpsfX0sSShhLFQoKSh7fSxjLHtib3JkZXI6bCxjbGFzc05hbWU6InVsLWNhcmQiLG5leHQ6ZyxlbmRDYXJkOnYsbG9jYWxlOm4ubG9jYWxlLHF1ZXN0aW9uSWQ6dSx1cGRhdGVIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfX0pKSksImVtYWlsIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmImxpbmsiIT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZnQoSyxuLnVzZU1vYmlsZVN0eWxpbmcpKX0sSSgiZGl2Iix7Y2xhc3NOYW1lOkosb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxJKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEkoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LGd0PW4oNDcwNjYpLHl0PW4ubihndCksbXQ9bigzMDU5MyksYnQ9bi5uKG10KSx4dD1uKDQ0NTMpLHd0PW4ubih4dCksRXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sanQ9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxDdD1mdW5jdGlvbigpe3ZhciB0PUV0KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxrdD1bdF0sU3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7YnQoKSh0aGlzLHQpfXJldHVybiB3dCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtrdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksT3Q9big3NjM5MCksSXQ9bi5uKE90KSxBdD1mdW5jdGlvbigpe3JldHVybiBJKCJzdmciLHt3aWR0aDoiMTAwIixoZWlnaHQ6IjEzIix2aWV3Qm94OiIwIDAgMTAwIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGFsdDoiUG93ZXJlZCBieSBTcHJpZyJ9LEkoInBhdGgiLHtkOiJNMy4wMzY5IDAuODM5OTgxSDAuMDI0OTAyM1Y4Ljk5OTk4SDEuMzIwOVY2LjUzOTk4SDIuODU2OUM0Ljg5NjkgNi41Mzk5OCA2LjI0MDkgNS4zNzU5OCA2LjI0MDkgMy42MjM5OEM2LjI0MDkgMS45NTU5OCA0Ljk2ODkgMC44Mzk5ODEgMy4wMzY5IDAuODM5OTgxWk0zLjAwMDkgNS4zNTE5OEgxLjMyMDlWMi4wMjc5OEgzLjAwMDlDNC4xNzY5IDIuMDI3OTggNC45Njg5IDIuNjc1OTggNC45Njg5IDMuNjIzOThDNC45Njg5IDQuNjU1OTggNC4xNzY5IDUuMzUxOTggMy4wMDA5IDUuMzUxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNOS45MDY1MyAzLjIxNTk4QzguMTU0NTMgMy4yMTU5OCA2LjkwNjUzIDQuNDUxOTggNi45MDY1MyA2LjE3OTk4QzYuOTA2NTMgNy45MDc5OCA4LjE1NDUzIDkuMTQzOTggOS45MDY1MyA5LjE0Mzk4QzExLjY1ODUgOS4xNDM5OCAxMi45MDY1IDcuOTA3OTggMTIuOTA2NSA2LjE3OTk4QzEyLjkwNjUgNC40NTE5OCAxMS42NTg1IDMuMjE1OTggOS45MDY1MyAzLjIxNTk4Wk05LjkwNjUzIDguMDE1OThDOC44ODY1MyA4LjAxNTk4IDguMTU0NTMgNy4yMzU5OCA4LjE1NDUzIDYuMTc5OThDOC4xNTQ1MyA1LjExMTk4IDguODg2NTMgNC4zNDM5OCA5LjkwNjUzIDQuMzQzOThDMTAuOTI2NSA0LjM0Mzk4IDExLjY1ODUgNS4xMTE5OCAxMS42NTg1IDYuMTc5OThDMTEuNjU4NSA3LjIzNTk4IDEwLjkyNjUgOC4wMTU5OCA5LjkwNjUzIDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNMjAuOTYzMSAzLjM1OTk4TDE5LjczOTEgNy4xMTU5OEwxOC4zOTUxIDMuMzU5OThIMTcuMzI3MUwxNS45ODMxIDcuMTI3OThMMTQuNzU5MSAzLjM1OTk4SDEzLjQxNTFMMTUuNDQzMSA4Ljk5OTk4SDE2LjUzNTFMMTcuODY3MSA1LjA4Nzk4TDE5LjE4NzEgOC45OTk5OEgyMC4yNzkxTDIyLjMwNzEgMy4zNTk5OEgyMC45NjMxWiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTI1LjcyNDYgMy4yMTU5OEMyNC4wMDg2IDMuMjE1OTggMjIuODIwNiA0LjUxMTk4IDIyLjgyMDYgNi4xNzk5OEMyMi44MjA2IDcuODU5OTggMjQuMDIwNiA5LjE0Mzk4IDI1Ljc5NjYgOS4xNDM5OEMyNy4wMjA2IDkuMTQzOTggMjguMDE2NiA4LjU0Mzk4IDI4LjM3NjYgNy41MjM5OEgyNy4wMDg2QzI2Ljc4MDYgNy44ODM5OCAyNi4zNjA2IDguMDUxOTggMjUuODA4NiA4LjA1MTk4QzI0Ljc1MjYgOC4wNTE5OCAyNC4yMTI2IDcuNDAzOTggMjQuMDkyNiA2LjU1MTk4SDI4LjUyMDZDMjguNzYwNiA0LjY0Mzk4IDI3LjU5NjYgMy4yMTU5OCAyNS43MjQ2IDMuMjE1OThaTTI1LjczNjYgNC4yNzE5OEMyNi42MTI2IDQuMjcxOTggMjcuMjEyNiA0Ljc2Mzk4IDI3LjI4NDYgNS42ODc5OEgyNC4xMTY2QzI0LjI2MDYgNC44OTU5OCAyNC44MDA2IDQuMjcxOTggMjUuNzM2NiA0LjI3MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTMxLjEyOTcgNC4xMjc5OFYzLjM1OTk4SDI5Ljg4MTdWOC45OTk5OEgzMS4xMjk3VjUuNDQ3OThDMzEuNjMzNyA0Ljc4Nzk4IDMyLjMxNzcgNC40NTE5OCAzMy4yMTc3IDQuNDE1OThWMy4yMzk5OEMzMi4zNTM3IDMuMjM5OTggMzEuNjQ1NyAzLjU2Mzk4IDMxLjEyOTcgNC4xMjc5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0zNi44MjIyIDMuMjE1OThDMzUuMTA2MiAzLjIxNTk4IDMzLjkxODIgNC41MTE5OCAzMy45MTgyIDYuMTc5OThDMzMuOTE4MiA3Ljg1OTk4IDM1LjExODIgOS4xNDM5OCAzNi44OTQyIDkuMTQzOThDMzguMTE4MiA5LjE0Mzk4IDM5LjExNDIgOC41NDM5OCAzOS40NzQyIDcuNTIzOThIMzguMTA2MkMzNy44NzgyIDcuODgzOTggMzcuNDU4MiA4LjA1MTk4IDM2LjkwNjIgOC4wNTE5OEMzNS44NTAyIDguMDUxOTggMzUuMzEwMiA3LjQwMzk4IDM1LjE5MDIgNi41NTE5OEgzOS42MTgyQzM5Ljg1ODIgNC42NDM5OCAzOC42OTQyIDMuMjE1OTggMzYuODIyMiAzLjIxNTk4Wk0zNi44MzQyIDQuMjcxOThDMzcuNzEwMiA0LjI3MTk4IDM4LjMxMDIgNC43NjM5OCAzOC4zODIyIDUuNjg3OThIMzUuMjE0MkMzNS4zNTgyIDQuODk1OTggMzUuODk4MiA0LjI3MTk4IDM2LjgzNDIgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik00NS40ODg2IDAuNDc5OThWMy44MDM5OEM0NS4wMDg2IDMuNDMxOTggNDQuMzk2NiAzLjIxNTk4IDQzLjY3NjYgMy4yMTU5OEM0Mi4wOTI2IDMuMjE1OTggNDAuODIwNiA0LjUzNTk4IDQwLjgyMDYgNi4xNjc5OEM0MC44MjA2IDcuODIzOTggNDIuMDkyNiA5LjE0Mzk4IDQzLjY3NjYgOS4xNDM5OEM0NC4zOTY2IDkuMTQzOTggNDUuMDA4NiA4LjkyNzk4IDQ1LjQ4ODYgOC41NDM5OFY4Ljk5OTk4SDQ2LjcyNDZWMC40Nzk5OEg0NS40ODg2Wk00My44NTY2IDguMDE1OThDNDIuODI0NiA4LjAxNTk4IDQyLjA2ODYgNy4xNzU5OCA0Mi4wNjg2IDYuMTY3OThDNDIuMDY4NiA1LjE3MTk4IDQyLjgyNDYgNC4zNDM5OCA0My44NTY2IDQuMzQzOThDNDQuNDgwNiA0LjM0Mzk4IDQ1LjA2ODYgNC41NTk5OCA0NS40ODg2IDUuMTU5OThWNy4xODc5OEM0NS4wNjg2IDcuNzk5OTggNDQuNDgwNiA4LjAxNTk4IDQzLjg1NjYgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik01NC42Nzk3IDMuMjE1OThDNTMuOTU5NyAzLjIxNTk4IDUzLjM0NzcgMy40MzE5OCA1Mi44Nzk3IDMuNzkxOThWMC40Nzk5OEg1MS42MzE3VjguOTk5OThINTIuODc5N1Y4LjU1NTk4QzUzLjM0NzcgOC45Mjc5OCA1My45NTk3IDkuMTQzOTggNTQuNjc5NyA5LjE0Mzk4QzU2LjI2MzcgOS4xNDM5OCA1Ny41NDc3IDcuODIzOTggNTcuNTQ3NyA2LjE2Nzk4QzU3LjU0NzcgNC41MzU5OCA1Ni4yNjM3IDMuMjE1OTggNTQuNjc5NyAzLjIxNTk4Wk01NC40OTk3IDguMDE1OThDNTMuODc1NyA4LjAxNTk4IDUzLjI5OTcgNy43OTk5OCA1Mi44Nzk3IDcuMjExOThWNS4xMzU5OEM1My4yOTk3IDQuNTQ3OTggNTMuODc1NyA0LjM0Mzk4IDU0LjQ5OTcgNC4zNDM5OEM1NS41NDM3IDQuMzQzOTggNTYuMjk5NyA1LjE3MTk4IDU2LjI5OTcgNi4xNjc5OEM1Ni4yOTk3IDcuMTc1OTggNTUuNTQzNyA4LjAxNTk4IDU0LjQ5OTcgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik02My4zMzQ3IDMuMzQ3OThMNjEuMzkwNyA3Ljc2Mzk4TDU5LjI2NjcgMy4zNDc5OEg1Ny45MzQ3TDYwLjgxNDcgOS4wODM5OEw1OS42MjY3IDExLjc4NEg2MC45MzQ3TDY0LjY1NDcgMy4zNDc5OEg2My4zMzQ3WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTcxLjE0NjYgNC4zNDY2MUM2OS44MDkyIDQuMDUwMzggNjkuMTMxIDMuNTMwMDEgNjkuMTMxIDIuODAwNjVDNjkuMTMxIDIuMDQ3MDUgNjkuODU0NiAxLjQ3ODIyIDcwLjgxNDIgMS40NzgyMkM3MS44MDM0IDEuNDc4MjIgNzIuNTQ5NiAyLjEwMzM5IDcyLjU0OTYgMi45MzIxVjIuOTk4MTNINzMuOTE2NVYyLjkzMjFDNzMuOTE2NSAxLjQxNzY0IDcyLjU4ODMgMC4yNzI3MDUgNzAuODI3MSAwLjI3MjcwNUM2OS45Nzg0IDAuMjcyNzA1IDY5LjIwMDkgMC41MzMxOTEgNjguNjM3OSAxLjAwNTdDNjguMzU4NCAxLjIzNjE5IDY4LjEzMzkgMS41MjQ4NyA2Ny45ODA1IDEuODUxMUM2Ny44MjcxIDIuMTc3MzMgNjcuNzQ4NiAyLjUzMzAzIDY3Ljc1MDYgMi44OTI3M0M2Ny43NDUxIDMuMjIyNTUgNjcuODEzNyAzLjU0OTQ5IDY3Ljk1MTUgMy44NDk5NEM2OC4wODk0IDQuMTUwMzggNjguMjkzIDQuNDE2ODYgNjguNTQ3OCA0LjYzMDEyQzY5LjAyMTggNS4wNDI2NiA2OS42OTQ1IDUuMzQ3OTggNzAuNTQ2MyA1LjUzODhDNzEuOTgwNiA1Ljg1NTAyIDcyLjcwNzggNi4zOTI5NiA3Mi43MDc4IDcuMTM2ODZDNzIuNzA3OCA3Ljk0MzE2IDcxLjkxNTYgOC41NTA3NiA3MC44NjgyIDguNTUwNzZDNjkuNzgwNCA4LjU1MDc2IDY4Ljk1OTkgNy44NzUzMSA2OC45NTk5IDYuOTc5OTZWNi45MTM5M0g2Ny41OTE4VjYuOTc5OTZDNjcuNTkxOCA4LjU2MzQ4IDY4Ljk5NDIgOS43NTY4OCA3MC44NTM1IDkuNzU2ODhDNzEuNzQyNiA5Ljc1Njg4IDcyLjU1ODggOS40ODczMSA3My4xNTE4IDguOTk2NjJDNzMuNDQ2IDguNzU4MzEgNzMuNjgyNyA4LjQ1ODEgNzMuODQ0NSA4LjExNzlDNzQuMDA2MyA3Ljc3NzcgNzQuMDg5MSA3LjQwNjExIDc0LjA4NyA3LjAzMDI0Qzc0LjA4NyA1LjY4NTQgNzMuMDk5MSA0Ljc4MjE3IDcxLjE0NjYgNC4zNDY2MVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik03OC43OTg2IDIuNTA4MDZDNzguMjg3NCAyLjUwMTc1IDc3Ljc4MjMgMi42MTc2IDc3LjMyNjMgMi44NDU3NkM3Ni44NzAzIDMuMDczOTEgNzYuNDc2OCAzLjQwNzU5IDc2LjE3OTUgMy44MTgzN1YyLjY2NzM4SDc0Ljg3ODlWMTIuMDc1Mkg3Ni4xNzk1VjguNDg3MTZDNzYuNDc2OCA4Ljg5NzkgNzYuODcwMyA5LjIzMTUyIDc3LjMyNjMgOS40NTk1N0M3Ny43ODI0IDkuNjg3NjMgNzguMjg3NSA5LjgwMzM1IDc4Ljc5ODYgOS43OTY4N0M4MC44MTY3IDkuNzk2ODcgODIuMzM4MSA4LjIzMDMxIDgyLjMzODEgNi4xNTI0NkM4Mi4zMzgxIDQuMDc0NjIgODAuODE2NyAyLjUwODA2IDc4Ljc5ODYgMi41MDgwNlpNODAuOTgzNSA2LjQyMjY0QzgwLjkzMTYgNi45NjI5IDgwLjY5MjEgNy40Njg3OSA4MC4zMDU2IDcuODU0NEM3OS45MTkgOC4yNDAwMSA3OS40MDkzIDguNDgxNTYgNzguODYzIDguNTM4MDRDNzguMTM2OSA4LjYxMDc0IDc3LjQ2MDUgOC40MDI5NSA3Ni45NTgzIDcuOTU0MDdDNzYuNDU2MSA3LjUwNTE4IDc2LjE3OTUgNi44NjM2NSA3Ni4xNzk1IDYuMTUyNDZDNzYuMTc5NSA0Ljc4NDYgNzcuMjEyMiAzLjc1Mjk1IDc4LjU4MTUgMy43NTI5NUM3OS4yOTA0IDMuNzUyOTUgNzkuOTMwNiA0LjAyMTkxIDgwLjM3NzYgNC41MTAxOEM4MC44Mzg3IDUuMDExMTYgODEuMDU0IDUuNjkwMjUgODAuOTgzNSA2LjQyMjY0WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTk4LjI5MDggMi42NjkyVjMuODA3NDdDOTcuNjc3NiAyLjk3ODc1IDk2LjczMDIgMi41MDgwNiA5NS42NTgzIDIuNTA4MDZDOTMuNjQ4MiAyLjUwODA2IDkyLjEzMjMgNC4wNDYxNSA5Mi4xMzIzIDYuMDg1ODJDOTIuMTMyMyA4LjEyNTUgOTMuNjQ4MiA5LjY2Mjk5IDk1LjY1ODMgOS42NjI5OUM5Ni43MzQ1IDkuNjYyOTkgOTcuNjgxOSA5LjE5NzE0IDk4LjI5MDggOC4zNzY5MVY4LjU1MTk4Qzk4LjI5MDggOS45Njg5MSA5Ny4zOTA2IDEwLjg4NDMgOTUuOTk3NCAxMC44ODQzQzk1LjA1NjEgMTAuODg0MyA5NC4yNzE4IDEwLjQ3NjYgOTMuODk5NiA5Ljc5Mzg0TDkzLjg4MDYgOS43NTg3SDkyLjUzODlMOTIuNTY5NSA5Ljg0NjU0QzkyLjc5NjEgMTAuNTE0IDkzLjIzOTIgMTEuMDg4OSA5My44MzAzIDExLjQ4MjJDOTQuNDIzMyAxMS44NzIzIDk1LjE3MjYgMTIuMDc4MyA5NS45OTc0IDEyLjA3ODNDOTcuMDU1MiAxMi4wNzgzIDk3Ljk1NTQgMTEuNzQ1MSA5OC42MDE3IDExLjExNTdDOTkuMjQ4MSAxMC40ODYyIDk5LjU5MTUgOS42MDEyIDk5LjU5MTUgOC41Njc3M1YyLjY2OTJIOTguMjkwOFpNOTcuNTYxMSA3Ljg0MkM5Ny4wMDkyIDguMzY0MTggOTYuMjIyNSA4LjU4MzQ4IDk1LjQwMDEgOC40NDI5NEM5NC45MTMyIDguMzU3OTYgOTQuNDY2NCA4LjEyMTg0IDk0LjEyNDUgNy43Njg4OUM5My43ODI3IDcuNDE1OTMgOTMuNTYzNiA2Ljk2NDUyIDkzLjQ5OTIgNi40ODAxOUM5My4zODMzIDUuNjY1NDEgOTMuNjMxIDQuODkzNjQgOTQuMTc4NiA0LjM2NDE4Qzk0LjYzODMgMy45Mjc0MSA5NS4yNTQyIDMuNjg3ODggOTUuODkxOSAzLjY5NzgyQzk2LjA0NjQgMy42OTc5NSA5Ni4yMDA2IDMuNzEwMzEgOTYuMzUzMSAzLjczNDc3Qzk3LjM0NTkgMy44OTM0OSA5OC4xMzE0IDQuNzA0MDMgOTguMjYzMiA1LjcxMDI0Qzk4LjM3NDkgNi41MzgzNSA5OC4xMTc5IDcuMzE0MzYgOTcuNTYxMSA3Ljg0MloiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik05MC43MDUgMC4wOTk1OTc1QzkwLjQ2MDIgMC4wNDY3NzMgOTAuMjA0MyAwLjA5MTE5NzEgODkuOTkyNSAwLjIyMzI2OUM4OS43ODA2IDAuMzU1MzQgODkuNjI5OSAwLjU2NDQ1MiA4OS41NzI5IDAuODA1NDA5Qzg5LjUxNTkgMS4wNDYzNyA4OS41NTcxIDEuMjk5ODIgODkuNjg3NyAxLjUxMDk4Qzg5LjgxODMgMS43MjIxNSA5MC4wMjc3IDEuODc0MDcgOTAuMjcwOCAxLjkzMzkxQzkwLjM0MTUgMS45NDk1NCA5MC40MTM2IDEuOTU3NDcgOTAuNDg2IDEuOTU3NTRDOTAuNzIgMS45NTc5IDkwLjk0NTggMS44NzMyNSA5MS4xMjA2IDEuNzE5NzNDOTEuMjk1NSAxLjU2NjIgOTEuNDA3IDEuMzU0NTIgOTEuNDM0MSAxLjEyNUM5MS40NjExIDAuODk1NDcgOTEuNDAxNyAwLjY2NDEzNSA5MS4yNjczIDAuNDc1MDQ2QzkxLjEzMjkgMC4yODU5NTggOTAuOTMyNyAwLjE1MjMyNSA5MC43MDUgMC4wOTk1OTc1VjAuMDk5NTk3NVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik04OS44MzY2IDguMzkxNDNIODguNzE1Qzg3LjkxNzggOC4zOTE0MyA4Ny40Mzg5IDcuODU1MzEgODcuNDM4OSA2Ljk1NjkzQzg3LjQzODkgNi4wODA5NiA4Ny44NjgxIDUuMDM2NTkgODguNzQzMiAzLjc2NDQ0TDg4Ljc1NDggMy43NDc0OFYzLjM4ODI1TDg1LjAyNzEgMi44NjcyN0M4NS4wMjg0IDIuNzE1NTMgODQuOTg4NiAyLjU2NjIyIDg0LjkxMTggMi40MzQ3OEM4NC44MzUxIDIuMzAzMzUgODQuNzI0MSAyLjE5NDU4IDg0LjU5MDUgMi4xMTk3M0M4NC4yNTYzIDEuOTM4IDgzLjg5MDggMS45MzggODMuNTg3OSAyLjExMzY4QzgzLjQzNjEgMi4yMDIzIDgzLjMxMjIgMi4zMzA3NyA4My4yMyAyLjQ4NDhDODMuMTQ3NyAyLjYzODg0IDgzLjExMDMgMi44MTI0IDgzLjEyMTkgMi45ODYxOEM4My4xMzM2IDMuMTU5OTYgODMuMTkzOCAzLjMyNzE0IDgzLjI5NTggMy40NjkxNEM4My4zOTc5IDMuNjExMTQgODMuNTM3OSAzLjcyMjM4IDgzLjcwMDEgMy43OTA0OUw4Mi41NDA1IDkuNjM3NTNIODMuODI4M0w4NC44OTc3IDQuMDg1NTFMODYuOTExNSA0LjQyMTExQzg2LjM3MDEgNS4zODAwNyA4Ni4wOTUzIDYuMjc0MjEgODYuMDk1MyA3LjA3ODY5Qzg2LjA5NTMgOC41NjM0NyA4Ny4wMDQxIDkuNTM1NzYgODguNDczNCA5LjYyOTY1VjkuNjM3NTNIOTEuMTM0MVYyLjY5MDk5SDg5LjgzNjZWOC4zOTE0M1oiLGZpbGw6IiM1RDY5NkYifSkpfSxUdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmFwcC5kZWNrLmNhcmRzfHxbXSxuPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpLHI9dC5hcHAuZGVjay5pbmRleCxvPXQuYXBwLGk9by5zaG93U3VydmV5QnJhbmQsYT1vLm1hcmtldGluZ1VybCxjPW8uc2x1Z05hbWUscz1vLnN1cnZleUlkLHU9ZnVuY3Rpb24oKXtyZXR1cm4gaT9JKCJhIix7c3R5bGU6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDVweCAwIDEwcHggMCIsaHJlZjoiIi5jb25jYXQoYSwiP3V0bV9zb3VyY2U9c3VydmV5X2JyYW5kaW5nJnV0bV9tZWRpdW09d2Vic2l0ZSZ1dG1fY2FtcGFpZ249IikuY29uY2F0KGMsIiZ1dG1fY29udGVudD0iKS5jb25jYXQocyksdGFyZ2V0OiJfYmxhbmsifSxBdCk6bnVsbH07aWYocisxPT09ZS5sZW5ndGh8fCFufHwxPT09bi5sZW5ndGgpcmV0dXJuIEkoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sdSk7cmV0dXJuIEkoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sKGZ1bmN0aW9uKCl7aWYobi5sZW5ndGg+MSYmbi5sZW5ndGg8PTEwKXt2YXIgZT1uLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gSSgic3BhbiIse2NsYXNzTmFtZToidWwtZm9vdGVyLWJ1YmJsZSIsa2V5Om4sc3R5bGU6cj09PW4/e2JhY2tncm91bmRDb2xvcjp0LmFwcC5ib3JkZXJ9Ontib3JkZXJDb2xvcjp0LmFwcC5ib3JkZXJ9fSl9KSk7cmV0dXJuIEkoImRpdiIse3N0eWxlOiJtYXJnaW4tYm90dG9tOiAxMHB4OyJ9LGUpfXJldHVybiBudWxsfSksdSl9fSxNdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5jYXB0aW9uVGV4dD9JKCJwIix7aWQ6dXQsY2xhc3NOYW1lOnV0fSx0LmNhcHRpb25UZXh0KTpudWxsfSxfdD1mdW5jdGlvbih0LGUpe3JldHVybiBJKCJwIix0P3tpZDpzdCxjbGFzc05hbWU6c3Qscm9sZToiaGVhZGluZyJ9OntpZDpzdCxjbGFzc05hbWU6c3Qsc3R5bGU6Im1hcmdpbi1ib3R0b206IDE1cHgiLHJvbGU6ImhlYWRpbmcifSxlKX0sTHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuYnV0dG9uVGV4dD90LmJ1dHRvblRleHQ6Ik5leHQifSxSdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5za2lwQnV0dG9uVGV4dD90LnNraXBCdXR0b25UZXh0OiJTa2lwIn0sUHQ9big5NzM0MyksTnQ9bi5uKFB0KTtmdW5jdGlvbiBEdCh0LGUpe2UodCl9dmFyIEZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5sYWJlbCxyPXQuc2VsZWN0ZWQsbz0odC5pbmRleCx0LmlkKSxpPXQub25TZWxlY3QsYT10LmlzUmFkaW8sYz10LnVzZU1vYmlsZVN0eWxpbmcscz1mdW5jdGlvbih0KXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO24mJihuLnN0eWxlLmJvcmRlckNvbG9yPWUpLHImJihyLnN0eWxlLmJvcmRlcldpZHRoPSI2cHgiLHIuc3R5bGUuYm9yZGVyQ29sb3I9ZSxyLnN0eWxlLmJveFNoYWRvdz0ibm9uZSIpfSx1PWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaG9pY2UtZGl2LSIuY29uY2F0KG8pKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyYWRpby0iLmNvbmNhdChvKSk7ZSYmKGUuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYiKSxuJiYobi5zdHlsZS5ib3JkZXJXaWR0aD0iMXB4IixuLnN0eWxlLmJvcmRlckNvbG9yPSIjMzIzMjMyIixuLnN0eWxlLmJveFNoYWRvdz0iaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpIil9LGw9ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSx1KCksaShvKX0sZj17b25jbGljazpmdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bCh0KX0odCl9fTsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8oZi5vbnRvdWNoc3RhcnQ9cyxmLm9udG91Y2hjYW5jZWw9dSxmLm9udG91Y2htb3ZlPXUsZi5vbnRvdWNoZW5kPXUpOihmLm9ubW91c2Vkb3duPXMsZi5vbm1vdXNlbGVhdmU9dSk7dmFyIGQ9YT8icmFkaW8tIi5jb25jYXQobyk6ImNoZWNrYm94LSIuY29uY2F0KG8pO3JldHVybiBJKCJkaXYiLFQoKSh7Y2xhc3NOYW1lOkYoZnQodHQsYykpLGlkOiJjaG9pY2UtZGl2LSIuY29uY2F0KG8pfSxmKSwhYSYmSSgiZGl2Iix7Y2xhc3NOYW1lOm50LGlkOmQsc3R5bGU6cj97YmFja2dyb3VuZENvbG9yOmUsYm9yZGVyQ29sb3I6ZSxib3hTaGFkb3c6Im5vbmUifTp7fSxyb2xlOiJjaGVja2JveCIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLCJhcmlhLWNoZWNrZWQiOnIsdGFiaW5kZXg6MH0sciYmSSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTAgMTAiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEkoInBhdGgiLHtkOiJNOS4xNTM3NyAxLjMwNzc0TDQuMDc2ODUgOC4yMzA4MkwxLjMwNzYyIDUuMDAwMDUiLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOiIyIiwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCJ9KSkpLGEmJkkoImRpdiIse2NsYXNzTmFtZTpydCxpZDpkLHJvbGU6InJhZGlvIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiBsYWJlbC0iKS5jb25jYXQobyksdGFiaW5kZXg6MH0pLEkoImxhYmVsIix7Y2xhc3NOYW1lOkYoZnQoZXQsYykpLGZvcjpkLGlkOiJsYWJlbC0iLmNvbmNhdChvKX0sbikpfTt2YXIgVXQsQnQ9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIHp0KCl7aWYoIVV0JiYhKFV0PSJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBtc0NyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIFV0KEJ0KX12YXIgVnQ9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Zvcih2YXIgSHQ9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZWdC50ZXN0KHQpfSxxdD1bXSxXdD0wO1d0PDI1NjsrK1d0KXF0LnB1c2goKFd0KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7dmFyIEd0PWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49KHF0W3RbZSswXV0rcXRbdFtlKzFdXStxdFt0W2UrMl1dK3F0W3RbZSszXV0rIi0iK3F0W3RbZSs0XV0rcXRbdFtlKzVdXSsiLSIrcXRbdFtlKzZdXStxdFt0W2UrN11dKyItIitxdFt0W2UrOF1dK3F0W3RbZSs5XV0rIi0iK3F0W3RbZSsxMF1dK3F0W3RbZSsxMV1dK3F0W3RbZSsxMl1dK3F0W3RbZSsxM11dK3F0W3RbZSsxNF1dK3F0W3RbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCFIdChuKSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiBufTt2YXIgWnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSh0PXR8fHt9KS5yYW5kb218fCh0LnJuZ3x8enQpKCk7aWYocls2XT0xNSZyWzZdfDY0LHJbOF09NjMmcls4XXwxMjgsZSl7bj1ufHwwO2Zvcih2YXIgbz0wO288MTY7KytvKWVbbitvXT1yW29dO3JldHVybiBlfXJldHVybiBHdChyKX07Y29uc3QgJHQ9Imh0dHBzOi8vY2RuLnNwcmlnLmNvbSIsWXQ9dD0+dCsiLWxvYWRpbmctc3BpbmVyIixLdD0iaGlkZGVuIixKdD0idmlzaWJsZSIsWHQ9InVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIixRdD0idWwtcmVjb3JkaW5nLWluLXNlc3Npb24iLHRlPVt7dHlwZToibGluayIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvUmVjb3JkUlRDLTUuNi4yLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL2FkYXB0ZXIuOC4wLjAubWluLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L3VzZXJsZWFwLXdlYi11cGNodW5rLXYyLjIuMi5qc2B9XSxlZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmNzc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmpzYH0se3R5cGU6InN0eWxlIixjb250ZW50OiIvKiBwcm9ncmVzcyBjb250cm9sIHN0eWxlcyAqL1xuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXByb2dyZXNzLWhvbGRlciB7XG4gIG1hcmdpbjogMCAwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogM3B4O1xuICB3aWR0aDogMTAwJTtcbn1cbi8qIHBvc2l0aW9uIGFuZCBhbGlnbiB0aGUgYnV0dG9ucyBhbmQgYnV0dG9uIHRleHRzICovXG4udWwtY29udHJvbC1wYW5lbCB7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICB6LWluZGV4OiAyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiBibGFjaztcbiAgaGVpZ2h0OiA1MHB4O1xuICBwYWRkaW5nOiAycHggMTRweCAwO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCA+IC52anMtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDNlbTtcbiAgd2lkdGg6IDNlbTtcbiAgbWFyZ2luOiAwIDEwcHg7XG59XG5cbnNwYW4udWwtYnV0dG9uLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjVweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAyNXB4KTtcbn1cblxuI3VsLWNhbWVyYS1idXR0b24ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWwtaW5hY3RpdmUge1xuICBvcGFjaXR5OiAwLjM7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDE7XG59XG5cbi52anMtdm9sdW1lLWJhci52anMtc2xpZGVyLWhvcml6b250YWwgLnZqcy12b2x1bWUtbGV2ZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtaG92ZXIsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbDphY3RpdmUge1xuICB3aWR0aDogNDBweDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXNsaWRlci1hY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbDphY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtbXV0ZS1jb250cm9sIH4gLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDphY3RpdmUgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDpmb2N1cyAudmpzLXZvbHVtZS1jb250cm9sIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgbGVmdDogNDBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuMXMsIG9wYWNpdHkgMC4xcywgaGVpZ2h0IDAuMXMsIHdpZHRoIDAuMXMsIGxlZnQgMHMsIHRvcCAwcztcbn1cblxuLyogcGxheSBidXR0b24gY3VzdG9taXphdGlvbiAqL1xuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLyogcG9zaXRpb24gYW5kIHN0eWxlIHRoZSBjdXJyZW50IHRpbWVyICovXG4udWwtdGltZS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA4MHB4O1xuICBsZWZ0OiAxMHB4O1xuICBoZWlnaHQ6IDIycHg7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlYjtcbiAgYm9yZGVyLXJhZGl1czogMjNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cblxuLnZpZGVvLWpzIC52anMtY3VycmVudC10aW1lLFxuLnZqcy1uby1mbGV4IC52anMtY3VycmVudC10aW1lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiByZW1vdmUgdGhlIGRvdCBwcm9ncmVzcyBpbmRpY2F0b3IgKi9cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWxldmVsOmJlZm9yZSxcbi52anMtaWNvbi1jaXJjbGU6YmVmb3JlLFxuLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNS4zMjRBLjc1Ljc1IDAgMDE5LjI1IDF2MTEuNjY3YS43NS43NSAwIDAxLTEuMjE5LjU4NWwtMy45Ni0zLjE2OUgxYS43NS43NSAwIDAxLS43NS0uNzV2LTVhLjc1Ljc1IDAgMDEuNzUtLjc1aDMuMDdMOC4wMzEuNDE0YS43NS43NSAwIDAxLjc5NC0uMDl6TTcuNzUgMi41Nkw0LjgwMiA0LjkyYS43NS43NSAwIDAxLS40NjkuMTY0SDEuNzV2My41aDIuNTgzYS43NS43NSAwIDAxLjQ2OS4xNjVsMi45NDggMi4zNThWMi41NnpNMTQuOTExLjQ3YS43NS43NSAwIDAxMS4wNjEgMCA5LjA4NCA5LjA4NCAwIDAxMCAxMi44NDQuNzUuNzUgMCAwMS0xLjA2LTEuMDYgNy41ODQgNy41ODQgMCAwMDAtMTAuNzI0Ljc1Ljc1IDAgMDEwLTEuMDZ6TTExLjk3IDMuNDFhLjc1Ljc1IDAgMDExLjA2IDAgNC45MTcgNC45MTcgMCAwMTAgNi45NTMuNzUuNzUgMCAxMS0xLjA2LTEuMDYgMy40MTcgMy40MTcgMCAwMDAtNC44MzIuNzUuNzUgMCAwMTAtMS4wNnonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjUgMS4xNjdMNC4zMzMgNC41SDF2NWgzLjMzM0w4LjUgMTIuODMzVjEuMTY3ek0xNy4xNyA0LjVsLTUgNU0xMi4xNyA0LjVsNSA1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgdmlld0JveD0nMCAwIDE5IDE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTguODI0ODkgMC4zMjQwM0M5LjA4NDc0IDAuNDQ4OTIgOS4yNSAwLjcxMTcwMyA5LjI1IDEuMDAwMDFWMTIuNjY2N0M5LjI1IDEyLjk1NSA5LjA4NDc0IDEzLjIxNzggOC44MjQ4OSAxMy4zNDI3QzguNTY1MDQgMTMuNDY3NSA4LjI1NjYxIDEzLjQzMjQgOC4wMzE0OCAxMy4yNTIzTDQuMDcwMjUgMTAuMDgzM0gxQzAuNTg1Nzg2IDEwLjA4MzMgMC4yNSA5Ljc0NzU1IDAuMjUgOS4zMzMzNFY0LjMzMzM0QzAuMjUgMy45MTkxMyAwLjU4NTc4NiAzLjU4MzM0IDEgMy41ODMzNEg0LjA3MDI1TDguMDMxNDggMC40MTQzNTVDOC4yNTY2MSAwLjIzNDI1MyA4LjU2NTA0IDAuMTk5MTQgOC44MjQ4OSAwLjMyNDAzWk03Ljc1IDIuNTYwNDhMNC44MDE4NSA0LjkxODk5QzQuNjY4ODcgNS4wMjUzOCA0LjUwMzY0IDUuMDgzMzQgNC4zMzMzMyA1LjA4MzM0SDEuNzVWOC41ODMzNEg0LjMzMzMzQzQuNTAzNjQgOC41ODMzNCA0LjY2ODg3IDguNjQxMyA0LjgwMTg1IDguNzQ3NjlMNy43NSAxMS4xMDYyVjIuNTYwNDhaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS45Njk4IDMuNDExMjRDMTIuMjYyNyAzLjExODM5IDEyLjczNzYgMy4xMTg0NiAxMy4wMzA0IDMuNDExNEMxMy45NTIxIDQuMzMzNDEgMTQuNDY5OSA1LjU4Mzc2IDE0LjQ2OTkgNi44ODc0OEMxNC40Njk5IDguMTkxMjEgMTMuOTUyMSA5LjQ0MTU2IDEzLjAzMDQgMTAuMzYzNkMxMi43Mzc2IDEwLjY1NjUgMTIuMjYyNyAxMC42NTY2IDExLjk2OTggMTAuMzYzN0MxMS42NzY4IDEwLjA3MDkgMTEuNjc2NyA5LjU5NiAxMS45Njk2IDkuMzAzMDdDMTIuNjEwMSA4LjY2MjM1IDEyLjk2OTkgNy43OTM0NiAxMi45Njk5IDYuODg3NDhDMTIuOTY5OSA1Ljk4MTUxIDEyLjYxMDEgNS4xMTI2MiAxMS45Njk2IDQuNDcxOUMxMS42NzY3IDQuMTc4OTYgMTEuNjc2OCAzLjcwNDA5IDExLjk2OTggMy40MTEyNFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2w6aG92ZXIgLnZqcy1tb3VzZS1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi8qIHBvc2l0aW9uIHZpZGVvIHBsYXllciBpbnNpZGUgdGhlIGNvbnRhaW5lciAqL1xuLnZpZGVvLWpzIC52anMtdGVjaCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi52aWRlby1qcyAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0b3A6IC0yNXB4O1xuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDUwcHggIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcy52anMtc2xpZGVyLWJhciAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi51bC12aWRlby1wbGF5ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52aWRlby1qcy52anMtZnVsbHNjcmVlbjpub3QoLnZqcy1pb3MtbmF0aXZlLWZzKSB7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlci52anMtZnVsbHNjcmVlbiB7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4udmlkZW8tanMgZGl2LnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCMkJCQkQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtYnV0dG9uLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgb24gY2lyY3VsYXIgcGxheSBjb250cm9sIGJ1dHRvbnMgKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA1cHgpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLXBsYXlpbmcgPiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA0cHgpO1xufVxuXG4vKiBmaXggb3Bwb3NpdGUgbWlzYWxpZ25tZW50IGJ1ZyBvbiBub25jaXJjdWxhciBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS44MjE0MyAyLjU0MDA0TDEyLjI2MTQgMi41NDAwNEMxMi45MjQyIDIuNTQwMDQgMTMuNDYxNCAzLjA3NzMgMTMuNDYxNCAzLjc0MDA0TDEzLjQ2MTQgNi4xODAwNCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4xNzk1NSAxMy40NkwzLjczOTU1IDEzLjQ2QzMuMDc2ODEgMTMuNDYgMi41Mzk1NSAxMi45MjI3IDIuNTM5NTUgMTIuMjZMMi41Mzk1NSA5LjgxOTk2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J00xMi43NzcyIDMuMjIyNjZMOS4zNjQ3NSA2LjYzNTE2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J002LjI5NDM0IDkuNzA2MDVMMi44ODE4NCAxMy4xMTg2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMS41ODMgOS44MTNINS4yNWExIDEgMCAwMTEgMXYzLjY2Nk01LjM3NSAxMC42ODhMMSAxNS4wNjFNMTQuOTE3IDUuODEzSDExLjI1YTEgMSAwIDAxLTEtMVYxLjE0Nk0xNS4wNjMgMWwtNC4zNzYgNC4zNzUnIHN0cm9rZT0nJTIzMjYyMTM2JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLWVuZGVkIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLWljb24tcmVwbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PSczLjYxODg1JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0NyZWN0IHg9JzkuMjE3OTcnIHk9JzIuMDYwNzQnIHdpZHRoPSczLjE2MTg1JyBoZWlnaHQ9JzExLjg4JyByeD0nMC45JyBmaWxsPSdibGFjaycgc3Ryb2tlPSclMjNFREVERUQnIHN0cm9rZS13aWR0aD0nMC42JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLnZqcy1lcnJvci1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnVsLXZpZGVvLXBsYXllci12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLXZpZGVvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogSW5zaWRlIEF1dG8gTGF5b3V0ICovXG5cbiAgZmxleDogbm9uZTtcbiAgb3JkZXI6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbiAgbWFyZ2luOiAxMHB4IDBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLXJlY29yZCBidXR0b24udmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDk2KTtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgbGluZS1oZWlnaHQ6IDAuNjtcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDM7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDpiZWZvcmUge1xuICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzM7XG4gIGNvbnRlbnQ6IFwiWW91ciBicm93c2VyIG5lZWRzIHRvIGFjY2VzcyB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgdmlkZW8gcmVjb3JkaW5nXCI7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjb250ZW50OiBcIlVuYWJsZSB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmVcIjtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiAjRjBGMEY1O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29udGVudDogXCJSZXF1ZXN0IFBlcm1pc3Npb25zXCI7XG4gIHBhZGRpbmc6IDFlbSAyZW07XG4gIGNvbG9yOiAjMzMzO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbnRlbnQ6IFwiUGxlYXNlIGdvIHRvIHlvdXIgYnJvd3NlciBzZXR0aW5ncyBhbmQgdXBkYXRlIHBlcm1pc3Npb25zIHRvIGVuYWJsZSByZWNvcmRpbmdcIjtcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogIzRCNTc1RDtcbiAgbWFyZ2luOiA1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHksIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuMjEyMzQgNy4zNzU0OVYxMS4xMTkzTTIuNTM5MzEgNC4yNTU5NUgxMy40NTkzSDIuNTM5MzFaTTUuNTcyMzQgNC4yNTU5NVYzLjAwODMzQzUuNTcyMjIgMi44NDQzMyA1LjYwMzU0IDIuNjgxOTIgNS42NjQ1IDIuNTMwMzhDNS43MjU0NiAyLjM3ODg0IDUuODE0ODggMi4yNDExNSA1LjkyNzYyIDIuMTI1MTlDNi4wNDAzNyAyLjAwOTIyIDYuMTc0MjQgMS45MTcyNiA2LjMyMTU4IDEuODU0NTZDNi40Njg5MiAxLjc5MTg1IDYuNjI2ODMgMS43NTk2NCA2Ljc4NjI4IDEuNzU5NzdIOS4yMTIzNEM5LjM3MTc5IDEuNzU5NjQgOS41Mjk3IDEuNzkxODUgOS42NzcwMyAxLjg1NDU2QzkuODI0MzcgMS45MTcyNiA5Ljk1ODI0IDIuMDA5MjIgMTAuMDcxIDIuMTI1MTlDMTAuMTgzNyAyLjI0MTE1IDEwLjI3MzIgMi4zNzg4NCAxMC4zMzQxIDIuNTMwMzhDMTAuMzk1MSAyLjY4MTkyIDEwLjQyNjQgMi44NDQzMyAxMC40MjYzIDMuMDA4MzNWNC4yNTU5NUg1LjU3MjM0Wk0xMi4yNDYzIDQuMjU1OTVWMTIuOTkxMkMxMi4yNDYzIDEzLjMyMjMgMTIuMTE4NCAxMy42Mzk5IDExLjg5MDcgMTMuODc0MUMxMS42NjMxIDE0LjEwODIgMTEuMzU0MyAxNC4yMzk4IDExLjAzMjMgMTQuMjM5OEg0Ljk2NjI4QzQuNjQ0MzIgMTQuMjM5OCA0LjMzNTU1IDE0LjEwODIgNC4xMDc4OSAxMy44NzQxQzMuODgwMjMgMTMuNjM5OSAzLjc1MjM0IDEzLjMyMjMgMy43NTIzNCAxMi45OTEyVjQuMjU1OTVIMTIuMjQ2M1pNNi43ODYyOCA3LjM3NTQ5VjExLjExOTNWNy4zNzU0OVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwWicgZmlsbD0nJTIzRDE1MTUzJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbi51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyIDEwTDEyIDJDMTIgMC44OTU0MyAxMS4xMDQ2IC00Ljg1Mzk2ZS0wNyAxMCAtNC4zNzExNGUtMDdMMiAtOC43NDIyOGUtMDhDMC44OTU0MyAtMy45MTQwNWUtMDggLTQuODUzOTZlLTA3IDAuODk1NDMxIC00LjM3MTE0ZS0wNyAyTC04Ljc0MjI4ZS0wOCAxMEMtMy45MTQwNWUtMDggMTEuMTA0NiAwLjg5NTQzMSAxMiAyIDEyTDEwIDEyQzExLjEwNDYgMTIgMTIgMTEuMTA0NiAxMiAxMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtcmVjb3JkaW5nLWluLXNlc3Npb24udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpIHRyYW5zbGF0ZSgxcHgsIDhweCk7XG4gIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xufVxuXG4vKiBmaXggYSBzdWJ0bGUgbWlzYWxpZ25tZW50IGJ1ZyBmb3IgZnVsbCBzY3JlZW4gYnV0dG9ucyAqL1xuLnZqcy1mdWxsc2NyZWVuIC51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDZweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcGF0aD0ndXJsKCUyM2NsaXAwXzI2NDVfNDY1NCknJTNFJTNDcGF0aCBkPSdNMTUuMTQ5MSA0Ljc1TDEwLjU5OTEgOEwxNS4xNDkxIDExLjI1VjQuNzVaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J005LjI5OTEyIDMuNDUwMkgyLjE0OTEyQzEuNDMxMTUgMy40NTAyIDAuODQ5MTIxIDQuMDMyMjMgMC44NDkxMjEgNC43NTAyVjExLjI1MDJDMC44NDkxMjEgMTEuOTY4MiAxLjQzMTE1IDEyLjU1MDIgMi4xNDkxMiAxMi41NTAySDkuMjk5MTJDMTAuMDE3MSAxMi41NTAyIDEwLjU5OTEgMTEuOTY4MiAxMC41OTkxIDExLjI1MDJWNC43NTAyQzEwLjU5OTEgNC4wMzIyMyAxMC4wMTcxIDMuNDUwMiA5LjI5OTEyIDMuNDUwMlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9nJTNFJTNDZGVmcyUzRSUzQ2NsaXBQYXRoIGlkPSdjbGlwMF8yNjQ1XzQ2NTQnJTNFJTNDcmVjdCB3aWR0aD0nMTUuNicgaGVpZ2h0PScxNS42JyBmaWxsPSd3aGl0ZScgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4xOTk5NTEgMC4yMDAxOTUpJy8lM0UlM0MvY2xpcFBhdGglM0UlM0MvZGVmcyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyMicgaGVpZ2h0PScxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00uNzUgM0EyLjc1IDIuNzUgMCAwMTMuNS4yNWg5LjA4MUEyLjc1IDIuNzUgMCAwMTE1LjMzMSAzdjlhMi43NSAyLjc1IDAgMDEtMi43NSAyLjc1SDMuNUEyLjc1IDIuNzUgMCAwMS43NSAxMlYzek0zLjUgMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjV2OWMwIC42OS41NiAxLjI1IDEuMjUgMS4yNWg5LjA4MWMuNjkgMCAxLjI1LS41NiAxLjI1LTEuMjVWM2MwLS42OS0uNTYtMS4yNS0xLjI1LTEuMjVIMy41eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNTMgMi4wM2wtMTIgMTItMS4wNi0xLjA2IDEyLTEyIDEuMDYgMS4wNnpNMjAuODcgMS41MjVhLjc1Ljc1IDAgMDEuMzguNjUydjEwLjU4OGEuNzUuNzUgMCAwMS0xLjEzNC42NDRsLTUuOTItMy41M2EuNzUuNzUgMCAwMS0uMzY1LS42NDN2LTMuNTNhLjc1Ljc1IDAgMDEuMzY2LS42NDRsNS45MTktMy41M2EuNzUuNzUgMCAwMS43NTQtLjAwN3ptLTUuNTM5IDQuNjA3VjguODFsNC40MTkgMi42MzVWMy40OTdsLTQuNDE5IDIuNjM1eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIHtcbiAgcGFkZGluZzogMC4xNWVtIDAuNzVlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDc1cHg7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNjVweCk7XG4gIHdpZHRoOiAxMzBweDtcbiAgei1pbmRleDogNTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBtYXJnaW4tbGVmdDogMC44ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFQjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjhlbTtcbn1cblxuQGtleWZyYW1lcyBncm93IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxuICA1MCUgIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0UxREZGNDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHdpZHRoOiA4MHB4O1xuICBoZWlnaHQ6IDgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDEyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNDBweCk7XG4gIHRvcDogY2FsYyg1MCUgLSA0MHB4KTtcbiAgYW5pbWF0aW9uOiA2cyBpbmZpbml0ZSBncm93O1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNjAlO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXI6YWZ0ZXIge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ21hc2sgaWQ9J2EnIG1hc2tVbml0cz0ndXNlclNwYWNlT25Vc2UnIHg9JzAnIHk9JzAnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCclM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nNDknIHI9JzQ5JyBmaWxsPSclMjNFREVDRjgnLyUzRSUzQy9tYXNrJTNFJTNDZyBtYXNrPSd1cmwoJTIzYSknJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc1MCcgZmlsbD0nJTIzNjQ1Q0MyJy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuNDIyIDgxLjgxMmM1LjQwNS0xNS41NDcgMjAuMTg3LTI2LjcwNiAzNy41NzYtMjYuNzA2IDE3LjM5IDAgMzIuMTcyIDExLjE1OSAzNy41NzcgMjYuNzA3LTkuMTY0IDEwLjQzLTIyLjYwMSAxNy4wMTMtMzcuNTc2IDE3LjAxMy0xNC45NzYgMC0yOC40MTQtNi41ODMtMzcuNTc3LTE3LjAxNHonIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNicvJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzI5JyByPScxNycgZmlsbD0nJTIzZmZmJyBmaWxsLW9wYWNpdHk9Jy43Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcIik7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuNik7XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIG1pbi1oZWlnaHQ6IDE1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZmNmZDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtY29udHJvbC1wYW5lbCB7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG59XG5cbi51bC1idXR0b25zLXBhbmVsIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtbWVudSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC02cHgsIDEycHgpO1xuICBwb3NpdGlvbjogdW5zZXQ7XG59XG5cbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IHVuc2V0O1xufVxuXG4udmpzLW1lbnUgbGkge1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuXG4udmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkIHtcbiAgY29sb3I6IGxpZ2h0Z3JheTtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWJ1dHRvbnMtcGFuZWwge1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC52anMtcmVjb3JkLWluZGljYXRvci52anMtY29udHJvbCB7XG4gIGJvdHRvbTogOTBweCAhaW1wb3J0YW50O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3Ige1xuICBwYWRkaW5nOiAwLjNlbSAwLjc1ZW0gMC4xNWVtIDE1cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMjFweCk7XG4gIHdpZHRoOiA0M3B4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFQjU3NTc7XG4gIHdpZHRoOiA2cHg7XG4gIGhlaWdodDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgdG9wOiA0cHg7XG4gIGxlZnQ6IDVweDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yOmJlZm9yZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgb3BhY2l0eTogMTtcbiAgY29sb3I6ICMzMzM7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cblxuLnVsLXZpZGVvLXBsYXllci1sb2FkaW5nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA2cmVtO1xuICBoZWlnaHQ6IDZyZW07XG5cbn1cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyBkaXYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogODAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgbWFyZ2luOiA1cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkICM2NjY7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XG4gIGJvcmRlci1jb2xvcjogIzY2NiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbn1cblxuLmZpcnN0IHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC40NXM7XG59XG4uc2Vjb25kIHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zcztcbn1cbi50aGlyZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMTVzO1xufVxuXG5Aa2V5ZnJhbWVzIGxkcy1yaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLnVsLXZpZGVvLWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMik7XG4gIHBhZGRpbmc6IDhweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUsIC51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyLCAudWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlLCAudWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBtYXJnaW46IDAgNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMnB4KTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnUmVjb3JkIHlvdXIgUmVzcG9uc2UnO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNSAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzLjg3NTcgOC4yMjM2MUwxLjExMTggMTQuNjA1NkMwLjk0NTU3OCAxNC42ODg3IDAuNzUgMTQuNTY3OCAwLjc1IDE0LjM4MlYxLjYxODAzQzAuNzUgMS40MzIxOSAwLjk0NTU3OSAxLjMxMTMxIDEuMTExOCAxLjM5NDQzTDEzLjg3NTcgNy43NzYzOUMxNC4wNiA3Ljg2ODUyIDE0LjA2IDguMTMxNDggMTMuODc1NyA4LjIyMzYxWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAxcHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC44NSkgdHJhbnNsYXRlKDAsIDJweCk7XG59XG5cbi51bC1iYWNrLXF1ZXN0aW9uLWJ0bjphZnRlciB7XG4gIGNvbnRlbnQ6ICdCYWNrIHRvIFF1ZXN0aW9uJztcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4udmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG4gIGFuaW1hdGlvbjogZmFkZSAwLjNzO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGUge1xuICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbiN1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxNXB4O1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnVsLWNvdW50ZG93bi10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1cHgpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gPiAjdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICBmb250LXNpemU6IDI1cHg7XG4gIHRyYW5zZm9ybTogdW5zZXQ7XG59XG5cbi52anMtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiN1bC1TcGVlZCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDM1cHgpO1xufVxuXG4udmpzLXBvc3RlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHVuc2V0O1xufVxuIn1dLG5lPSItdmlkZW8tcGxheWVyIixyZT0iLXZpZGVvLXJlY29yZGVyIjtsZXQgb2UsaWU7Y29uc3QgYWU9YXN5bmModCxlLG4scixvLGkpPT57Y29uc3QgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz17c2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6YS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6YS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6bmF2aWdhdG9yLmxhbmd1YWdlfSxzPXthY3Rpb246ZSxlcnI6e21lc3NhZ2U6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9LG1ldGE6Yyx2aWQ6byxlbnZJZDppfTsoYXdhaXQgZmV0Y2goYCR7bn0vc2RrLzEvZXJyb3JzYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6ey4uLnIsInVzZXJsZWFwLXBsYXRmb3JtIjoidmlkZW9fcmVjb3JkZXIiLCJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYShgdXNlcmxlYXAtJHtEYXRlLm5vdygpfS1lcnJvcmApfSxib2R5OkpTT04uc3RyaW5naWZ5KHMpfSkpLm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIix0KX0sY2U9KHQsZSxuKT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbiYmbigpO1Byb21pc2UuYWxsKGUucmVkdWNlKCgoZSxuKT0+KGUucHVzaCgoKHQse3R5cGU6ZSxjb250ZW50Om59KT0+bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7bGV0IGk7InNjcmlwdCI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGkuc3JjPW4pOiJsaW5rIj09PWU/KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGkucmVsPSJzdHlsZXNoZWV0IixpLmhyZWY9bixpLnR5cGU9InRleHQvY3NzIik6KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpLmlubmVySFRNTD1uKSxpLm9ubG9hZD1mdW5jdGlvbigpe3Iobil9LGkub25lcnJvcj1mdW5jdGlvbigpe28obil9LGkuYXN5bmM9ITEsaS5pZD1idG9hKG4pLHQuYXBwZW5kQ2hpbGQoaSl9KSkpKHQsbikpLGUpKSxbXSkpLnRoZW4oKCgpPT57biYmbigpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KyIgZmFpbGVkIHRvIGxvYWQiKX0pKX0sc2U9KHQsZSxuKT0+e2lmKCJzdGFydCI9PT1lJiYodC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIiksIm5vbmUiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9S3Q7ZWxzZSBpZigic3VjY2VzcyI9PT1lKXQuc3R5bGUudmlzaWJpbGl0eT1LdCx0LmlubmVySFRNTD0iVXBsb2FkIHN1Y2NlZWRlZCEiO2Vsc2V7Y29uc3QgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQobikpO3QuaW5uZXJIVE1MPWBVcGxvYWRpbmcgPHNwYW4gY2xhc3M9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSI+JHtlfSU8L3NwYW4+YCx0LnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0UwRTBFQiAwJSwgI0UwRTBFQiAke2V9JSwgI0ZDRkNGRCAke2V9JSwgI0ZDRkNGRCAxMDAlKWB9fSx1ZT0odCxlKT0+e2NvbnN0IG49bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO3JldHVybiBuLmFkZENsYXNzKCJ1bC1idXR0b25zLXBhbmVsIiksZS5tYXAoKHQ9PntuLmFkZENoaWxkKHQpfSkpLGxlKG4pLG59LGxlPXQ9Pnt0LmNoaWxkcmVuKCkuZm9yRWFjaCgodD0+e2lmKGplW3QubmFtZV9dKXtjb25zdCBlPWZlKGplW3QubmFtZV9dLGB1bC0ke2plW3QubmFtZV9dfWApO3QuZWxfLmFwcGVuZENoaWxkKGUpfX0pKX0sZmU9KHQsZT0iIik9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gbi5jbGFzc05hbWU9InVsLWJ1dHRvbi10ZXh0IixuLmlubmVySFRNTD10LG4uaWQ9ZSxufSxkZT0odCxlLG4scixvPSExKT0+e3QuYWRkQ2xhc3MoInVsLXZpZGVvLXBsYXllciIpO2NvbnN0IGk9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO2kuYWRkQ2xhc3MoInVsLWNvbnRyb2wtcGFuZWwiKSx0LnByb2dyZXNzQmFyPWkuYWRkQ2hpbGQoIlByb2dyZXNzQ29udHJvbCIpLG4mJnQuc3JjKG4pLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcj1uZXcod2luZG93LnZpZGVvanMuZ2V0Q29tcG9uZW50KCJDb21wb25lbnQiKSkodCksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmFkZENsYXNzKCJ1bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciIpO2NvbnN0IGE9biYmbi5zcmM/d2Uobi5zcmMpOm51bGw7IW58fCFvJiZhPyh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIixhJiZ0LnBvc3RlcihhKSk6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpLHQub24oInBsYXkiLCgoKT0+e298fCFufHxhfHx5ZSh0LCExKX0pKSx0LmFkZENoaWxkKHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcix7fSwxKSxpLmFkZENoaWxkKGUpLHQuYWRkQ2hpbGQoaSksciYmcih0KX0scGU9KHQsZSxuLHIsbyxpLGEsYz0hMSk9PntpZT1EYXRlLm5vdygpO2NvbnN0IHM9d2luZG93LnZpZGVvanMsdT1zKGUse2NvbnRyb2xzOiExLGJpZ1BsYXlCdXR0b246ITEsZmx1aWQ6ITEsd2lkdGg6MTI4MCxoZWlnaHQ6NzIwLHBsYXlzaW5saW5lOiEwLHBsdWdpbnM6e3JlY29yZDp7YXVkaW86ITAsdmlkZW86e21hbmRhdG9yeTp7bWluV2lkdGg6MTI4MCxtaW5IZWlnaHQ6NzIwfX0sZnJhbWVXaWR0aDoxMjgwLGZyYW1lSGVpZ2h0OjcyMCxtYXhMZW5ndGg6NjAwLGF1dG9NdXRlRGV2aWNlOiEwfX19KTt1LnBheWxvYWQ9bjtjb25zdCBsPXQ9Pntjb25zdCBlPVh0LG49WHQrIi1hdWRpby1vbmx5IjtzZSh1LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxvZSYmb2Uuc3RhcnRUaW1lPj1pZSYmb2UuYWJvcnQoKTtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1jYW1lcmEtYnV0dG9uIik7dD8odS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSxoLnJlbW92ZUNsYXNzKGUpLGguYWRkQ2xhc3Mobiksci5pbm5lckhUTUw9amUuVHVybk9uQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5yZW1vdmVDbGFzcygidmpzLWhpZGRlbiIpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57dS5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2godS5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQodS5yZWNvcmQoKSkpKToodS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx1LnJlY29yZCgpLmdldERldmljZSgpLGgucmVtb3ZlQ2xhc3MobiksaC5hZGRDbGFzcyhlKSxyLmlubmVySFRNTD1qZS5UdXJuT2ZmQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidmpzLWhpZGRlbiIpKX0sZj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9PntmLmhhc0NsYXNzKEt0KXx8KGwodS5jYW1lcmFPZmYpLG8oRWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKEt0KSxmLmFkZENsYXNzKEt0KSl9fSk7Zi5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpLGYuZWxfLmFwcGVuZENoaWxkKGZlKGplLkRlbGV0ZUJ1dHRvbiwidWwtZGVsZXRlLWJ1dHRvbiIpKTtjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHA9KCk9PntkLmNsYXNzTGlzdC5jb250YWlucygidmpzLWZ1bGxzY3JlZW4iKSYmdS5jYW1lcmFPZmY/ZC5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI6ZC5zdHlsZS5kaXNwbGF5PSJmbGV4In07cCgpO2NvbnN0IGg9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57dS5yZWNvcmQoKS5pc1JlY29yZGluZygpfHwodS5jYW1lcmFPZmY9IXUuY2FtZXJhT2ZmLGwodS5jYW1lcmFPZmYpLCFmLmhhc0NsYXNzKEt0KSYmZi5hZGRDbGFzcyhLdCksbyhFZS5ERUxFVEUse30pLHAoKSl9fSk7aC5hZGRDbGFzcyhYdCksaC5lbF8uYXBwZW5kQ2hpbGQoZmUoamUuVHVybk9mZkNhbWVyYSwidWwtY2FtZXJhLWJ1dHRvbiIpKTtjb25zdCB2PW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGVyLXRvZ2dsZSIpO2lmKHUucmVjb3JkKCkuaXNSZWNvcmRpbmcoKSl1LnJlY29yZCgpLnN0b3AoKSx0JiYodC5pbm5lckhUTUw9amUuUmVjb3JkQnV0dG9uKSx2LnJlbW92ZUNsYXNzKFF0KSxmLnJlbW92ZUNsYXNzKEt0KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7aWYoZSllLnJlbW92ZSgpLHQmJih0LmlubmVySFRNTD1qZS5SZWNvcmRCdXR0b24pLGwodS5jYW1lcmFPZmYpLG8oRWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKEt0KSxmLmFkZENsYXNzKEt0KSx2LnJlbW92ZUNsYXNzKFF0KSxtLnNob3coKTtlbHNle3YuYWRkQ2xhc3MoUXQpLG0uaGlkZSgpLGguYWRkQ2xhc3MoS3QpLGYuYWRkQ2xhc3MoS3QpLHQmJih0LmlubmVySFRNTD1qZS5TdG9wQnV0dG9uKTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9InVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIixkLmluc2VydEJlZm9yZShlLGQuY2hpbGRyZW5bMV0pLGUuc3R5bGUuaGVpZ2h0PWAke2Qub2Zmc2V0SGVpZ2h0fXB4YCxoZSh1LDMpfX19fSk7di5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiIpLHYuZWxfLmFwcGVuZENoaWxkKGZlKGplLlJlY29yZEJ1dHRvbiwidWwtcmVjb3JkZXItdG9nZ2xlIikpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2cuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixnLmNsYXNzTmFtZT0idWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIix0LmFwcGVuZENoaWxkKGcpLHUudXBsb2FkUHJvZ3Jlc3NMYWJlbD1nO2NvbnN0IHk9dWUodSxbZixoLCJQbGF5VG9nZ2xlIix2LCJGdWxsc2NyZWVuVG9nZ2xlIl0pLG09eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTttLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmbS5oaWRlKCk7Y29uc3QgYj15LmNoaWxkcmVuKCkuZmluZCgodD0+IlBsYXlUb2dnbGUiPT09dC5uYW1lXykpO2IuaGlkZSgpLGkmJmguYWRkQ2xhc3MoS3QpLCFpJiZmLmFkZENsYXNzKEt0KSxkZSh1LHksaSwhMSxjKSx1Lm9uKCJzdG9wUmVjb3JkIiwoKCk9Pnt2LmhpZGUoKSxiLnNob3coKSxtLnNob3coKSxmLnJlbW92ZUNsYXNzKEt0KX0pKSx1Lm9uKCJkZXZpY2VSZWFkeSIsKCgpPT57di5zaG93KCksYi5oaWRlKCksZi5hZGRDbGFzcyhLdCl9KSksKCh0LGUsbixyLG8pPT57dC5vbigiZGV2aWNlRXJyb3IiLChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJkZXZpY2UgZXJyb3I6Iix0LmRldmljZUVycm9yQ29kZSksIlBlcm1pc3Npb24gZGVuaWVkIj09PXQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2U/KHQuZGV2aWNlQnV0dG9uLmFkZENsYXNzKCJwZXJtaXNzaW9uLWRlbmllZCIpLG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuUEVSTUlTU0lPTl9ERU5JRUR9KSk6KG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuT1RIRVJ9KSxhZShuZXcgRXJyb3IodC5kZXZpY2VFcnJvckNvZGUubWVzc2FnZSksInJlY29yZGVyRGV2aWNlRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCkpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24obixyKXthZShyfHx0LmVycm9yKCksInJlY29yZGVyRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksdC5vbigic3RhcnRSZWNvcmQiLChmdW5jdGlvbihlLG4pe3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIil9KSksdC5vbigiZmluaXNoUmVjb3JkIiwoYXN5bmMgZnVuY3Rpb24oKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3RhcnQiLDApO2NvbnN0e3N1cnZleUlkOmkscXVlc3Rpb25JZDphLHJlc3BvbnNlR3JvdXBVaWQ6Yyx2aXNpdG9ySWQ6cyxlbnZJZDp1fT10LnBheWxvYWQ7aWYoIWkpe2NvbnN0IHQ9ImludGVybmFsIGVycm9yOiBtaXNzaW5nIGZpZWxkcyBpbiBwYXlsb2FkIjtyZXR1cm4gbiYmbihFZS5FUlJPUix7dHlwZTpFZS5PVEhFUn0pLGFlKG5ldyBFcnJvcih0KSwiZmluaXNoUmVjb3JkIixlLG8scyx1KSxudWxsfXQucmVjb3JkKCkuc3RvcERldmljZSgpO2NvbnN0IGw9dC5jYW1lcmFPZmY/RWUuTUVESUFfVFlQRV9BVURJTzpFZS5NRURJQV9UWVBFX1ZJREVPLGY9WnQoKTtjb25zb2xlLmxvZygid3RmIik7Y29uc3QgZD17c3VydmV5SWQ6aSx1cGRhdGVkQXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLG1lZGlhVHlwZTpsLG1lZGlhUmVjb3JkaW5nVWlkOmZ9O2NvbnNvbGUubG9nKGQpLGEmJihkLnF1ZXN0aW9uSWQ9YSksYyYmKGQucmVzcG9uc2VHcm91cFVpZD1jKSxzJiYoZC52aXNpdG9ySWQ9cyk7Y29uc3QgcD1hd2FpdChhc3luYygpPT57Y29uc3Qgcj1hd2FpdCBmZXRjaChgJHtlfS8yL2Vudmlyb25tZW50cy9pbnRlZ3JhdGlvbnMvdXBsb2FkYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShkKX0pO2lmKHIub2spe2NvbnN0IHQ9YXdhaXQgci5qc29uKCk7cmV0dXJuIG4mJm4oRWUuVVBMT0FEX1NUQVJURUQse1tFZS5VUExPQURfSURdOnQudXBsb2FkLmlkLFtFZS5NRURJQV9UWVBFXTpsLFtFZS5NRURJQV9SRUNPUkRJTkdfVUlEXTpmfSksdC51cGxvYWQudXJsfXJldHVybiBuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSLHJlc3BvbnNlOnJ9KSxhZShuZXcgRXJyb3IoImZhaWxlZCB0byBnZXQgdXBsb2FkIHJlc3BvbnNlIHdpdGggdXJsIiksImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKSxudWxsfSkoKTtwJiYob2U9d2luZG93LlVwQ2h1bmsuY3JlYXRlVXBsb2FkKHtlbmRwb2ludDpwLGZpbGU6bmV3IEZpbGUoW3QucmVjb3JkZWREYXRhXSxgcmVjb3JkaW5nICR7bH0gJHtEYXRlLm5vdygpfWApLGNodW5rU2l6ZTo1MTIwfSksb2Uuc3RhcnRUaW1lPURhdGUubm93KCksb2Uub24oImVycm9yIiwobj0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksYWUobiwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLG9lLm9uKCJwcm9ncmVzcyIsKGU9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwicHJvZ3Jlc3MiLGUuZGV0YWlsKX0pKSxvZS5vbigic3VjY2VzcyIsKCgpPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN1Y2Nlc3MiKSxuJiZuKEVlLlVQTE9BRF9GSU5JU0hFRCl9KSkpfSkpfSkodSxyLG8sc2UsYSksaSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksdS5zcmMoaSksYi5zaG93KCksdi5oaWRlKCksZi5yZW1vdmVDbGFzcyhLdCkpO2NvbnN0IHg9W3tuYW1lOiJtaWNyb3Bob25lIn1dOyF1LmNhbWVyYU9mZiYmeC5wdXNoKHtuYW1lOiJjYW1lcmEifSksUHJvbWlzZS5hbGwoeC5tYXAoKHQ9Pm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh0KSkpKS50aGVuKCh0PT57dC5yZWR1Y2UoKCh0LGUpPT50JiJncmFudGVkIj09PWUuc3RhdGUpLCEwKSYmdSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksIWkmJnUucmVjb3JkKCkuZ2V0RGV2aWNlKCkpfSkpLmNhdGNoKCh0PT57fSkpfSxoZT0odCxlPTMpPT57Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4iKTtuJiYwPT09ZT8obi5yZW1vdmUoKSx0LnJlY29yZCgpLnN0YXJ0KCkpOm4mJihuLmlubmVySFRNTD1gPHNwYW4gY2xhc3M9J3VsLWNvdW50ZG93bi10ZXh0Jz5SZWNvcmRpbmcgaW4uLi4gJHtlfTwvc3Bhbj5gLHNldFRpbWVvdXQoKCgpPT57aGUodCxlLTEpfSksMWUzKSl9LHZlPXQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyIixlLmFwcGVuZENoaWxkKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLXBsYXllci1sb2FkaW5nIixlLmlkPVl0KHQpLFsiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCJdLm1hcCgodD0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9dCxlLmFwcGVuZENoaWxkKG4pfSkpLGV9KSh0KSksZX0sZ2U9KHQsZSk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7bi5pZD10LG4uY2xhc3NOYW1lPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHVsLXZpZGVvLXBsYXllci12aWRlbyI7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7ci5jbGFzc05hbWU9InZqcy1uby1qcyIsci5pbm5lckhUTUw9IlRvIHZpZXcgdGhpcyB2aWRlbyBwbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQsIGFuZCBjb25zaWRlciB1cGdyYWRpbmcgdG8gYSB3ZWIgYnJvd3NlciB0aGF0Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gby5ocmVmPSJodHRwczovL3ZpZGVvanMuY29tL2h0bWw1LXZpZGVvLXN1cHBvcnQvIixvLnRhcmdldD0iX2JsYW5rIixvLmlubmVySFRNTD0ic3VwcG9ydHMgSFRNTDUgdmlkZW8iLHIuYXBwZW5kQ2hpbGQobyksbi5hcHBlbmRDaGlsZChyKSxlLmFwcGVuZENoaWxkKG4pLGV9LHllPSh0LGUpPT57ZT8odC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuc2hvdygpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKToodC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIil9LG1lPXQ9Pntjb25zdCBlPXdpbmRvdy52aWRlb2pzLG49dCtyZTtpZihlKXt0cnl7aWYoIWUobikucmVjb3JkKCkuc3RyZWFtKXJldHVybn1jYXRjaCh0KXtyZXR1cm59ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobikmJmUobikucmVjb3JkKCkuc3RvcCgpLGUobikucmVjb3JkKCkuc3RvcERldmljZSgpfX0sYmU9dD0+e3dpbmRvdy52aWRlb2pzKHQrbmUpLnBhdXNlKCl9LHhlPSh0LGUsbixyKT0+e3dpbmRvdy52aWRlb2pzKHQrbmUpO2NvbnN0IG89d2luZG93LnZpZGVvanModCtyZSk7KCh0LGUsbik9Pntjb25zdCByPXdpbmRvdy52aWRlb2pzKHQrbmUpOyFyLnBhdXNlZCgpJiZyLnBhdXNlKCksci5zcmMoe3NyYzplLHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9KSxyLmN1cnJlbnRUaW1lKDApLHllKHIsbik7Y29uc3Qgbz13ZShlKTshbiYmZSYmKG8/ci5wb3N0ZXIobyk6eWUociwhMCkpLHIub24oInBsYXkiLCgoKT0+e258fCFlfHxvfHx5ZShyLCExKX0pKX0pKHQsZSxyKSxvLnJlY29yZCgpLnJlc2V0U3RhdGUoKSxvLnJlY29yZCgpLmdldERldmljZSgpO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKVswXS5jbGFzc0xpc3QuYWRkKEt0KSxvLmNhbWVyYU9mZil7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSIpWzBdLmNsYXNzTGlzdC5yZW1vdmUoS3QpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57by5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2goby5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQoby5yZWNvcmQoKSkpfWVsc2V7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24iKVswXS5jbGFzc0xpc3QucmVtb3ZlKEt0KX1vLnBheWxvYWQ9bixzZShvLnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxpZT1EYXRlLm5vdygpfSx3ZT10PT57Y29uc3QgZT10Lm1hdGNoKC9odHRwczpcL1wvc3RyZWFtLm11eC5jb21cLyguKikvKSxuPWU/ZVsxXTpudWxsO3JldHVybiBuP2BodHRwczovL2ltYWdlLm11eC5jb20vJHtufS90aHVtYm5haWwuanBnP3RpbWU9MGA6bnVsbH0sRWU9e1VQTE9BRF9TVEFSVEVEOiJ1cGxvYWQuc3RhcnRlZCIsVVBMT0FEX0ZJTklTSEVEOiJ1cGxvYWQuZmluaXNoZWQiLERFTEVURToiZGVsZXRlIixFUlJPUjoiZXJyb3IiLE1FRElBX1RZUEU6Im1lZGlhLnR5cGUiLFBFUk1JU1NJT05fREVOSUVEOiJwZXJtaXNzaW9uX2RlbmllZCIsT1RIRVI6Im90aGVyIixVUExPQURfSUQ6InVwbG9hZC5pZCIsTUVESUFfUkVDT1JESU5HX1VJRDoibWVkaWEucmVjb3JkaW5nLnVpZCIsTUVESUFfVFlQRV9WSURFTzoidmlkZW8iLE1FRElBX1RZUEVfQVVESU86ImF1ZGlvIn0samU9e1BsYXliYWNrUmF0ZU1lbnVCdXR0b246IlNwZWVkIixQbGF5VG9nZ2xlOiJQbGF5IixGdWxsc2NyZWVuVG9nZ2xlOiJFeHBhbmQiLFR1cm5PbkNhbWVyYToiVHVybiBvbiIsVHVybk9mZkNhbWVyYToiVHVybiBvZmYiLERlbGV0ZUJ1dHRvbjoiRGVsZXRlIixSZWNvcmRCdXR0b246IlJlY29yZCIsU3RvcEJ1dHRvbjoiU3RvcCIsUGF1c2VCdXR0b246IlBhdXNlIn07ZnVuY3Rpb24gQ2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBrZT0idWwtYnV0dG9uLWluYWN0aXZlIjtmdW5jdGlvbiBTZSh0LGUpe2UodCl9dmFyIE9lPXtlcTpmdW5jdGlvbih0LGUpe3JldHVybiB0PT1lfSxuZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4hdGhpcy5lcSh0LGUpfSxndDpmdW5jdGlvbih0LGUpe3JldHVybiB0PmV9LGd0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Pj1lfSxsdDpmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9LGx0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0PD1lfSxsaXN0X2V4YWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZ0LnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKT09PWUuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpfSxsaXN0X2FsbDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmIWUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10LmluZGV4T2YoZSl9KSl9LGxpc3RfYWxvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xIT10LmluZGV4T2YoZSl9KSl9fTt2YXIgSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7YnQoKSh0aGlzLHQpLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnBheWxvYWQ9ZSxuLnJlamVjdD1yLG4ucmVzb2x2ZT10fSkpfXJldHVybiB3dCgpKHQsW3trZXk6InJlc29sdmVSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnJlc29sdmUodCl9fV0pLHR9KCksQWU9big5MzEzMCksVGU9QWUuZGVsYXksTWU9QWUuTkVUV09SS19DT05GSUcsX2U9ITEsTGU9IiIsUmU9ITEsUGU9W107ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHQuX2NvbmZpZyYmdC5fY29uZmlnLmluc3RhbGxhdGlvbk1ldGhvZD90Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kOnQuX2d0bT9xOnQuX3NlZ21lbnQ/VzpHfWZ1bmN0aW9uIERlKHQpe19lPSEwLExlPXR9ZnVuY3Rpb24gRmUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ1c2VybGVhcC1wbGF0Zm9ybSI6IndlYiIsIngtdWwtc2RrLXZlcnNpb24iOiIyLjE0LjQifTtpZih0LmVudklkJiYoZVtVXT10LmVudklkKSx0LnRva2VuJiYoZS5BdXRob3JpemF0aW9uPSJCZWFyZXIgIit0LnRva2VuKSx0LnVzZXJJZCYmKGVbel09dC51c2VySWQpLHQudmlzaXRvcklkJiYoZVtWXT10LnZpc2l0b3JJZCksdC5wYXJ0bmVyQW5vbnltb3VzSWQmJihlW0JdPXQucGFydG5lckFub255bW91c0lkKSx0Lm1vYmlsZUhlYWRlcnNKU09OKXt2YXIgbj1KU09OLnBhcnNlKHQubW9iaWxlSGVhZGVyc0pTT04pO09iamVjdC5hc3NpZ24oZSxuKX1yZXR1cm4gZVtIXT1OZSh0KSx0LmxvY2FsZSYmKGVbImFjY2VwdC1sYW5ndWFnZSJdPXQubG9jYWxlKSxlfWZ1bmN0aW9uIFVlKHQsZSxuKXtyZXR1cm4gQmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuKEJlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4scil7dmFyIG87cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHtzdGF0dXM6NDI5fSk7Y2FzZSA0OnJldHVybiBvPW5ldyBJZShyKSxQZS5wdXNoKG8pLHQuYWJydXB0KCJyZXR1cm4iLG8ucHJvbWlzZSk7Y2FzZSA3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gemUodCxlKXtyZXR1cm4gVmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZlKCl7cmV0dXJuIFZlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZixkPWFyZ3VtZW50cztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZC5sZW5ndGg+MiYmdm9pZCAwIT09ZFsyXT9kWzJdOjAsbz1kLmxlbmd0aD4zJiZ2b2lkIDAhPT1kWzNdJiZkWzNdLGk9ZC5sZW5ndGg+NCYmdm9pZCAwIT09ZFs0XSYmZFs0XSxhPXt1cmw6ZSxvcHRpb25zOm4sYXR0ZW1wdDpyLHNob3VsZERyb3BPblJhdGVMaW1pdDpvfSwhUmV8fGkpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixVZShvLGksYSkpO2Nhc2UgNjppZihjPXtvazohMSxyZXBvcnRFcnJvcjohMX0sIV9lKXt0Lm5leHQ9MTA7YnJlYWt9cmV0dXJuIGNvbnNvbGUubG9nKCJVc2VyTGVhcCAtICIuY29uY2F0KExlKSksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAxMDpyZXR1cm4gdC5wcmV2PTEwLG4uaGVhZGVycz1PYmplY3QuYXNzaWduKEZlKCksbi5oZWFkZXJzKSx0Lm5leHQ9MTQsZmV0Y2goZSxuKTtjYXNlIDE0OmlmKDQyOSE9PShzPXQuc2VudCkuc3RhdHVzKXt0Lm5leHQ9MjQ7YnJlYWt9aWYoISghUmUmJiFvfHxpKSl7dC5uZXh0PTIzO2JyZWFrfXJldHVybiBSZT0hMCx1PXMuaGVhZGVycy5oYXMoInJhdGVsaW1pdC1yZXNldCIpP051bWJlcihzLmhlYWRlcnMuZ2V0KCJyYXRlbGltaXQtcmVzZXQiKSk6TWUuUkFURUxJTUlUX1JFU0VUX0RFRkFVTFQsdC5hYnJ1cHQoInJldHVybiIsVGUoMWUzKnUpLnRoZW4oTigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsemUoZSxuLDAsbywhMCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkpO2Nhc2UgMjM6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFVlKG8sITEsYSkpO2Nhc2UgMjQ6aWYoUmU9ITEsUGUubGVuZ3RoJiYoUGUubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnBheWxvYWQ7emUoZS51cmwsZS5vcHRpb25zLGUuYXR0ZW1wdCxlLnNob3VsZERyb3BPblJhdGVMaW1pdCkudGhlbigoZnVuY3Rpb24oZSl7dC5yZXNvbHZlUmVxdWVzdChlKX0pKX0pKSxQZT1bXSksIXMub2spe3QubmV4dD00MTticmVha31pZigyNDkhPT1zLnN0YXR1cyl7dC5uZXh0PTMwO2JyZWFrfXJldHVybiBEZSgpLHQuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMzA6cmV0dXJuIHQubmV4dD0zMixzLnRleHQoKTtjYXNlIDMyOnJldHVybiBsPXQuc2VudCx0LnByZXY9MzMsbCYmIk9LIiE9PWwmJihzLmpzb249SlNPTi5wYXJzZShsKSksdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSAzODpyZXR1cm4gdC5wcmV2PTM4LHQudDA9dC5jYXRjaCgzMyksdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiEwLGVycm9yOm5ldyBFcnJvcigiZmFpbGVkIHBhcnNpbmcgcmVzcG9uc2UganNvbiBmb3IgIi5jb25jYXQoZSwiIC0gIikuY29uY2F0KGwpKX0pO2Nhc2UgNDE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHMpO2Nhc2UgNDQ6aWYodC5wcmV2PTQ0LHQudDE9dC5jYXRjaCgxMCksISgoZj1yKzEpPjIpKXt0Lm5leHQ9NDk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHtvazohMSxyZXBvcnRFcnJvcjohMSxlcnJvcjp0LnQxfSk7Y2FzZSA0OTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsVGUoMWUzKmYpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHplKGUsbixmKX0pKSk7Y2FzZSA1MDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsbnVsbCxbWzEwLDQ0XSxbMzMsMzhdXSl9KSkpLFZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBIZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcWUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/SGUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkhlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIFdlKHQsZSxuKXtyZXR1cm4gR2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEdlKCl7cmV0dXJuIEdlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4scil7dmFyIG8saSxhLGMscyx1LGwsZjtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBvPWUubW9kZSxpPWUudXNlcklkLGE9ZS5lbnZJZCxjPWUuYXBpVVJMLHM9ZS5oZWFkZXJzLHU9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxsPXttb2RlOm8sc2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6dS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6dS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZX0sZj17YWN0aW9uOm4sZXJyOnttZXNzYWdlOnIubWVzc2FnZSxzdGFjazpyLnN0YWNrfSxtZXRhOmwsdmlkOmksZW52SWQ6YX0sdC5uZXh0PTYsemUoIiIuY29uY2F0KGMsIi9zZGsvMS9lcnJvcnMiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOk9iamVjdC5hc3NpZ24oeyJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYSgidXNlcmxlYXAtIi5jb25jYXQoRGF0ZS5ub3coKSwiLWVycm9yIikpfSxzKSxib2R5OkpTT04uc3RyaW5naWZ5KGYpfSk7Y2FzZSA2OnQuc2VudC5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIscik7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpLEdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgWmU9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnVzZXJJZHx8dC5tZXRhJiYidGVzdCI9PT10Lm1ldGEubW9kZXx8dC5pc1ByZXZpZXd9LCRlPXtzdXJ2ZXlJZDpudWxsLHJ1bm5pbmc6ITEsZnJhbWU6bnVsbCxlbnZJZDpudWxsLHVzZXJJZDpudWxsLG1ldGE6e30sYm9yZGVyOm51bGwsZm9udEZhbWlseTpudWxsLGZvbnRGYW1pbHlVUkw6bnVsbCx0aW1lb3V0Om51bGwsaW50ZXJ2YWw6bnVsbCxtb2RlOm51bGwsZGVjazp7aW5kZXg6MCxjYXJkczpbXX0sY29udGV4dDp7fSxzZW5kaW5nOiExLGNhcmRzOntvcGVuOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLHI9dC5wcm9wZXJ0aWVzLG89KHQubG9jYWxlLHQubmV4dCksaT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGM9dC5hcHAscz1jLnVzZU1vYmlsZVN0eWxpbmcsdT1jLmJvcmRlcixsPUYoW2UsInVsLWNhcmQtLXRleHQiLGx0XSksZj1NdChyKSxkPXImJnIub3BlblRleHRQbGFjZWhvbGRlcj9yLm9wZW5UZXh0UGxhY2Vob2xkZXI6bnVsbDtyZXR1cm4gSSgiZm9ybSIse2lkOiJ0ZXh0LWZvcm0iLGNsYXNzTmFtZTpsLG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiBEdCh0LG8pfSxrZXk6aX0sX3QoZixuKSxmLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0In0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2NvbnRhaW5lciJ9LEkoInRleHRhcmVhIix7ImRhdGEtZ3JhbW0iOiJmYWxzZSIsbWF4bGVuZ3RoOiI1MDAwIixjbGFzc05hbWU6RihmdChpdCxzKSksbmFtZToidGV4dCIscGxhY2Vob2xkZXI6ZCwiYXJpYS1wbGFjZWhvbGRlciI6ZCwiYXJpYS1tdWx0aWxpbmUiOiJ0cnVlIix2YWx1ZTp0Lm9wZW5UZXh0LnZhbHVlLG9uY3JlYXRlOk50KCksb25pbnB1dDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxhLm9wZW5UZXh0Lm9uVGV4dENoYW5nZSh0LnRhcmdldC52YWx1ZSl9LG9uZm9jdXM6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9dX0sb25ibHVyOmZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0sdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjpzdCxjb250ZW50ZWRpdGFibGU6InRydWUiLHJvbGU6InRleHRib3giLCJhcmlhLWxhYmVsIjpkfSkpLEkoImJ1dHRvbiIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjp1fSxvbmNsaWNrOmZ1bmN0aW9uKGUpeyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5mb3Jtc1sidGV4dC1mb3JtIl0pJiYoRHQodC5vcGVuVGV4dC52YWx1ZS50cmltKCksbyksdC5vcGVuVGV4dC52YWx1ZT0iIil9LHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sTHQocikpKSxJKFR0LG51bGwpKX19LHRleHR1cmxwcm9tcHQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz1GKFtlLCJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQiLGx0XSkscz10LmFwcC5ib3JkZXI7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTpjLGtleTppfSxJKCJwIix7aWQ6c3QsY2xhc3NOYW1lOiJ1bC1xdWVzdGlvbiJ9LG4pLEkoImRpdiIse2lkOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciIsY2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciJ9LChyJiZyLmJvZHk/ci5ib2R5LnNwbGl0KC9cblxzKlxuL2cpOltdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBJKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSJ9LHQpfSkpKSxJKCJhIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIHVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6cywibWFyZ2luLXJpZ2h0IjoiYXV0byIsInRleHQtb3ZlcmZsb3ciOiJlbGxpcHNpcyIsdGV4dERlY29yYXRpb246Im5vbmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sb25jbGljazpmdW5jdGlvbih0KXtvKCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bygpfSxocmVmOnImJnIuYnV0dG9uVXJsLHRhcmdldDoiX2JsYW5rIixyb2xlOiJidXR0b24iLHRhYmluZGV4OjAsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKSwiYXJpYS1kZXNjcmliZWRieSI6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sciYmci5idXR0b25UZXh0P3IuYnV0dG9uVGV4dDoiTmV4dCIpLEkoVHQsbnVsbCkpfX0sbXVsdGlwbGVjaG9pY2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10LmJvcmRlcixvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPSh0LmxvY2FsZSx0Lm9wdGlvbnMpLGM9dm9pZCAwPT09YT9bXTphLHM9dC5uZXh0LHU9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBsPXQuYXBwLnVzZU1vYmlsZVN0eWxpbmcsZj1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKTtmdW5jdGlvbiBkKHQsZSl7cyh7dmFsdWU6cigpKHt9LHQsZSl9KX12YXIgcD1jLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbCxpPXQudmFsdWU7cmV0dXJuIEkoRnQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byx0YWJpbmRleDplKzEsb25TZWxlY3Q6ZC5iaW5kKG51bGwscixpKSxpZDpyLGlzUmFkaW86ITAsdXNlTW9iaWxlU3R5bGluZzpsfSl9KSksaD1NdChpKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmYsa2V5OnV9LF90KGgsbyksaCxJKCJkaXYiLHtjbGFzc05hbWU6RihmdChvdCxsKSkscm9sZToicmFkaW9ncm91cCIsImFyaWEtbGFiZWxlZGJ5IjpzdH0scCksSShUdCxudWxsKSl9fSxtdWx0aXBsZXNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLHI9dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9KHQubG9jYWxlLHQub3B0aW9ucyksYT12b2lkIDA9PT1pP1tdOmksYz0odC5pc0xhc3QsdC5uZXh0KSxzPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgdT1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKSxsPXQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGY9aS5tdWx0aXBsZXNlbGVjdCxkPWYuaW5pdCxwPWYucmVzZXQsaD1mLnVwZGF0ZVNlbGVjdGVkLHY9dC5hcHAudXNlTW9iaWxlU3R5bGluZyxnPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKHQsZSl7ZSh7dmFsdWU6dH0pfSh0Lm11bHRpcGxlc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyxjKSxwKCl9LHk9YS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZCxvPXQubGFiZWw7dC52YWx1ZTtyZXR1cm4gSShGdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLG9uU2VsZWN0Omgsc2VsZWN0ZWQ6bFtyXSxpZDpyLGlzUmFkaW86ITEsdXNlTW9iaWxlU3R5bGluZzp2fSl9KSksbT1NdChvKTtyZXR1cm4gSSgiZm9ybSIse2lkOiJ0ZXh0LWZvcm0iLGNsYXNzTmFtZTp1LG9uc3VibWl0Omcsb25jcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGU9e30sYS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3QuaWRdPSExfSkpLHZvaWQgZChlKTt2YXIgZX0sa2V5OnN9LF90KG0sciksbSxJKCJkaXYiLHtjbGFzc05hbWU6RihmdChvdCx2KSkscm9sZToicmFkaW9ncm91cCJ9LHkpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0In0sSSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOm59LG9uY2xpY2s6Zyxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIHVsLWNhcmQtdGV4dF9fYnV0dG9uIil9LEx0KG8pKSksSShUdCxudWxsKSl9fSxsaWtlcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD1GKFtuLCJ1bC1jYXJkLS1saWtlcnQiLGx0XSkscD1yJiZyLmxlZnQsaD1yJiZyLnJpZ2h0LHY9XygpKEFycmF5KDUpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bisxLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksSSgiZGl2IixUKCkoe2lkOm8sY2xhc3NOYW1lOkYoW10uY29uY2F0KF8oKShmdChYLGwpKSxfKCkoZnQoIiIuY29uY2F0KFgsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJ0ZXh0Ym94Iix0YWJpbmRleDowLCJhcmlhLWRlc2NyaWJlZGJ5Ijp1dH0pLHIpfSkpLGc9TXQoaSk7cmV0dXJuIEkoImZvcm0iLHtjbGFzc05hbWU6ZCxrZXk6Y30sX3QoZyxvKSxnLGYlMj09MCYmSSgiZGl2IixudWxsKSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLWxpa2VydF9fbnVtYmVycyJ9LHYpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19sYWJlbHMifSxJKCJzcGFuIixudWxsLHApLEkoInNwYW4iLG51bGwsaCkpLEkoVHQsbnVsbCkpfX0sdGhhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZW5kQ2FyZCxuPXQuYm9yZGVyLHI9dC5jbGFzc05hbWUsbz0odC5sb2NhbGUsdC5xdWVzdGlvbklkKTtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgYT1GKFtyLCJ1bC1jYXJkLS10aGFua3MiLGx0XSksYz1lJiZlLnN1YmhlYWRlcj9JKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXB0aW9uIn0sZS5zdWJoZWFkZXIpOm51bGwscz1lJiZlLmhlYWRsaW5lP2UuaGVhZGxpbmU6bnVsbDtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmEsa2V5Om99LEkoImRpdiIse29uY3JlYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwLmNvbXBsZXRlKCl9fSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLXRoYW5rcy1jb250ZW50In0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC10aGFua3MtY2hlY2sifSxJKCJzdmciLHt3aWR0aDoiODEiLGhlaWdodDoiOTkiLHZpZXdCb3g6IjAgMCA4MSA5OSIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1sYWJlbGxlZGJ5IjoidGl0bGUifSxJKCJwYXRoIix7ImZpbGwtcnVsZSI6ImV2ZW5vZGQiLCJjbGlwLXJ1bGUiOiJldmVub2RkIixkOiJNNDAuNSA3N0M2MC45MzQ1IDc3IDc3LjUgNjAuNDM0NSA3Ny41IDQwQzc3LjUgMTkuNTY1NSA2MC45MzQ1IDMgNDAuNSAzQzIwLjA2NTUgMyAzLjUgMTkuNTY1NSAzLjUgNDBDMy41IDYwLjQzNDUgMjAuMDY1NSA3NyA0MC41IDc3Wk04MC41IDQwQzgwLjUgNjIuMDkxNCA2Mi41OTE0IDgwIDQwLjUgODBDMTguNDA4NiA4MCAwLjUgNjIuMDkxNCAwLjUgNDBDMC41IDE3LjkwODYgMTguNDA4NiAwIDQwLjUgMEM2Mi41OTE0IDAgODAuNSAxNy45MDg2IDgwLjUgNDBaIixmaWxsOm59KSxJKCJwYXRoIix7ImZpbGwtcnVsZSI6ImV2ZW5vZGQiLCJjbGlwLXJ1bGUiOiJldmVub2RkIixkOiJNNTUuMDI1IDIyLjkwNDZDNTUuNjI5OSAyMy40NzA1IDU1LjY2MTYgMjQuNDE5OCA1NS4wOTU2IDI1LjAyNDdDNTQuODcyNCAyNS4yNjM0IDU0LjYxMDkgMjUuNTI4NSA1NC4zMTU3IDI1LjgyNzdDNTIuMjU0NyAyNy45MTY4IDQ4LjU1NDkgMzEuNjY3IDQ0LjgxMzUgMzkuNjY1OEM0My4yODE4IDQyLjk0MDYgNDIuMDg2NCA0NS44Mzg2IDQxLjA4MjMgNDguMjcyOUM0MC42NTM5IDQ5LjMxMTYgNDAuMjYwMyA1MC4yNjU5IDM5Ljg5MDIgNTEuMTI5QzM5LjI4NyA1Mi41MzU5IDM4LjcyNDggNTMuNzUwOCAzOC4xNzQ0IDU0LjYyNUMzNy44OTk3IDU1LjA2MTMgMzcuNTgwNiA1NS40OTA1IDM3LjIwMTcgNTUuODI0NUMzNi44MjAxIDU2LjE2MDcgMzYuMjYxMyA1Ni41IDM1LjU0NTcgNTYuNUMzNC42NzQyIDU2LjUgMzQuMDg5MiA1NS45NjkyIDMzLjc3NzQgNTUuNjA4M0MzMy40NTAyIDU1LjIyOTYgMzMuMTc1MiA1NC43NTExIDMyLjkzOTYgNTQuMzAxQzMyLjczMDUgNTMuOTAxMyAzMi41MDg4IDUzLjQzNjcgMzIuMjc5NyA1Mi45NTY1QzMyLjI0MjkgNTIuODc5NCAzMi4yMDU5IDUyLjgwMTkgMzIuMTY4OCA1Mi43MjQzQzMxLjg5NDIgNTIuMTQ5OSAzMS41OTU5IDUxLjUzNCAzMS4yNTM3IDUwLjg4NjhDMjkuODg4NiA0OC4zMDUgMjcuODUzOSA0NS4yODc4IDI0LjIzNDMgNDMuMTM4MkMyMy41MjIgNDIuNzE1MiAyMy4yODc1IDQxLjc5NDkgMjMuNzEwNSA0MS4wODI2QzI0LjEzMzUgNDAuMzcwMyAyNS4wNTM5IDQwLjEzNTggMjUuNzY2MiA0MC41NTg4QzMwLjA1NTYgNDMuMTA2MiAzMi40MTQ5IDQ2LjY2NDcgMzMuOTA1OCA0OS40ODQ1QzM0LjI3NzYgNTAuMTg3NiAzNC41OTczIDUwLjg0ODcgMzQuODc1MyA1MS40MzAyQzM0LjkxNDcgNTEuNTEyNCAzNC45NTI5IDUxLjU5MjYgMzQuOTkwMiA1MS42NzA3QzM1LjIyMjIgNTIuMTU2NyAzNS40MTY0IDUyLjU2MzcgMzUuNTk3OCA1Mi45MTAyQzM1LjYxNTEgNTIuOTQzNCAzNS42MzIxIDUyLjk3NTQgMzUuNjQ4NSA1My4wMDYxQzM2LjA1NjUgNTIuMzUzMSAzNi41MzQxIDUxLjM0MzQgMzcuMTMzIDQ5Ljk0NjhDMzcuNDc4MSA0OS4xNDE4IDM3Ljg1NzIgNDguMjIyOSAzOC4yNzYxIDQ3LjIwNzRDMzkuMjg4NiA0NC43NTMyIDQwLjUzMzkgNDEuNzM0NyA0Mi4wOTYxIDM4LjM5NDhDNDYuMDU5MSAyOS45MjIxIDUwLjA2NDEgMjUuODY0OCA1Mi4xNTM1IDIzLjc0ODJDNTIuNDQyMyAyMy40NTU2IDUyLjY5NDQgMjMuMjAwMiA1Mi45MDQ4IDIyLjk3NTNDNTMuNDcwOCAyMi4zNzAzIDU0LjQyIDIyLjMzODcgNTUuMDI1IDIyLjkwNDZaTTM1LjE5OTQgNTMuNTg5MkMzNS4xOTk0IDUzLjU4OTIgMzUuMiA1My41ODg4IDM1LjIwMTIgNTMuNTg3OUMzNS4yIDUzLjU4ODkgMzUuMTk5NCA1My41ODkzIDM1LjE5OTQgNTMuNTg5MlpNMzYuMDY2NiA1My42NjgyQzM2LjA3MzIgNTMuNjc0IDM2LjA3NjUgNTMuNjc3NSAzNi4wNzY1IDUzLjY3NzdDMzYuMDc2NSA1My42NzggMzYuMDczMiA1My42NzUxIDM2LjA2NjYgNTMuNjY4MloiLGZpbGw6bn0pLEkoInBhdGgiLHtkOiJNNjkuNSA5N0M2OS41IDk4LjEwNDYgNTYuMjkyNCA5OSA0MCA5OUMyMy43MDc2IDk5IDEwLjUgOTguMTA0NiAxMC41IDk3QzEwLjUgOTUuODk1NCAyMy43MDc2IDk1IDQwIDk1QzU2LjI5MjQgOTUgNjkuNSA5NS44OTU0IDY5LjUgOTdaIixmaWxsOiJibGFjayIsImZpbGwtb3BhY2l0eSI6IjAuMiJ9KSkpLEkoInAiLHtjbGFzc05hbWU6c3QsaWQ6c3R9LHMpLGMpLEkoVHQsbnVsbCkpKX19LG5wczpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPUYoW24sInVsLWNhcmQtLW5wcyIsbHRdKSxwPXImJnIubGVmdCxoPXImJnIucmlnaHQsdj1fKCkoQXJyYXkoMTEpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bixvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEkoImRpdiIsVCgpKHtjbGFzc05hbWU6RihbXS5jb25jYXQoXygpKGZ0KFEsbCkpLF8oKShmdCgiIi5jb25jYXQoUSwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InJhZGlvIix0YWJpbmRleDowLGlkOm99KSxyKX0pKSxnPU10KGkpO3JldHVybiBJKCJmb3JtIix7Y2xhc3NOYW1lOmQsa2V5OmN9LF90KGcsbyksZyxmJTI9PTAmJkkoImRpdiIsbnVsbCksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1ucHNfX251bWJlcnMifSx2KSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbGFiZWxzIn0sSSgic3BhbiIsbnVsbCxwKSxJKCJzcGFuIixudWxsLGgpKSxJKFR0LG51bGwpKX19LHZpZGVvdm9pY2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT10Lm5leHQsYT10LnF1ZXN0aW9uSWQsYz10LnVwZGF0ZUhlaWdodDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT1GKFtlLFldKSxsPSJ1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIiLGY9InVsLWNhcmQtdmlkZW9fX25leHRfYnV0dG9uIixkPSJ1bC12aWRlby1pbnRlcnZpZXctZm9ybSIscD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsaD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdj1vJiZvLnZpZGVvVXJsLGc9dC5hcHAseT1nLnN1cnZleUlkLG09Zy5yZXNwb25zZUdyb3VwVWlkLGI9Zy5hcGlVUkwseD1nLnVzZXJJZCx3PWcuYm9yZGVyLEU9Zy5lbnZJZCxqPWcuaGVhZGVycztpZih0LmNhcmREYXRhfHwodC5jYXJkRGF0YT17fSksdC5jYXJkRGF0YS51cGxvYWRJZD12b2lkIDAsdC5jYXJkRGF0YS5idXR0b25UZXh0PUx0KG8pLHQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQ9UnQobyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCkpe3hlKGwsdix7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4fSxvLm1lZGlhVHlwZT09PUVlLk1FRElBX1RZUEVfQVVESU8pO3ZhciBDPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO0MuaW5uZXJUZXh0PXQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQsQy5jbGFzc0xpc3QuYWRkKGtlKX12YXIgaz1mdW5jdGlvbihlLG4pe3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2U9PT1FZS5VUExPQURfU1RBUlRFRD8odC5jYXJkRGF0YS51cGxvYWRJZD1uW0VlLlVQTE9BRF9JRF0sci5pbm5lclRleHQ9dC5jYXJkRGF0YS5idXR0b25UZXh0LHIuY2xhc3NMaXN0LnJlbW92ZShrZSksT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtiYWNrZ3JvdW5kQ29sb3I6d30pKTplPT09RWUuREVMRVRFJiYodC5jYXJkRGF0YS51cGxvYWRJZD1udWxsLHIuY2xhc3NMaXN0LmFkZChrZSksci5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjoiIn0pKX0sUz1mdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3JldHVybiBuLmNsYXNzTmFtZT0iIi5jb25jYXQoInVsLXZpZGVvLWJ0biIsIiAiKS5jb25jYXQodCksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk7dD8oZS5jbGFzc0xpc3QucmVtb3ZlKEt0KSxlLmNsYXNzTGlzdC5hZGQoSnQpLG4uY2xhc3NMaXN0LmFkZChLdCksbi5jbGFzc0xpc3QucmVtb3ZlKEp0KSk6KGJlKGwpLGUuY2xhc3NMaXN0LmFkZChLdCksZS5jbGFzc0xpc3QucmVtb3ZlKEp0KSxuLmNsYXNzTGlzdC5yZW1vdmUoS3QpLG4uY2xhc3NMaXN0LmFkZChKdCkpfShlKX0pKSxufSxPPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChKdCksdC5hcHBlbmRDaGlsZCgoKHQsZSxuLHI9ITEsbz0iaHR0cHM6Ly9hcGkuc3ByaWcuY29tIik9Pntjb25zdCBpPXQrbmUsYT12ZShpKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSBxdWVzdGlvbiBwbGF5ZXIuYCksInBsYXllckRldmljZUVycm9yIixvLHt9KX0pKSxjZShhLGVlLCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFl0KGkpKS5yZW1vdmUoKSxnZShpLGEpO2NvbnN0IHQ9d2luZG93LnZpZGVvanMoaSx7cGxheXNpbmxpbmU6ITAscGxheWJhY2tSYXRlczpbLjUsMSwxLjUsMl19KSxvPXVlKHQsWyJQbGF5YmFja1JhdGVNZW51QnV0dG9uIiwiUGxheVRvZ2dsZSIsIkZ1bGxzY3JlZW5Ub2dnbGUiXSksYz1vLmNoaWxkcmVuKCkuZmluZCgodD0+IkZ1bGxzY3JlZW5Ub2dnbGUiPT09dC5uYW1lXykpO2MuaGFzQ2xhc3MoInZqcy1kaXNhYmxlZCIpJiZjLmhpZGUoKSxkZSh0LG8sZSxuLHIpfSkpLGF9KShsLHtzcmM6dix0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSx2b2lkIDAsby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPLGIpKTt2YXIgZT1TKCJ1bC1yZWNvcmQtcmVzcG9uc2UtYnRuIiwhMSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdH0sQT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoS3QpO3ZhciBlPVMoInVsLWJhY2stcXVlc3Rpb24tYnRuIiwhMCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdC5hcHBlbmRDaGlsZCgoKHQsZT17fSxuPSJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHIsbyxpLGE9ITEpPT57Y29uc3QgYz10K3JlLHM9dmUoYyk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMoYyk7YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSByZWNvcmRlciBwbGF5ZXIuYCksInJlY29yZGVyRGV2aWNlRXJyb3IiLG4saSxlLnBheWxvYWQudmlzaXRvcklkLGUucGF5bG9hZC5lbnZJZCl9KSksY2UocyxlZS5jb25jYXQodGUpLCgoKT0+e2dlKGMscyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoWXQoYykpLnJlbW92ZSgpLHBlKHMsYyxlLG4scixvLGksYSl9KSksc30pKGwse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eCxlbnZJZDpFfSxiLGssITEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/Q2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkNlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxqLHsieC11bC12aWRlby1yZWNvcmRlci1vcmlnaW4iOiJzZGsifSksby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPKSksdH0sVD1NdChvKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmx0LGtleTphfSxJKCJmb3JtIix7aWQ6ZCxjbGFzc05hbWU6dSxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24odCl7cmV0dXJuIGMoKX0pKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdChZKSk7dC5vYnNlcnZlKGUpfSxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gU2UodCxpKX19LF90KFQsbiksVCxJKCJkaXYiLHtpZDoidWwtY2FyZC12b2ljZV9fdmlkZW8ifSxJKCJkaXYiLHtpZDpsLG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTygpKSx0LmFwcGVuZENoaWxkKEEoKSksdH19KSxJKCJidXR0b24iLHtpZDpmLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gIi5jb25jYXQoa2UpLG9uY2xpY2s6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksbWUobCksZG9jdW1lbnQuZm9ybXNbZF0pe3QuY2FyZERhdGEudXBsb2FkSWQ/U2Uoe30saSk6U2Uoe2RlbGV0ZWRBdDpEYXRlLm5vdygpfSxpKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKS5jbGFzc0xpc3QuYWRkKEt0KSxuLmNsYXNzTGlzdC5yZW1vdmUoS3QpfX0scm9sZToiYnV0dG9uIn0sUnQobykpKSxJKFR0LG51bGwpKSl9fX0sbG9jYWxlOiJlbiIsYXBpVVJMOiJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHNob3dTdXJ2ZXlCcmFuZDohMCxtYXJrZXRpbmdVcmw6Imh0dHBzOi8vdXNlcmxlYXAuY29tIixzbHVnTmFtZTpudWxsLHJlc3BvbnNlR3JvdXBVaWQ6bnVsbCxoZWFkZXJzOnt9LGlzUHJldmlldzohMSxhbnN3ZXJzOltdLGN1c3RvbU1ldGFkYXRhOnt9fSxZZT17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LnN1cnZleUlkLG49dC5mcmFtZSxyPXQuY2FyZHMsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQubW9kZSxmPXQuY29udGV4dCxkPXQubG9jYWxlLHA9dC5hcGlVUkwsaD10LnNob3dTdXJ2ZXlCcmFuZCx2PXQubWFya2V0aW5nVXJsLGc9dC5zbHVnTmFtZSx5PXQucmVzcG9uc2VHcm91cFVpZCxtPXQuaGVhZGVycyxiPXQuZW5kQ2FyZCx4PXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHc9dC5pc1ByZXZpZXcsRT10LmFuc3dlcnMsaj10LmN1c3RvbU1ldGFkYXRhLEM9dC5leHBlcmltZW50RmxhZ3Msaz10LnVzZU1vYmlsZVN0eWxpbmcsUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXtyZXR1cm4gcWUoe30sTy5hZGREZWNrKHtkZWNrOnIsaGFzRW5kQ2FyZDpifSkse3N1cnZleUlkOmUscnVubmluZzohMCxmcmFtZTpuLGVudklkOm8sdXNlcklkOmksbWV0YTphLGJvcmRlcjpjLGZvbnRGYW1pbHk6cyxmb250RmFtaWx5VVJMOnUsdGltZW91dDoxLG1vZGU6bCxjb250ZXh0OmYsbG9jYWxlOmQsYXBpVVJMOnAsc2hvd1N1cnZleUJyYW5kOmgsbWFya2V0aW5nVXJsOnYsc2x1Z05hbWU6ZyxyZXNwb25zZUdyb3VwVWlkOnksaGVhZGVyczptLGVuZENhcmQ6Yixjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6eCxpc1ByZXZpZXc6dyxhbnN3ZXJzOkUsY3VzdG9tTWV0YWRhdGE6aixleHBlcmltZW50RmxhZ3M6Qyx1c2VNb2JpbGVTdHlsaW5nOmssZXZlbnRFbWl0dGVyOlN9KX19LGFkZERlY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5kZWNrLG49dC5oYXNFbmRDYXJkO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHFlKHt9LGUse0NhcmQ6dC5jYXJkc1tlLnR5cGVdfSl9KSk7cmV0dXJuIG4mJnIucHVzaCh7Q2FyZDp0LmNhcmRzLnRoYW5rc30pLHtkZWNrOntpbmRleDowLGNhcmRzOnJ9fX19LGNvbXBsZXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJue2ludGVydmFsOnNldEludGVydmFsKGUuZGVkdWN0LDFlMyl9fX0sc2VlbjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe1plKHQpfHxlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGlzTmV3OiEwfSl9fSxjbG9zZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCFaZSh0KSlyZXR1cm4gZS50cmFja0hpc3Rvcnkoe2V2ZW50OiJjbG9zZWQifSl9fSxzdWJtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZSxuPXQucmVzcG9uc2VHcm91cFVpZCxyPXQuY29tcGxldGVkQXQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KG8pe3ZhciBpLGE7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihuJiYhWmUobykpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXtyZXNwb25zZUdyb3VwVWlkOm4sbWV0YTpvLm1ldGEsY3VzdG9tTWV0YWRhdGE6by5jdXN0b21NZXRhZGF0YSxyZXNwb25zZXM6W2VdLGNvbXBsZXRlZEF0OnJ9LHQubmV4dD01LHplKCIiLmNvbmNhdChvLmFwaVVSTCwiL3Nkay8xL2Vudmlyb25tZW50cy8iKS5jb25jYXQoby5lbnZJZCwiL3Zpc2l0b3JzLyIpLmNvbmNhdChvLnVzZXJJZCwiL3Jlc3BvbnNlcy9zdWJtaXQiKSx7Ym9keTpKU09OLnN0cmluZ2lmeShpKSxoZWFkZXJzOm8uaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA1OmlmKGE9dC5zZW50LGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLGEub2spe3QubmV4dD0xMzticmVha31pZighYS5yZXBvcnRFcnJvcil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjcpIEZhaWxlZCB0byBzdWJtaXQgcmVzcG9uc2UiLGEuZXJyb3IpLHQubmV4dD0xMixXZShvLCJzdWJtaXRSZXNwb25zZSIsYS5lcnJvcik7Y2FzZSAxMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlZHVjdDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpbWVvdXQtMTtyZXR1cm4gZTw9MD8oY2xlYXJJbnRlcnZhbCh0LmludGVydmFsKSxTdC5lbmFibGUoKSx7cnVubmluZzohMSxpbnRlcnZhbDpudWxsLHRpbWVvdXQ6ZX0pOnt0aW1lb3V0OmV9fX0sbmV4dDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1EYXRlLm5vdygpLG89ZS5kZWNrLGk9by5jYXJkcyxhPW8uaW5kZXgsYz1pW2FdLHM9Yy5uYW1lLHU9Yy50eXBlLGw9ZS5yZXNwb25zZUdyb3VwVWlkLGY9Im9iamVjdCI9PT1JdCgpKHQuZGF0YSk/dC5kYXRhOnt2YWx1ZTp0LmRhdGF9LGQ9Zi52YWx1ZTtpW2FdLnZhbHVlPWQsZi5xdWVzdGlvbklkPXMsZi5hbnN3ZXJlZEF0PXI7dmFyIHA9e3Jlc3BvbnNlOmYscmVzcG9uc2VHcm91cFVpZDpsLHR5cGU6dX0saD0ibXVsdGlwbGVjaG9pY2UiPT09dT9PYmplY3QudmFsdWVzKGQpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiExIT09dH0pKTpkLHY9InZpZGVvdm9pY2UiIT09dXx8IWYuZGVsZXRlZEF0OyJtdWx0aXBsZXNlbGVjdCI9PT11JiYoaD1pW2FdLnByb3BzLm9wdGlvbnMucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBkW2UuaWRdJiZ0LnB1c2goZS52YWx1ZSksdH0pLFtdKSk7dmFyIGc9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XTtpZihlPj10Lmxlbmd0aHx8ZTwwKXJldHVybiBudWxsO2Zvcih2YXIgaT10W2VdJiZ0W2VdLnByb3BzJiZ0W2VdLnByb3BzLnJvdXRpbmdPcHRpb25zfHxbXSxhPU1hdGgubWluKGUrMSx0Lmxlbmd0aC0xKSxjPW51bGwscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgdT1pW3NdLGw9dS5jb21wYXJhdG9yLGY9dS50YXJnZXQsZD11LnZhbHVlO2lmKCJhbnN3ZXJlZCI9PT1sJiZvKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfWlmKE9lW2xdJiZPZVtsXShuLGQpKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfX1yZXR1cm4gbnVsbD09PWMmJmU9PT10Lmxlbmd0aC0xP251bGw6LTE9PT1jP3I/dC5sZW5ndGgtMTpudWxsOm51bGw9PT1jP2E6Y30oaSxhLGgsISF0LmVuZENhcmQsdik7aWYobnVsbD09PWcpcmV0dXJuIHAuY29tcGxldGVkQXQ9cixuLnN1Ym1pdChwKSx2b2lkIHQuY29tcGxldGVTdXJ2ZXkoKTtpW2ddLkNhcmQ9PT1lLmNhcmRzLnRoYW5rcyYmKHAuY29tcGxldGVkQXQ9cik7dmFyIHk9bi5zdWJtaXQocCk7cmV0dXJuIGlbZ10uQ2FyZCE9ZS5jYXJkcy50aGFua3MmJnkuZmluYWxseSgoZnVuY3Rpb24oKXtuLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGluZGV4Omd9KX0pKSx7ZGVjazp7Y2FyZHM6aSxpbmRleDpnfX19fSx0cmFja0hpc3Rvcnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5ldmVudCxuPXQuaW5kZXgscj10LmlzTmV3LG89dm9pZCAwIT09ciYmcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQocil7dmFyIGksYSxjLHMsdSxsO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIVplKHIpKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjpyZXR1cm4gaT1yLmRlY2ssYT1pLmNhcmRzLGM9aS5pbmRleCxzPXZvaWQgMCE9PW4/YVtuXTphW2NdLHU9e3NpZDpyLnN1cnZleUlkLHFpZDpzLm5hbWUsYWN0aW9uOmUsdmlkOnIudXNlcklkLGVpZDpyLmVudklkLGlzTmV3Om8scmVzcG9uc2VHcm91cFVpZDpyLnJlc3BvbnNlR3JvdXBVaWR9LHQubmV4dD03LHplKCIiLmNvbmNhdChyLmFwaVVSTCwiL3Nkay8xL3Zpc2l0b3JzLyIpLmNvbmNhdChyLnVzZXJJZCwiL3N1cnZleXMvIikuY29uY2F0KHIuc3VydmV5SWQsIi9oaXN0b3J5Iikse2JvZHk6SlNPTi5zdHJpbmdpZnkodSksaGVhZGVyczpyLmhlYWRlcnMsbWV0aG9kOiJQT1NUIn0pO2Nhc2UgNzppZigobD10LnNlbnQpLm9rKXt0Lm5leHQ9MTM7YnJlYWt9aWYoIWwucmVwb3J0RXJyb3Ipe3QubmV4dD0xMzticmVha31yZXR1cm4gY29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDI4KSBGYWlsZWQgdG8gdHJhY2sgc3VydmV5IGV2ZW50IixsLmVycm9yKSx0Lm5leHQ9MTMsV2UociwidHJhY2tIaXN0b3J5IixsLmVycm9yKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX07ZnVuY3Rpb24gS2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEplKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP0tlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpLZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH12YXIgWGU9e2luaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBKZSh7fSxlLHtzZWxlY3RlZE9wdGlvbnM6dH0pfX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEplKHt9LHQse3NlbGVjdGVkT3B0aW9uczp7fX0pfX0sdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG51bGwhPXQpe3ZhciBuPU9iamVjdC5hc3NpZ24oZS5zZWxlY3RlZE9wdGlvbnMpO3JldHVybiBuW3RdPSFuW3RdLEplKHt9LGUse3NlbGVjdGVkT3B0aW9uczpufSl9fX19O2Z1bmN0aW9uIFFlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIgdG49e29uVGV4dENoYW5nZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1FlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpRZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe30sZSx7dmFsdWU6dH0pfX19LGVuPSJzdXJ2ZXkuYXBwZWFyZWQiLG5uPSJzdXJ2ZXkuZmFkaW5nT3V0Iixybj0ic3VydmV5LndpbGxDbG9zZSIsb249e1ZFUklGWV9WSUVXX1ZFUlNJT046InZlcmlmeS52aWV3LnZlcnNpb24ifSxhbj17VklFV19WRVJTSU9OOiJ2aWV3LnZlcnNpb24ifSxjbj0iY2xvc2UuY2xpY2siLHNuPSJzdXJ2ZXkuY29tcGxldGVkIjtmdW5jdGlvbiB1bih0KXtyZXR1cm4id2ViIiE9PXRbInVzZXJsZWFwLXBsYXRmb3JtIl19ZnVuY3Rpb24gbG4odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBmbj17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LmZyYW1lLG49dC5jYXJkcyxyPXQuc3VydmV5SWQsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQuY29udGV4dCxmPXQubG9jYWxlLGQ9dC5hcGlVUkwscD10LnNob3dTdXJ2ZXlCcmFuZCxoPXQubWFya2V0aW5nVXJsLHY9dC5zbHVnTmFtZSxnPXQucmVzcG9uc2VHcm91cFVpZCx5PXQuaGVhZGVycyxtPXQuZW5kQ2FyZCxiPXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHg9dC5pc1ByZXZpZXcsdz10LmFuc3dlcnMsRT10LmN1c3RvbU1ldGFkYXRhLGo9dC5leHBlcmltZW50RmxhZ3MsQz10LnVzZU1vYmlsZVN0eWxpbmcsaz10Lm1vYmlsZVBsYXRmb3JtLFM9dC5ldmVudEVtaXR0ZXI7cmV0dXJuIGZ1bmN0aW9uKHQsTyl7dmFyIEk9dW4oeSk/d2luZG93LmRvY3VtZW50OndpbmRvdy5wYXJlbnQuZG9jdW1lbnQ7Ty5hcHAuaW5pdCh7ZnJhbWU6SS5nZXRFbGVtZW50QnlJZChlKSxzdXJ2ZXlJZDpyLGNhcmRzOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSxjb250ZXh0OmwsbG9jYWxlOmYsYXBpVVJMOmQsc2hvd1N1cnZleUJyYW5kOnAsbWFya2V0aW5nVXJsOmgsc2x1Z05hbWU6dixyZXNwb25zZUdyb3VwVWlkOmcsaGVhZGVyczp5LGVuZENhcmQ6bSxjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6Yixpc1ByZXZpZXc6eCxhbnN3ZXJzOncsY3VzdG9tTWV0YWRhdGE6RSxleHBlcmltZW50RmxhZ3M6aix1c2VNb2JpbGVTdHlsaW5nOkMsbW9iaWxlUGxhdGZvcm06ayxldmVudEVtaXR0ZXI6U30pLE8uYXBwLnNlZW4oKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5hcHAscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KS5jbGFzc0xpc3Q7bi5ydW5uaW5nJiYhci5jb250YWlucygidWwtYXBwLS12aXNpYmxlIikmJih1bihuLmhlYWRlcnMpP3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKTooci5hZGQoInVsLWFwcC0tb3ZlcmxheSIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpfSksMTAwKSksbi5ldmVudEVtaXR0ZXImJm4uZXZlbnRFbWl0dGVyLmVtaXQoZW4pKSx1bihuLmhlYWRlcnMpfHxuLmZyYW1lLnNldEhlaWdodChmdW5jdGlvbih0KXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCgkKSk7cmV0dXJuKGU/ZS5zY3JvbGxIZWlnaHQ6NjAwKSsoZSYmZS5wYXJlbnRFbGVtZW50P2UucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQtZS5jbGllbnRIZWlnaHQ6MCl9KGRvY3VtZW50KSl9fSxmYWRlb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuKXt2YXIgcixvO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj1uLmFwcCxvPXIuZXZlbnRFbWl0dGVyLCF1bihyLmhlYWRlcnMpKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDpyZXR1cm4gby5lbWl0KG5uKSxlLmFicnVwdCgicmV0dXJuIixuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bi5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoZnVuY3Rpb24odCl7Im9wYWNpdHkiPT09dC5wcm9wZXJ0eU5hbWUmJmUoKX0pKSxuLmNsYXNzTGlzdC5yZW1vdmUoInVsLWFwcC0tdmlzaWJsZSIpfSkpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluaXRpYXRvcjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5hcHAscj1uLmZyYW1lLG89bi5ldmVudEVtaXR0ZXI7WyJpb3MiLCJhbmRyb2lkIl0uaW5jbHVkZXMobi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSYmby5lbWl0KHJuLHtpbml0aWF0b3I6ZX0pLHVuKG4uaGVhZGVycyl8fChvLmVtaXQocm4se2luaXRpYXRvcjplfSksci5yZW1vdmUoKSl9fSxjbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmFwcC5jbG9zZSgpO2Nhc2UgNDpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOmNufSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlc3Ryb3k6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOnNufSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fSxkbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9sbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6bG4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHthcHA6WWUsbXVsdGlwbGVzZWxlY3Q6WGUsb3BlblRleHQ6dG59LGZuKSxwbj17YXBwOiRlLG11bHRpcGxlc2VsZWN0OntzZWxlY3RlZE9wdGlvbnM6e319LG9wZW5UZXh0Ont2YWx1ZToiIn19O3ZhciBobj13aW5kb3cuX19jZmcsdm49aG4uZnJhbWUsZ249aG4uZW52SWQseW49aG4uc3VydmV5SWQsbW49aG4udXNlcklkLGJuPWhuLmNhcmRzLHhuPWhuLm1vZGUsd249aG4uYm9yZGVyLEVuPXZvaWQgMD09PXduPyIjNjY2NGY3Ijp3bixqbj1obi5jb250ZXh0LENuPWhuLmxvY2FsZSxrbj1obi5mb250RmFtaWx5LFNuPWhuLmZvbnRGYW1pbHlVUkwsT249aG4uYXBpVVJMLEluPWhuLnNob3dTdXJ2ZXlCcmFuZCxBbj1obi5tYXJrZXRpbmdVcmwsVG49aG4uc2x1Z05hbWUsTW49aG4ucmVzcG9uc2VHcm91cFVpZCxfbj1obi5oZWFkZXJzLExuPWhuLmVuZENhcmQsUm49aG4uY3VzdG9tU3R5bGVzLFBuPWhuLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayxObj1obi5pc1ByZXZpZXcsRG49aG4uYW5zd2VycyxGbj1obi5jdXN0b21NZXRhZGF0YSxVbj1obi5leHBlcmltZW50RmxhZ3MsQm49aG4udXNlTW9iaWxlU3R5bGluZyx6bj1obi5tb2JpbGVQbGF0Zm9ybSxWbj1obi5ldmVudEVtaXR0ZXIsSG49ZG9jdW1lbnQuaGVhZCxxbj1Wbnx8dm4uZXZlbnRFbWl0dGVyO3FuJiZxbi5lbWl0KG9uLlZFUklGWV9WSUVXX1ZFUlNJT04scigpKHt9LGFuLlZJRVdfVkVSU0lPTiwiMi4xNC40IikpO3ZhciBXbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKFduLnR5cGU9InRleHQvY3NzIixXbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh5dCgpKSksSG4uYXBwZW5kQ2hpbGQoV24pLFJuJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnR5cGU9InRleHQvY3NzIixuLnRleHRDb250ZW50PWUsbi5pZD1aLHQuaGVhZC5hcHBlbmRDaGlsZChuKX0oZG9jdW1lbnQsUm4pLGtuJiZTbiYmcGFyZW50KXt2YXIgR249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO0duLnJlbD0ic3R5bGVzaGVldCIsR24uaHJlZj1TbixIbi5hcHBlbmRDaGlsZChHbil9dmFyIFpuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGk9W10ubWFwLGE9ciYmci5jaGlsZHJlblswXXx8bnVsbCxjPWEmJmZ1bmN0aW9uIHQoZSl7cmV0dXJue25vZGVOYW1lOmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhdHRyaWJ1dGVzOnt9LGNoaWxkcmVuOmkuY2FsbChlLmNoaWxkTm9kZXMsKGZ1bmN0aW9uKGUpe3JldHVybiAzPT09ZS5ub2RlVHlwZT9lLm5vZGVWYWx1ZTp0KGUpfSkpfX0oYSkscz1bXSx1PSEwLGw9dih0KSxmPWZ1bmN0aW9uIHQoZSxuLHIpe2Zvcih2YXIgbyBpbiByKSJmdW5jdGlvbiI9PXR5cGVvZiByW29dP2Z1bmN0aW9uKHQsbyl7clt0XT1mdW5jdGlvbih0KXt2YXIgaT1vKHQpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHkoZSxsKSxyKSksaSYmaSE9PShuPXkoZSxsKSkmJiFpLnRoZW4mJmgobD1nKGUsdihuLGkpLGwpKSxpfX0obyxyW29dKTp0KGUuY29uY2F0KG8pLG5bb109dihuW29dKSxyW29dPXYocltvXSkpO3JldHVybiByfShbXSxsLHYoZSkpO3JldHVybiBoKCksZjtmdW5jdGlvbiBkKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P2QodChsLGYpKTpudWxsIT10P3Q6IiJ9ZnVuY3Rpb24gcCgpe289IW87dmFyIHQ9ZChuKTtmb3IociYmIW8mJihhPUMocixhLGMsYz10KSksdT0hMTtzLmxlbmd0aDspcy5wb3AoKSgpfWZ1bmN0aW9uIGgoKXtvfHwobz0hMCxzZXRUaW1lb3V0KHApKX1mdW5jdGlvbiB2KHQsZSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpbltyXT10W3JdO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgcj17fTtyZXR1cm4gdC5sZW5ndGg/KHJbdFswXV09dC5sZW5ndGg+MT9nKHQuc2xpY2UoMSksZSxuW3RbMF1dKTplLHYobixyKSk6ZX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDspZT1lW3RbbisrXV07cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD90LmtleTpudWxsfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQuY3VycmVudFRhcmdldC5ldmVudHNbdC50eXBlXSh0KX1mdW5jdGlvbiB4KHQsZSxuLHIsbyl7aWYoImtleSI9PT1lKTtlbHNlIGlmKCJzdHlsZSI9PT1lKWlmKCJzdHJpbmciPT10eXBlb2Ygbil0LnN0eWxlLmNzc1RleHQ9bjtlbHNlIGZvcih2YXIgaSBpbiJzdHJpbmciPT10eXBlb2YgciYmKHI9dC5zdHlsZS5jc3NUZXh0PSIiKSx2KHIsbikpe3ZhciBhPW51bGw9PW58fG51bGw9PW5baV0/IiI6bltpXTsiLSI9PT1pWzBdP3Quc3R5bGUuc2V0UHJvcGVydHkoaSxhKTp0LnN0eWxlW2ldPWF9ZWxzZSJvIj09PWVbMF0mJiJuIj09PWVbMV0/KGU9ZS5zbGljZSgyKSx0LmV2ZW50cz9yfHwocj10LmV2ZW50c1tlXSk6dC5ldmVudHM9e30sdC5ldmVudHNbZV09bixuP3J8fHQuYWRkRXZlbnRMaXN0ZW5lcihlLGIpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGIpKTplIGluIHQmJiJsaXN0IiE9PWUmJiJ0eXBlIiE9PWUmJiJkcmFnZ2FibGUiIT09ZSYmInNwZWxsY2hlY2siIT09ZSYmInRyYW5zbGF0ZSIhPT1lJiYhbz90W2VdPW51bGw9PW4/IiI6bjpudWxsIT1uJiYhMSE9PW4mJnQuc2V0QXR0cmlidXRlKGUsbiksbnVsbCE9biYmITEhPT1ufHx0LnJlbW92ZUF0dHJpYnV0ZShlKX1mdW5jdGlvbiB3KHQsZSl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk6KGU9ZXx8InN2ZyI9PT10Lm5vZGVOYW1lKT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0Lm5vZGVOYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQubm9kZU5hbWUpLHI9dC5hdHRyaWJ1dGVzO2lmKHIpe3Iub25jcmVhdGUmJnMucHVzaCgoZnVuY3Rpb24oKXtyLm9uY3JlYXRlKG4pfSkpO2Zvcih2YXIgbz0wO288dC5jaGlsZHJlbi5sZW5ndGg7bysrKW4uYXBwZW5kQ2hpbGQodyh0LmNoaWxkcmVuW29dPWQodC5jaGlsZHJlbltvXSksZSkpO2Zvcih2YXIgaSBpbiByKXgobixpLHJbaV0sbnVsbCxlKX1yZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7dmFyIG49ZS5hdHRyaWJ1dGVzO2lmKG4pe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKUUodC5jaGlsZE5vZGVzW3JdLGUuY2hpbGRyZW5bcl0pO24ub25kZXN0cm95JiZuLm9uZGVzdHJveSh0KX1yZXR1cm4gdH1mdW5jdGlvbiBqKHQsZSxuKXtmdW5jdGlvbiByKCl7dC5yZW1vdmVDaGlsZChFKGUsbikpfXZhciBvPW4uYXR0cmlidXRlcyYmbi5hdHRyaWJ1dGVzLm9ucmVtb3ZlO28/byhlLHIpOnIoKX1mdW5jdGlvbiBDKHQsZSxuLHIsbyl7aWYocj09PW4pO2Vsc2UgaWYobnVsbD09bnx8bi5ub2RlTmFtZSE9PXIubm9kZU5hbWUpe3ZhciBpPXcocixvKTt0Lmluc2VydEJlZm9yZShpLGUpLG51bGwhPW4mJmoodCxlLG4pLGU9aX1lbHNlIGlmKG51bGw9PW4ubm9kZU5hbWUpZS5ub2RlVmFsdWU9cjtlbHNleyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIG8gaW4gdihlLG4pKW5bb10hPT0oInZhbHVlIj09PW98fCJjaGVja2VkIj09PW8/dFtvXTplW29dKSYmeCh0LG8sbltvXSxlW29dLHIpO3ZhciBpPXU/bi5vbmNyZWF0ZTpuLm9udXBkYXRlO2kmJnMucHVzaCgoZnVuY3Rpb24oKXtpKHQsZSl9KSl9KGUsbi5hdHRyaWJ1dGVzLHIuYXR0cmlidXRlcyxvPW98fCJzdmciPT09ci5ub2RlTmFtZSk7Zm9yKHZhciBhPXt9LGM9e30sbD1bXSxmPW4uY2hpbGRyZW4scD1yLmNoaWxkcmVuLGg9MDtoPGYubGVuZ3RoO2grKyl7bFtoXT1lLmNoaWxkTm9kZXNbaF0sbnVsbCE9KHk9bShmW2hdKSkmJihhW3ldPVtsW2hdLGZbaF1dKX1oPTA7Zm9yKHZhciBnPTA7ZzxwLmxlbmd0aDspe3ZhciB5PW0oZltoXSksYj1tKHBbZ109ZChwW2ddKSk7aWYoY1t5XSloKys7ZWxzZSBpZihudWxsPT1ifHxiIT09bShmW2grMV0pKWlmKG51bGw9PWJ8fHUpbnVsbD09eSYmKEMoZSxsW2hdLGZbaF0scFtnXSxvKSxnKyspLGgrKztlbHNle3ZhciBFPWFbYl18fFtdO3k9PT1iPyhDKGUsRVswXSxFWzFdLHBbZ10sbyksaCsrKTpFWzBdP0MoZSxlLmluc2VydEJlZm9yZShFWzBdLGxbaF0pLEVbMV0scFtnXSxvKTpDKGUsbFtoXSxudWxsLHBbZ10sbyksY1tiXT1wW2ddLGcrK31lbHNlIG51bGw9PXkmJmooZSxsW2hdLGZbaF0pLGgrK31mb3IoO2g8Zi5sZW5ndGg7KW51bGw9PW0oZltoXSkmJmooZSxsW2hdLGZbaF0pLGgrKztmb3IodmFyIGggaW4gYSljW2hdfHxqKGUsYVtoXVswXSxhW2hdWzFdKX1yZXR1cm4gZX19KHBuLGRuLHZ0LHVuKF9uKT93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodm4pOmRvY3VtZW50LmJvZHkpO1puLmluaXQoe3N1cnZleUlkOnluLGZyYW1lOnZuLGVudklkOmduLHVzZXJJZDptbixjYXJkczpibixtb2RlOnhuLG1ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dC5kaXJlY3RFbWJlZCxuPXQubW9kZSxyPXZvaWQgMD09PW4/bnVsbDpuLG89ZT93aW5kb3c6d2luZG93LnBhcmVudCxpPW8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybnttb2RlOnIsc3c6by5zY3JlZW4ud2lkdGgsc2g6by5zY3JlZW4uaGVpZ2h0LGN3OmkuY2xpZW50V2lkdGgsY2g6aS5jbGllbnRIZWlnaHQscDpvLmxvY2F0aW9uLmhyZWYsbDpvLm5hdmlnYXRvci5sYW5ndWFnZX19KHttb2RlOnhuLGRpcmVjdEVtYmVkOnVuKF9uKX0pLGJvcmRlcjpFbixmb250RmFtaWx5OmtuLGNvbnRleHQ6am4sbG9jYWxlOkNuLGFwaVVSTDpPbixzaG93U3VydmV5QnJhbmQ6SW4sbWFya2V0aW5nVXJsOkFuLHNsdWdOYW1lOlRuLHJlc3BvbnNlR3JvdXBVaWQ6TW4saGVhZGVyczpfbixlbmRDYXJkOkxuLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpQbixpc1ByZXZpZXc6Tm4sYW5zd2VyczpEbixjdXN0b21NZXRhZGF0YTpGbixleHBlcmltZW50RmxhZ3M6VW4sdXNlTW9iaWxlU3R5bGluZzpCbixtb2JpbGVQbGF0Zm9ybTp6bixldmVudEVtaXR0ZXI6Vm59KX0oKX0oKTs=';
|
|
1
|
+
export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjcuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgbWFyZ2luOiAxNXB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi51bC1xdWVzdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBjb2xvcjogIzM0MzQ0MjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDEyNSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcHRpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzAuMzUlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICBjb2xvcjogIzZjNmM2ZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcmQtLW11bHRpcGxlIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX2Nob2ljZXMge1xuICBtYXJnaW46IDVweCAwIDAgMDtcbiAgZmxleDogMSAwO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5jaG9pY2UtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcblxuICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmFjdGl2ZSxcbi5jaG9pY2UtLW1vYmlsZTphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIExpbmsgc3R1ZGllcyB3aWRlIHNjcmVlbiB2aWV3ICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gIC51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICAgIGJveC1zaGFkb3c6IHVuc2V0O1xuICB9XG5cbiAgLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmZhZGUtaW4tdHJhbnNpdGlvbiB7XG4gIGFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1vei1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtby1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbXMtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtby1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1zLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDQ3MDY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE4OTg2KSxvPW4oMTA2NjkpLGk9big3Nzg4KSxhPW4oODY1NTgpLGM9big2MDYzMikscz1uKDQyMDA1KSx1PW4oNzY0MjgpLGw9big3MzUyMyksZj1uKDYzNTUzKTsoZT1yKCExKSkuaShvKSxlLmkoaSksZS5pKGEpLGUuaShjKSxlLmkocyksZS5pKHUpLGUuaShsKSxlLmkoZiksZS5wdXNoKFt0LmlkLCJodG1sLFxuYm9keSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLFxuICAgICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbn1cblxuYiB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbiN1bC1hcHAge1xuICBvcGFjaXR5OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXNocmluazogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi51bC1mb290ZXItYnViYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgM3B4O1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tZGVza3RvcCxcbi5jbG9zZS1jb250YWluZXItLW1vYmlsZSB7XG4gIGhlaWdodDogMjJweDtcbiAgd2lkdGg6IDIycHg7XG4gIGJvcmRlci1yYWRpdXM6IDIycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgdG9wOiAyNXB4O1xuICByaWdodDogMjVweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgdG9wOiAxNXB4O1xuICByaWdodDogMTBweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cblxuLmNsb3NlLWJ0biB7XG4gIGhlaWdodDogMThweDtcbiAgd2lkdGg6IDE4cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi51bC1hcHBfX2NvbnRhaW5lciB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLW91dDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLmxpa2VydC1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLmxpa2VydC1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubGlrZXJ0LW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLTEge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLmxpa2VydC1udW1iZXItNSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjA2MzI6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnNlbGVjdC1sYWJlbCB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDIwMDU6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIGxpa2VydC5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbnBzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5ucHMtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLm5wcy1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubnBzLW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLTAge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLm5wcy1udW1iZXItMTAge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbjogN3B4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMgc3BhbjpsYXN0LWNoaWxkIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDEwNjY5OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi8qKlxuICogbWluaXJlc2V0LmNzc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2pndGhtcy9taW5pcmVzZXQuY3NzXG4gKi9cblxuaHRtbCxcbmJvZHksXG5wLFxub2wsXG51bCxcbmxpLFxuZGwsXG5kdCxcbmRkLFxuYmxvY2txdW90ZSxcbmZpZ3VyZSxcbmZpZWxkc2V0LFxubGVnZW5kLFxudGV4dGFyZWEsXG5wcmUsXG5pZnJhbWUsXG5ocixcbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG51bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBtYXJnaW46IDA7XG59XG5cbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDc2NDI4OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi51bC1jYXJkLS10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtdGV4dCB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cblxuLnVsLWNhcmQtdGV4dF9fY29udGFpbmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZmxleDogMSAwIDEwMCU7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXgtaGVpZ2h0OiA2M3B4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dC0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDE1MHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIG1pbi1oZWlnaHQ6IDYzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDEycHg7XG4gIHJlc2l6ZTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHJnYmEoMTA4LCAxMDgsIDExMCwgMC41KTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbn1cblxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIHBhZGRpbmc6IDEwLjVweCAyMXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzM1MjM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdCB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lcixcbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjMzQzNDQyO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24ge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDJlbTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjM1NTM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXZpZGVvIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuI3VsLWNhcmQtdm9pY2VfX3ZpZGVvIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi51bC1jYXJkLXRleHRfX2J1dHRvbi51bC1idXR0b24taW5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xuICBjb2xvcjogIzVkNjk2ZiAhaW1wb3J0YW50O1xufVxuXG4jdWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAtbW96LWF2YWlsYWJsZTsgLyogV2ViS2l0LWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlOyAvKiBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiBmaWxsLWF2YWlsYWJsZTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjI1ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fX0sNDQ2MjE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsbixyLG8saSxhKXt0cnl7dmFyIGM9dFtpXShhKSxzPWMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbih0KX1jLmRvbmU/ZShzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT10LmFwcGx5KG4scik7ZnVuY3Rpb24gYyh0KXtlKGEsbyxpLGMscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtlKGEsbyxpLGMscywidGhyb3ciLHQpfWModm9pZCAwKX0pKX19fSwzMDU5MzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LDQ0NTM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXQuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSw2NDE1NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fX0sNjYwODE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmV4cG9ydHM9ZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10LmV4cG9ydHM9ZX0sOTQyNjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfX0sOTQ1NjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LDkyODE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTgyKSxvPW4oOTQyNjYpLGk9big5NDU2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpfHxvKHQpfHxpKCl9fSw3NjM5MDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP3QuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxlKG4pfXQuZXhwb3J0cz1lfSw0NDY3NDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oNDY2NzkpfSw5NzM0MzpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbztyPVt0LGVdLG49ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG4scixvPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDoobj1bXSxyPVtdLHtoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT4tMX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiByW24uaW5kZXhPZih0KV19LHNldDpmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLHIucHVzaChlKSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksci5zcGxpY2UoZSwxKSl9fSksaT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEV2ZW50KHQse2J1YmJsZXM6ITB9KX07dHJ5e25ldyBFdmVudCgidGVzdCIpfWNhdGNoKHQpe2k9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITEpLGV9fWZ1bmN0aW9uIGEodCl7aWYodCYmdC5ub2RlTmFtZSYmIlRFWFRBUkVBIj09PXQubm9kZU5hbWUmJiFvLmhhcyh0KSl7dmFyIGU9bnVsbCxuPW51bGwscj1udWxsLGE9ZnVuY3Rpb24oKXt0LmNsaWVudFdpZHRoIT09biYmZCgpfSxjPWZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3Quc3R5bGVbbl09ZVtuXX0pKSxvLmRlbGV0ZSh0KX0uYmluZCh0LHtoZWlnaHQ6dC5zdHlsZS5oZWlnaHQscmVzaXplOnQuc3R5bGUucmVzaXplLG92ZXJmbG93WTp0LnN0eWxlLm92ZXJmbG93WSxvdmVyZmxvd1g6dC5zdHlsZS5vdmVyZmxvd1gsd29yZFdyYXA6dC5zdHlsZS53b3JkV3JhcH0pO3QuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksIm9ucHJvcGVydHljaGFuZ2UiaW4gdCYmIm9uaW5wdXQiaW4gdCYmdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLHQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLHQuc3R5bGUud29yZFdyYXA9ImJyZWFrLXdvcmQiLG8uc2V0KHQse2Rlc3Ryb3k6Yyx1cGRhdGU6ZH0pLHMoKX1mdW5jdGlvbiBzKCl7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTsidmVydGljYWwiPT09bi5yZXNpemU/dC5zdHlsZS5yZXNpemU9Im5vbmUiOiJib3RoIj09PW4ucmVzaXplJiYodC5zdHlsZS5yZXNpemU9Imhvcml6b250YWwiKSxlPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz8tKHBhcnNlRmxvYXQobi5wYWRkaW5nVG9wKStwYXJzZUZsb2F0KG4ucGFkZGluZ0JvdHRvbSkpOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCkrcGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKSxpc05hTihlKSYmKGU9MCksZCgpfWZ1bmN0aW9uIHUoZSl7dmFyIG49dC5zdHlsZS53aWR0aDt0LnN0eWxlLndpZHRoPSIwcHgiLHQub2Zmc2V0V2lkdGgsdC5zdHlsZS53aWR0aD1uLHQuc3R5bGUub3ZlcmZsb3dZPWV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W107dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50Oyl0LnBhcmVudE5vZGUuc2Nyb2xsVG9wJiZlLnB1c2goe25vZGU6dC5wYXJlbnROb2RlLHNjcm9sbFRvcDp0LnBhcmVudE5vZGUuc2Nyb2xsVG9wfSksdD10LnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2lmKDAhPT10LnNjcm9sbEhlaWdodCl7dmFyIHI9bCh0KSxvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDt0LnN0eWxlLmhlaWdodD0iIix0LnN0eWxlLmhlaWdodD10LnNjcm9sbEhlaWdodCtlKyJweCIsbj10LmNsaWVudFdpZHRoLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2RlLnNjcm9sbFRvcD10LnNjcm9sbFRvcH0pKSxvJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1vKX19ZnVuY3Rpb24gZCgpe2YoKTt2YXIgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQodC5zdHlsZS5oZWlnaHQpKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4uaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQ7aWYobzxlPyJoaWRkZW4iPT09bi5vdmVyZmxvd1kmJih1KCJzY3JvbGwiKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpOiJoaWRkZW4iIT09bi5vdmVyZmxvd1kmJih1KCJoaWRkZW4iKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpLHIhPT1vKXtyPW87dmFyIGE9aSgiYXV0b3NpemU6cmVzaXplZCIpO3RyeXt0LmRpc3BhdGNoRXZlbnQoYSl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGModCl7dmFyIGU9by5nZXQodCk7ZSYmZS5kZXN0cm95KCl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLnVwZGF0ZSgpfXZhciB1PW51bGw7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT8oKHU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pOigodT1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLChmdW5jdGlvbih0KXtyZXR1cm4gYSh0LGUpfSkpLHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLGMpLHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLHMpLHR9KSxlLmRlZmF1bHQ9dSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSx2b2lkIDA9PT0obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUscik6bil8fCh0LmV4cG9ydHM9byl9LDQwMDQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDY1Njc5KSxuKDUxMDkwKSxuKDI0Nzg1KSxuKDg5MTcpLG4oNTQ3ODYpLG4oMTI4MTYpLG4oNjE5MjQpLG4oOTgzMDYpLG4oMTIwMjUpLG4oMjgzMyksbig5NjQ1Myksbig3MDg2MyksbigyNDgwMiksbigxODI3Myksbig0MjQxMSksbigzNzQ4MSksbig0NTU1MCksbig1ODE2NSksbig1MTE3Myksbig4NzQzKSxuKDc1ODA0KSxuKDQ2MTQ2KSxuKDE1MDc3KSxuKDU4MzI5KSxuKDYwNTI1KSxuKDc0OTUzKSxuKDU0NzgxKSxuKDUxNjYpLG4oODk3NTgpLG4oMTgzNzgpLG4oOTI1Miksbig5MzI3Miksbig1NjE1OCksbig0MTQ1Niksbig3Mjg1MSksbigzNDUyOSksbigxOTI3OCksbig5MTIwOSksbig3MjU2MCksbigxMDYzKSxuKDk2NDk4KSxuKDIyNDQyKSxuKDc1ODk0KSxuKDcxNjIyKSxuKDc0NTM4KSxuKDIxMjcpLG4oNjk5ODgpLG4oNTczODcpLG4oMzA4MTcpLG4oNTIwNTUpLG4oNzMzNjApLG4oNDc1MDIpLG4oMzMxOTUpLG4oOTA5MTIpLG4oMjgyMDMpLG4oNzkyMjcpLG4oNDM1OTEpLG4oMjIyNzcpLG4oMjQxMjkpLG4oNzQxMjApLG4oOTQ5NjMpLG4oMjczODgpLG4oODA1MjIpLG4oNDU1MjgpLG4oODAxMTYpLG4oMjkxMTApLG4oODU1OTQpLG4oNjc4MTIpLG4oMzM3OTIpLG4oODYyMTQpLG4oNzAxNDYpLG4oNzE4NDYpLG4oNTAwNjMpLG4oMTA3NDMpLG4oODA1MTEpLG4oMTUzNzMpLG4oOTc2ODgpLG4oNzQ1NjMpLG4oNjUwMDMpLG4oODEyNzcpLG4oNDQwMTkpLG4oMzgyKSxuKDE4ODIzKSxuKDMzMzIyKSxuKDMzMDY1KSxuKDE3NDk0KSxuKDgwMzYzKSxuKDQzMzk2KSxuKDY5MTg4KSxuKDc0Nzk1KSxuKDgyMjAxKSxuKDQxNzczKSxuKDMwNDAyKSxuKDE4MTc1KSxuKDY2ODk2KSxuKDg1NzY3KSxuKDg0MzYpLG4oOTIxOTIpLG4oMTIxNTUpLG4oMjYwMTYpLG4oNzQxMTcpLG4oMjgwMDMpLG4oNjc5NDEpLG4oNDQwNTEpLG4oNDk0OTUpLG4oODcyMDkpLG4oMTgyNzYpLG4oMzc1NCksbigzMzQzNyksbigxOTQzMyksbig3MTgyNyksbigyNjA2Myksbig5NjcpLG4oMzMxMDApLG4oNDE5MjgpLG4oMTU4NjkpLG4oODg3MTUpLG4oMzY5OTUpLG4oMTEyMjQpLG4oNjM3NjUpLG4oMTMwNjQpLG4oMzIyOTMpLG4oMjEwMzIpLG4oMzc5MzYpLG4oOTM5OTUpLG4oMTMzOTMpLG4oMTEyODEpLG4oMzgwMzYpLG4oMTEzOCksbig0NjA3OCksbigzMDA4Myksbig0NzM4Myksbig3MTU1OCksbig5OTIxOCksbig5ODk3OCksbig4MDY5KSxuKDcwMjA0KSxuKDg1NzU4KSxuKDExNzczKSxuKDE1NzYzKSxuKDQxNjMyKSxuKDM2MjMzKSxuKDQwMDQ1KSxuKDIxMzc2KSxuKDg0MDcpLG4oMTY1MCksbig4MTEwNCksbigxMTY4OCksbigxNzYyOSksbig0MjQ5MCksbig5NDkwNiksbig3NDA2MSksbig1ODYwNiksbig0NTE1Nyksbig2MTI0NSksbigyOTI3Myksbig5MDU2MCksbig0NTE1NCksbig3MDM3Myksbig4MDc1Nyksbig2OTg3OSksbigyNDQ5OCksbigxNjk3OCksbigxNzE1MiksbigzNzk4NyksbigyNjgwKSxuKDM4MjgwKSxuKDE4NTU5KSxuKDUwNDgyKSxuKDc0MjMwKSxuKDE4NTA2KSxuKDIwMjQyKSxuKDI4MTU1KSxuKDMzOTAxKSxuKDc2NDQyKSxuKDg4NjM2KSxuKDgxNDYzKSxuKDk1MTYzKSxuKDgzNjczKSxuKDIzNTY4KSxuKDI3Mjk0KSxuKDI0NDU3KSxuKDM5MzIpLG4oNzU0OTkpLG4oODc1NjQpLG4oODQ1MCksbigxNzYwNSksbig3MzU2MiksbigxMTg3OCksbig2MDkyOSksbig0Mzk1MSksbig5MTM0NyksbigyOTI4NCksbig2MTk0MyksbigyNjk4NiksbigxMzY2KSxuKDgzMzEwKSxuKDQ2NTk3KSxuKDcwMTM2KSxuKDYwODY1KSxuKDY3NzA4KSxuKDk2NjM4KSxuKDM5NzMwKSxuKDc0MTE1KSxuKDg1Njg2KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNjA0OTE6ZnVuY3Rpb24odCxlLG4pe24oNDAwNDYpLG4oMTU2MjQpLG4oOTI0MDQpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw4NjQ3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSw3OTg2MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyh0KSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIHR9fSw3NjUxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDUwODY4KSxpPW4oNjY5NzEpLGE9cigidW5zY29wYWJsZXMiKSxjPUFycmF5LnByb3RvdHlwZTtudWxsPT1jW2FdJiZpKGMsYSxvKG51bGwpKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Y1thXVt0XT0hMH19LDUzMTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUrKG4/cih0LGUpLmxlbmd0aDoxKX19LDU5Mzc5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gdH19LDg3NTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gdH19LDczMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9bigxMDU5MiksYz1uKDc2Mjk4KSxzPW4oNTk1OTEpLHU9big2Njk3MSksbD1uKDkyOTEzKSxmPW4oMzc2MjApLmYsZD1uKDY0OTY1KSxwPW4oNzE4NDIpLGg9bigyMzcyNCksdj1uKDY3MjkpLGc9aS5EYXRhVmlldyx5PWcmJmcucHJvdG90eXBlLG09aS5JbnQ4QXJyYXksYj1tJiZtLnByb3RvdHlwZSx4PWkuVWludDhDbGFtcGVkQXJyYXksdz14JiZ4LnByb3RvdHlwZSxFPW0mJmQobSksaj1iJiZkKGIpLEM9T2JqZWN0LnByb3RvdHlwZSxrPUMuaXNQcm90b3R5cGVPZixTPWgoInRvU3RyaW5nVGFnIiksTz12KCJUWVBFRF9BUlJBWV9UQUciKSxJPSEoIWkuQXJyYXlCdWZmZXJ8fCFnKSxBPUkmJiEhcCYmIk9wZXJhIiE9PXMoaS5vcGVyYSksTT0hMSxfPXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0sVD1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmYyhfLHModCkpfTtmb3IociBpbiBfKWlbcl18fChBPSExKTtpZigoIUF8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHxFPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKEU9ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEEpKWZvcihyIGluIF8paVtyXSYmcChpW3JdLEUpO2lmKCghQXx8IWp8fGo9PT1DKSYmKGo9RS5wcm90b3R5cGUsQSkpZm9yKHIgaW4gXylpW3JdJiZwKGlbcl0ucHJvdG90eXBlLGopO2lmKEEmJmQodykhPT1qJiZwKHcsaiksbyYmIWMoaixTKSlmb3IociBpbiBNPSEwLGYoaixTLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKT90aGlzW09dOnZvaWQgMH19KSxfKWlbcl0mJnUoaVtyXSxPLHIpO0kmJnAmJmQoeSkhPT1DJiZwKHksQyksdC5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSOkksTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpBLFRZUEVEX0FSUkFZX1RBRzpNJiZPLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKFQodCkpcmV0dXJuIHQ7dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbih0KXtpZihwKXtpZihrLmNhbGwoRSx0KSlyZXR1cm4gdH1lbHNlIGZvcih2YXIgZSBpbiBfKWlmKGMoXyxyKSl7dmFyIG49aVtlXTtpZihuJiYodD09PW58fGsuY2FsbChuLHQpKSlyZXR1cm4gdH10aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXtpZihvKXtpZihuKWZvcih2YXIgciBpbiBfKXt2YXIgYT1pW3JdO2EmJmMoYS5wcm90b3R5cGUsdCkmJmRlbGV0ZSBhLnByb3RvdHlwZVt0XX1qW3RdJiYhbnx8bChqLHQsbj9lOkEmJmJbdF18fGUpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUsbil7dmFyIHIsYTtpZihvKXtpZihwKXtpZihuKWZvcihyIGluIF8pKGE9aVtyXSkmJmMoYSx0KSYmZGVsZXRlIGFbdF07aWYoRVt0XSYmIW4pcmV0dXJuO3RyeXtyZXR1cm4gbChFLHQsbj9lOkEmJm1bdF18fGUpfWNhdGNoKHQpe319Zm9yKHIgaW4gXykhKGE9aVtyXSl8fGFbdF0mJiFufHxsKGEsdCxlKX19LGlzVmlldzpmdW5jdGlvbih0KXt2YXIgZT1zKHQpO3JldHVybiJEYXRhVmlldyI9PT1lfHxjKF8sZSl9LGlzVHlwZWRBcnJheTpULFR5cGVkQXJyYXk6RSxUeXBlZEFycmF5UHJvdG90eXBlOmp9fSw4MjgzNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big2MjU1NiksaT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSLGE9big2Njk3MSksYz1uKDE5MjYpLHM9bigzMjE4NyksdT1uKDU5Mzc5KSxsPW4oNDM0MTYpLGY9bigyNzg4NCksZD1uKDgzOTE0KSxwPW4oOTA3MjUpLGg9bigxMzMzNCkuZix2PW4oMzc2MjApLmYsZz1uKDY1ODk1KSx5PW4oNTExMjgpLG09big4OTgyNyksYj1tLmdldCx4PW0uc2V0LHc9IkFycmF5QnVmZmVyIixFPSJEYXRhVmlldyIsaj0iV3JvbmcgaW5kZXgiLEM9ci5BcnJheUJ1ZmZlcixrPUMsUz1yLkRhdGFWaWV3LE89ci5SYW5nZUVycm9yLEk9cC5wYWNrLEE9cC51bnBhY2ssTT1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxfPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LFQ9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxSPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEkodCwyMyw0KX0sUD1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LDUyLDgpfSxOPWZ1bmN0aW9uKHQsZSl7dih0LnByb3RvdHlwZSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKVtlXX19KX0sRD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz1kKG4pLGk9Yih0KTtpZihvK2U+aS5ieXRlTGVuZ3RoKXRocm93IE8oaik7dmFyIGE9YihpLmJ1ZmZlcikuYnl0ZXMsYz1vK2kuYnl0ZU9mZnNldCxzPWEuc2xpY2UoYyxjK2UpO3JldHVybiByP3M6cy5yZXZlcnNlKCl9LEY9ZnVuY3Rpb24odCxlLG4scixvLGkpe3ZhciBhPWQobiksYz1iKHQpO2lmKGErZT5jLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTtmb3IodmFyIHM9YihjLmJ1ZmZlcikuYnl0ZXMsdT1hK2MuYnl0ZU9mZnNldCxsPXIoK28pLGY9MDtmPGU7ZisrKXNbdStmXT1sW2k/ZjplLWYtMV19O2lmKGkpe2lmKCFzKChmdW5jdGlvbigpe0MoMSl9KSl8fCFzKChmdW5jdGlvbigpe25ldyBDKC0xKX0pKXx8cygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMsbmV3IEMoMS41KSxuZXcgQyhOYU4pLEMubmFtZSE9d30pKSl7Zm9yKHZhciBVLEI9KGs9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyxrKSxuZXcgQyhkKHQpKX0pLnByb3RvdHlwZT1DLnByb3RvdHlwZSx6PWgoQyksVj0wO3oubGVuZ3RoPlY7KShVPXpbVisrXSlpbiBrfHxhKGssVSxDW1VdKTtCLmNvbnN0cnVjdG9yPWt9dmFyIEg9bmV3IFMobmV3IGsoMikpLHE9Uy5wcm90b3R5cGUuc2V0SW50ODtILnNldEludDgoMCwyMTQ3NDgzNjQ4KSxILnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhSC5nZXRJbnQ4KDApJiZILmdldEludDgoMSl8fGMoUy5wcm90b3R5cGUse3NldEludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2Ugaz1mdW5jdGlvbih0KXt1KHRoaXMsayx3KTt2YXIgZT1kKHQpO3godGhpcyx7Ynl0ZXM6Zy5jYWxsKG5ldyBBcnJheShlKSwwKSxieXRlTGVuZ3RoOmV9KSxvfHwodGhpcy5ieXRlTGVuZ3RoPWUpfSxTPWZ1bmN0aW9uKHQsZSxuKXt1KHRoaXMsUyxFKSx1KHQsayxFKTt2YXIgcj1iKHQpLmJ5dGVMZW5ndGgsaT1sKGUpO2lmKGk8MHx8aT5yKXRocm93IE8oIldyb25nIG9mZnNldCIpO2lmKGkrKG49dm9pZCAwPT09bj9yLWk6ZihuKSk+cil0aHJvdyBPKCJXcm9uZyBsZW5ndGgiKTt4KHRoaXMse2J1ZmZlcjp0LGJ5dGVMZW5ndGg6bixieXRlT2Zmc2V0Oml9KSxvfHwodGhpcy5idWZmZXI9dCx0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9LG8mJihOKGssImJ5dGVMZW5ndGgiKSxOKFMsImJ1ZmZlciIpLE4oUywiYnl0ZUxlbmd0aCIpLE4oUywiYnl0ZU9mZnNldCIpKSxjKFMucHJvdG90eXBlLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gZVsxXTw8OHxlWzBdfSxnZXRJbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBBKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDIzKX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gQShEKHRoaXMsOCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LE0sZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxULGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxMLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDgsdCxQLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfX0pO3koayx3KSx5KFMsRSksdC5leHBvcnRzPXtBcnJheUJ1ZmZlcjprLERhdGFWaWV3OlN9fSw5OTQzMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KSxhPU1hdGgubWluO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyksYz1pKG4ubGVuZ3RoKSxzPW8odCxjKSx1PW8oZSxjKSxsPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9YSgodm9pZCAwPT09bD9jOm8obCxjKSktdSxjLXMpLGQ9MTtmb3IodTxzJiZzPHUrZiYmKGQ9LTEsdSs9Zi0xLHMrPWYtMSk7Zi0tID4wOyl1IGluIG4/bltzXT1uW3VdOmRlbGV0ZSBuW3NdLHMrPWQsdSs9ZDtyZXR1cm4gbn19LDY1ODk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxjPW8oYT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbikscz1hPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx1PXZvaWQgMD09PXM/bjpvKHMsbik7dT5jOyllW2MrK109dDtyZXR1cm4gZX19LDMxMzY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMDAyNSkuZm9yRWFjaCxvPW4oMjI5MDkpO3QuZXhwb3J0cz1vKCJmb3JFYWNoIik/ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX06W10uZm9yRWFjaH0sODUxNjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ2MTMwKSxvPW4oMTkyMDkpLGk9bigxMjI3OCksYT1uKDQ0OTg0KSxjPW4oMjc4ODQpLHM9big1ODgxMCksdT1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixsLGYsZCxwPW8odCksaD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHY9YXJndW1lbnRzLmxlbmd0aCxnPXY+MT9hcmd1bWVudHNbMV06dm9pZCAwLHk9dm9pZCAwIT09ZyxtPTAsYj11KHApO2lmKHkmJihnPXIoZyx2PjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Ynx8aD09QXJyYXkmJmEoYikpZm9yKG49bmV3IGgoZT1jKHAubGVuZ3RoKSk7ZT5tO20rKylzKG4sbSx5P2cocFttXSxtKTpwW21dKTtlbHNlIGZvcihkPShmPWIuY2FsbChwKSkubmV4dCxuPW5ldyBoOyEobD1kLmNhbGwoZikpLmRvbmU7bSsrKXMobixtLHk/aShmLGcsW2wudmFsdWUsbV0sITApOmwudmFsdWUpO3JldHVybiBuLmxlbmd0aD1tLG59fSw4NTgwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGEpe3ZhciBjLHM9cihlKSx1PW8ocy5sZW5ndGgpLGw9aShhLHUpO2lmKHQmJm4hPW4pe2Zvcig7dT5sOylpZigoYz1zW2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDt1Pmw7bCsrKWlmKCh0fHxsIGluIHMpJiZzW2xdPT09bilyZXR1cm4gdHx8bHx8MDtyZXR1cm4hdCYmLTF9fTt0LmV4cG9ydHM9e2luY2x1ZGVzOmEoITApLGluZGV4T2Y6YSghMSl9fSwzMDAyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NjEzMCksbz1uKDI0OTgpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNzAwOSkscz1bXS5wdXNoLHU9ZnVuY3Rpb24odCl7dmFyIGU9MT09dCxuPTI9PXQsdT0zPT10LGw9ND09dCxmPTY9PXQsZD01PT10fHxmO3JldHVybiBmdW5jdGlvbihwLGgsdixnKXtmb3IodmFyIHksbSxiPWkocCkseD1vKGIpLHc9cihoLHYsMyksRT1hKHgubGVuZ3RoKSxqPTAsQz1nfHxjLGs9ZT9DKHAsRSk6bj9DKHAsMCk6dm9pZCAwO0U+ajtqKyspaWYoKGR8fGogaW4geCkmJihtPXcoeT14W2pdLGosYiksdCkpaWYoZSlrW2pdPW07ZWxzZSBpZihtKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gajtjYXNlIDI6cy5jYWxsKGsseSl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnV8fGw/bDprfX07dC5leHBvcnRzPXtmb3JFYWNoOnUoMCksbWFwOnUoMSksZmlsdGVyOnUoMiksc29tZTp1KDMpLGV2ZXJ5OnUoNCksZmluZDp1KDUpLGZpbmRJbmRleDp1KDYpfX0sNDkyNDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big0MzQxNiksaT1uKDI3ODg0KSxhPW4oMjI5MDkpLGM9TWF0aC5taW4scz1bXS5sYXN0SW5kZXhPZix1PSEhcyYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MCxsPWEoImxhc3RJbmRleE9mIik7dC5leHBvcnRzPXV8fGw/ZnVuY3Rpb24odCl7aWYodSlyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihhPWMoYSxvKGFyZ3VtZW50c1sxXSkpKSxhPDAmJihhPW4rYSk7YT49MDthLS0paWYoYSBpbiBlJiZlW2FdPT09dClyZXR1cm4gYXx8MDtyZXR1cm4tMX06c30sNjE5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDc5MDcxKSxhPW8oInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk+PTUxfHwhcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbYV09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9fSwxMjM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCksbz1uKDE5MjA5KSxpPW4oMjQ5OCksYT1uKDI3ODg0KSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyxzKXtyKG4pO3ZhciB1PW8oZSksbD1pKHUpLGY9YSh1Lmxlbmd0aCksZD10P2YtMTowLHA9dD8tMToxO2lmKGM8Milmb3IoOzspe2lmKGQgaW4gbCl7cz1sW2RdLGQrPXA7YnJlYWt9aWYoZCs9cCx0P2Q8MDpmPD1kKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7dD9kPj0wOmY+ZDtkKz1wKWQgaW4gbCYmKHM9bihzLGxbZF0sZCx1KSk7cmV0dXJuIHN9fTt0LmV4cG9ydHM9e2xlZnQ6YyghMSkscmlnaHQ6YyghMCl9fSw3MDA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNjE5OSksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBvKHQpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49dC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4/QXJyYXk6bikoMD09PWU/MDplKX19LDQ1NjY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDg3NTc5KSxpPW4oNzcwMSkoIlByb21pc2UiKSxhPVtdLnB1c2gsYz1mdW5jdGlvbih0KXt2YXIgZT0wPT10LG49MT09dCxjPTI9PXQscz0zPT10O3JldHVybiBmdW5jdGlvbih0LHUpe28odCk7dmFyIGw9cih0Lm5leHQpLGY9ZT9bXTp2b2lkIDA7cmV0dXJuIGV8fHIodSksbmV3IGkoKGZ1bmN0aW9uKHIsZCl7dmFyIHA9ZnVuY3Rpb24oKXt0cnl7aS5yZXNvbHZlKG8obC5jYWxsKHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKG8odCkuZG9uZSlyKGU/ZjohcyYmKGN8fHZvaWQgMCkpO2Vsc2V7dmFyIGw9dC52YWx1ZTtlPyhhLmNhbGwoZixsKSxwKCkpOmkucmVzb2x2ZSh1KGwpKS50aGVuKChmdW5jdGlvbih0KXtuP3AoKTpjP3Q/cCgpOnIoITEpOnQ/cihzfHxsKTpwKCl9KSxkKX19Y2F0Y2godCl7ZCh0KX19KSxkKX1jYXRjaCh0KXtkKHQpfX07cCgpfSkpfX07dC5leHBvcnRzPXt0b0FycmF5OmMoMCksZm9yRWFjaDpjKDEpLGV2ZXJ5OmMoMiksc29tZTpjKDMpLGZpbmQ6Yyg0KX19LDYzODQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM0NzQxKSxjPW4oNjQ5NjUpLHM9big3NjI5OCksdT1uKDY2OTcxKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1sKCJhc3luY0l0ZXJhdG9yIikscD1pLkFzeW5jSXRlcmF0b3IsaD1hLkFzeW5jSXRlcmF0b3JQcm90b3R5cGU7aWYoIWYpaWYoaClyPWg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcClyPXAucHJvdG90eXBlO2Vsc2UgaWYoYS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1J8fGkuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SKXRyeXtvPWMoYyhjKEZ1bmN0aW9uKCJyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7fSgpIikoKSkpKSxjKG8pPT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byl9Y2F0Y2godCl7fXJ8fChyPXt9KSxzKHIsZCl8fHUocixkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz1yfSw0NjEzMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5jYWxsKGUpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gdC5jYWxsKGUsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sMTIyNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvKXt0cnl7cmV0dXJuIG8/ZShyKG4pWzBdLG5bMV0pOmUobil9Y2F0Y2goZSl7dmFyIGk9dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwodCkpLGV9fX0sNDc5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtvPSEwfX07YVtyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT17fTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSx0KGkpfWNhdGNoKHQpe31yZXR1cm4gbn19LDI0NTk0OmZ1bmN0aW9uKHQpe3ZhciBlPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sNTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89bigyNDU5NCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXt2YXIgZSxuLHI7cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPU9iamVjdCh0KSxpKSk/bjphP28oZSk6Ik9iamVjdCI9PShyPW8oZSkpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsZWU/IkFyZ3VtZW50cyI6cn19LDk4MTc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cih0aGlzKSxlPW8odC5hZGQpLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKyllLmNhbGwodCxhcmd1bWVudHNbbl0pO3JldHVybiB0fX0sMTQ2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9cih0aGlzKSxuPW8oZS5kZWxldGUpLGk9ITAsYT0wLGM9YXJndW1lbnRzLmxlbmd0aDthPGM7YSsrKXQ9bi5jYWxsKGUsYXJndW1lbnRzW2FdKSxpPWkmJnQ7cmV0dXJuISFpfX0sMTI5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oNDYxMzApLGk9big0MTMzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxjLHM9YXJndW1lbnRzLmxlbmd0aCx1PXM+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiByKHRoaXMpLChlPXZvaWQgMCE9PXUpJiZyKHUpLG51bGw9PXQ/bmV3IHRoaXM6KG49W10sZT8oYT0wLGM9byh1LHM+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpLGkodCwoZnVuY3Rpb24odCl7bi5wdXNoKGModCxhKyspKX0pKSk6aSh0LG4ucHVzaCxuKSxuZXcgdGhpcyhuKSl9fSwyNTAyNjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IHRoaXMoZSl9fSw2NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNzYyMCkuZixvPW4oNTA4NjgpLGk9bigxOTI2KSxhPW4oNDYxMzApLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oNDYwNjEpLGw9big2NzUzOCksZj1uKDYyNTU2KSxkPW4oOTYwMykuZmFzdEtleSxwPW4oODk4MjcpLGg9cC5zZXQsdj1wLmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBsPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGwsZSksaCh0LHt0eXBlOmUsaW5kZXg6byhudWxsKSxmaXJzdDp2b2lkIDAsbGFzdDp2b2lkIDAsc2l6ZTowfSksZnx8KHQuc2l6ZT0wKSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLHA9dihlKSxnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9cCh0KSxhPXkodCxlKTtyZXR1cm4gYT9hLnZhbHVlPW46KGkubGFzdD1hPXtpbmRleDpvPWQoZSwhMCksa2V5OmUsdmFsdWU6bixwcmV2aW91czpyPWkubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxpLmZpcnN0fHwoaS5maXJzdD1hKSxyJiYoci5uZXh0PWEpLGY/aS5zaXplKys6dC5zaXplKyssIkYiIT09byYmKGkuaW5kZXhbb109YSkpLHR9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXAodCksbz1kKGUpO2lmKCJGIiE9PW8pcmV0dXJuIHIuaW5kZXhbb107Zm9yKG49ci5maXJzdDtuO249bi5uZXh0KWlmKG4ua2V5PT1lKXJldHVybiBufTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cCh0aGlzKSxlPXQuaW5kZXgsbj10LmZpcnN0O247KW4ucmVtb3ZlZD0hMCxuLnByZXZpb3VzJiYobi5wcmV2aW91cz1uLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgZVtuLmluZGV4XSxuPW4ubmV4dDt0LmZpcnN0PXQubGFzdD12b2lkIDAsZj90LnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKGUpLHI9eShlLHQpO2lmKHIpe3ZhciBvPXIubmV4dCxpPXIucHJldmlvdXM7ZGVsZXRlIG4uaW5kZXhbci5pbmRleF0sci5yZW1vdmVkPSEwLGkmJihpLm5leHQ9byksbyYmKG8ucHJldmlvdXM9aSksbi5maXJzdD09ciYmKG4uZmlyc3Q9byksbi5sYXN0PT1yJiYobi5sYXN0PWkpLGY/bi5zaXplLS06ZS5zaXplLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXAodGhpcykscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2UubmV4dDpuLmZpcnN0Oylmb3IocihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF5KHRoaXMsdCl9fSksaShsLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9eSh0aGlzLHQpO3JldHVybiBlJiZlLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyh0aGlzLDA9PT10PzA6dCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0PTA9PT10PzA6dCx0KX19KSxmJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykuc2l6ZX19KSxsfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUrIiBJdGVyYXRvciIsbz12KGUpLGk9dihyKTt1KHQsZSwoZnVuY3Rpb24odCxlKXtoKHRoaXMse3R5cGU6cix0YXJnZXQ6dCxzdGF0ZTpvKHQpLGtpbmQ6ZSxsYXN0OnZvaWQgMH0pfSksKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWkodGhpcyksZT10LmtpbmQsbj10Lmxhc3Q7biYmbi5yZW1vdmVkOyluPW4ucHJldmlvdXM7cmV0dXJuIHQudGFyZ2V0JiYodC5sYXN0PW49bj9uLm5leHQ6dC5zdGF0ZS5maXJzdCk/ImtleXMiPT1lP3t2YWx1ZTpuLmtleSxkb25lOiExfToidmFsdWVzIj09ZT97dmFsdWU6bi52YWx1ZSxkb25lOiExfTp7dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9Oih0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksbChlKX19fSw3MTMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyNiksbz1uKDk2MDMpLmdldFdlYWtEYXRhLGk9big4NzU3OSksYT1uKDEwNTkyKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDMwMDI1KSxsPW4oNzYyOTgpLGY9big4OTgyNyksZD1mLnNldCxwPWYuZ2V0dGVyRm9yLGg9dS5maW5kLHY9dS5maW5kSW5kZXgsZz0wLHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IG0pfSxtPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodC5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSl9O20ucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIWIodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIG49Yih0aGlzLHQpO24/blsxXT1lOnRoaXMuZW50cmllcy5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXYodGhpcy5lbnRyaWVzLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KSk7cmV0dXJufmUmJnRoaXMuZW50cmllcy5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgZj10KChmdW5jdGlvbih0LHIpe2ModCxmLGUpLGQodCx7dHlwZTplLGlkOmcrKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxoPXAoZSksdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9aCh0KSxhPW8oaShlKSwhMCk7cmV0dXJuITA9PT1hP3kocikuc2V0KGUsbik6YVtyLmlkXT1uLHR9O3JldHVybiByKGYucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmRlbGV0ZSh0KTpuJiZsKG4sZS5pZCkmJmRlbGV0ZSBuW2UuaWRdfSxoYXM6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmhhcyh0KTpuJiZsKG4sZS5pZCl9fSkscihmLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZihhKHQpKXt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmdldCh0KTpuP25bZS5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYodGhpcyx0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdih0aGlzLHQsITApfX0pLGZ9fX0sODE5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oOTYwMykscz1uKDQxMzM0KSx1PW4oNTkzNzkpLGw9bigxMDU5MiksZj1uKDMyMTg3KSxkPW4oNDc5NikscD1uKDUxMTI4KSxoPW4oMzAyNzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHY9LTEhPT10LmluZGV4T2YoIk1hcCIpLGc9LTEhPT10LmluZGV4T2YoIldlYWsiKSx5PXY/InNldCI6ImFkZCIsbT1vW3RdLGI9bSYmbS5wcm90b3R5cGUseD1tLHc9e30sRT1mdW5jdGlvbih0KXt2YXIgZT1iW3RdO2EoYix0LCJhZGQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OiJkZWxldGUiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gZyYmIWwodCk/dm9pZCAwOmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJoYXMiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsbiksdGhpc30pfTtpZihpKHQsImZ1bmN0aW9uIiE9dHlwZW9mIG18fCEoZ3x8Yi5mb3JFYWNoJiYhZigoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PW4uZ2V0Q29uc3RydWN0b3IoZSx0LHYseSksYy5SRVFVSVJFRD0hMDtlbHNlIGlmKGkodCwhMCkpe3ZhciBqPW5ldyB4LEM9alt5XShnP3t9Oi0wLDEpIT1qLGs9ZigoZnVuY3Rpb24oKXtqLmhhcygxKX0pKSxTPWQoKGZ1bmN0aW9uKHQpe25ldyBtKHQpfSkpLE89IWcmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBtLGU9NTtlLS07KXRbeV0oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO1N8fCgoeD1lKChmdW5jdGlvbihlLG4pe3UoZSx4LHQpO3ZhciByPWgobmV3IG0sZSx4KTtyZXR1cm4gbnVsbCE9biYmcyhuLHJbeV0scix2KSxyfSkpKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPXgpLChrfHxPKSYmKEUoImRlbGV0ZSIpLEUoImhhcyIpLHYmJkUoImdldCIpKSwoT3x8QykmJkUoeSksZyYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9cmV0dXJuIHdbdF09eCxyKHtnbG9iYWw6ITAsZm9yY2VkOnghPW19LHcpLHAoeCx0KSxnfHxuLnNldFN0cm9uZyh4LHQsdikseH19LDc0Njg1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big1MDg2OCksYT1uKDEwNTkyKSxjPWZ1bmN0aW9uKCl7dGhpcy5vYmplY3Q9bnVsbCx0aGlzLnN5bWJvbD1udWxsLHRoaXMucHJpbWl0aXZlcz1udWxsLHRoaXMub2JqZWN0c0J5SW5kZXg9aShudWxsKX07Yy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbdF18fCh0aGlzW3RdPWUoKSl9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4/dGhpcy5vYmplY3RzQnlJbmRleFt0XXx8KHRoaXMub2JqZWN0c0J5SW5kZXhbdF09bmV3IG8pOnRoaXMucHJpbWl0aXZlc3x8KHRoaXMucHJpbWl0aXZlcz1uZXcgciksYT1pLmdldChlKTtyZXR1cm4gYXx8aS5zZXQoZSxhPW5ldyBjKSxhfTt2YXIgcz1uZXcgYzt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLG49cyxyPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pJiYobj1uLm5leHQodCxlLCEwKSk7aWYodGhpcz09PU9iamVjdCYmbj09PXMpdGhyb3cgVHlwZUVycm9yKCJDb21wb3NpdGUga2V5cyBtdXN0IGNvbnRhaW4gYSBub24tcHJpbWl0aXZlIGNvbXBvbmVudCIpO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKXx8KG49bi5uZXh0KHQsZSwhMSkpO3JldHVybiBufX0sOTk2MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigyNDQxNSksaT1uKDk3MjU3KSxhPW4oMzc2MjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1vKGUpLGM9YS5mLHM9aS5mLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGw9blt1XTtyKHQsbCl8fGModCxsLHMoZSxsKSl9fX0sOTM5MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5eyIvLi8iW3RdKGUpfWNhdGNoKG4pe3RyeXtyZXR1cm4gZVtyXT0hMSwiLy4vIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiExfX0sNzE2MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKX0sMjcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1uKDc3MDEpKCJQcm9taXNlIiksZD1sLnNldCxwPWwuZ2V0LGg9dSgidG9TdHJpbmdUYWciKSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj9mLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dH0pOmkobi5jYWxsKGUsdCkpfSxnPWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O3JldHVybiB2b2lkIDA9PT1uP2YucmVqZWN0KHQpOm4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxkKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5Bc3luY0l0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oZSl7dmFyIG49cCh0aGlzKTtpZihuLmRvbmUpcmV0dXJuIGYucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTt0cnl7cmV0dXJuIGYucmVzb2x2ZShpKHQuY2FsbChuLGUsZikpKX1jYXRjaCh0KXtyZXR1cm4gZi5yZWplY3QodCl9fSxyZXR1cm46dix0aHJvdzpnfSksZXx8YyhuLnByb3RvdHlwZSxoLCJHZW5lcmF0b3IiKSxufX0sMzEzNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89LyIvZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9U3RyaW5nKHIodCkpLGM9IjwiK2U7cmV0dXJuIiIhPT1uJiYoYys9IiAiK24rJz0iJytTdHJpbmcoaSkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLGMrIj4iK2ErIjwvIitlKyI+In19LDcxMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsbz1uKDUwODY4KSxpPW4oMTQyMDkpLGE9big1MTEyOCksYz1uKDEyMzUpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1vKHIse25leHQ6aSgxLG4pfSksYSh0LHUsITEsITApLGNbdV09cyx0fX0sODgwNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPWwuc2V0LGQ9bC5nZXQscD11KCJ0b1N0cmluZ1RhZyIpLGg9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP3tkb25lOiEwLHZhbHVlOnR9Omkobi5jYWxsKGUsdCkpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O2lmKHZvaWQgMD09PW4pdGhyb3cgdDtyZXR1cm4gbi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGYodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkl0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLG49ZS5kb25lP3ZvaWQgMDp0LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm57ZG9uZTplLmRvbmUsdmFsdWU6bn19LHJldHVybjpoLHRocm93OnZ9KSxlfHxjKG4ucHJvdG90eXBlLHAsIkdlbmVyYXRvciIpLG59fSw2Njk3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1yP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gby5mKHQsZSxpKDEsbikpfTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bix0fX0sMTQyMDk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sNTg4MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzNDk4KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1yKGUpO2EgaW4gdD9vLmYodCxhLGkoMCxuKSk6dFthXT1ufX0sNzkxNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KSxvPW4oMjY1NzMpLnN0YXJ0LGk9TWF0aC5hYnMsYT1EYXRlLnByb3RvdHlwZSxjPWEuZ2V0VGltZSxzPWEudG9JU09TdHJpbmc7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXIoKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSkpP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGMuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxuPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIHIrbyhpKGUpLHI/Njo0LDApKyItIitvKHQuZ2V0VVRDTW9udGgoKSsxLDIsMCkrIi0iK28odC5nZXRVVENEYXRlKCksMiwwKSsiVCIrbyh0LmdldFVUQ0hvdXJzKCksMiwwKSsiOiIrbyh0LmdldFVUQ01pbnV0ZXMoKSwyLDApKyI6IitvKHQuZ2V0VVRDU2Vjb25kcygpLDIsMCkrIi4iK28obiwzLDApKyJaIn06c30sNzY5NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oNTM0OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9PXQmJiJudW1iZXIiIT09dCYmImRlZmF1bHQiIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBoaW50Iik7cmV0dXJuIG8ocih0aGlzKSwibnVtYmVyIiE9PXQpfX0sNDYwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTExMjgpLHM9big2Njk3MSksdT1uKDkyOTEzKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1uKDEyMzUpLHA9big2NDE3NiksaD1wLkl0ZXJhdG9yUHJvdG90eXBlLHY9cC5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLGc9bCgiaXRlcmF0b3IiKSx5PSJrZXlzIixtPSJ2YWx1ZXMiLGI9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCx3LEUpe28obixlLGwpO3ZhciBqLEMsayxTPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZfKXJldHVybiBfO2lmKCF2JiZ0IGluIEEpcmV0dXJuIEFbdF07c3dpdGNoKHQpe2Nhc2UgeTpjYXNlIG06Y2FzZSBiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxPPWUrIiBJdGVyYXRvciIsST0hMSxBPXQucHJvdG90eXBlLE09QVtnXXx8QVsiQEBpdGVyYXRvciJdfHxwJiZBW3BdLF89IXYmJk18fFMocCksVD0iQXJyYXkiPT1lJiZBLmVudHJpZXN8fE07aWYoVCYmKGo9aShULmNhbGwobmV3IHQpKSxoIT09T2JqZWN0LnByb3RvdHlwZSYmai5uZXh0JiYoZnx8aShqKT09PWh8fChhP2EoaixoKToiZnVuY3Rpb24iIT10eXBlb2YgaltnXSYmcyhqLGcseCkpLGMoaixPLCEwLCEwKSxmJiYoZFtPXT14KSkpLHA9PW0mJk0mJk0ubmFtZSE9PW0mJihJPSEwLF89ZnVuY3Rpb24oKXtyZXR1cm4gTS5jYWxsKHRoaXMpfSksZiYmIUV8fEFbZ109PT1ffHxzKEEsZyxfKSxkW2VdPV8scClpZihDPXt2YWx1ZXM6UyhtKSxrZXlzOnc/XzpTKHkpLGVudHJpZXM6UyhiKX0sRSlmb3IoayBpbiBDKSh2fHxJfHwhKGsgaW4gQSkpJiZ1KEEsayxDW2tdKTtlbHNlIHIoe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDp2fHxJfSxDKTtyZXR1cm4gQ319LDkyMjc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oNzYyOTgpLGk9big3MzkxNiksYT1uKDM3NjIwKS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yLlN5bWJvbHx8KHIuU3ltYm9sPXt9KTtvKGUsdCl8fGEoZSx0LHt2YWx1ZTppLmYodCl9KX19LDYyNTU2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDE5MjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigxMDU5MiksaT1yLmRvY3VtZW50LGE9byhpKSYmbyhpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSw0NzA5NDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9fSw1OTEzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sMTQwNDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5NzI1NykuZixpPW4oNjY5NzEpLGE9big5MjkxMyksYz1uKDk4MjY5KSxzPW4oOTk2MjUpLHU9big2NDUwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbCxmLGQscCxoPXQudGFyZ2V0LHY9dC5nbG9iYWwsZz10LnN0YXQ7aWYobj12P3I6Zz9yW2hdfHxjKGgse30pOihyW2hdfHx7fSkucHJvdG90eXBlKWZvcihsIGluIGUpe2lmKGQ9ZVtsXSxmPXQubm9UYXJnZXRHZXQ/KHA9byhuLGwpKSYmcC52YWx1ZTpuW2xdLCF1KHY/bDpoKyhnPyIuIjoiIyIpK2wsdC5mb3JjZWQpJiZ2b2lkIDAhPT1mKXtpZih0eXBlb2YgZD09dHlwZW9mIGYpY29udGludWU7cyhkLGYpfSh0LnNoYW18fGYmJmYuc2hhbSkmJmkoZCwic2hhbSIsITApLGEobixsLGQsdCl9fX0sMzIxODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSwzNTg2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjY5NzEpLG89big5MjkxMyksaT1uKDMyMTg3KSxhPW4oMjM3MjQpLGM9bigzODU5OCkscz1hKCJzcGVjaWVzIiksdT0haSgoZnVuY3Rpb24oKXt2YXIgdD0vLi87cmV0dXJuIHQuZXhlYz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0Lmdyb3Vwcz17YToiNyJ9LHR9LCI3IiE9PSIiLnJlcGxhY2UodCwiJDxhPiIpfSkpLGw9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Lyg/OikvLGU9dC5leGVjO3QuZXhlYz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49ImFiIi5zcGxpdCh0KTtyZXR1cm4gMiE9PW4ubGVuZ3RofHwiYSIhPT1uWzBdfHwiYiIhPT1uWzFdfSkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixmKXt2YXIgZD1hKHQpLHA9IWkoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGVbZF09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbdF0oZSl9KSksaD1wJiYhaSgoZnVuY3Rpb24oKXt2YXIgZT0hMSxuPS9hLztyZXR1cm4ic3BsaXQiPT09dCYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9IiIsbltkXT0vLi9bZF0pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiBlPSEwLG51bGx9LG5bZF0oIiIpLCFlfSkpO2lmKCFwfHwhaHx8InJlcGxhY2UiPT09dCYmIXV8fCJzcGxpdCI9PT10JiYhbCl7dmFyIHY9Ly4vW2RdLGc9bihkLCIiW3RdLChmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiBlLmV4ZWM9PT1jP3AmJiFvP3tkb25lOiEwLHZhbHVlOnYuY2FsbChlLG4scil9Ontkb25lOiEwLHZhbHVlOnQuY2FsbChuLGUscil9Ontkb25lOiExfX0pKSx5PWdbMF0sbT1nWzFdO28oU3RyaW5nLnByb3RvdHlwZSx0LHkpLG8oUmVnRXhwLnByb3RvdHlwZSxkLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbS5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIG0uY2FsbCh0LHRoaXMpfSksZiYmcihSZWdFeHAucHJvdG90eXBlW2RdLCJzaGFtIiwhMCl9fX0sODA2NjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYxOTkpLG89bigyNzg4NCksaT1uKDQ2MTMwKSxhPWZ1bmN0aW9uKHQsZSxuLGMscyx1LGwsZil7Zm9yKHZhciBkLHA9cyxoPTAsdj0hIWwmJmkobCxmLDMpO2g8Yzspe2lmKGggaW4gbil7aWYoZD12P3YobltoXSxoLGUpOm5baF0sdT4wJiZyKGQpKXA9YSh0LGUsZCxvKGQubGVuZ3RoKSxwLHUtMSktMTtlbHNle2lmKHA+PTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgVHlwZUVycm9yKCJFeGNlZWQgdGhlIGFjY2VwdGFibGUgYXJyYXkgbGVuZ3RoIik7dFtwXT1kfXArK31oKyt9cmV0dXJuIHB9O3QuZXhwb3J0cz1hfSw0NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjU2NzIpLG89big4OTU1OCksaT1uKDMyMTg3KTt0LmV4cG9ydHM9cnx8IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5yYW5kb20oKTtfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCx0LChmdW5jdGlvbigpe30pKSxkZWxldGUgb1t0XX0pKX0sNTIxMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXt2YXIgZT0iIlt0XSgnIicpO3JldHVybiBlIT09ZS50b0xvd2VyQ2FzZSgpfHxlLnNwbGl0KCciJykubGVuZ3RoPjN9KSl9fSw4NDc1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDUwMDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7cmV0dXJuISFvW3RdKCl8fCLigIvCheGgjiIhPSLigIvCheGgjiJbdF0oKXx8b1t0XS5uYW1lIT09dH0pKX19LDc0NTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LDczNzM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDEwNTkyKSxpPVtdLnNsaWNlLGE9e30sYz1mdW5jdGlvbih0LGUsbil7aWYoIShlIGluIGEpKXtmb3IodmFyIHI9W10sbz0wO288ZTtvKyspcltvXT0iYVsiK28rIl0iO2FbZV09RnVuY3Rpb24oIkMsYSIsInJldHVybiBuZXcgQygiK3Iuam9pbigiLCIpKyIpIil9cmV0dXJuIGFbZV0odCxuKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyksbj1pLmNhbGwoYXJndW1lbnRzLDEpLGE9ZnVuY3Rpb24oKXt2YXIgcj1uLmNvbmNhdChpLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhP2MoZSxyLmxlbmd0aCxyKTplLmFwcGx5KHQscil9O3JldHVybiBvKGUucHJvdG90eXBlKSYmKGEucHJvdG90eXBlPWUucHJvdG90eXBlKSxhfX0sNjY5MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzM4OTApLG89bigyMzcyNCkoImFzeW5jSXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFtvXTtyZXR1cm4gdm9pZCAwPT09ZT9yKHQpOmV9fSw3NzAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oODk1NTgpLGk9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDB9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aShyW3RdKXx8aShvW3RdKTpyW3RdJiZyW3RdW2VdfHxvW3RdJiZvW3RdW2VdfX0sNzM4OTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTk1OTEpLG89bigxMjM1KSxpPW4oMjM3MjQpKCJpdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXJldHVybiB0W2ldfHx0WyJAQGl0ZXJhdG9yIl18fG9bcih0KV19fSwzMTA3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIHIoZS5jYWxsKHQpKX19LDQxOTg5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIE1hcC5wcm90b3R5cGUuZW50cmllcy5jYWxsKHQpfX0sNDE0NzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gU2V0LnByb3RvdHlwZS52YWx1ZXMuY2FsbCh0KX19LDg5NTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9cigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxyKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHIoIm9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDc2Mjk4OmZ1bmN0aW9uKHQpe3ZhciBlPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuKX19LDIzMDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sODM2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29uc29sZTtuJiZuLmVycm9yJiYoMT09PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcih0KTpuLmVycm9yKHQsZSkpfX0sNTE1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDYyNzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigxOTIzKTt0LmV4cG9ydHM9IXImJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSw5MDcyNTpmdW5jdGlvbih0KXt2YXIgZT0xLzAsbj1NYXRoLmFicyxyPU1hdGgucG93LG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MTjI7dC5leHBvcnRzPXtwYWNrOmZ1bmN0aW9uKHQsYyxzKXt2YXIgdSxsLGYsZD1uZXcgQXJyYXkocykscD04KnMtYy0xLGg9KDE8PHApLTEsdj1oPj4xLGc9MjM9PT1jP3IoMiwtMjQpLXIoMiwtNzcpOjAseT10PDB8fDA9PT10JiYxL3Q8MD8xOjAsbT0wO2ZvcigodD1uKHQpKSE9dHx8dD09PWU/KGw9dCE9dD8xOjAsdT1oKToodT1vKGkodCkvYSksdCooZj1yKDIsLXUpKTwxJiYodS0tLGYqPTIpLCh0Kz11K3Y+PTE/Zy9mOmcqcigyLDEtdikpKmY+PTImJih1KyssZi89MiksdSt2Pj1oPyhsPTAsdT1oKTp1K3Y+PTE/KGw9KHQqZi0xKSpyKDIsYyksdSs9dik6KGw9dCpyKDIsdi0xKSpyKDIsYyksdT0wKSk7Yz49ODtkW20rK109MjU1JmwsbC89MjU2LGMtPTgpO2Zvcih1PXU8PGN8bCxwKz1jO3A+MDtkW20rK109MjU1JnUsdS89MjU2LHAtPTgpO3JldHVybiBkWy0tbV18PTEyOCp5LGR9LHVucGFjazpmdW5jdGlvbih0LG4pe3ZhciBvLGk9dC5sZW5ndGgsYT04Kmktbi0xLGM9KDE8PGEpLTEscz1jPj4xLHU9YS03LGw9aS0xLGY9dFtsLS1dLGQ9MTI3JmY7Zm9yKGY+Pj03O3U+MDtkPTI1NipkK3RbbF0sbC0tLHUtPTgpO2ZvcihvPWQmKDE8PC11KS0xLGQ+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbbF0sbC0tLHUtPTgpO2lmKDA9PT1kKWQ9MS1zO2Vsc2V7aWYoZD09PWMpcmV0dXJuIG8/TmFOOmY/LTEvMDplO28rPXIoMixuKSxkLT1zfXJldHVybihmPy0xOjEpKm8qcigyLGQtbil9fX0sMjQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDI0NTk0KSxpPSIiLnNwbGl0O3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09byh0KT9pLmNhbGwodCwiIik6T2JqZWN0KHQpfTpPYmplY3R9LDMwMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNzE4NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYTtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mKGk9ZS5jb25zdHJ1Y3RvcikmJmkhPT1uJiZyKGE9aS5wcm90b3R5cGUpJiZhIT09bi5wcm90b3R5cGUmJm8odCxhKSx0fX0sNzY3NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQ3NDEpLG89RnVuY3Rpb24udG9TdHJpbmc7ImZ1bmN0aW9uIiE9dHlwZW9mIHIuaW5zcGVjdFNvdXJjZSYmKHIuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKHQpfSksdC5leHBvcnRzPXIuaW5zcGVjdFNvdXJjZX0sOTYwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzA3MCksbz1uKDEwNTkyKSxpPW4oNzYyOTgpLGE9bigzNzYyMCkuZixjPW4oNjcyOSkscz1uKDc0NTIwKSx1PWMoIm1ldGEiKSxsPTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxkPWZ1bmN0aW9uKHQpe2EodCx1LHt2YWx1ZTp7b2JqZWN0SUQ6Ik8iKyArK2wsd2Vha0RhdGE6e319fSl9LHA9dC5leHBvcnRzPXtSRVFVSVJFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7ZCh0KX1yZXR1cm4gdFt1XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtkKHQpfXJldHVybiB0W3VdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmcC5SRVFVSVJFRCYmZih0KSYmIWkodCx1KSYmZCh0KSx0fX07clt1XT0hMH0sODk4Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oMTk1OTEpLGM9big4OTU1OCkscz1uKDEwNTkyKSx1PW4oNjY5NzEpLGw9big3NjI5OCksZj1uKDgzMTk3KSxkPW4oMjMwNzApLHA9Yy5XZWFrTWFwO2lmKGEpe3ZhciBoPW5ldyBwLHY9aC5nZXQsZz1oLmhhcyx5PWguc2V0O3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5jYWxsKGgsdCxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiB2LmNhbGwoaCx0KXx8e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChoLHQpfX1lbHNle3ZhciBtPWYoInN0YXRlIik7ZFttXT0hMCxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxtLGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKT90W21dOnt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSl9fXQuZXhwb3J0cz17c2V0OnIsZ2V0Om8saGFzOmksZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9vKHQpOnIodCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG47aWYoIXMoZSl8fChuPW8oZSkpLnR5cGUhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCIpO3JldHVybiBufX19fSw0NDk4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDEyMzUpLGk9cigiaXRlcmF0b3IiKSxhPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihvLkFycmF5PT09dHx8YVtpXT09PXQpfX0sNjE5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PXIodCl9fSw2NDUwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz0vI3xcLnByb3RvdHlwZVwuLyxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49Y1thKHQpXTtyZXR1cm4gbj09dXx8biE9cyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3IoZSk6ISFlKX0sYT1pLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UobywiLiIpLnRvTG93ZXJDYXNlKCl9LGM9aS5kYXRhPXt9LHM9aS5OQVRJVkU9Ik4iLHU9aS5QT0xZRklMTD0iUCI7dC5leHBvcnRzPWl9LDM4MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFyKHQpJiZpc0Zpbml0ZSh0KSYmbyh0KT09PXR9fSwyMTIzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChyKX0sMTA1OTI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH19LDY1NjcyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0hMX0sNDMyMjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89bigyNDU5NCksaT1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHIodCkmJih2b2lkIDAhPT0oZT10W2ldKT8hIWU6IlJlZ0V4cCI9PW8odCkpfX0sNDEzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big0NDk4NCksaT1uKDI3ODg0KSxhPW4oNDYxMzApLGM9big3Mzg5MCkscz1uKDEyMjc4KSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wcGVkPXQsdGhpcy5yZXN1bHQ9ZX07KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLGYpe3ZhciBkLHAsaCx2LGcseSxtLGI9YShlLG4sbD8yOjEpO2lmKGYpZD10O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKHA9Yyh0KSkpdGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGl0ZXJhYmxlIik7aWYobyhwKSl7Zm9yKGg9MCx2PWkodC5sZW5ndGgpO3Y+aDtoKyspaWYoKGc9bD9iKHIobT10W2hdKVswXSxtWzFdKTpiKHRbaF0pKSYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX1kPXAuY2FsbCh0KX1mb3IoeT1kLm5leHQ7IShtPXkuY2FsbChkKSkuZG9uZTspaWYoIm9iamVjdCI9PXR5cGVvZihnPXMoZCxiLG0udmFsdWUsbCkpJiZnJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfSkuc3RvcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoITAsdCl9fSw2NDE3NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhPW4oNjQ5NjUpLGM9big2Njk3MSkscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NTY3MiksZj11KCJpdGVyYXRvciIpLGQ9ITE7W10ua2V5cyYmKCJuZXh0ImluKGk9W10ua2V5cygpKT8obz1hKGEoaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihyPW8pOmQ9ITApLG51bGw9PXImJihyPXt9KSxsfHxzKHIsZil8fGMocixmLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6cixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmR9fSwxMjM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sNDc5Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPXIodGhpcyksaT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJBdCBsZWFzdCBvbmUgY2FsbGJhY2sgcmVxdWlyZWQiKTtyZXR1cm4gby5oYXModCk/KG49by5nZXQodCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUobiksby5zZXQodCxuKSkpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYobj1pKCksby5zZXQodCxuKSksbn19LDcyOTcwOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZXhwbTEsbj1NYXRoLmV4cDt0LmV4cG9ydHM9IWV8fGUoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZSgxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWUoLTJlLTE3KT9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6bih0KS0xfTplfSw1MzI1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzODc4Nyksbz1NYXRoLmFicyxpPU1hdGgucG93LGE9aSgyLC01MiksYz1pKDIsLTIzKSxzPWkoMiwxMjcpKigyLWMpLHU9aSgyLC0xMjYpO3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24odCl7dmFyIGUsbixpPW8odCksbD1yKHQpO3JldHVybiBpPHU/bCooaS91L2MrMS9hLTEvYSkqdSpjOihuPShlPSgxK2MvYSkqaSktKGUtaSkpPnN8fG4hPW4/bCooMS8wKTpsKm59fSwyMTkzMjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmxvZzt0LmV4cG9ydHM9TWF0aC5sb2cxcHx8ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPi0xZS04JiZ0PDFlLTg/dC10KnQvMjplKDErdCl9fSw3NzQyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8ZSE9ZXx8biE9bnx8ciE9cnx8byE9bz9OYU46dD09PTEvMHx8dD09PS0xLzA/dDoodC1lKSooby1yKS8obi1lKStyfX0sMzg3ODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sNjU1NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZj1uKDg5NTU4KSxkPW4oOTcyNTcpLmYscD1uKDI0NTk0KSxoPW4oMjE3NDQpLnNldCx2PW4oMjEyMzEpLGc9Zi5NdXRhdGlvbk9ic2VydmVyfHxmLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIseT1mLnByb2Nlc3MsbT1mLlByb21pc2UsYj0icHJvY2VzcyI9PXAoeSkseD1kKGYsInF1ZXVlTWljcm90YXNrIiksdz14JiZ4LnZhbHVlO3d8fChyPWZ1bmN0aW9uKCl7dmFyIHQsZTtmb3IoYiYmKHQ9eS5kb21haW4pJiZ0LmV4aXQoKTtvOyl7ZT1vLmZuLG89by5uZXh0O3RyeXtlKCl9Y2F0Y2godCl7dGhyb3cgbz9hKCk6aT12b2lkIDAsdH19aT12b2lkIDAsdCYmdC5lbnRlcigpfSxiP2E9ZnVuY3Rpb24oKXt5Lm5leHRUaWNrKHIpfTpnJiYhdj8oYz0hMCxzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZyhyKS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxhPWZ1bmN0aW9uKCl7cy5kYXRhPWM9IWN9KTptJiZtLnJlc29sdmU/KHU9bS5yZXNvbHZlKHZvaWQgMCksbD11LnRoZW4sYT1mdW5jdGlvbigpe2wuY2FsbCh1LHIpfSk6YT1mdW5jdGlvbigpe2guY2FsbChmLHIpfSksdC5leHBvcnRzPXd8fGZ1bmN0aW9uKHQpe3ZhciBlPXtmbjp0LG5leHQ6dm9pZCAwfTtpJiYoaS5uZXh0PWUpLG98fChvPWUsYSgpKSxpPWV9fSwzOTQ1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXIuUHJvbWlzZX0sOTAxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIVN0cmluZyhTeW1ib2woKSl9KSl9LDU3NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big2NTY3MiksYT1vKCJpdGVyYXRvciIpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXt2YXIgdD1uZXcgVVJMKCJiP2E9MSZiPTImYz0zIiwiaHR0cDovL2EiKSxlPXQuc2VhcmNoUGFyYW1zLG49IiI7cmV0dXJuIHQucGF0aG5hbWU9ImMlMjBkIixlLmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZS5kZWxldGUoImIiKSxuKz1yK3R9KSksaSYmIXQudG9KU09OfHwhZS5zb3J0fHwiaHR0cDovL2EvYyUyMGQ/YT0xJmM9MyIhPT10LmhyZWZ8fCIzIiE9PWUuZ2V0KCJjIil8fCJhPTEiIT09U3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoIj9hPTEiKSl8fCFlW2FdfHwiYSIhPT1uZXcgVVJMKCJodHRwczovL2FAYiIpLnVzZXJuYW1lfHwiYiIhPT1uZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoImE9YiIpKS5nZXQoImEiKXx8InhuLS1lMWF5YmMiIT09bmV3IFVSTCgiaHR0cDovL9GC0LXRgdGCIikuaG9zdHx8IiMlRDAlQjEiIT09bmV3IFVSTCgiaHR0cDovL2Ej0LEiKS5oYXNofHwiYTFjMyIhPT1ufHwieCIhPT1uZXcgVVJMKCJodHRwOi8veCIsdm9pZCAwKS5ob3N0fSkpfSwxOTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDc2NzczKSxpPXIuV2Vha01hcDt0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIGkmJi9uYXRpdmUgY29kZS8udGVzdChvKGkpKX0sODMwODM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPWZ1bmN0aW9uKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxuPXJ9KSksdGhpcy5yZXNvbHZlPXIoZSksdGhpcy5yZWplY3Q9cihuKX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0sOTkzNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMyMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihyKHQpKXRocm93IFR5cGVFcnJvcigiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9fSw4OTU0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCkuaXNGaW5pdGU7dC5leHBvcnRzPU51bWJlci5pc0Zpbml0ZXx8ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZyKHQpfX0sNzg2ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigyNTUwNyksYT1uKDU2OTkxKSxjPW4oNDE2MjgpLHM9bigxOTIwOSksdT1uKDI0OTgpLGw9T2JqZWN0LmFzc2lnbixmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmV4cG9ydHM9IWx8fG8oKGZ1bmN0aW9uKCl7aWYociYmMSE9PWwoe2I6MX0sbChmKHt9LCJhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIHQ9e30sZT17fSxuPVN5bWJvbCgpLG89ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gdFtuXT03LG8uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09dH0pKSw3IT1sKHt9LHQpW25dfHxpKGwoe30sZSkpLmpvaW4oIiIpIT1vfSkpP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXModCksbz1hcmd1bWVudHMubGVuZ3RoLGw9MSxmPWEuZixkPWMuZjtvPmw7KWZvcih2YXIgcCxoPXUoYXJndW1lbnRzW2wrK10pLHY9Zj9pKGgpLmNvbmNhdChmKGgpKTppKGgpLGc9di5sZW5ndGgseT0wO2c+eTspcD12W3krK10sciYmIWQuY2FsbChoLHApfHwobltwXT1oW3BdKTtyZXR1cm4gbn06bH0sNTA4Njg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQwMSksaT1uKDU5MTM1KSxhPW4oMjMwNzApLGM9big1MTU3MSkscz1uKDE5MjMpLHU9big4MzE5NykoIklFX1BST1RPIiksbD1mdW5jdGlvbigpe30sZj1mdW5jdGlvbigpe3ZhciB0LGU9cygiaWZyYW1lIiksbj1pLmxlbmd0aDtmb3IoZS5zdHlsZS5kaXNwbGF5PSJub25lIixjLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZygiamF2YXNjcmlwdDoiKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLHQuY2xvc2UoKSxmPXQuRjtuLS07KWRlbGV0ZSBmLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gZigpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KGwucHJvdG90eXBlPXIodCksbj1uZXcgbCxsLnByb3RvdHlwZT1udWxsLG5bdV09dCk6bj1mKCksdm9pZCAwPT09ZT9uOm8obixlKX0sYVt1XT0hMH0sODY0MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDg3NTc5KSxhPW4oMjU1MDcpO3QuZXhwb3J0cz1yP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIG4scj1hKGUpLGM9ci5sZW5ndGgscz0wO2M+czspby5mKHQsbj1yW3MrK10sZVtuXSk7cmV0dXJuIHR9fSwzNzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDYyNzk5KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXI/YzpmdW5jdGlvbih0LGUsbil7aWYoaSh0KSxlPWEoZSwhMCksaShuKSxvKXRyeXtyZXR1cm4gYyh0LGUsbil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKHRbZV09bi52YWx1ZSksdH19LDk3MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNDE2MjgpLGk9bigxNDIwOSksYT1uKDk1NzMpLGM9big1MzQ5OCkscz1uKDc2Mjk4KSx1PW4oNjI3OTkpLGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtlLmY9cj9sOmZ1bmN0aW9uKHQsZSl7aWYodD1hKHQpLGU9YyhlLCEwKSx1KXRyeXtyZXR1cm4gbCh0LGUpfWNhdGNoKHQpe31pZihzKHQsZSkpcmV0dXJuIGkoIW8uZi5jYWxsKHQsZSksdFtlXSl9fSwyNjkzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMTMzMzQpLmYsaT17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1pLmNhbGwodCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBvKHQpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fSh0KTpvKHIodCkpfX0sMTMzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDU2OTkxOmZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDY0OTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMTkyMDkpLGk9big4MzE5NyksYT1uKDcxNjA4KSxjPWkoIklFX1BST1RPIikscz1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1hP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gdD1vKHQpLHIodCxjKT90W2NdOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3M6bnVsbH19LDg2NDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTgyNyksbz1uKDcxMjAxKSxpPW4oNzYyOTgpLGE9bigyNTUwNyksYz1uKDE5MjA5KSxzPSJPYmplY3QgSXRlcmF0b3IiLHU9ci5zZXQsbD1yLmdldHRlckZvcihzKTt0LmV4cG9ydHM9bygoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQpO3UodGhpcyx7dHlwZTpzLG1vZGU6ZSxvYmplY3Q6bixrZXlzOmEobiksaW5kZXg6MH0pfSksIk9iamVjdCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWwodGhpcyksZT10LmtleXM7Oyl7aWYobnVsbD09PWV8fHQuaW5kZXg+PWUubGVuZ3RoKXJldHVybiB0Lm9iamVjdD10LmtleXM9bnVsbCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBuPWVbdC5pbmRleCsrXSxyPXQub2JqZWN0O2lmKGkocixuKSl7c3dpdGNoKHQubW9kZSl7Y2FzZSJrZXlzIjpyZXR1cm57dmFsdWU6bixkb25lOiExfTtjYXNlInZhbHVlcyI6cmV0dXJue3ZhbHVlOnJbbl0sZG9uZTohMX19cmV0dXJue3ZhbHVlOltuLHJbbl1dLGRvbmU6ITF9fX19KSl9LDQxNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89big5NTczKSxpPW4oODU4MDMpLmluZGV4T2YsYT1uKDIzMDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixjPW8odCkscz0wLHU9W107Zm9yKG4gaW4gYykhcihhLG4pJiZyKGMsbikmJnUucHVzaChuKTtmb3IoO2UubGVuZ3RoPnM7KXIoYyxuPWVbcysrXSkmJih+aSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sMjU1MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw0MTYyODpmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1yJiYhbi5jYWxsKHsxOjJ9LDEpO2UuZj1vP2Z1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06bn0sNzE4NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3OTg2MSk7dC5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciB0LGU9ITEsbj17fTt0cnl7KHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwobixbXSksZT1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2godCl7fXJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiByKG4pLG8oaSksZT90LmNhbGwobixpKTpuLl9fcHJvdG9fXz1pLG59fSgpOnZvaWQgMCl9LDM1Njc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigyNTUwNyksaT1uKDk1NzMpLGE9big0MTYyOCkuZixjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG4sYz1pKGUpLHM9byhjKSx1PXMubGVuZ3RoLGw9MCxmPVtdO3U+bDspbj1zW2wrK10sciYmIWEuY2FsbChjLG4pfHxmLnB1c2godD9bbixjW25dXTpjW25dKTtyZXR1cm4gZn19O3QuZXhwb3J0cz17ZW50cmllczpjKCEwKSx2YWx1ZXM6YyghMSl9fSwxOTc1ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTA2MTMpLG89big1OTU5MSk7dC5leHBvcnRzPXI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK28odGhpcykrIl0ifX0sMjQ0MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSksbz1uKDEzMzM0KSxpPW4oNTY5OTEpLGE9big4NzU3OSk7dC5leHBvcnRzPXIoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPW8uZihhKHQpKSxuPWkuZjtyZXR1cm4gbj9lLmNvbmNhdChuKHQpKTplfX0sMjQ0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUZsb2F0LGM9MS9hKGkrIi0wIikhPS0xLzA7dC5leHBvcnRzPWM/ZnVuY3Rpb24odCl7dmFyIGU9byhTdHJpbmcodCkpLG49YShlKTtyZXR1cm4gMD09PW4mJiItIj09ZS5jaGFyQXQoMCk/LTA6bn06YX0sNzg0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlSW50LGM9L15bKy1dPzBbWHhdLyxzPTghPT1hKGkrIjA4Iil8fDIyIT09YShpKyIweDE2Iik7dC5leHBvcnRzPXM/ZnVuY3Rpb24odCxlKXt2YXIgbj1vKFN0cmluZyh0KSk7cmV0dXJuIGEobixlPj4+MHx8KGMudGVzdChuKT8xNjoxMCkpfTphfSw1NjIzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDMxMTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6dH19fX0sNjMxMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89bigxMDU5MiksaT1uKDgzMDgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpLG8oZSkmJmUuY29uc3RydWN0b3I9PT10KXJldHVybiBlO3ZhciBuPWkuZih0KTtyZXR1cm4oMCxuLnJlc29sdmUpKGUpLG4ucHJvbWlzZX19LDY5OTI3OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT0yMTQ3NDgzNjQ3LG49L1teXDAtXHUwMDdFXS8scj0vWy5cdTMwMDJcdUZGMEVcdUZGNjFdL2csbz0iT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLGk9TWF0aC5mbG9vcixhPVN0cmluZy5mcm9tQ2hhckNvZGUsYz1mdW5jdGlvbih0KXtyZXR1cm4gdCsyMis3NSoodDwyNil9LHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTA7Zm9yKHQ9bj9pKHQvNzAwKTp0Pj4xLHQrPWkodC9lKTt0PjQ1NTtyKz0zNil0PWkodC8zNSk7cmV0dXJuIGkociszNip0Lyh0KzM4KSl9LHU9ZnVuY3Rpb24odCl7dmFyIG49W107dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0wLHI9dC5sZW5ndGg7bjxyOyl7dmFyIG89dC5jaGFyQ29kZUF0KG4rKyk7aWYobz49NTUyOTYmJm88PTU2MzE5JiZuPHIpe3ZhciBpPXQuY2hhckNvZGVBdChuKyspOzU2MzIwPT0oNjQ1MTImaSk/ZS5wdXNoKCgoMTAyMyZvKTw8MTApKygxMDIzJmkpKzY1NTM2KTooZS5wdXNoKG8pLG4tLSl9ZWxzZSBlLnB1c2gobyl9cmV0dXJuIGV9KHQpO3ZhciByLHUsbD10Lmxlbmd0aCxmPTEyOCxkPTAscD03Mjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPDEyOCYmbi5wdXNoKGEodSkpO3ZhciBoPW4ubGVuZ3RoLHY9aDtmb3IoaCYmbi5wdXNoKCItIik7djxsOyl7dmFyIGc9ZTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPj1mJiZ1PGcmJihnPXUpO3ZhciB5PXYrMTtpZihnLWY+aSgoZS1kKS95KSl0aHJvdyBSYW5nZUVycm9yKG8pO2ZvcihkKz0oZy1mKSp5LGY9ZyxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCh1PXRbcl0pPGYmJisrZD5lKXRocm93IFJhbmdlRXJyb3Iobyk7aWYodT09Zil7Zm9yKHZhciBtPWQsYj0zNjs7Yis9MzYpe3ZhciB4PWI8PXA/MTpiPj1wKzI2PzI2OmItcDtpZihtPHgpYnJlYWs7dmFyIHc9bS14LEU9MzYteDtuLnB1c2goYShjKHgrdyVFKSkpLG09aSh3L0UpfW4ucHVzaChhKGMobSkpKSxwPXMoZCx5LHY9PWgpLGQ9MCwrK3Z9fSsrZCwrK2Z9cmV0dXJuIG4uam9pbigiIil9O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxvLGk9W10sYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZShyLCIuIikuc3BsaXQoIi4iKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKW89YVtlXSxpLnB1c2gobi50ZXN0KG8pPyJ4bi0tIit1KG8pOm8pO3JldHVybiBpLmpvaW4oIi4iKX19LDE5MjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvIGluIGUpcih0LG8sZVtvXSxuKTtyZXR1cm4gdH19LDkyOTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpLGk9big3NjI5OCksYT1uKDk4MjY5KSxjPW4oNzY3NzMpLHM9big4OTgyNyksdT1zLmdldCxsPXMuZW5mb3JjZSxmPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe3ZhciBzPSEhYyYmISFjLnVuc2FmZSx1PSEhYyYmISFjLmVudW1lcmFibGUsZD0hIWMmJiEhYy5ub1RhcmdldEdldDsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKCJzdHJpbmciIT10eXBlb2YgZXx8aShuLCJuYW1lIil8fG8obiwibmFtZSIsZSksbChuKS5zb3VyY2U9Zi5qb2luKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiKSksdCE9PXI/KHM/IWQmJnRbZV0mJih1PSEwKTpkZWxldGUgdFtlXSx1P3RbZV09bjpvKHQsZSxuKSk6dT90W2VdPW46YShlLG4pfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnUodGhpcykuc291cmNlfHxjKHRoaXMpfSkpfSw3NzAyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNjIwNTQpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3IG8pLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWEuZ2V0KHQpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQodCxvPW5ldyByKX12YXIgaT1vLmdldChlKTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KGUsaT1uZXcgcil9cmV0dXJuIGl9O3QuZXhwb3J0cz17c3RvcmU6YSxnZXRNYXA6YyxoYXM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXModCl9LGdldDpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KX0sc2V0OmZ1bmN0aW9uKHQsZSxuLHIpe2MobixyLCEwKS5zZXQodCxlKX0sa2V5czpmdW5jdGlvbih0LGUpe3ZhciBuPWModCxlLCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5wdXNoKGUpfSkpLHJ9LHRvS2V5OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHwic3ltYm9sIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9fX0sMzU0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpLG89bigzODU5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgaT1uLmNhbGwodCxlKTtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gaX1pZigiUmVnRXhwIiE9PXIodCkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIG8uY2FsbCh0LGUpfX0sMzg1OTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGk9bigyNTQxOSksYT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Uscz1hLHU9KHI9L2EvLG89L2IqL2csYS5jYWxsKHIsImEiKSxhLmNhbGwobywiYSIpLDAhPT1yLmxhc3RJbmRleHx8MCE9PW8ubGFzdEluZGV4KSxsPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsodXx8bCkmJihzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLHM9dGhpcztyZXR1cm4gbCYmKG49bmV3IFJlZ0V4cCgiXiIrcy5zb3VyY2UrIiQoPyFcXHMpIixpLmNhbGwocykpKSx1JiYoZT1zLmxhc3RJbmRleCkscj1hLmNhbGwocyx0KSx1JiZyJiYocy5sYXN0SW5kZXg9cy5nbG9iYWw/ci5pbmRleCtyWzBdLmxlbmd0aDplKSxsJiZyJiZyLmxlbmd0aD4xJiZjLmNhbGwoclswXSxuLChmdW5jdGlvbigpe2ZvcihvPTE7bzxhcmd1bWVudHMubGVuZ3RoLTI7bysrKXZvaWQgMD09PWFyZ3VtZW50c1tvXSYmKHJbb109dm9pZCAwKX0pKSxyfSksdC5leHBvcnRzPXN9LDI1NDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxlPSIiO3JldHVybiB0Lmdsb2JhbCYmKGUrPSJnIiksdC5pZ25vcmVDYXNlJiYoZSs9ImkiKSx0Lm11bHRpbGluZSYmKGUrPSJtIiksdC5kb3RBbGwmJihlKz0icyIpLHQudW5pY29kZSYmKGUrPSJ1IiksdC5zdGlja3kmJihlKz0ieSIpLGV9fSw3MDEzMjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSwzODE4OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSw3NjQ4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT0xL2U6dCE9dCYmZSE9ZX19LDk4MjY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtvKHIsdCxlKX1jYXRjaChuKXtyW3RdPWV9cmV0dXJuIGV9fSw2NzUzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzcwMSksbz1uKDM3NjIwKSxpPW4oMjM3MjQpLGE9big2MjU1NiksYz1pKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1vLmY7YSYmZSYmIWVbY10mJm4oZSxjLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSw1MTEyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYyMCkuZixvPW4oNzYyOTgpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt0JiYhbyh0PW4/dDp0LnByb3RvdHlwZSxpKSYmcih0LGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSw4MzE5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjA1NCksbz1uKDY3MjkpLGk9cigia2V5cyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09byh0KSl9fSwzNDc0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk4MjY5KSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9cltpXXx8byhpLHt9KTt0LmV4cG9ydHM9YX0sNjIwNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzNDc0MSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvW3RdfHwob1t0XT12b2lkIDAhPT1lP2U6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy41LjAiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwyMjkwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdW3RdO3JldHVybiFufHwhcigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfX0sMTM5Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQ3MCksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGE9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09YXx8bnVsbD09KG49cihhKVtpXSk/ZTpvKG4pfX0sNjAxNDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89big3MDEzMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaSxhLGM9U3RyaW5nKG8oZSkpLHM9cihuKSx1PWMubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD8iIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KHMpKTw1NTI5Nnx8aT41NjMxOXx8cysxPT09dXx8KGE9Yy5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Yy5jaGFyQXQocyk6aTp0P2Muc2xpY2UocyxzKzIpOmEtNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19O3QuZXhwb3J0cz17Y29kZUF0OmkoITEpLGNoYXJBdDppKCEwKX19LDI2NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3ODg0KSxvPW4oNjgyNTMpLGk9big3MDEzMiksYT1NYXRoLmNlaWwsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMpe3ZhciBzLHUsbD1TdHJpbmcoaShlKSksZj1sLmxlbmd0aCxkPXZvaWQgMD09PWM/IiAiOlN0cmluZyhjKSxwPXIobik7cmV0dXJuIHA8PWZ8fCIiPT1kP2w6KHM9cC1mLCh1PW8uY2FsbChkLGEocy9kLmxlbmd0aCkpKS5sZW5ndGg+cyYmKHU9dS5zbGljZSgwLHMpKSx0P2wrdTp1K2wpfX07dC5leHBvcnRzPXtzdGFydDpjKCExKSxlbmQ6YyghMCl9fSw2ODI1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDM0MTYpLG89big3MDEzMik7dC5leHBvcnRzPSIiLnJlcGVhdHx8ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKG8odGhpcykpLG49IiIsaT1yKHQpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG51bWJlciBvZiByZXBldGl0aW9ucyIpO2Zvcig7aT4wOyhpPj4+PTEpJiYoZSs9ZSkpMSZpJiYobis9ZSk7cmV0dXJuIG59fSw4MjM1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0iWyIrbig1MDA1NSkrIl0iLGk9UmVnRXhwKCJeIitvK28rIioiKSxhPVJlZ0V4cChvK28rIiokIiksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49U3RyaW5nKHIoZSkpO3JldHVybiAxJnQmJihuPW4ucmVwbGFjZShpLCIiKSksMiZ0JiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTt0LmV4cG9ydHM9e3N0YXJ0OmMoMSksZW5kOmMoMiksdHJpbTpjKDMpfX0sMjE3NDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oODk1NTgpLGM9bigzMjE4Nykscz1uKDI0NTk0KSx1PW4oNDYxMzApLGw9big1MTU3MSksZj1uKDE5MjMpLGQ9bigyMTIzMSkscD1hLmxvY2F0aW9uLGg9YS5zZXRJbW1lZGlhdGUsdj1hLmNsZWFySW1tZWRpYXRlLGc9YS5wcm9jZXNzLHk9YS5NZXNzYWdlQ2hhbm5lbCxtPWEuRGlzcGF0Y2gsYj0wLHg9e30sdz0ib25yZWFkeXN0YXRlY2hhbmdlIixFPWZ1bmN0aW9uKHQpe2lmKHguaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPXhbdF07ZGVsZXRlIHhbdF0sZSgpfX0saj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtFKHQpfX0sQz1mdW5jdGlvbih0KXtFKHQuZGF0YSl9LGs9ZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh0KyIiLHAucHJvdG9jb2wrIi8vIitwLmhvc3QpfTtoJiZ2fHwoaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO2FyZ3VtZW50cy5sZW5ndGg+bjspZS5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4geFsrK2JdPWZ1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCkpLmFwcGx5KHZvaWQgMCxlKX0scihiKSxifSx2PWZ1bmN0aW9uKHQpe2RlbGV0ZSB4W3RdfSwicHJvY2VzcyI9PXMoZyk/cj1mdW5jdGlvbih0KXtnLm5leHRUaWNrKGoodCkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKHQpe20ubm93KGoodCkpfTp5JiYhZD8oaT0obz1uZXcgeSkucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9QyxyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTohYS5hZGRFdmVudExpc3RlbmVyfHwiZnVuY3Rpb24iIT10eXBlb2YgcG9zdE1lc3NhZ2V8fGEuaW1wb3J0U2NyaXB0c3x8YyhrKT9yPXcgaW4gZigic2NyaXB0Iik/ZnVuY3Rpb24odCl7bC5hcHBlbmRDaGlsZChmKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZW1vdmVDaGlsZCh0aGlzKSxFKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChqKHQpLDApfToocj1rLGEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsQywhMSkpKSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnZ9fSw1Mzk5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCYmIk51bWJlciIhPXIodCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpO3JldHVybit0fX0sNzY5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO3JldHVybiBuPDA/byhuK2UsMCk6aShuLGUpfX0sODM5MTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIDA7dmFyIGU9cih0KSxuPW8oZSk7aWYoZSE9PW4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIG59fSw5NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0OTgpLG89big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sNDM0MTY6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsLG49TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9uOmUpKHQpfX0sMjc4ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxOTIwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSw2MDU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NTY4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtpZihuJWUpdGhyb3cgUmFuZ2VFcnJvcigiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIG59fSw0NTY4MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7aWYoZTwwKXRocm93IFJhbmdlRXJyb3IoIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMCIpO3JldHVybiBlfX0sNTM0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFyKHQpKXJldHVybiB0O3ZhciBuLG87aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoIWUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDkwNjEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTtyW24oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhyKX0sOTMwMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2MjU1NiksYT1uKDM1NjI3KSxjPW4oNzMwNzQpLHM9big4MjgzNSksdT1uKDU5Mzc5KSxsPW4oMTQyMDkpLGY9big2Njk3MSksZD1uKDI3ODg0KSxwPW4oODM5MTQpLGg9big2MDU1OCksdj1uKDUzNDk4KSxnPW4oNzYyOTgpLHk9big1OTU5MSksbT1uKDEwNTkyKSxiPW4oNTA4NjgpLHg9big3MTg0Miksdz1uKDEzMzM0KS5mLEU9bigyMDQ1NSksaj1uKDMwMDI1KS5mb3JFYWNoLEM9big2NzUzOCksaz1uKDM3NjIwKSxTPW4oOTcyNTcpLE89big4OTgyNyksST1uKDMwMjcyKSxBPU8uZ2V0LE09Ty5zZXQsXz1rLmYsVD1TLmYsUj1NYXRoLnJvdW5kLEw9by5SYW5nZUVycm9yLFA9cy5BcnJheUJ1ZmZlcixOPXMuRGF0YVZpZXcsRD1jLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsRj1jLlRZUEVEX0FSUkFZX1RBRyxVPWMuVHlwZWRBcnJheSxCPWMuVHlwZWRBcnJheVByb3RvdHlwZSx6PWMuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixWPWMuaXNUeXBlZEFycmF5LEg9IkJZVEVTX1BFUl9FTEVNRU5UIixxPSJXcm9uZyBsZW5ndGgiLFc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLG89bmV3KHoodCkpKHIpO3I+bjspb1tuXT1lW24rK107cmV0dXJuIG99LEc9ZnVuY3Rpb24odCxlKXtfKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEEodGhpcylbZV19fSl9LFo9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQgaW5zdGFuY2VvZiBQfHwiQXJyYXlCdWZmZXIiPT0oZT15KHQpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09ZX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBWKHQpJiYic3ltYm9sIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICQodCxlPXYoZSwhMCkpP2woMix0W2VdKTpUKHQsZSl9LEo9ZnVuY3Rpb24odCxlLG4pe3JldHVybiEoJCh0LGU9dihlLCEwKSkmJm0obikmJmcobiwidmFsdWUiKSl8fGcobiwiZ2V0Iil8fGcobiwic2V0Iil8fG4uY29uZmlndXJhYmxlfHxnKG4sIndyaXRhYmxlIikmJiFuLndyaXRhYmxlfHxnKG4sImVudW1lcmFibGUiKSYmIW4uZW51bWVyYWJsZT9fKHQsZSxuKToodFtlXT1uLnZhbHVlLHQpfTtpPyhEfHwoUy5mPVksay5mPUosRyhCLCJidWZmZXIiKSxHKEIsImJ5dGVPZmZzZXQiKSxHKEIsImJ5dGVMZW5ndGgiKSxHKEIsImxlbmd0aCIpKSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUR9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WSxkZWZpbmVQcm9wZXJ0eTpKfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lm1hdGNoKC9cZCskLylbMF0vOCxjPXQrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLHM9ImdldCIrdCxsPSJzZXQiK3Qsdj1vW2NdLGc9dix5PWcmJmcucHJvdG90eXBlLGs9e30sUz1mdW5jdGlvbih0LGUpe18odCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj1BKHQpO3JldHVybiBuLnZpZXdbc10oZSppK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPUEodCk7biYmKHI9KHI9UihyKSk8MD8wOnI+MjU1PzI1NToyNTUmciksby52aWV3W2xdKGUqaStvLmJ5dGVPZmZzZXQsciwhMCl9KHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtEP2EmJihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB1KHQsZyxjKSxJKG0oZSk/WihlKT92b2lkIDAhPT1yP25ldyB2KGUsaChuLGkpLHIpOnZvaWQgMCE9PW4/bmV3IHYoZSxoKG4saSkpOm5ldyB2KGUpOlYoZSk/VyhnLGUpOkUuY2FsbChnLGUpOm5ldyB2KHAoZSkpLHQsZyl9KSkseCYmeChnLFUpLGoodyh2KSwoZnVuY3Rpb24odCl7dCBpbiBnfHxmKGcsdCx2W3RdKX0pKSxnLnByb3RvdHlwZT15KTooZz1lKChmdW5jdGlvbih0LGUsbixyKXt1KHQsZyxjKTt2YXIgbyxhLHMsbD0wLGY9MDtpZihtKGUpKXtpZighWihlKSlyZXR1cm4gVihlKT9XKGcsZSk6RS5jYWxsKGcsZSk7bz1lLGY9aChuLGkpO3ZhciB2PWUuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1yKXtpZih2JWkpdGhyb3cgTChxKTtpZigoYT12LWYpPDApdGhyb3cgTChxKX1lbHNlIGlmKChhPWQocikqaSkrZj52KXRocm93IEwocSk7cz1hL2l9ZWxzZSBzPXAoZSksbz1uZXcgUChhPXMqaSk7Zm9yKE0odCx7YnVmZmVyOm8sYnl0ZU9mZnNldDpmLGJ5dGVMZW5ndGg6YSxsZW5ndGg6cyx2aWV3Om5ldyBOKG8pfSk7bDxzOylTKHQsbCsrKX0pKSx4JiZ4KGcsVSkseT1nLnByb3RvdHlwZT1iKEIpKSx5LmNvbnN0cnVjdG9yIT09ZyYmZih5LCJjb25zdHJ1Y3RvciIsZyksRiYmZih5LEYsYyksa1tjXT1nLHIoe2dsb2JhbDohMCxmb3JjZWQ6ZyE9dixzaGFtOiFEfSxrKSxIIGluIGd8fGYoZyxILGkpLEggaW4geXx8Zih5LEgsaSksQyhjKX0pOnQuZXhwb3J0cz1mdW5jdGlvbigpe319LDIwNDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5MjA5KSxvPW4oMjc4ODQpLGk9big3Mzg5MCksYT1uKDQ0OTg0KSxjPW4oNDYxMzApLHM9big3MzA3NCkuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbix1LGwsZixkLHA9cih0KSxoPWFyZ3VtZW50cy5sZW5ndGgsdj1oPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxnPXZvaWQgMCE9PXYseT1pKHApO2lmKG51bGwhPXkmJiFhKHkpKWZvcihkPShmPXkuY2FsbChwKSkubmV4dCxwPVtdOyEobD1kLmNhbGwoZikpLmRvbmU7KXAucHVzaChsLnZhbHVlKTtmb3IoZyYmaD4yJiYodj1jKHYsYXJndW1lbnRzWzJdLDIpKSxuPW8ocC5sZW5ndGgpLHU9bmV3KHModGhpcykpKG4pLGU9MDtuPmU7ZSsrKXVbZV09Zz92KHBbZV0sZSk6cFtlXTtyZXR1cm4gdX19LDM1NjI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMzIxODcpLGk9big0Nzk2KSxhPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsYz1yLkFycmF5QnVmZmVyLHM9ci5JbnQ4QXJyYXk7dC5leHBvcnRzPSFhfHwhbygoZnVuY3Rpb24oKXtzKDEpfSkpfHwhbygoZnVuY3Rpb24oKXtuZXcgcygtMSl9KSl8fCFpKChmdW5jdGlvbih0KXtuZXcgcyxuZXcgcyhudWxsKSxuZXcgcygxLjUpLG5ldyBzKHQpfSksITApfHxvKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IHMobmV3IGMoMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sNjcyOTpmdW5jdGlvbih0KXt2YXIgZT0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiK1N0cmluZyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrKCsrZStuKS50b1N0cmluZygzNil9fSwxNjQxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDE0KTt0LmV4cG9ydHM9ciYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgpfSwzOTQ3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSw3OTA3MTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzOTQ3NiksYz1pLnByb2Nlc3Mscz1jJiZjLnZlcnNpb25zLHU9cyYmcy52ODt1P289KHI9dS5zcGxpdCgiLiIpKVswXStyWzFdOmEmJighKHI9YS5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9YS5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKG89clsxXSksdC5leHBvcnRzPW8mJitvfSw0MjE4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qocil9LDIzNzI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjIwNTQpLGk9big3NjI5OCksYT1uKDY3MjkpLGM9big5MDE0KSxzPW4oMTY0MTApLHU9bygid2tzIiksbD1yLlN5bWJvbCxmPXM/bDphO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh1LHQpfHwoYyYmaShsLHQpP3VbdF09bFt0XTp1W3RdPWYoIlN5bWJvbC4iK3QpKSx1W3RdfX0sNTAwNTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSJcdFxuXHZcZlxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI5XHVmZWZmIn0sNzM5MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpO2UuZj1yfSw2MTI0NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDgyODM1KSxhPW4oNjc1MzgpLGM9IkFycmF5QnVmZmVyIixzPWkuQXJyYXlCdWZmZXI7cih7Z2xvYmFsOiEwLGZvcmNlZDpvLkFycmF5QnVmZmVyIT09c30se0FycmF5QnVmZmVyOnN9KSxhKGMpfSwyOTI3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDczMDc0KTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixzdGF0OiEwLGZvcmNlZDohby5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTfSx7aXNWaWV3Om8uaXNWaWV3fSl9LDkwNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oODI4MzUpLGE9big4NzU3OSksYz1uKDc2OTc2KSxzPW4oMjc4ODQpLHU9bigxMzk3OSksbD1pLkFycmF5QnVmZmVyLGY9aS5EYXRhVmlldyxkPWwucHJvdG90eXBlLnNsaWNlO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwLHVuc2FmZTohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGwoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWQmJnZvaWQgMD09PWUpcmV0dXJuIGQuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgbj1hKHRoaXMpLmJ5dGVMZW5ndGgscj1jKHQsbiksbz1jKHZvaWQgMD09PWU/bjplLG4pLGk9bmV3KHUodGhpcyxsKSkocyhvLXIpKSxwPW5ldyBmKHRoaXMpLGg9bmV3IGYoaSksdj0wO3I8bzspaC5zZXRVaW50OCh2KysscC5nZXRVaW50OChyKyspKTtyZXR1cm4gaX19KX0sNTczODc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big2MTk5KSxhPW4oMTA1OTIpLGM9bigxOTIwOSkscz1uKDI3ODg0KSx1PW4oNTg4MTApLGw9big3MDA5KSxmPW4oNjE5NjMpLGQ9bigyMzcyNCkscD1uKDc5MDcxKSxoPWQoImlzQ29uY2F0U3ByZWFkYWJsZSIpLHY9OTAwNzE5OTI1NDc0MDk5MSxnPSJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiLHk9cD49NTF8fCFvKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W2hdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLG09ZigiY29uY2F0IiksYj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT10W2hdO3JldHVybiB2b2lkIDAhPT1lPyEhZTppKHQpfTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IXl8fCFtfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYT1jKHRoaXMpLGY9bChhLDApLGQ9MDtmb3IoZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrKylpZihiKGk9LTE9PT1lP2E6YXJndW1lbnRzW2VdKSl7aWYoZCsobz1zKGkubGVuZ3RoKSk+dil0aHJvdyBUeXBlRXJyb3IoZyk7Zm9yKG49MDtuPG87bisrLGQrKyluIGluIGkmJnUoZixkLGlbbl0pfWVsc2V7aWYoZD49dil0aHJvdyBUeXBlRXJyb3IoZyk7dShmLGQrKyxpKX1yZXR1cm4gZi5sZW5ndGg9ZCxmfX0pfSwzMDgxNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk5NDMxKSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7Y29weVdpdGhpbjpvfSksaSgiY29weVdpdGhpbiIpfSw1MjA1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZXZlcnk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJldmVyeSIpfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNzMzNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2NTg5NSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZpbGw6b30pLGkoImZpbGwiKX0sNDc1MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMzIxODcpLGE9big2MTk2MykoImZpbHRlciIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10uZmlsdGVyLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sOTA5MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPW4oNzY1MTMpLGE9ImZpbmRJbmRleCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmRJbmRleCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sMzMxOTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmQsaT1uKDc2NTEzKSxhPSJmaW5kIixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDc5MjI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3ZhciBlLG49aSh0aGlzKSxyPWEobi5sZW5ndGgpO3JldHVybiBjKHQpLChlPXMobiwwKSkubGVuZ3RoPW8oZSxuLG4sciwwLDEsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksZX19KX0sMjgyMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsZT1pKHRoaXMpLG49YShlLmxlbmd0aCkscj1zKGUsMCk7cmV0dXJuIHIubGVuZ3RoPW8ocixlLGUsbiwwLHZvaWQgMD09PXQ/MTpjKHQpKSxyfX0pfSw0MzU5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM2OCk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPW99LHtmb3JFYWNoOm99KX0sNzQ1Mzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NTE2Nik7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6IW4oNDc5NikoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOm99KX0sMjIyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoImluY2x1ZGVzIil9LDI0MTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9bigyMjkwOSksYT1bXS5pbmRleE9mLGM9ISFhJiYxL1sxXS5pbmRleE9mKDEsLTApPDAscz1pKCJpbmRleE9mIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN8fHN9LHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBjP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOm8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjEyNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc0FycmF5Om4oNjE5OSl9KX0sNTAwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big3NjUxMyksaT1uKDEyMzUpLGE9big4OTgyNyksYz1uKDQ2MDYxKSxzPSJBcnJheSBJdGVyYXRvciIsdT1hLnNldCxsPWEuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7dSh0aGlzLHt0eXBlOnMsdGFyZ2V0OnIodCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PWwodGhpcyksZT10LnRhcmdldCxuPXQua2luZCxyPXQuaW5kZXgrKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KToia2V5cyI9PW4/e3ZhbHVlOnIsZG9uZTohMX06InZhbHVlcyI9PW4/e3ZhbHVlOmVbcl0sZG9uZTohMX06e3ZhbHVlOltyLGVbcl1dLGRvbmU6ITF9fSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbygia2V5cyIpLG8oInZhbHVlcyIpLG8oImVudHJpZXMiKX0sNzQxMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ5OCksaT1uKDk1NzMpLGE9bigyMjkwOSksYz1bXS5qb2luLHM9byE9T2JqZWN0LHU9YSgiam9pbiIsIiwiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6c3x8dX0se2pvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbChpKHRoaXMpLHZvaWQgMD09PXQ/IiwiOnQpfX0pfSw5NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQ5MjQ5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6byE9PVtdLmxhc3RJbmRleE9mfSx7bGFzdEluZGV4T2Y6b30pfSwyNzM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkubWFwLGk9bigzMjE4NyksYT1uKDYxOTYzKSgibWFwIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5tYXAuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2OTk4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHQpaW5zdGFuY2VvZiB0KX0pKX0se29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShuLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiBuLmxlbmd0aD1lLG59fSl9LDQ1NTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5yaWdodDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZVJpZ2h0Iil9LHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5sZWZ0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlIil9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDExNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPVtdLnJldmVyc2UsYT1bMSwyXTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKGEpPT09U3RyaW5nKGEucmV2ZXJzZSgpKX0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxpLmNhbGwodGhpcyl9fSl9LDI5MTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oNjE5OSksYT1uKDc2OTc2KSxjPW4oMjc4ODQpLHM9big5NTczKSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1uKDIzNzI0KSgic3BlY2llcyIpLGQ9W10uc2xpY2UscD1NYXRoLm1heDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNsaWNlIil9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCxoPXModGhpcyksdj1jKGgubGVuZ3RoKSxnPWEodCx2KSx5PWEodm9pZCAwPT09ZT92OmUsdik7aWYoaShoKSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPWguY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFpKG4ucHJvdG90eXBlKT9vKG4pJiZudWxsPT09KG49bltmXSkmJihuPXZvaWQgMCk6bj12b2lkIDAsbj09PUFycmF5fHx2b2lkIDA9PT1uKSlyZXR1cm4gZC5jYWxsKGgsZyx5KTtmb3Iocj1uZXcodm9pZCAwPT09bj9BcnJheTpuKShwKHktZywwKSksbD0wO2c8eTtnKyssbCsrKWcgaW4gaCYmdShyLGwsaFtnXSk7cmV0dXJuIHIubGVuZ3RoPWwscn19KX0sODU1OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLnNvbWU7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJzb21lIil9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oMTkyMDkpLGE9bigzMjE4NyksYz1uKDIyOTA5KSxzPVtdLHU9cy5zb3J0LGw9YSgoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pKSxmPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSkpLGQ9Yygic29ydCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpsfHwhZnx8ZH0se3NvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dS5jYWxsKGkodGhpcykpOnUuY2FsbChpKHRoaXMpLG8odCkpfX0pfSw4NjIxNDpmdW5jdGlvbih0LGUsbil7big2NzUzOCkoIkFycmF5Iil9LDMzNzkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPW4oNDM0MTYpLGE9bigyNzg4NCksYz1uKDE5MjA5KSxzPW4oNzAwOSksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPTkwMDcxOTkyNTQ3NDA5OTEsaD0iTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBleGNlZWRlZCI7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzcGxpY2UiKX0se3NwbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCx2LGcseSxtPWModGhpcyksYj1hKG0ubGVuZ3RoKSx4PW8odCxiKSx3PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXc/bj1yPTA6MT09PXc/KG49MCxyPWIteCk6KG49dy0yLHI9ZChmKGkoZSksMCksYi14KSksYituLXI+cCl0aHJvdyBUeXBlRXJyb3IoaCk7Zm9yKGw9cyhtLHIpLHY9MDt2PHI7disrKShnPXgrdilpbiBtJiZ1KGwsdixtW2ddKTtpZihsLmxlbmd0aD1yLG48cil7Zm9yKHY9eDt2PGItcjt2KyspeT12K24sKGc9dityKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PWI7dj5iLXIrbjt2LS0pZGVsZXRlIG1bdi0xXX1lbHNlIGlmKG4+cilmb3Iodj1iLXI7dj54O3YtLSl5PXYrbi0xLChnPXYrci0xKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PTA7djxuO3YrKyltW3YreF09YXJndW1lbnRzW3YrMl07cmV0dXJuIG0ubGVuZ3RoPWItcituLGx9fSl9LDcxODQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdE1hcCIpfSw3MDE0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXQiKX0sNDUxNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4MjgzNSk7cih7Z2xvYmFsOiEwLGZvcmNlZDohbig3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUn0se0RhdGFWaWV3Om8uRGF0YVZpZXd9KX0sNDE2MzI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkRhdGUiLHN0YXQ6ITB9LHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sNDAwNDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3OTE2Nyk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1vfSx7dG9JU09TdHJpbmc6b30pfSwzNjIzMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNTM0OTgpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSl9LHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBufHxpc0Zpbml0ZShuKT9lLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sODQwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Njk3MSksbz1uKDc2OTc0KSxpPW4oMjM3MjQpKCJ0b1ByaW1pdGl2ZSIpLGE9RGF0ZS5wcm90b3R5cGU7aSBpbiBhfHxyKGEsaSxvKX0sMjEzNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpLG89RGF0ZS5wcm90b3R5cGUsaT0iSW52YWxpZCBEYXRlIixhPSJ0b1N0cmluZyIsYz1vLnRvU3RyaW5nLHM9by5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWkmJnIobyxhLChmdW5jdGlvbigpe3ZhciB0PXMuY2FsbCh0aGlzKTtyZXR1cm4gdD09dD9jLmNhbGwodGhpcyk6aX0pKX0sOTY0OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkZ1bmN0aW9uIixwcm90bzohMH0se2JpbmQ6big3MzczOSl9KX0sNzU4OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwNTkyKSxvPW4oMzc2MjApLGk9big2NDk2NSksYT1uKDIzNzI0KSgiaGFzSW5zdGFuY2UiKSxjPUZ1bmN0aW9uLnByb3RvdHlwZTthIGluIGN8fG8uZihjLGEse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzfHwhcih0KSlyZXR1cm4hMTtpZighcih0aGlzLnByb3RvdHlwZSkpcmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzO2Zvcig7dD1pKHQpOylpZih0aGlzLnByb3RvdHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9fSl9LDIyNDQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLmYsaT1GdW5jdGlvbi5wcm90b3R5cGUsYT1pLnRvU3RyaW5nLGM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8scz0ibmFtZSI7ciYmIShzIGluIGkpJiZvKGkscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5jYWxsKHRoaXMpLm1hdGNoKGMpWzFdfWNhdGNoKHQpe3JldHVybiIifX19KX0sNzE2MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOm4oODk1NTgpfSl9LDE2NTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oMzIxODcpLGE9bygiSlNPTiIsInN0cmluZ2lmeSIpLGM9L1tcdUQ4MDAtXHVERkZGXS9nLHM9L15bXHVEODAwLVx1REJGRl0kLyx1PS9eW1x1REMwMC1cdURGRkZdJC8sbD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5jaGFyQXQoZS0xKSxvPW4uY2hhckF0KGUrMSk7cmV0dXJuIHMudGVzdCh0KSYmIXUudGVzdChvKXx8dS50ZXN0KHQpJiYhcy50ZXN0KHIpPyJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik6dH0sZj1pKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PWEoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWEoIlx1ZGVhZCIpfSkpO2EmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6Zn0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByP3IucmVwbGFjZShjLGwpOnJ9fSl9LDgxMTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTtuKDUxMTI4KShyLkpTT04sIkpTT04iLCEwKX0sOTQ5MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIk1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sMjEwMzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyMTkzMiksaT1NYXRoLmFjb3NoLGE9TWF0aC5sb2csYz1NYXRoLnNxcnQscz1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHw3MTAhPU1hdGguZmxvb3IoaShOdW1iZXIuTUFYX1ZBTFVFKSl8fGkoMS8wKSE9MS8wfSx7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/YSh0KStzOm8odC0xK2ModC0xKSpjKHQrMSkpfX0pfSwzNzkzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmFzaW5oLGk9TWF0aC5sb2csYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygwKT4wKX0se2FzaW5oOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIGlzRmluaXRlKGU9K2UpJiYwIT1lP2U8MD8tdCgtZSk6aShlK2EoZSplKzEpKTplfX0pfSw5Mzk5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmF0YW5oLGk9TWF0aC5sb2c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygtMCk8MCl9LHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6aSgoMSt0KS8oMS10KSkvMn19KX0sMTMzOTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODc4NyksaT1NYXRoLmFicyxhPU1hdGgucG93O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odD0rdCkqYShpKHQpLDEvMyl9fSl9LDExMjgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE9HMkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtbyhpKHQrLjUpKmEpOjMyfX0pfSwzODAzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguY29zaCxhPU1hdGguYWJzLGM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fGkoNzEwKT09PTEvMH0se2Nvc2g6ZnVuY3Rpb24odCl7dmFyIGU9byhhKHQpLTEpKzE7cmV0dXJuKGUrMS8oZSpjKmMpKSooYy8yKX19KX0sMTEzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8hPU1hdGguZXhwbTF9LHtleHBtMTpvfSl9LDQ2MDc4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnJvdW5kOm4oNTMyNTEpfSl9LDMwMDgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguaHlwb3QsaT1NYXRoLmFicyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEhbyYmbygxLzAsTmFOKSE9PTEvMH0se2h5cG90OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsbz0wLGM9MCxzPWFyZ3VtZW50cy5sZW5ndGgsdT0wO2M8czspdTwobj1pKGFyZ3VtZW50c1tjKytdKSk/KG89byoocj11L24pKnIrMSx1PW4pOm8rPW4+MD8ocj1uL3UpKnI6bjtyZXR1cm4gdT09PTEvMD8xLzA6dSphKG8pfX0pfSw0NzM4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPU1hdGguaW11bDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPWkoNDI5NDk2NzI5NSw1KXx8MiE9aS5sZW5ndGh9KSl9LHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9biZyLGE9biZvO3JldHVybiAwfGkqYSsoKG4mcj4+PjE2KSphK2kqKG4mbz4+PjE2KTw8MTY+Pj4wKX19KX0sNzE1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxPRzEwRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxMDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSppfX0pfSw5OTIxODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzFwOm4oMjE5MzIpfSl9LDk4OTc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS9pfX0pfSw4MDY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbjpuKDM4Nzg3KX0pfSw3MDIwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNzI5NzApLGE9TWF0aC5hYnMsYz1NYXRoLmV4cCxzPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT1NYXRoLnNpbmgoLTJlLTE3KX0pKX0se3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIGEodD0rdCk8MT8oaSh0KS1pKC10KSkvMjooYyh0LTEpLWMoLXQtMSkpKihzLzIpfX0pfSw4NTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguZXhwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9byh0PSt0KSxuPW8oLXQpO3JldHVybiBlPT0xLzA/MTpuPT0xLzA/LTE6KGUtbikvKGkodCkraSgtdCkpfX0pfSwxMTc3MzpmdW5jdGlvbih0LGUsbil7big1MTEyOCkoTWF0aCwiTWF0aCIsITApfSwxNTc2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmNlaWwsaT1NYXRoLmZsb29yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/aTpvKSh0KX19KX0sNzE4Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oNzYyOTgpLHM9bigyNDU5NCksdT1uKDMwMjcyKSxsPW4oNTM0OTgpLGY9bigzMjE4NyksZD1uKDUwODY4KSxwPW4oMTMzMzQpLmYsaD1uKDk3MjU3KS5mLHY9bigzNzYyMCkuZixnPW4oODIzNTApLnRyaW0seT0iTnVtYmVyIixtPW8uTnVtYmVyLGI9bS5wcm90b3R5cGUseD1zKGQoYikpPT15LHc9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscyx1PWwodCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiB1JiZ1Lmxlbmd0aD4yKWlmKDQzPT09KGU9KHU9Zyh1KSkuY2hhckNvZGVBdCgwKSl8fDQ1PT09ZSl7aWYoODg9PT0obj11LmNoYXJDb2RlQXQoMikpfHwxMjA9PT1uKXJldHVybiBOYU59ZWxzZSBpZig0OD09PWUpe3N3aXRjaCh1LmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsbz00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxvPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK3V9Zm9yKGE9KGk9dS5zbGljZSgyKSkubGVuZ3RoLGM9MDtjPGE7YysrKWlmKChzPWkuY2hhckNvZGVBdChjKSk8NDh8fHM+bylyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChpLHIpfXJldHVybit1fTtpZihpKHksIW0oIiAwbzEiKXx8IW0oIjBiMSIpfHxtKCIrMHgxIikpKXtmb3IodmFyIEUsaj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIGomJih4P2YoKGZ1bmN0aW9uKCl7Yi52YWx1ZU9mLmNhbGwobil9KSk6cyhuKSE9eSk/dShuZXcgbSh3KGUpKSxuLGopOncoZSl9LEM9cj9wKG0pOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxrPTA7Qy5sZW5ndGg+aztrKyspYyhtLEU9Q1trXSkmJiFjKGosRSkmJnYoaixFLGgobSxFKSk7ai5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPWosYShvLHksail9fSwyNjA2MzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0Zpbml0ZTpuKDg5NTQyKX0pfSwzMzEwMDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNJbnRlZ2VyOm4oMzgyNTcpfSl9LDQxOTI4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sMTU4Njk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODI1NyksaT1NYXRoLmFicztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmkodCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDg4NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sMzY5OTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sMTEyMjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDYzNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTMwNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big1Mzk5NyksYT1uKDY4MjUzKSxjPW4oMzIxODcpLHM9MS4udG9GaXhlZCx1PU1hdGguZmxvb3IsbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lP246ZSUyPT0xP2wodCxlLTEsbip0KTpsKHQqdCxlLzIsbil9O3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6cyYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFjKChmdW5jdGlvbigpe3MuY2FsbCh7fSl9KSl9LHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixjLHM9aSh0aGlzKSxmPW8odCksZD1bMCwwLDAsMCwwLDBdLHA9IiIsaD0iMCIsdj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWU7KytuPDY7KXIrPXQqZFtuXSxkW25dPXIlMWU3LHI9dShyLzFlNyl9LGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYsbj0wOy0tZT49MDspbis9ZFtlXSxkW2VdPXUobi90KSxuPW4ldCoxZTd9LHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPSIiOy0tdD49MDspaWYoIiIhPT1lfHwwPT09dHx8MCE9PWRbdF0pe3ZhciBuPVN0cmluZyhkW3RdKTtlPSIiPT09ZT9uOmUrYS5jYWxsKCIwIiw3LW4ubGVuZ3RoKStufXJldHVybiBlfTtpZihmPDB8fGY+MjApdGhyb3cgUmFuZ2VFcnJvcigiSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cyIpO2lmKHMhPXMpcmV0dXJuIk5hTiI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIFN0cmluZyhzKTtpZihzPDAmJihwPSItIixzPS1zKSxzPjFlLTIxKWlmKG49KGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10O24+PTQwOTY7KWUrPTEyLG4vPTQwOTY7Zm9yKDtuPj0yOyllKz0xLG4vPTI7cmV0dXJuIGV9KHMqbCgyLDY5LDEpKS02OSk8MD9zKmwoMiwtZSwxKTpzL2woMixlLDEpLG4qPTQ1MDM1OTk2MjczNzA0OTYsKGU9NTItZSk+MCl7Zm9yKHYoMCxuKSxyPWY7cj49NzspdigxZTcsMCksci09Nztmb3IodihsKDEwLHIsMSksMCkscj1lLTE7cj49MjM7KWcoMTw8MjMpLHItPTIzO2coMTw8ciksdigxLDEpLGcoMiksaD15KCl9ZWxzZSB2KDAsbiksdigxPDwtZSwwKSxoPXkoKSthLmNhbGwoIjAiLGYpO3JldHVybiBoPWY+MD9wKygoYz1oLmxlbmd0aCk8PWY/IjAuIithLmNhbGwoIjAiLGYtYykraDpoLnNsaWNlKDAsYy1mKSsiLiIraC5zbGljZShjLWYpKTpwK2h9fSl9LDMyMjkzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTM5OTcpLGE9MS4udG9QcmVjaXNpb247cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiIxIiE9PWEuY2FsbCgxLHZvaWQgMCl9KSl8fCFvKChmdW5jdGlvbigpe2EuY2FsbCh7fSl9KSl9LHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoaSh0aGlzKSk6YS5jYWxsKGkodGhpcyksdCl9fSl9LDM3NDgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg2ODUpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuYXNzaWduIT09b30se2Fzc2lnbjpvfSl9LDQ1NTUwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohbig2MjU1Nil9LHtjcmVhdGU6big1MDg2OCl9KX0sMTkyNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse2dldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDUxMTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydGllczpuKDg2NDAxKX0pfSw1ODE2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnR5Om4oMzc2MjApLmZ9KX0sOTEyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse3NldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDg3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS5lbnRyaWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sNzU4MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDUyMCksaT1uKDMyMTg3KSxhPW4oMTA1OTIpLGM9big5NjAzKS5vbkZyZWV6ZSxzPU9iamVjdC5mcmVlemU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmkoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFvfSx7ZnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZhKHQpP3MoYyh0KSk6dH19KX0sNDYxNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsbil7aShlLHQsbil9KSx2b2lkIDAsITApLGV9fSl9LDE1MDc3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big5NTczKSxhPW4oOTcyNTcpLmYsYz1uKDYyNTU2KSxzPW8oKGZ1bmN0aW9uKCl7YSgxKX0pKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWN8fHMsc2hhbTohY30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSl9LDU4MzI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9bigyNDQxNSksYT1uKDk1NzMpLGM9big5NzI1Nykscz1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPWEodCksbz1jLmYsdT1pKHIpLGw9e30sZj0wO3UubGVuZ3RoPmY7KXZvaWQgMCE9PShuPW8ocixlPXVbZisrXSkpJiZzKGwsZSxuKTtyZXR1cm4gbH19KX0sNjA1MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDI2OTM3KS5mO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKX0pKX0se2dldE93blByb3BlcnR5TmFtZXM6aX0pfSw3NDk1MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big2NDk2NSksYz1uKDcxNjA4KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpLHNoYW06IWN9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19KX0sNTE2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCFhfHxhKHQpKX19KX0sODk3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0Zyb3plbjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNGcm96ZW46ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sMTgzNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc1NlYWxlZDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNTZWFsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sNTQ3ODE6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2lzOm4oNzY0ODIpfSl9LDkyNTI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxOTIwOSksaT1uKDI1NTA3KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7aSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDcyNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuZ2V0fXdoaWxlKG49cyhuKSl9fSl9LDEwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5zZXR9d2hpbGUobj1zKG4pKX19KX0sOTMyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDU2MTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3Quc2VhbDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtzZWFsOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNDE0NTY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOm4oNzE4NDIpfSl9LDM0NTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oOTI5MTMpLGk9bigxOTc1OCk7cnx8byhPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsaSx7dW5zYWZlOiEwfSl9LDcyODUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykudmFsdWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSwxOTQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sMzM0Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxNzYyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDgzMDgzKSxhPW4oMzExNSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1pLmYoZSkscj1uLnJlc29sdmUscz1uLnJlamVjdCx1PWEoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGk9W10sYT0wLHM9MTtjKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWErKyxjPSExO2kucHVzaCh2b2lkIDApLHMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH0sLS1zfHxyKGkpKX0pLChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6InJlamVjdGVkIixyZWFzb246dH0sLS1zfHxyKGkpKX0pKX0pKSwtLXN8fHIoaSl9KSk7cmV0dXJuIHUuZXJyb3ImJnModS52YWx1ZSksbi5wcm9taXNlfX0pfSw0MjQ5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDM5NDU3KSxhPW4oMzIxODcpLGM9big3NzAxKSxzPW4oMTM5NzkpLHU9big2MzEzNCksbD1uKDkyOTEzKTtyKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhaSYmYSgoZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5maW5hbGx5LmNhbGwoe3RoZW46ZnVuY3Rpb24oKXt9fSwoZnVuY3Rpb24oKXt9KSl9KSl9LHtmaW5hbGx5OmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyxjKCJQcm9taXNlIikpLG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfTp0LG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgbn0pKX06dCl9fSksb3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGl8fGkucHJvdG90eXBlLmZpbmFsbHl8fGwoaS5wcm90b3R5cGUsImZpbmFsbHkiLGMoIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseSl9LDExNjg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGEsYz1uKDE0MDQ0KSxzPW4oNjU2NzIpLHU9big4OTU1OCksbD1uKDc3MDEpLGY9bigzOTQ1NyksZD1uKDkyOTEzKSxwPW4oMTkyNiksaD1uKDUxMTI4KSx2PW4oNjc1MzgpLGc9bigxMDU5MikseT1uKDg2NDcwKSxtPW4oNTkzNzkpLGI9bigyNDU5NCkseD1uKDc2NzczKSx3PW4oNDEzMzQpLEU9big0Nzk2KSxqPW4oMTM5NzkpLEM9bigyMTc0NCkuc2V0LGs9big2NTU1NSksUz1uKDYzMTM0KSxPPW4oODM2MjApLEk9big4MzA4MyksQT1uKDMxMTUpLE09big4OTgyNyksXz1uKDY0NTA0KSxUPW4oMjM3MjQpLFI9big3OTA3MSksTD1UKCJzcGVjaWVzIiksUD0iUHJvbWlzZSIsTj1NLmdldCxEPU0uc2V0LEY9TS5nZXR0ZXJGb3IoUCksVT1mLEI9dS5UeXBlRXJyb3Isej11LmRvY3VtZW50LFY9dS5wcm9jZXNzLEg9bCgiZmV0Y2giKSxxPUkuZixXPXEsRz0icHJvY2VzcyI9PWIoViksWj0hISh6JiZ6LmNyZWF0ZUV2ZW50JiZ1LmRpc3BhdGNoRXZlbnQpLCQ9InVuaGFuZGxlZHJlamVjdGlvbiIsWT1fKFAsKGZ1bmN0aW9uKCl7aWYoISh4KFUpIT09U3RyaW5nKFUpKSl7aWYoNjY9PT1SKXJldHVybiEwO2lmKCFHJiYiZnVuY3Rpb24iIT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KXJldHVybiEwfWlmKHMmJiFVLnByb3RvdHlwZS5maW5hbGx5KXJldHVybiEwO2lmKFI+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoVSkpcmV0dXJuITE7dmFyIHQ9VS5yZXNvbHZlKDEpLGU9ZnVuY3Rpb24odCl7dCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtMXT1lLCEodC50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2YgZSl9KSksSj1ZfHwhRSgoZnVuY3Rpb24odCl7VS5hbGwodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLEs9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuISghZyh0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LFg9ZnVuY3Rpb24odCxlLG4pe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciByPWUucmVhY3Rpb25zO2soKGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWUudmFsdWUsaT0xPT1lLnN0YXRlLGE9MDtyLmxlbmd0aD5hOyl7dmFyIGMscyx1LGw9clthKytdLGY9aT9sLm9rOmwuZmFpbCxkPWwucmVzb2x2ZSxwPWwucmVqZWN0LGg9bC5kb21haW47dHJ5e2Y/KGl8fCgyPT09ZS5yZWplY3Rpb24mJm50KHQsZSksZS5yZWplY3Rpb249MSksITA9PT1mP2M9bzooaCYmaC5lbnRlcigpLGM9ZihvKSxoJiYoaC5leGl0KCksdT0hMCkpLGM9PT1sLnByb21pc2U/cChCKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPUsoYykpP3MuY2FsbChjLGQscCk6ZChjKSk6cChvKX1jYXRjaCh0KXtoJiYhdSYmaC5leGl0KCkscCh0KX19ZS5yZWFjdGlvbnM9W10sZS5ub3RpZmllZD0hMSxuJiYhZS5yZWplY3Rpb24mJnR0KHQsZSl9KSl9fSxRPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvO1o/KChyPXouY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KHQsITEsITApLHUuZGlzcGF0Y2hFdmVudChyKSk6cj17cHJvbWlzZTplLHJlYXNvbjpufSwobz11WyJvbiIrdF0pP28ocik6dD09PSQmJk8oIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsbil9LHR0PWZ1bmN0aW9uKHQsZSl7Qy5jYWxsKHUsKGZ1bmN0aW9uKCl7dmFyIG4scj1lLnZhbHVlO2lmKGV0KGUpJiYobj1BKChmdW5jdGlvbigpe0c/Vi5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLHIsdCk6USgkLHQscil9KSksZS5yZWplY3Rpb249R3x8ZXQoZSk/MjoxLG4uZXJyb3IpKXRocm93IG4udmFsdWV9KSl9LGV0PWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sbnQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXtHP1YuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsdCk6USgicmVqZWN0aW9uaGFuZGxlZCIsdCxlLnZhbHVlKX0pKX0scnQ9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3QoZSxuLG8scil9fSxvdD1mdW5jdGlvbih0LGUsbixyKXtlLmRvbmV8fChlLmRvbmU9ITAsciYmKGU9ciksZS52YWx1ZT1uLGUuc3RhdGU9MixYKHQsZSwhMCkpfSxpdD1mdW5jdGlvbih0LGUsbixyKXtpZighZS5kb25lKXtlLmRvbmU9ITAsciYmKGU9cik7dHJ5e2lmKHQ9PT1uKXRocm93IEIoIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7dmFyIG89SyhuKTtvP2soKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtvLmNhbGwobixydChpdCx0LHIsZSkscnQob3QsdCxyLGUpKX1jYXRjaChuKXtvdCh0LHIsbixlKX19KSk6KGUudmFsdWU9bixlLnN0YXRlPTEsWCh0LGUsITEpKX1jYXRjaChuKXtvdCh0LHtkb25lOiExfSxuLGUpfX19O1kmJihVPWZ1bmN0aW9uKHQpe20odGhpcyxVLFApLHkodCksci5jYWxsKHRoaXMpO3ZhciBlPU4odGhpcyk7dHJ5e3QocnQoaXQsdGhpcyxlKSxydChvdCx0aGlzLGUpKX1jYXRjaCh0KXtvdCh0aGlzLGUsdCl9fSwocj1mdW5jdGlvbih0KXtEKHRoaXMse3R5cGU6UCxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6W10scmVqZWN0aW9uOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9cChVLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPUYodGhpcykscj1xKGoodGhpcyxVKSk7cmV0dXJuIHIub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsci5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPUc/Vi5kb21haW46dm9pZCAwLG4ucGFyZW50PSEwLG4ucmVhY3Rpb25zLnB1c2gociksMCE9bi5zdGF0ZSYmWCh0aGlzLG4sITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksbz1mdW5jdGlvbigpe3ZhciB0PW5ldyByLGU9Tih0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cnQoaXQsdCxlKSx0aGlzLnJlamVjdD1ydChvdCx0LGUpfSxJLmY9cT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVV8fHQ9PT1pP25ldyBvKHQpOlcodCl9LHN8fCJmdW5jdGlvbiIhPXR5cGVvZiBmfHwoYT1mLnByb3RvdHlwZS50aGVuLGQoZi5wcm90b3R5cGUsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBVKChmdW5jdGlvbih0LGUpe2EuY2FsbChuLHQsZSl9KSkudGhlbih0LGUpfSkse3Vuc2FmZTohMH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBIJiZjKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gUyhVLEguYXBwbHkodSxhcmd1bWVudHMpKX19KSkpLGMoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpZfSx7UHJvbWlzZTpVfSksaChVLFAsITEsITApLHYoUCksaT1sKFApLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOll9LHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9cSh0aGlzKTtyZXR1cm4gZS5yZWplY3QuY2FsbCh2b2lkIDAsdCksZS5wcm9taXNlfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOnN8fFl9LHtyZXNvbHZlOmZ1bmN0aW9uKHQpe3JldHVybiBTKHMmJnRoaXM9PT1pP1U6dGhpcyx0KX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpKfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZXNvbHZlLG89bi5yZWplY3QsaT1BKChmdW5jdGlvbigpe3ZhciBuPXkoZS5yZXNvbHZlKSxpPVtdLGE9MCxjPTE7dyh0LChmdW5jdGlvbih0KXt2YXIgcz1hKyssdT0hMTtpLnB1c2godm9pZCAwKSxjKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7dXx8KHU9ITAsaVtzXT10LC0tY3x8cihpKSl9KSxvKX0pKSwtLWN8fHIoaSl9KSk7cmV0dXJuIGkuZXJyb3ImJm8oaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZWplY3Qsbz1BKChmdW5jdGlvbigpe3ZhciBvPXkoZS5yZXNvbHZlKTt3KHQsKGZ1bmN0aW9uKHQpe28uY2FsbChlLHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBvLmVycm9yJiZyKG8udmFsdWUpLG4ucHJvbWlzZX19KX0sMjkyODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDMyMTg3KSxzPW8oIlJlZmxlY3QiLCJhcHBseSIpLHU9RnVuY3Rpb24uYXBwbHk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDohYygoZnVuY3Rpb24oKXtzKChmdW5jdGlvbigpe30pKX0pKX0se2FwcGx5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaSh0KSxhKG4pLHM/cyh0LGUsbik6dS5jYWxsKHQsZSxuKX19KX0sNjE5NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDEwNTkyKSxzPW4oNTA4NjgpLHU9big3MzczOSksbD1uKDMyMTg3KSxmPW8oIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxkPWwoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKGYoKGZ1bmN0aW9uKCl7fSksW10sdClpbnN0YW5jZW9mIHQpfSkpLHA9IWwoKGZ1bmN0aW9uKCl7ZigoZnVuY3Rpb24oKXt9KSl9KSksaD1kfHxwO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6aCxzaGFtOmh9LHtjb25zdHJ1Y3Q6ZnVuY3Rpb24odCxlKXtpKHQpLGEoZSk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3Q6aShhcmd1bWVudHNbMl0pO2lmKHAmJiFkKXJldHVybiBmKHQsZSxuKTtpZih0PT1uKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIucHVzaC5hcHBseShyLGUpLG5ldyh1LmFwcGx5KHQscikpfXZhciBvPW4ucHJvdG90eXBlLGw9cyhjKG8pP286T2JqZWN0LnByb3RvdHlwZSksaD1GdW5jdGlvbi5hcHBseS5jYWxsKHQsbCxlKTtyZXR1cm4gYyhoKT9oOmx9fSl9LDI2OTg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPW4oMzc2MjApO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pKSxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2kodCk7dmFyIHI9YShlLCEwKTtpKG4pO3RyeXtyZXR1cm4gYy5mKHQscixuKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDEzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDk3MjU3KS5mO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIG49aShvKHQpLGUpO3JldHVybiEobiYmIW4uY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LDQ2NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDk3MjU3KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhLmYoaSh0KSxlKX19KX0sNzAxMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3MTYwOCl9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sODMzMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDg3NTc5KSxhPW4oNzYyOTgpLGM9big5NzI1Nykscz1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXQ6ZnVuY3Rpb24gdChlLG4pe3ZhciByLHUsbD1hcmd1bWVudHMubGVuZ3RoPDM/ZTphcmd1bWVudHNbMl07cmV0dXJuIGkoZSk9PT1sP2Vbbl06KHI9Yy5mKGUsbikpP2EociwidmFsdWUiKT9yLnZhbHVlOnZvaWQgMD09PXIuZ2V0P3ZvaWQgMDpyLmdldC5jYWxsKGwpOm8odT1zKGUpKT90KHUsbixsKTp2b2lkIDB9fSl9LDYwODY1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH19KX0sNjc3MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSwhaXx8aSh0KX19KX0sOTY2Mzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtvd25LZXlzOm4oMjQ0MTUpfSl9LDM5NzMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3NDUyMCl9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtpKHQpO3RyeXt2YXIgZT1vKCJPYmplY3QiLCJwcmV2ZW50RXh0ZW5zaW9ucyIpO3JldHVybiBlJiZlKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sODU2ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDc5ODYxKSxhPW4oNzE4NDIpO2EmJnIoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7byh0KSxpKGUpO3RyeXtyZXR1cm4gYSh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sNzQxMTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDEwNTkyKSxhPW4oNzYyOTgpLGM9bigzMjE4Nykscz1uKDM3NjIwKSx1PW4oOTcyNTcpLGw9big2NDk2NSksZj1uKDE0MjA5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7dmFyIHQ9cy5mKHt9LCJhIix7Y29uZmlndXJhYmxlOiEwfSk7cmV0dXJuITEhPT1SZWZsZWN0LnNldChsKHQpLCJhIiwxLHQpfSkpfSx7c2V0OmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBjLGQscD1hcmd1bWVudHMubGVuZ3RoPDQ/ZTphcmd1bWVudHNbM10saD11LmYobyhlKSxuKTtpZighaCl7aWYoaShkPWwoZSkpKXJldHVybiB0KGQsbixyLHApO2g9ZigwKX1pZihhKGgsInZhbHVlIikpe2lmKCExPT09aC53cml0YWJsZXx8IWkocCkpcmV0dXJuITE7aWYoYz11LmYocCxuKSl7aWYoYy5nZXR8fGMuc2V0fHwhMT09PWMud3JpdGFibGUpcmV0dXJuITE7Yy52YWx1ZT1yLHMuZihwLG4sYyl9ZWxzZSBzLmYocCxuLGYoMCxyKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PWguc2V0JiYoaC5zZXQuY2FsbChwLHIpLCEwKX19KX0sNDk0OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oMzAyNzIpLGM9bigzNzYyMCkuZixzPW4oMTMzMzQpLmYsdT1uKDQzMjIzKSxsPW4oMjU0MTkpLGY9big5MjkxMyksZD1uKDMyMTg3KSxwPW4oNjc1MzgpLGg9bigyMzcyNCkoIm1hdGNoIiksdj1vLlJlZ0V4cCxnPXYucHJvdG90eXBlLHk9L2EvZyxtPS9hL2csYj1uZXcgdih5KSE9PXk7aWYociYmaSgiUmVnRXhwIiwhYnx8ZCgoZnVuY3Rpb24oKXtyZXR1cm4gbVtoXT0hMSx2KHkpIT15fHx2KG0pPT1tfHwiL2EvaSIhPXYoeSwiaSIpfSkpKSl7Zm9yKHZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyBpbnN0YW5jZW9mIHgscj11KHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hbiYmciYmdC5jb25zdHJ1Y3Rvcj09PXgmJm8/dDphKGI/bmV3IHYociYmIW8/dC5zb3VyY2U6dCxlKTp2KChyPXQgaW5zdGFuY2VvZiB4KT90LnNvdXJjZTp0LHImJm8/bC5jYWxsKHQpOmUpLG4/dGhpczpnLHgpfSx3PWZ1bmN0aW9uKHQpe3QgaW4geHx8Yyh4LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdlt0XX0sc2V0OmZ1bmN0aW9uKGUpe3ZbdF09ZX19KX0sRT1zKHYpLGo9MDtFLmxlbmd0aD5qOyl3KEVbaisrXSk7Zy5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlPWcsZihvLCJSZWdFeHAiLHgpfXAoIlJlZ0V4cCIpfSw4NzIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzODU5OCk7cih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PW99LHtleGVjOm99KX0sMTgyNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDI1NDE5KTtyJiYiZyIhPS8uL2cuZmxhZ3MmJm8uZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6aX0pfSwzNzU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MjkxMyksbz1uKDg3NTc5KSxpPW4oMzIxODcpLGE9bigyNTQxOSksYz0idG9TdHJpbmciLHM9UmVnRXhwLnByb3RvdHlwZSx1PXMudG9TdHJpbmcsbD1pKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGY9dS5uYW1lIT1jOyhsfHxmKSYmcihSZWdFeHAucHJvdG90eXBlLGMsKGZ1bmN0aW9uKCl7dmFyIHQ9byh0aGlzKSxlPVN0cmluZyh0LnNvdXJjZSksbj10LmZsYWdzO3JldHVybiIvIitlKyIvIitTdHJpbmcodm9pZCAwPT09biYmdCBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gcyk/YS5jYWxsKHQpOm4pfSkse3Vuc2FmZTohMH0pfSw3NDA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSw0MTc3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYW5jaG9yIil9LHthbmNob3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsIm5hbWUiLHQpfX0pfSwzMDQwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmlnIil9LHtiaWc6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiaWciLCIiLCIiKX19KX0sMTgxNzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJsaW5rIil9LHtibGluazpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDY2ODk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJib2xkIil9LHtib2xkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYiIsIiIsIiIpfX0pfSwxNTM3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY29kZUF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDk3Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuZW5kc1dpdGgsZD1NYXRoLm1pbixwPXUoImVuZHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsImVuZHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWEoZS5sZW5ndGgpLG89dm9pZCAwPT09bj9yOmQoYShuKSxyKSxpPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxpLG8pOmUuc2xpY2Uoby1pLmxlbmd0aCxvKT09PWl9fSl9LDg1NzY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmaXhlZCIpfSx7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJ0dCIsIiIsIiIpfX0pfSw4NDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250Y29sb3IiKX0se2ZvbnRjb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250IiwiY29sb3IiLHQpfX0pfSw5MjE5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udHNpemUiKX0se2ZvbnRzaXplOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sMTA3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsZm9yY2VkOiEhYSYmMSE9YS5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPVtdLHI9YXJndW1lbnRzLmxlbmd0aCxhPTA7cj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10sbyhlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7bi5wdXNoKGU8NjU1MzY/aShlKTppKDU1Mjk2KygoZS09NjU1MzYpPj4xMCksZSUxMDI0KzU2MzIwKSl9cmV0dXJuIG4uam9pbigiIil9fSl9LDc0NTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDk5MzQ2KSxpPW4oNzAxMzIpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW4oOTM5MTUpKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+U3RyaW5nKGkodGhpcykpLmluZGV4T2Yobyh0KSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDEyMTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJpdGFsaWNzIil9LHtpdGFsaWNzOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiaSIsIiIsIiIpfX0pfSw4MjIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdCxvPW4oODk4MjcpLGk9big0NjA2MSksYT0iU3RyaW5nIEl0ZXJhdG9yIixjPW8uc2V0LHM9by5nZXR0ZXJGb3IoYSk7aShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKHQpe2ModGhpcyx7dHlwZTphLHN0cmluZzpTdHJpbmcodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1zKHRoaXMpLG49ZS5zdHJpbmcsbz1lLmluZGV4O3JldHVybiBvPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXIobixvKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSl9LDI2MDE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJsaW5rIil9LHtsaW5rOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJocmVmIix0KX19KX0sODEyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big4NzU3OSksdT1uKDI0NTk0KSxsPW4oNDMyMjMpLGY9bigyNTQxOSksZD1uKDY2OTcxKSxwPW4oMzIxODcpLGg9bigyMzcyNCksdj1uKDEzOTc5KSxnPW4oNTMxNDEpLHk9big4OTgyNyksbT1uKDY1NjcyKSxiPWgoIm1hdGNoQWxsIikseD0iUmVnRXhwIFN0cmluZyIsdz0iUmVnRXhwIFN0cmluZyBJdGVyYXRvciIsRT15LnNldCxqPXkuZ2V0dGVyRm9yKHcpLEM9UmVnRXhwLnByb3RvdHlwZSxrPUMuZXhlYyxTPSIiLm1hdGNoQWxsLE89ISFTJiYhcCgoZnVuY3Rpb24oKXsiYSIubWF0Y2hBbGwoLy4vKX0pKSxJPW8oKGZ1bmN0aW9uKHQsZSxuLHIpe0UodGhpcyx7dHlwZTp3LHJlZ2V4cDp0LHN0cmluZzplLGdsb2JhbDpuLHVuaWNvZGU6cixkb25lOiExfSl9KSx4LChmdW5jdGlvbigpe3ZhciB0PWoodGhpcyk7aWYodC5kb25lKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGU9dC5yZWdleHAsbj10LnN0cmluZyxyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2lmKCJvYmplY3QiIT10eXBlb2Yobj1yLmNhbGwodCxlKSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgZXhlYyByZXN1bHQiKTtyZXR1cm4gbn1yZXR1cm4gay5jYWxsKHQsZSl9KGUsbik7cmV0dXJuIG51bGw9PT1yP3t2YWx1ZTp2b2lkIDAsZG9uZTp0LmRvbmU9ITB9OnQuZ2xvYmFsPygiIj09U3RyaW5nKHJbMF0pJiYoZS5sYXN0SW5kZXg9ZyhuLGEoZS5sYXN0SW5kZXgpLHQudW5pY29kZSkpLHt2YWx1ZTpyLGRvbmU6ITF9KToodC5kb25lPSEwLHt2YWx1ZTpyLGRvbmU6ITF9KX0pKSxBPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYyx1PXModGhpcyksbD1TdHJpbmcodCk7cmV0dXJuIGU9dih1LFJlZ0V4cCksdm9pZCAwPT09KG49dS5mbGFncykmJnUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIEMpJiYobj1mLmNhbGwodSkpLHI9dm9pZCAwPT09bj8iIjpTdHJpbmcobiksbz1uZXcgZShlPT09UmVnRXhwP3Uuc291cmNlOnUsciksaT0hIX5yLmluZGV4T2YoImciKSxjPSEhfnIuaW5kZXhPZigidSIpLG8ubGFzdEluZGV4PWEodS5sYXN0SW5kZXgpLG5ldyBJKG8sbCxpLGMpfTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOk99LHttYXRjaEFsbDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1pKHRoaXMpO2lmKG51bGwhPXQpe2lmKGwodCkmJiF+U3RyaW5nKGkoImZsYWdzImluIEM/dC5mbGFnczpmLmNhbGwodCkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLm1hdGNoQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtpZih2b2lkIDA9PT0obj10W2JdKSYmbSYmIlJlZ0V4cCI9PXUodCkmJihuPUEpLG51bGwhPW4pcmV0dXJuIGMobikuY2FsbCh0LG8pfWVsc2UgaWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIGU9U3RyaW5nKG8pLHI9bmV3IFJlZ0V4cCh0LCJnIiksbT9BLmNhbGwocixlKTpyW2JdKGUpfX0pLG18fGIgaW4gQ3x8ZChDLGIsQSl9LDY1MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMjc4ODQpLGE9big3MDEzMiksYz1uKDUzMTQxKSxzPW4oMzU0NTUpO3IoIm1hdGNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWEodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBhPW8odCksdT1TdHJpbmcodGhpcyk7aWYoIWEuZ2xvYmFsKXJldHVybiBzKGEsdSk7dmFyIGw9YS51bmljb2RlO2EubGFzdEluZGV4PTA7Zm9yKHZhciBmLGQ9W10scD0wO251bGwhPT0oZj1zKGEsdSkpOyl7dmFyIGg9U3RyaW5nKGZbMF0pO2RbcF09aCwiIj09PWgmJihhLmxhc3RJbmRleD1jKHUsaShhLmxhc3RJbmRleCksbCkpLHArK31yZXR1cm4gMD09PXA/bnVsbDpkfV19KSl9LDQ0MDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5lbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwzODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLnN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUxMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk1NzMpLGk9bigyNzg4NCk7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITB9LHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8odC5yYXcpLG49aShlLmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLGE9W10sYz0wO24+YzspYS5wdXNoKFN0cmluZyhlW2MrK10pKSxjPHImJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2NdKSk7cmV0dXJuIGEuam9pbigiIil9fSl9LDE4ODIzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwZWF0Om4oNjgyNTMpfSl9LDMzMzIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAxMzIpLHU9big1MzE0MSksbD1uKDM1NDU1KSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD1NYXRoLmZsb29yLGg9L1wkKFskJidgXXxcZFxkP3w8W14+XSo+KS9nLHY9L1wkKFskJidgXXxcZFxkPykvZztyKCJyZXBsYWNlIiwyLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKG4scil7dmFyIG89cyh0aGlzKSxpPW51bGw9PW4/dm9pZCAwOm5bdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKG4sbyxyKTplLmNhbGwoU3RyaW5nKG8pLG4scil9LGZ1bmN0aW9uKHQsaSl7dmFyIHM9bihlLHQsdGhpcyxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7dmFyIHA9byh0KSxoPVN0cmluZyh0aGlzKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBpO3Z8fChpPVN0cmluZyhpKSk7dmFyIGc9cC5nbG9iYWw7aWYoZyl7dmFyIHk9cC51bmljb2RlO3AubGFzdEluZGV4PTB9Zm9yKHZhciBtPVtdOzspe3ZhciBiPWwocCxoKTtpZihudWxsPT09YilicmVhaztpZihtLnB1c2goYiksIWcpYnJlYWs7IiI9PT1TdHJpbmcoYlswXSkmJihwLmxhc3RJbmRleD11KGgsYShwLmxhc3RJbmRleCkseSkpfWZvcih2YXIgeCx3PSIiLEU9MCxqPTA7ajxtLmxlbmd0aDtqKyspe2I9bVtqXTtmb3IodmFyIEM9U3RyaW5nKGJbMF0pLGs9ZihkKGMoYi5pbmRleCksaC5sZW5ndGgpLDApLFM9W10sTz0xO088Yi5sZW5ndGg7TysrKVMucHVzaCh2b2lkIDA9PT0oeD1iW09dKT94OlN0cmluZyh4KSk7dmFyIEk9Yi5ncm91cHM7aWYodil7dmFyIEE9W0NdLmNvbmNhdChTLGssaCk7dm9pZCAwIT09SSYmQS5wdXNoKEkpO3ZhciBNPVN0cmluZyhpLmFwcGx5KHZvaWQgMCxBKSl9ZWxzZSBNPXIoQyxoLGssUyxJLGkpO2s+PUUmJih3Kz1oLnNsaWNlKEUsaykrTSxFPWsrQy5sZW5ndGgpfXJldHVybiB3K2guc2xpY2UoRSl9XTtmdW5jdGlvbiByKHQsbixyLG8sYSxjKXt2YXIgcz1yK3QubGVuZ3RoLHU9by5sZW5ndGgsbD12O3JldHVybiB2b2lkIDAhPT1hJiYoYT1pKGEpLGw9aCksZS5jYWxsKGMsbCwoZnVuY3Rpb24oZSxpKXt2YXIgYztzd2l0Y2goaS5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIHQ7Y2FzZSJgIjpyZXR1cm4gbi5zbGljZSgwLHIpO2Nhc2UiJyI6cmV0dXJuIG4uc2xpY2Uocyk7Y2FzZSI8IjpjPWFbaS5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbD0raTtpZigwPT09bClyZXR1cm4gZTtpZihsPnUpe3ZhciBmPXAobC8xMCk7cmV0dXJuIDA9PT1mP2U6Zjw9dT92b2lkIDA9PT1vW2YtMV0/aS5jaGFyQXQoMSk6b1tmLTFdK2kuY2hhckF0KDEpOmV9Yz1vW2wtMV19cmV0dXJuIHZvaWQgMD09PWM/IiI6Y30pKX19KSl9LDMzMDY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oNzAxMzIpLGE9big3NjQ4MiksYz1uKDM1NDU1KTtyKCJzZWFyY2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49aSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGk9byh0KSxzPVN0cmluZyh0aGlzKSx1PWkubGFzdEluZGV4O2EodSwwKXx8KGkubGFzdEluZGV4PTApO3ZhciBsPWMoaSxzKTtyZXR1cm4gYShpLmxhc3RJbmRleCx1KXx8KGkubGFzdEluZGV4PXUpLG51bGw9PT1sPy0xOmwuaW5kZXh9XX0pKX0sNzQxMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInNtYWxsIil9LHtzbWFsbDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDE3NDk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDQzMjIzKSxpPW4oODc1NzkpLGE9big3MDEzMiksYz1uKDEzOTc5KSxzPW4oNTMxNDEpLHU9bigyNzg4NCksbD1uKDM1NDU1KSxmPW4oMzg1OTgpLGQ9bigzMjE4NykscD1bXS5wdXNoLGg9TWF0aC5taW4sdj00Mjk0OTY3Mjk1LGc9IWQoKGZ1bmN0aW9uKCl7cmV0dXJuIVJlZ0V4cCh2LCJ5Iil9KSk7cigic3BsaXQiLDIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXt2YXIgcj1TdHJpbmcoYSh0aGlzKSksaT12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PWkpcmV0dXJuW107aWYodm9pZCAwPT09dClyZXR1cm5bcl07aWYoIW8odCkpcmV0dXJuIGUuY2FsbChyLHQsaSk7Zm9yKHZhciBjLHMsdSxsPVtdLGQ9KHQuaWdub3JlQ2FzZT8iaSI6IiIpKyh0Lm11bHRpbGluZT8ibSI6IiIpKyh0LnVuaWNvZGU/InUiOiIiKSsodC5zdGlja3k/InkiOiIiKSxoPTAsZz1uZXcgUmVnRXhwKHQuc291cmNlLGQrImciKTsoYz1mLmNhbGwoZyxyKSkmJiEoKHM9Zy5sYXN0SW5kZXgpPmgmJihsLnB1c2goci5zbGljZShoLGMuaW5kZXgpKSxjLmxlbmd0aD4xJiZjLmluZGV4PHIubGVuZ3RoJiZwLmFwcGx5KGwsYy5zbGljZSgxKSksdT1jWzBdLmxlbmd0aCxoPXMsbC5sZW5ndGg+PWkpKTspZy5sYXN0SW5kZXg9PT1jLmluZGV4JiZnLmxhc3RJbmRleCsrO3JldHVybiBoPT09ci5sZW5ndGg/IXUmJmcudGVzdCgiIil8fGwucHVzaCgiIik6bC5wdXNoKHIuc2xpY2UoaCkpLGwubGVuZ3RoPmk/bC5zbGljZSgwLGkpOmx9OiIwIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1uP1tdOmUuY2FsbCh0aGlzLHQsbil9OmUsW2Z1bmN0aW9uKGUsbil7dmFyIG89YSh0aGlzKSxpPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKGUsbyxuKTpyLmNhbGwoU3RyaW5nKG8pLGUsbil9LGZ1bmN0aW9uKHQsbyl7dmFyIGE9bihyLHQsdGhpcyxvLHIhPT1lKTtpZihhLmRvbmUpcmV0dXJuIGEudmFsdWU7dmFyIGY9aSh0KSxkPVN0cmluZyh0aGlzKSxwPWMoZixSZWdFeHApLHk9Zi51bmljb2RlLG09KGYuaWdub3JlQ2FzZT8iaSI6IiIpKyhmLm11bHRpbGluZT8ibSI6IiIpKyhmLnVuaWNvZGU/InUiOiIiKSsoZz8ieSI6ImciKSxiPW5ldyBwKGc/ZjoiXig/OiIrZi5zb3VyY2UrIikiLG0pLHg9dm9pZCAwPT09bz92Om8+Pj4wO2lmKDA9PT14KXJldHVybltdO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gbnVsbD09PWwoYixkKT9bZF06W107Zm9yKHZhciB3PTAsRT0wLGo9W107RTxkLmxlbmd0aDspe2IubGFzdEluZGV4PWc/RTowO3ZhciBDLGs9bChiLGc/ZDpkLnNsaWNlKEUpKTtpZihudWxsPT09a3x8KEM9aCh1KGIubGFzdEluZGV4KyhnPzA6RSkpLGQubGVuZ3RoKSk9PT13KUU9cyhkLEUseSk7ZWxzZXtpZihqLnB1c2goZC5zbGljZSh3LEUpKSxqLmxlbmd0aD09PXgpcmV0dXJuIGo7Zm9yKHZhciBTPTE7Uzw9ay5sZW5ndGgtMTtTKyspaWYoai5wdXNoKGtbU10pLGoubGVuZ3RoPT09eClyZXR1cm4gajtFPXc9Q319cmV0dXJuIGoucHVzaChkLnNsaWNlKHcpKSxqfV19KSwhZyl9LDgwMzYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuc3RhcnRzV2l0aCxkPU1hdGgubWluLHA9dSgic3RhcnRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJzdGFydHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWEoZChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLHI9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHIsbik6ZS5zbGljZShuLG4rci5sZW5ndGgpPT09cn19KX0sMjgwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN0cmlrZSIpfSx7c3RyaWtlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY3OTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdWIiKX0se3N1YjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw0NDA1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3VwIil9LHtzdXA6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdXAiLCIiLCIiKX19KX0sNzQ3OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLmVuZCxpPW4oODQ3NTQpKCJ0cmltRW5kIiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1FbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbUVuZDphLHRyaW1SaWdodDphfSl9LDY5MTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5zdGFydCxpPW4oODQ3NTQpKCJ0cmltU3RhcnQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbVN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1TdGFydDphLHRyaW1MZWZ0OmF9KX0sNDMzOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnRyaW07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDg0NzU0KSgidHJpbSIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSw1MTA5MDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jSXRlcmF0b3IiKX0sMjQ3ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDc2Mjk4KSxjPW4oMTA1OTIpLHM9bigzNzYyMCkuZix1PW4oOTk2MjUpLGw9aS5TeW1ib2w7aWYobyYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJighKCJkZXNjcmlwdGlvbiJpbiBsLnByb3RvdHlwZSl8fHZvaWQgMCE9PWwoKS5kZXNjcmlwdGlvbikpe3ZhciBmPXt9LGQ9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPDF8fHZvaWQgMD09PWFyZ3VtZW50c1swXT92b2lkIDA6U3RyaW5nKGFyZ3VtZW50c1swXSksZT10aGlzIGluc3RhbmNlb2YgZD9uZXcgbCh0KTp2b2lkIDA9PT10P2woKTpsKHQpO3JldHVybiIiPT09dCYmKGZbZV09ITApLGV9O3UoZCxsKTt2YXIgcD1kLnByb3RvdHlwZT1sLnByb3RvdHlwZTtwLmNvbnN0cnVjdG9yPWQ7dmFyIGg9cC50b1N0cmluZyx2PSJTeW1ib2wodGVzdCkiPT1TdHJpbmcobCgidGVzdCIpKSxnPS9eU3ltYm9sXCgoLiopXClbXildKyQvO3MocCwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9Yyh0aGlzKT90aGlzLnZhbHVlT2YoKTp0aGlzLGU9aC5jYWxsKHQpO2lmKGEoZix0KSlyZXR1cm4iIjt2YXIgbj12P2Uuc2xpY2UoNywtMSk6ZS5yZXBsYWNlKGcsIiQxIik7cmV0dXJuIiI9PT1uP3ZvaWQgMDpufX0pLHIoe2dsb2JhbDohMCxmb3JjZWQ6ITB9LHtTeW1ib2w6ZH0pfX0sODkxNzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImhhc0luc3RhbmNlIil9LDU0Nzg2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXNDb25jYXRTcHJlYWRhYmxlIil9LDEyODE2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXRlcmF0b3IiKX0sNjU2Nzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big3NzAxKSxhPW4oNjU2NzIpLGM9big2MjU1Nikscz1uKDkwMTQpLHU9bigxNjQxMCksbD1uKDMyMTg3KSxmPW4oNzYyOTgpLGQ9big2MTk5KSxwPW4oMTA1OTIpLGg9big4NzU3OSksdj1uKDE5MjA5KSxnPW4oOTU3MykseT1uKDUzNDk4KSxtPW4oMTQyMDkpLGI9big1MDg2OCkseD1uKDI1NTA3KSx3PW4oMTMzMzQpLEU9bigyNjkzNyksaj1uKDU2OTkxKSxDPW4oOTcyNTcpLGs9bigzNzYyMCksUz1uKDQxNjI4KSxPPW4oNjY5NzEpLEk9big5MjkxMyksQT1uKDYyMDU0KSxNPW4oODMxOTcpLF89bigyMzA3MCksVD1uKDY3MjkpLFI9bigyMzcyNCksTD1uKDczOTE2KSxQPW4oOTIyNzUpLE49big1MTEyOCksRD1uKDg5ODI3KSxGPW4oMzAwMjUpLmZvckVhY2gsVT1NKCJoaWRkZW4iKSxCPSJTeW1ib2wiLHo9UigidG9QcmltaXRpdmUiKSxWPUQuc2V0LEg9RC5nZXR0ZXJGb3IoQikscT1PYmplY3QucHJvdG90eXBlLFc9by5TeW1ib2wsRz1pKCJKU09OIiwic3RyaW5naWZ5IiksWj1DLmYsJD1rLmYsWT1FLmYsSj1TLmYsSz1BKCJzeW1ib2xzIiksWD1BKCJvcC1zeW1ib2xzIiksUT1BKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksdHQ9QSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLGV0PUEoIndrcyIpLG50PW8uUU9iamVjdCxydD0hbnR8fCFudC5wcm90b3R5cGV8fCFudC5wcm90b3R5cGUuZmluZENoaWxkLG90PWMmJmwoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIoJCh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbih0LGUsbil7dmFyIHI9WihxLGUpO3ImJmRlbGV0ZSBxW2VdLCQodCxlLG4pLHImJnQhPT1xJiYkKHEsZSxyKX06JCxpdD1mdW5jdGlvbih0LGUpe3ZhciBuPUtbdF09YihXLnByb3RvdHlwZSk7cmV0dXJuIFYobix7dHlwZTpCLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxjfHwobi5kZXNjcmlwdGlvbj1lKSxufSxhdD1zJiYic3ltYm9sIj09dHlwZW9mIFcuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHQpaW5zdGFuY2VvZiBXfSxjdD1mdW5jdGlvbih0LGUsbil7dD09PXEmJmN0KFgsZSxuKSxoKHQpO3ZhciByPXkoZSwhMCk7cmV0dXJuIGgobiksZihLLHIpPyhuLmVudW1lcmFibGU/KGYodCxVKSYmdFtVXVtyXSYmKHRbVV1bcl09ITEpLG49YihuLHtlbnVtZXJhYmxlOm0oMCwhMSl9KSk6KGYodCxVKXx8JCh0LFUsbSgxLHt9KSksdFtVXVtyXT0hMCksb3QodCxyLG4pKTokKHQscixuKX0sc3Q9ZnVuY3Rpb24odCxlKXtoKHQpO3ZhciBuPWcoZSkscj14KG4pLmNvbmNhdChkdChuKSk7cmV0dXJuIEYociwoZnVuY3Rpb24oZSl7YyYmIXV0LmNhbGwobixlKXx8Y3QodCxlLG5bZV0pfSkpLHR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXkodCwhMCksbj1KLmNhbGwodGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1xJiZmKEssZSkmJiFmKFgsZSkpJiYoIShufHwhZih0aGlzLGUpfHwhZihLLGUpfHxmKHRoaXMsVSkmJnRoaXNbVV1bZV0pfHxuKX0sbHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1nKHQpLHI9eShlLCEwKTtpZihuIT09cXx8IWYoSyxyKXx8ZihYLHIpKXt2YXIgbz1aKG4scik7cmV0dXJuIW98fCFmKEsscil8fGYobixVKSYmbltVXVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LGZ0PWZ1bmN0aW9uKHQpe3ZhciBlPVkoZyh0KSksbj1bXTtyZXR1cm4gRihlLChmdW5jdGlvbih0KXtmKEssdCl8fGYoXyx0KXx8bi5wdXNoKHQpfSkpLG59LGR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT1xLG49WShlP1g6Zyh0KSkscj1bXTtyZXR1cm4gRihuLChmdW5jdGlvbih0KXshZihLLHQpfHxlJiYhZihxLHQpfHxyLnB1c2goS1t0XSl9KSkscn07KHN8fChXPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFcpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgdD1hcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/U3RyaW5nKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9VCh0KSxuPWZ1bmN0aW9uKHQpe3RoaXM9PT1xJiZuLmNhbGwoWCx0KSxmKHRoaXMsVSkmJmYodGhpc1tVXSxlKSYmKHRoaXNbVV1bZV09ITEpLG90KHRoaXMsZSxtKDEsdCkpfTtyZXR1cm4gYyYmcnQmJm90KHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksaXQoZSx0KX0sSShXLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBIKHRoaXMpLnRhZ30pKSxTLmY9dXQsay5mPWN0LEMuZj1sdCx3LmY9RS5mPWZ0LGouZj1kdCxjJiYoJChXLnByb3RvdHlwZSwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykuZGVzY3JpcHRpb259fSksYXx8SShxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsdXQse3Vuc2FmZTohMH0pKSksdXx8KEwuZj1mdW5jdGlvbih0KXtyZXR1cm4gaXQoUih0KSx0KX0pLHIoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDohcyxzaGFtOiFzfSx7U3ltYm9sOld9KSxGKHgoZXQpLChmdW5jdGlvbih0KXtQKHQpfSkpLHIoe3RhcmdldDpCLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyh0KTtpZihmKFEsZSkpcmV0dXJuIFFbZV07dmFyIG49VyhlKTtyZXR1cm4gUVtlXT1uLHR0W25dPWUsbn0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFhdCh0KSl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGYodHQsdCkpcmV0dXJuIHR0W3RdfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtydD0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7cnQ9ITF9fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzLHNoYW06IWN9LHtjcmVhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZT9iKHQpOnN0KGIodCksZSl9LGRlZmluZVByb3BlcnR5OmN0LGRlZmluZVByb3BlcnRpZXM6c3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmx0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Z2V0T3duUHJvcGVydHlOYW1lczpmdCxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bCgoZnVuY3Rpb24oKXtqLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7cmV0dXJuIGouZih2KHQpKX19KSxHKSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDohc3x8bCgoZnVuY3Rpb24oKXt2YXIgdD1XKCk7cmV0dXJuIltudWxsXSIhPUcoW3RdKXx8Int9IiE9Ryh7YTp0fSl8fCJ7fSIhPUcoT2JqZWN0KHQpKX0pKX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLG89W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW8ucHVzaChhcmd1bWVudHNbaSsrXSk7aWYocj1lLChwKGUpfHx2b2lkIDAhPT10KSYmIWF0KHQpKXJldHVybiBkKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhYXQoZSkpcmV0dXJuIGV9KSxvWzFdPWUsRy5hcHBseShudWxsLG8pfX0pO1cucHJvdG90eXBlW3pdfHxPKFcucHJvdG90eXBlLHosVy5wcm90b3R5cGUudmFsdWVPZiksTihXLEIpLF9bVV09ITB9LDk4MzA2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2hBbGwiKX0sNjE5MjQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaCIpfSwxMjAyNTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2UiKX0sMjgzMzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNlYXJjaCIpfSw5NjQ1MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwZWNpZXMiKX0sNzA4NjM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGxpdCIpfSwyNDgwMjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvUHJpbWl0aXZlIil9LDE4MjczOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9TdHJpbmdUYWciKX0sNDI0MTE6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ1bnNjb3BhYmxlcyIpfSw3NDIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big5OTQzMSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImNvcHlXaXRoaW4iLChmdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpfSwxODUwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZXZlcnksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImV2ZXJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjAyNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNjU4OTUpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyODE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbHRlciIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1pKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcikscj0wLHM9ZS5sZW5ndGgsdT1uZXcoYyhuKSkocyk7cz5yOyl1W3JdPWVbcisrXTtyZXR1cm4gdX0pKX0sNzY0NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZEluZGV4IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzM5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzODI4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0NjQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODg2MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZvckVhY2gsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZvckVhY2giLChmdW5jdGlvbih0KXtvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDE4NTU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTYyNyk7KDAsbig3MzA3NCkuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoImZyb20iLG4oMjA0NTUpLHIpfSw4MTQ2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5jbHVkZXMsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sOTUxNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNDQ5ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDE3MTUyOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNzAzNzM6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgzNjczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oNTAwNjMpLGE9bigyMzcyNCkoIml0ZXJhdG9yIiksYz1yLlVpbnQ4QXJyYXkscz1pLnZhbHVlcyx1PWkua2V5cyxsPWkuZW50cmllcyxmPW8uYVR5cGVkQXJyYXksZD1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QscD1jJiZjLnByb3RvdHlwZVthXSxoPSEhcCYmKCJ2YWx1ZXMiPT1wLm5hbWV8fG51bGw9PXAubmFtZSksdj1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwoZih0aGlzKSl9O2QoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiBsLmNhbGwoZih0aGlzKSl9KSksZCgia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbChmKHRoaXMpKX0pKSxkKCJ2YWx1ZXMiLHYsIWgpLGQoYSx2LCFoKX0sMjM1Njg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5qb2luO2koImpvaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gYS5hcHBseShvKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI3Mjk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDQ5MjQ5KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI0NDU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5tYXAsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcoYyhpKHQsdC5jb25zdHJ1Y3RvcikpKShlKX0pKX0pKX0sNTA0ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzU2MjcpLGk9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoIm9mIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoaSh0aGlzKSkoZSk7ZT50OyluW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBufSksbyl9LDc1NDk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5yaWdodCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM5MzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLmxlZnQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sODc1NjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1NYXRoLmZsb29yO2koInJldmVyc2UiLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMsbj1vKGUpLmxlbmd0aCxyPWEobi8yKSxpPTA7aTxyOyl0PWVbaV0sZVtpKytdPWVbLS1uXSxlW25dPXQ7cmV0dXJuIGV9KSl9LDg0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big2MDU1OCksYT1uKDE5MjA5KSxjPW4oMzIxODcpLHM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzZXQiLChmdW5jdGlvbih0KXtzKHRoaXMpO3ZhciBlPWkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSksbj10aGlzLmxlbmd0aCxyPWEodCksYz1vKHIubGVuZ3RoKSx1PTA7aWYoYytlPm4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIik7Zm9yKDt1PGM7KXRoaXNbZSt1XT1yW3UrK119KSxjKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2V0KHt9KX0pKSl9LDE3NjA1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEzOTc5KSxpPW4oMzIxODcpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixzPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnNsaWNlO3MoInNsaWNlIiwoZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dS5jYWxsKGEodGhpcyksdCxlKSxyPW8odGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxpPTAscz1uLmxlbmd0aCxsPW5ldyhjKHIpKShzKTtzPmk7KWxbaV09bltpKytdO3JldHVybiBsfSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpfSw3MzU2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuc29tZSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic29tZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDExODc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uc29ydDtpKCJzb3J0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuY2FsbChvKHRoaXMpLHQpfSkpfSw2MDkyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPW4oMTM5NzkpLGM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0aGlzKSxyPW4ubGVuZ3RoLHM9aSh0LHIpO3JldHVybiBuZXcoYShuLG4uY29uc3RydWN0b3IpKShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrcypuLkJZVEVTX1BFUl9FTEVNRU5ULG8oKHZvaWQgMD09PWU/cjppKGUscikpLXMpKX0pKX0sNDM5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9bigzMjE4NyksYT1yLkludDhBcnJheSxjPW8uYVR5cGVkQXJyYXkscz1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS50b0xvY2FsZVN0cmluZyxsPVtdLnNsaWNlLGY9ISFhJiZpKChmdW5jdGlvbigpe3UuY2FsbChuZXcgYSgxKSl9KSk7cygidG9Mb2NhbGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KGY/bC5jYWxsKGModGhpcykpOmModGhpcyksYXJndW1lbnRzKX0pLGkoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IGEoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFpKChmdW5jdGlvbigpe2EucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKX0sOTEzNDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLG89bigzMjE4NyksaT1uKDg5NTU4KS5VaW50OEFycmF5LGE9aSYmaS5wcm90b3R5cGV8fHt9LGM9W10udG9TdHJpbmcscz1bXS5qb2luO28oKGZ1bmN0aW9uKCl7Yy5jYWxsKHt9KX0pKSYmKGM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSk7dmFyIHU9YS50b1N0cmluZyE9YztyKCJ0b1N0cmluZyIsYyx1KX0sMTY5Nzg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzc5ODc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODA3NTc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw2OTg3OTpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSwhMCl9LDU4NjA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDg5NTU4KSxpPW4oMTkyNiksYT1uKDk2MDMpLGM9big4MTk1MSkscz1uKDcxMzAzKSx1PW4oMTA1OTIpLGw9big4OTgyNykuZW5mb3JjZSxmPW4oMTk1OTEpLGQ9IW8uQWN0aXZlWE9iamVjdCYmIkFjdGl2ZVhPYmplY3QiaW4gbyxwPU9iamVjdC5pc0V4dGVuc2libGUsaD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXQuZXhwb3J0cz1jKCJXZWFrTWFwIixoLHMpO2lmKGYmJmQpe3I9cy5nZXRDb25zdHJ1Y3RvcihoLCJXZWFrTWFwIiwhMCksYS5SRVFVSVJFRD0hMDt2YXIgZz12LnByb3RvdHlwZSx5PWcuZGVsZXRlLG09Zy5oYXMsYj1nLmdldCx4PWcuc2V0O2koZyx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSx5LmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uZGVsZXRlKHQpfXJldHVybiB5LmNhbGwodGhpcyx0KX0saGFzOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uaGFzKHQpfXJldHVybiBtLmNhbGwodGhpcyx0KX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT9iLmNhbGwodGhpcyx0KTplLmZyb3plbi5nZXQodCl9cmV0dXJuIGIuY2FsbCh0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXtpZih1KHQpJiYhcCh0KSl7dmFyIG49bCh0aGlzKTtuLmZyb3plbnx8KG4uZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT94LmNhbGwodGhpcyx0LGUpOm4uZnJvemVuLnNldCh0LGUpfWVsc2UgeC5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gdGhpc319KX19LDQ1MTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MTk1MSkoIldlYWtTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbig3MTMwMykpfSw5Njc1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MDg2OCkscz1uKDM3NjIwKSx1PW4oMTQyMDkpLGw9big0MTMzNCksZj1uKDY2OTcxKSxkPW4oODk4MjcpLHA9ZC5zZXQsaD1kLmdldHRlckZvcigiQWdncmVnYXRlRXJyb3IiKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTthJiYobj1hKG5ldyBFcnJvcihlKSxpKG4pKSk7dmFyIHI9W107cmV0dXJuIGwodCxyLnB1c2gsciksbz9wKG4se2Vycm9yczpyLHR5cGU6IkFnZ3JlZ2F0ZUVycm9yIn0pOm4uZXJyb3JzPXIsdm9pZCAwIT09ZSYmZihuLCJtZXNzYWdlIixTdHJpbmcoZSkpLG59O3YucHJvdG90eXBlPWMoRXJyb3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp1KDUsdiksbWVzc2FnZTp1KDUsIiIpLG5hbWU6dSg1LCJBZ2dyZWdhdGVFcnJvciIpfSksbyYmcy5mKHYucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKS5lcnJvcnN9LGNvbmZpZ3VyYWJsZTohMH0pLHIoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOnZ9KX0sMTQwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPU9iamVjdC5pc0Zyb3plbixhPWZ1bmN0aW9uKHQsZSl7aWYoIWl8fCFvKHQpfHwhaSh0KSlyZXR1cm4hMTtmb3IodmFyIG4scj0wLGE9dC5sZW5ndGg7cjxhOylpZighKCJzdHJpbmciPT10eXBlb2Yobj10W3IrK10pfHxlJiZ2b2lkIDA9PT1uKSlyZXR1cm4hMTtyZXR1cm4gMCE9PWF9O3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc1RlbXBsYXRlT2JqZWN0OmZ1bmN0aW9uKHQpe2lmKCFhKHQsITApKXJldHVybiExO3ZhciBlPXQucmF3O3JldHVybiEoZS5sZW5ndGghPT10Lmxlbmd0aHx8IWEoZSwhMSkpfX0pfSw0OTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJbmRleCJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SW5kZXgiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lPzA6ZS0xfX0pLG8oImxhc3RJbmRleCIpKX0sNjM2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SXRlbSJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SXRlbSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/dm9pZCAwOnRbZS0xXX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUubGVuZ3RoKTtyZXR1cm4gZVswPT1uPzA6bi0xXT10fX0pLG8oImxhc3RJdGVtIikpfSw0NzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5pdGVyYXRvcjtyZXR1cm4gZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwocix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTp7ZG9uZTohMSx2YWx1ZTpbbi5pbmRleCsrLHQudmFsdWVdfX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDYxMjk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDU5Mzc5KSxpPW4oNjY5NzEpLGE9big3NjI5OCksYz1uKDIzNzI0KSxzPW4oNjM4NDUpLHU9big2NTY3MiksbD1jKCJ0b1N0cmluZ1RhZyIpLGY9ZnVuY3Rpb24oKXtvKHRoaXMsZil9O2YucHJvdG90eXBlPXMsYShzLGwpfHxpKHMsbCwiQXN5bmNJdGVyYXRvciIpLGEocywiY29uc3RydWN0b3IiKSYmcy5jb25zdHJ1Y3RvciE9PU9iamVjdHx8aShzLCJjb25zdHJ1Y3RvciIsZikscih7Z2xvYmFsOiEwLGZvcmNlZDp1fSx7QXN5bmNJdGVyYXRvcjpmfSl9LDY3NDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwobi5pdGVyYXRvcixuLnJlbWFpbmluZz92b2lkIDA6dCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7byh0KS5kb25lPyhuLmRvbmU9ITAscih7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6bi5yZW1haW5pbmc/KG4ucmVtYWluaW5nLS0sYSgpKTpyKHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtpKHQpfX0pLGkpfWNhdGNoKHQpe2kodCl9fTthKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sOTA2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZXZlcnk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjAxMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5maWx0ZXJlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKG8sYSl7dmFyIGM9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihpKHQpLmRvbmUpbi5kb25lPSEwLG8oe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7ZWxzZXt2YXIgcz10LnZhbHVlO2UucmVzb2x2ZShyKHMpKS50aGVuKChmdW5jdGlvbih0KXt0P28oe2RvbmU6ITEsdmFsdWU6c30pOmMoKX0pLGEpfX1jYXRjaCh0KXthKHQpfX0pLGEpfWNhdGNoKHQpe2EodCl9fTtjKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDIxMzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5maW5kO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzg5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSxjPW4oNjY5MjApLHM9YSgoZnVuY3Rpb24odCxlKXt2YXIgbixyLGE9dGhpcyxzPWEubWFwcGVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odSxsKXt2YXIgZj1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShhLm5leHQuY2FsbChhLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5kb25lPSEwLHUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOmUucmVzb2x2ZShzKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYodm9pZCAwIT09KHI9Yyh0KSkpcmV0dXJuIGEuaW5uZXJJdGVyYXRvcj1uPWkoci5jYWxsKHQpKSxhLmlubmVyTmV4dD1vKG4ubmV4dCksZCgpO2woVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19LGQ9ZnVuY3Rpb24oKXtpZihuPWEuaW5uZXJJdGVyYXRvcil0cnl7ZS5yZXNvbHZlKGkoYS5pbm5lck5leHQuY2FsbChuKSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuaW5uZXJJdGVyYXRvcj1hLmlubmVyTmV4dD1udWxsLGYoKSk6dSh7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfWVsc2UgZigpfTtkKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDY5MjM3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5mb3JFYWNoO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjY0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDI3MDA0KSx1PW4oNjY5MjApLGw9by5Bc3luY0l0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSl9KSwhMCk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDUzMTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4ubWFwcGVyO3JldHVybiBlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOmUucmVzb2x2ZShyKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0fX0pKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDczOTQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3NzAxKSgiUHJvbWlzZSIpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49byhlLm5leHQpLHI9YXJndW1lbnRzLmxlbmd0aDwyLGM9cj92b2lkIDA6YXJndW1lbnRzWzFdO3JldHVybiBvKHQpLG5ldyBhKChmdW5jdGlvbihvLHMpe3ZhciB1PWZ1bmN0aW9uKCl7dHJ5e2EucmVzb2x2ZShpKG4uY2FsbChlKSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3RyeXtpZihpKGUpLmRvbmUpcj9zKFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpKTpvKGMpO2Vsc2V7dmFyIG49ZS52YWx1ZTtyPyhyPSExLGM9bix1KCkpOmEucmVzb2x2ZSh0KGMsbikpLnRoZW4oKGZ1bmN0aW9uKHQpe2M9dCx1KCl9KSxzKX19Y2F0Y2godCl7cyh0KX19KSxzKX1jYXRjaCh0KXtzKHQpfX07dSgpfSkpfX0pfSw4ODIxMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2Nikuc29tZTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDczNzYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy0tP3RoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCk6KHRoaXMuZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw0MjE5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikudG9BcnJheTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDM2NTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKSxhPW4oNTA4NjgpLGM9ZnVuY3Rpb24oKXt2YXIgdD1pKCJPYmplY3QiLCJmcmVlemUiKTtyZXR1cm4gdD90KGEobnVsbCkpOmEobnVsbCl9O3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZUtleTpmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KE9iamVjdCxhcmd1bWVudHMpLmdldCgib2JqZWN0IixjKX19KX0sNDMwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpO3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZVN5bWJvbDpmdW5jdGlvbigpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMF0/aSgiU3ltYm9sIikuZm9yKGFyZ3VtZW50c1swXSk6by5hcHBseShudWxsLGFyZ3VtZW50cykuZ2V0KCJzeW1ib2wiLGkoIlN5bWJvbCIpKX19KX0sOTk2Mjg6ZnVuY3Rpb24odCxlLG4pe24oNzE2MjIpfSw5MjYwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg4MDcpKChmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm5bdGhpcy5pbmRleCsrLGUudmFsdWVdfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDQzMzMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNTkzNzkpLGE9big2Njk3MSksYz1uKDMyMTg3KSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxmPW4oNjU2NzIpLGQ9dSgiaXRlcmF0b3IiKSxwPXUoInRvU3RyaW5nVGFnIiksaD1vLkl0ZXJhdG9yLHY9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIGh8fGgucHJvdG90eXBlIT09bHx8IWMoKGZ1bmN0aW9uKCl7aCh7fSl9KSksZz1mdW5jdGlvbigpe2kodGhpcyxnKX07ZiYmYShsPXt9LGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhsLHApfHxhKGwscCwiSXRlcmF0b3IiKSwhdiYmcyhsLCJjb25zdHJ1Y3RvciIpJiZsLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxhKGwsImNvbnN0cnVjdG9yIixnKSxnLnByb3RvdHlwZT1sLHIoe2dsb2JhbDohMCxmb3JjZWQ6dn0se0l0ZXJhdG9yOmd9KX0sMjA0NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLml0ZXJhdG9yLHI9dGhpcy5uZXh0O3RoaXMucmVtYWluaW5nOylpZih0aGlzLnJlbWFpbmluZy0tLGU9byhyLmNhbGwobikpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYoZT1vKHIuY2FsbChuLHQpKSwhKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDU0NTU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksIW8odGhpcywoZnVuY3Rpb24oZSl7aWYoIXQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw0MDYzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcy5pdGVyYXRvcixvPXRoaXMuZmlsdGVyZXIsYT10aGlzLm5leHQ7Oyl7aWYoZT1pKGEuY2FsbChyLHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49ZS52YWx1ZSxjKHIsbyxuKSlyZXR1cm4gbn19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSw5NjY1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoZSl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sMTQ2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDczODkwKSxjPW4oODgwNykscz1uKDEyMjc4KSx1PWMoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsYyx1PXRoaXMuaXRlcmF0b3I7Oyl7aWYoYz10aGlzLmlubmVySXRlcmF0b3Ipe2lmKCEoZT1pKHRoaXMuaW5uZXJOZXh0LmNhbGwoYykpKS5kb25lKXJldHVybiBlLnZhbHVlO3RoaXMuaW5uZXJJdGVyYXRvcj10aGlzLmlubmVyTmV4dD1udWxsfWlmKGU9aSh0aGlzLm5leHQuY2FsbCh1LHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49cyh1LHRoaXMubWFwcGVyLGUudmFsdWUpLHZvaWQgMD09PShyPWEobikpKXRocm93IFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKTt0aGlzLmlubmVySXRlcmF0b3I9Yz1pKHIuY2FsbChuKSksdGhpcy5pbm5lck5leHQ9byhjLm5leHQpfX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDczNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsdm9pZCAwLCExLCEwKX19KX0sMjc0Mjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDg4MDcpLHU9big3Mzg5MCksbD1vLkl0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSwhMCk7cih7dGFyZ2V0OiJJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSwzMzQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlcmF0b3Isbj1pKHRoaXMubmV4dC5jYWxsKGUsdCkpO2lmKCEodGhpcy5kb25lPSEhbi5kb25lKSlyZXR1cm4gYyhlLHRoaXMubWFwcGVyLG4udmFsdWUpfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDg0Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXthKHRoaXMpLGkodCk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyLG49ZT92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG8odGhpcywoZnVuY3Rpb24ocil7ZT8oZT0hMSxuPXIpOm49dChuLHIpfSksdm9pZCAwLCExLCEwKSxlKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBufX0pfSw1OTYyMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzI4NTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtpZih0aGlzLnJlbWFpbmluZy0tKXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO3JldHVybih0aGlzLmRvbmU9ISFlLmRvbmUpP3ZvaWQgMDplLnZhbHVlfXRoaXMuZG9uZT0hMH0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNjcwNzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSksYT1bXS5wdXNoO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIG8oaSh0aGlzKSxhLHQsITEsITApLHR9fSl9LDQ4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sMzU1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQsbil7aWYoIXIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sMTg4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7cihuLHQsZSkmJmQuY2FsbChvLHQsbil9KSx2b2lkIDAsITAsITApLG99fSl9LDQ5MDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZEtleTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzU2NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcChuKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzODc5MjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw1MzUxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5oYXMpLGE9aShuLmdldCksYz1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQpO3IuY2FsbChuLG8pP2EuY2FsbChuLG8pLnB1c2godCk6Yy5jYWxsKG4sbyxbdF0pfSkpLG59fSl9LDkzODQzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDM4MTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihjKG4sdCkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw5OTI1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2tleUJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXtyLmNhbGwobixlKHQpLHQpfSkpLG59fSl9LDY2MjI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2tleU9mOmZ1bmN0aW9uKHQpe3JldHVybiBjKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYobj09PXQpcmV0dXJuIGMuc3RvcChlKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSw3MTcwMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8scihuLHQsZSksbil9KSx2b2lkIDAsITAsITApLG99fSl9LDY5NTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHQscihuLHQsZSkpfSksdm9pZCAwLCEwLCEwKSxvfX0pfSwyNzczNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0aGlzKSxuPWEoZS5zZXQpLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7KWMoYXJndW1lbnRzW3IrK10sbixlLCEwKTtyZXR1cm4gZX19KX0sMTk5MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNzczNjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4saSl7cj8ocj0hMSxvPWkpOm89dChvLGksbixlKX0pLHZvaWQgMCwhMCwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBtYXAgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDY5ODQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sNDMyOTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBkYXRlT3JJbnNlcnQ6big0NzkyNyl9KX0sOTc5Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBuPWkodGhpcykscj1hcmd1bWVudHMubGVuZ3RoO2EoZSk7dmFyIG89bi5oYXModCk7aWYoIW8mJnI8Myl0aHJvdyBUeXBlRXJyb3IoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBjPW8/bi5nZXQodCk6YShyPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxuKTtyZXR1cm4gbi5zZXQodCxlKGMsdCxuKSksbn19KX0sMTQ2ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDcwMjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubWluLGk9TWF0aC5tYXg7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKG4saShlLHQpKX19KX0sMjM5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LDE2ODA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPTE4MC9NYXRoLlBJO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2RlZ3JlZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sNjcxNDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzQyKSxpPW4oNTMyNTEpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ZzY2FsZTpmdW5jdGlvbih0LGUsbixyLGEpe3JldHVybiBpKG8odCxlLG4scixhKSl9fSl9LDMwNjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aWFkZGg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApKyhyPj4+MCkrKChvJml8KG98aSkmfihvK2k+Pj4wKSk+Pj4zMSl8MH19KX0sNDk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+MTYscz1vPj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4xNil9fSl9LDY4NDA2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aXN1Ymg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApLShyPj4+MCktKCh+byZpfH4ob15pKSZvLWk+Pj4wKT4+PjMxKXwwfX0pfSw5MDc2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se1JBRF9QRVJfREVHOjE4MC9NYXRoLlBJfSl9LDU3ODkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguUEkvMTgwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3JhZGlhbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sMTU3MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzY2FsZTpuKDc3NDIpfSl9LDE3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg5NTQyKSxhPW4oNzEyMDEpLGM9big4OTgyNykscz0iU2VlZGVkIFJhbmRvbSIsdT0iU2VlZGVkIFJhbmRvbSBHZW5lcmF0b3IiLGw9Yy5zZXQsZj1jLmdldHRlckZvcih1KSxkPWEoKGZ1bmN0aW9uKHQpe2wodGhpcyx7dHlwZTp1LHNlZWQ6dCUyMTQ3NDgzNjQ3fSl9KSxzLChmdW5jdGlvbigpe3ZhciB0PWYodGhpcyk7cmV0dXJue3ZhbHVlOigxMDczNzQxODIzJih0LnNlZWQ9KDExMDM1MTUyNDUqdC5zZWVkKzEyMzQ1KSUyMTQ3NDgzNjQ3KSkvMTA3Mzc0MTgyMyxkb25lOiExfX0pKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7c2VlZGVkUFJORzpmdW5jdGlvbih0KXt2YXIgZT1vKHQpLnNlZWQ7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCdNYXRoLnNlZWRlZFBSTkcoKSBhcmd1bWVudCBzaG91bGQgaGF2ZSBhICJzZWVkIiBmaWVsZCB3aXRoIGEgZmluaXRlIHZhbHVlLicpO3JldHVybiBuZXcgZChlKX19KX0sNzc5MDc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduYml0OmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT09dCYmMD09dD8xL3Q9PS0xLzA6dDwwfX0pfSw0NDY0NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3VtdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+PjE2LHM9bz4+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4+MTYpfX0pfSw3NTY0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDc4NDYpLGE9IkludmFsaWQgbnVtYmVyIHJlcHJlc2VudGF0aW9uIixjPS9eW1xkYS16XSskLztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2Zyb21TdHJpbmc6ZnVuY3Rpb24odCxlKXt2YXIgbixyLHM9MTtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKGEpO2lmKCF0Lmxlbmd0aCl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigiLSI9PXQuY2hhckF0KDApJiYocz0tMSwhKHQ9dC5zbGljZSgxKSkubGVuZ3RoKSl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigobj12b2lkIDA9PT1lPzEwOm8oZSkpPDJ8fG4+MzYpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCByYWRpeCIpO2lmKCFjLnRlc3QodCl8fChyPWkodCxuKSkudG9TdHJpbmcobikhPT10KXRocm93IFN5bnRheEVycm9yKGEpO3JldHVybiBzKnJ9fSl9LDg0MzA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVFbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJlbnRyaWVzIil9fSl9LDcyOTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJrZXlzIil9fSl9LDU2MzU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsInZhbHVlcyIpfX0pfSwyMDIzNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY3NTM4KSxhPW4oODY0NzApLGM9big4NzU3OSkscz1uKDEwNTkyKSx1PW4oNTkzNzkpLGw9bigzNzYyMCkuZixmPW4oNjY5NzEpLGQ9bigxOTI2KSxwPW4oMzEwNzQpLGg9big0MTMzNCksdj1uKDgzNjIwKSxnPW4oMjM3MjQpLHk9big4OTgyNyksbT1nKCJvYnNlcnZhYmxlIiksYj15LmdldCx4PXkuc2V0LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOmEodCl9LEU9ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGVhbnVwO2lmKGUpe3QuY2xlYW51cD12b2lkIDA7dHJ5e2UoKX1jYXRjaCh0KXt2KHQpfX19LGo9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQub2JzZXJ2ZXJ9LEM9ZnVuY3Rpb24odCxlKXtpZighbyl7dC5jbG9zZWQ9ITA7dmFyIG49ZS5zdWJzY3JpcHRpb25PYnNlcnZlcjtuJiYobi5jbG9zZWQ9ITApfWUub2JzZXJ2ZXI9dm9pZCAwfSxrPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj14KHRoaXMse2NsZWFudXA6dm9pZCAwLG9ic2VydmVyOmModCksc3Vic2NyaXB0aW9uT2JzZXJ2ZXI6dm9pZCAwfSk7b3x8KHRoaXMuY2xvc2VkPSExKTt0cnl7KG49dyh0LnN0YXJ0KSkmJm4uY2FsbCh0LHRoaXMpfWNhdGNoKHQpe3YodCl9aWYoIWoocikpe3ZhciBpPXIuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI9bmV3IFModGhpcyk7dHJ5e3ZhciBzPWUoaSksdT1zO251bGwhPXMmJihyLmNsZWFudXA9ImZ1bmN0aW9uIj09dHlwZW9mIHMudW5zdWJzY3JpYmU/ZnVuY3Rpb24oKXt1LnVuc3Vic2NyaWJlKCl9OmEocykpfWNhdGNoKHQpe3JldHVybiB2b2lkIGkuZXJyb3IodCl9aihyKSYmRShyKX19O2sucHJvdG90eXBlPWQoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKTtqKHQpfHwoQyh0aGlzLHQpLEUodCkpfX0pLG8mJmwoay5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKHRoaXMpKX19KTt2YXIgUz1mdW5jdGlvbih0KXt4KHRoaXMse3N1YnNjcmlwdGlvbjp0fSksb3x8KHRoaXMuY2xvc2VkPSExKX07Uy5wcm90b3R5cGU9ZCh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT1iKGIodGhpcykuc3Vic2NyaXB0aW9uKTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjt0cnl7dmFyIHI9dyhuLm5leHQpO3ImJnIuY2FsbChuLHQpfWNhdGNoKHQpe3YodCl9fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzKS5zdWJzY3JpcHRpb24sbj1iKGUpO2lmKCFqKG4pKXt2YXIgcj1uLm9ic2VydmVyO0MoZSxuKTt0cnl7dmFyIG89dyhyLmVycm9yKTtvP28uY2FsbChyLHQpOnYodCl9Y2F0Y2godCl7dih0KX1FKG4pfX0sY29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpLnN1YnNjcmlwdGlvbixlPWIodCk7aWYoIWooZSkpe3ZhciBuPWUub2JzZXJ2ZXI7Qyh0LGUpO3RyeXt2YXIgcj13KG4uY29tcGxldGUpO3ImJnIuY2FsbChuKX1jYXRjaCh0KXt2KHQpfUUoZSl9fX0pLG8mJmwoUy5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKGIodGhpcykuc3Vic2NyaXB0aW9uKSl9fSk7dmFyIE89ZnVuY3Rpb24odCl7dSh0aGlzLE8sIk9ic2VydmFibGUiKSx4KHRoaXMse3N1YnNjcmliZXI6YSh0KX0pfTtkKE8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IGsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/e25leHQ6dCxlcnJvcjplPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjb21wbGV0ZTplPjI/YXJndW1lbnRzWzJdOnZvaWQgMH06cyh0KT90Ont9LGIodGhpcykuc3Vic2NyaWJlcil9fSksZChPLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxuPXcoYyh0KVttXSk7aWYobil7dmFyIHI9YyhuLmNhbGwodCkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09ZT9yOm5ldyBlKChmdW5jdGlvbih0KXtyZXR1cm4gci5zdWJzY3JpYmUodCl9KSl9dmFyIG89cCh0KTtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHQpe2gobywoZnVuY3Rpb24oZSl7aWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybiBoLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCksdC5jb21wbGV0ZSgpfSkpfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09YXJndW1lbnRzW3IrK107cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0KXtmb3IodmFyIHI9MDtyPGU7cisrKWlmKHQubmV4dChuW3JdKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSkpfX0pLGYoTy5wcm90b3R5cGUsbSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxyKHtnbG9iYWw6ITB9LHtPYnNlcnZhYmxlOk99KSxpKCJPYnNlcnZhYmxlIil9LDI3NzU6ZnVuY3Rpb24odCxlLG4pe24oMTc2MjkpfSw3MzIyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDc3MDEpLGE9big4MzA4MyksYz1uKDMxMTUpLHM9big0MTMzNCksdT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FueTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49YS5mKGUpLHI9bi5yZXNvbHZlLGw9bi5yZWplY3QsZj1jKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxhPVtdLGM9MCxmPTEsZD0hMTtzKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWMrKyxzPSExO2EucHVzaCh2b2lkIDApLGYrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtzfHxkfHwoZD0hMCxyKHQpKX0pLChmdW5jdGlvbih0KXtzfHxkfHwocz0hMCxhW29dPXQsLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKSl9KSl9KSksLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKX0pKTtyZXR1cm4gZi5lcnJvciYmbChmLnZhbHVlKSxuLnByb21pc2V9fSl9LDExMDcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgzMDgzKSxpPW4oMzExNSk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7dHJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW8uZih0aGlzKSxuPWkodCk7cmV0dXJuKG4uZXJyb3I/ZS5yZWplY3Q6ZS5yZXNvbHZlKShuLnZhbHVlKSxlLnByb21pc2V9fSl9LDQ5NjQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8ND92b2lkIDA6YShhcmd1bWVudHNbM10pO2ModCxlLGkobikscil9fSl9LDc0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5nZXRNYXAscz1vLnN0b3JlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkscj1jKGkoZSksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKHQpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgbz1zLmdldChlKTtyZXR1cm4gby5kZWxldGUobiksISFvLnNpemV8fHMuZGVsZXRlKGUpfX0pfSw0OTE1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0MDYxKSxpPW4oNzcwMjApLGE9big4NzU3OSksYz1uKDY0OTY1KSxzPW4oNDEzMzQpLHU9aS5rZXlzLGw9aS50b0tleSxmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dSh0LGUpLHI9Yyh0KTtpZihudWxsPT09cilyZXR1cm4gbjt2YXIgaSxhLGw9ZihyLGUpO3JldHVybiBsLmxlbmd0aD9uLmxlbmd0aD8oaT1uZXcgbyhuLmNvbmNhdChsKSkscyhpLChhPVtdKS5wdXNoLGEpLGEpOmw6bn07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6bChhcmd1bWVudHNbMV0pO3JldHVybiBmKGEodCksZSl9fSl9LDY5NDU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by5nZXQsdT1vLnRvS2V5LGw9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiBzKHQsZSxuKTt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09cj9sKHQscixuKTp2b2lkIDB9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSk7cmV0dXJuIGwodCxpKGUpLG4pfX0pfSw4NzQ3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5rZXlzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpjKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGEoaSh0KSxlKX19KX0sMjY4OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uZ2V0LGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sOTc0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLnRvS2V5LHU9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiEwO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yJiZ1KHQscixuKX07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKTtyZXR1cm4gdSh0LGkoZSksbil9fSl9LDcxMDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uaGFzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sMjM2MzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHttZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2ModCxlLGkobiksYShyKSl9fX0pfSw5Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDYxNDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk4MzUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfSkpLG59fSl9LDE2MTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCl7aWYoIXIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNTM1ODk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe3IodCx0LGUpJiZkLmNhbGwobyx0KX0pLHZvaWQgMCwhMSwhMCksb319KX0sODEwNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sOTcyODQ6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNDE3MTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkscj1jKGUuaGFzKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChlLHQpJiZvLmNhbGwobix0KX0pKSxufX0pfSw1NzM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc0Rpc2pvaW50RnJvbTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITA9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sODkyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDMxMDc0KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdWJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMpLG49YSh0KSxyPW4uaGFzO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiByJiYobj1uZXcoaSgiU2V0IikpKHQpLHI9YyhuLmhhcykpLCF1KGUsKGZ1bmN0aW9uKHQpe2lmKCExPT09ci5jYWxsKG4sdCkpcmV0dXJuIHUuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1cGVyc2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCExPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDE2NzU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTQ3NSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2pvaW46ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSkscj12b2lkIDA9PT10PyIsIjpTdHJpbmcodCksbz1bXTtyZXR1cm4gYyhuLG8ucHVzaCxvLCExLCEwKSxvLmpvaW4ocil9fSl9LDExMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtkLmNhbGwobyxyKHQsdCxlKSl9KSx2b2lkIDAsITEsITApLG99fSl9LDI0NTk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSwzMzUzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obil7cj8ocj0hMSxvPW4pOm89dChvLG4sbixlKX0pLHZvaWQgMCwhMSwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBzZXQgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDI0MTAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDY2MTgxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3N5bW1ldHJpY0RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl8fG8uY2FsbChuLHQpfSkpLG59fSl9LDYyOTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dW5pb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKTtyZXR1cm4gdSh0LGMobi5hZGQpLG4pLG59fSl9LDczNDYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jaGFyQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzIwNjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDg5ODI3KSxjPW4oNjAxNDApLHM9Yy5jb2RlQXQsdT1jLmNoYXJBdCxsPSJTdHJpbmcgSXRlcmF0b3IiLGY9YS5zZXQsZD1hLmdldHRlckZvcihsKSxwPW8oKGZ1bmN0aW9uKHQpe2YodGhpcyx7dHlwZTpsLHN0cmluZzp0LGluZGV4OjB9KX0pLCJTdHJpbmciLChmdW5jdGlvbigpe3ZhciB0LGU9ZCh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD11KG4sciksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOntjb2RlUG9pbnQ6cyh0LDApLHBvc2l0aW9uOnJ9LGRvbmU6ITF9KX0pKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFN0cmluZyhpKHRoaXMpKSl9fSl9LDc0NTI1OmZ1bmN0aW9uKHQsZSxuKXtuKDgxMjc3KX0sNjQwMjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzAxMzIpLGk9big0MzIyMyksYT1uKDI1NDE5KSxjPW4oMjM3MjQpLHM9big2NTY3MiksdT1jKCJyZXBsYWNlIiksbD1SZWdFeHAucHJvdG90eXBlO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24gdChlLG4pe3ZhciByLGMsZixkLHAsaCx2LGcseT1vKHRoaXMpO2lmKG51bGwhPWUpe2lmKChyPWkoZSkpJiYhflN0cmluZyhvKCJmbGFncyJpbiBsP2UuZmxhZ3M6YS5jYWxsKGUpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZih2b2lkIDAhPT0oYz1lW3VdKSlyZXR1cm4gYy5jYWxsKGUseSxuKTtpZihzJiZyKXJldHVybiBTdHJpbmcoeSkucmVwbGFjZShlLG4pfWlmKGY9U3RyaW5nKHkpLCIiPT09KGQ9U3RyaW5nKGUpKSlyZXR1cm4gdC5jYWxsKGYsLyg/OikvZyxuKTtpZihwPWYuc3BsaXQoZCksImZ1bmN0aW9uIiE9dHlwZW9mIG4pcmV0dXJuIHAuam9pbihTdHJpbmcobikpO2Zvcih2PShoPXBbMF0pLmxlbmd0aCxnPTE7ZzxwLmxlbmd0aDtnKyspaCs9U3RyaW5nKG4oZCx2LGYpKSx2Kz1kLmxlbmd0aCtwW2ddLmxlbmd0aCxoKz1wW2ddO3JldHVybiBofX0pfSw2OTQyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNEaXNwb3NlIil9LDk0MjQ5OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiZGlzcG9zZSIpfSw1MTM3NDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm9ic2VydmFibGUiKX0sNTM3NzI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJwYXR0ZXJuTWF0Y2giKX0sODYwNzc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlQWxsIil9LDY0ODEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5OTk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sMTgyMDU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw4NzU1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDY4OTk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNTM4MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDg1ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNjQ4OTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw2NzAzOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oMzEzNjgpLGE9big2Njk3MSk7Zm9yKHZhciBjIGluIG8pe3ZhciBzPXJbY10sdT1zJiZzLnByb3RvdHlwZTtpZih1JiZ1LmZvckVhY2ghPT1pKXRyeXthKHUsImZvckVhY2giLGkpfWNhdGNoKHQpe3UuZm9yRWFjaD1pfX19LDc5Nzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9big1MDA2MyksYT1uKDY2OTcxKSxjPW4oMjM3MjQpLHM9YygiaXRlcmF0b3IiKSx1PWMoInRvU3RyaW5nVGFnIiksbD1pLnZhbHVlcztmb3IodmFyIGYgaW4gbyl7dmFyIGQ9cltmXSxwPWQmJmQucHJvdG90eXBlO2lmKHApe2lmKHBbc10hPT1sKXRyeXthKHAscyxsKX1jYXRjaCh0KXtwW3NdPWx9aWYocFt1XXx8YShwLHUsZiksb1tmXSlmb3IodmFyIGggaW4gaSlpZihwW2hdIT09aVtoXSl0cnl7YShwLGgsaVtoXSl9Y2F0Y2godCl7cFtoXT1pW2hdfX19fSw3NDAxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMjE3NDQpO3Ioe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiFvLnNldEltbWVkaWF0ZXx8IW8uY2xlYXJJbW1lZGlhdGV9LHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSw2NTk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjU1NTUpLGE9bigyNDU5NCksYz1vLnByb2Nlc3Mscz0icHJvY2VzcyI9PWEoYyk7cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsbm9UYXJnZXRHZXQ6ITB9LHtxdWV1ZU1pY3JvdGFzazpmdW5jdGlvbih0KXt2YXIgZT1zJiZjLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSw4MTk5NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMzk0NzYpLGE9W10uc2xpY2UsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz1yP2EuY2FsbChhcmd1bWVudHMsMik6dm9pZCAwO3JldHVybiB0KHI/ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodGhpcyxvKX06ZSxuKX19O3Ioe2dsb2JhbDohMCxiaW5kOiEwLGZvcmNlZDovTVNJRSAuXC4vLnRlc3QoaSl9LHtzZXRUaW1lb3V0OmMoby5zZXRUaW1lb3V0KSxzZXRJbnRlcnZhbDpjKG8uc2V0SW50ZXJ2YWwpfSl9LDU1NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDUwMDYzKTt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDU3NTk3KSxhPW4oOTI5MTMpLGM9bigxOTI2KSxzPW4oNTExMjgpLHU9big3MTIwMSksbD1uKDg5ODI3KSxmPW4oNTkzNzkpLGQ9big3NjI5OCkscD1uKDQ2MTMwKSxoPW4oNTk1OTEpLHY9big4NzU3OSksZz1uKDEwNTkyKSx5PW4oNTA4NjgpLG09bigxNDIwOSksYj1uKDMxMDc0KSx4PW4oNzM4OTApLHc9bigyMzcyNCksRT1vKCJmZXRjaCIpLGo9bygiSGVhZGVycyIpLEM9dygiaXRlcmF0b3IiKSxrPSJVUkxTZWFyY2hQYXJhbXMiLFM9IlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIixPPWwuc2V0LEk9bC5nZXR0ZXJGb3IoayksQT1sLmdldHRlckZvcihTKSxNPS9cKy9nLF89QXJyYXkoNCksVD1mdW5jdGlvbih0KXtyZXR1cm4gX1t0LTFdfHwoX1t0LTFdPVJlZ0V4cCgiKCg/OiVbXFxkYS1mXXsyfSl7Iit0KyJ9KSIsImdpIikpfSxSPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKGUpe3JldHVybiB0fX0sTD1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoTSwiICIpLG49NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtmb3IoO247KWU9ZS5yZXBsYWNlKFQobi0tKSxSKTtyZXR1cm4gZX19LFA9L1shJygpfl18JTIwL2csTj17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LEQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5bdF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKFAsRCl9LFU9ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgbixyLG89ZS5zcGxpdCgiJiIpLGk9MDtpPG8ubGVuZ3RoOykobj1vW2krK10pLmxlbmd0aCYmKHI9bi5zcGxpdCgiPSIpLHQucHVzaCh7a2V5Okwoci5zaGlmdCgpKSx2YWx1ZTpMKHIuam9pbigiPSIpKX0pKX0sQj1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsVSh0aGlzLmVudHJpZXMsdCl9LHo9ZnVuY3Rpb24odCxlKXtpZih0PGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpfSxWPXUoKGZ1bmN0aW9uKHQsZSl7Tyh0aGlzLHt0eXBlOlMsaXRlcmF0b3I6YihJKHQpLmVudHJpZXMpLGtpbmQ6ZX0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgdD1BKHRoaXMpLGU9dC5raW5kLG49dC5pdGVyYXRvci5uZXh0KCkscj1uLnZhbHVlO3JldHVybiBuLmRvbmV8fChuLnZhbHVlPSJrZXlzIj09PWU/ci5rZXk6InZhbHVlcyI9PT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdKSxufSkpLEg9ZnVuY3Rpb24oKXtmKHRoaXMsSCxrKTt2YXIgdCxlLG4scixvLGksYSxjLHMsdT1hcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCxsPXRoaXMscD1bXTtpZihPKGwse3R5cGU6ayxlbnRyaWVzOnAsdXBkYXRlVVJMOmZ1bmN0aW9uKCl7fSx1cGRhdGVTZWFyY2hQYXJhbXM6Qn0pLHZvaWQgMCE9PXUpaWYoZyh1KSlpZigiZnVuY3Rpb24iPT10eXBlb2YodD14KHUpKSlmb3Iobj0oZT10LmNhbGwodSkpLm5leHQ7IShyPW4uY2FsbChlKSkuZG9uZTspe2lmKChhPShpPShvPWIodihyLnZhbHVlKSkpLm5leHQpLmNhbGwobykpLmRvbmV8fChjPWkuY2FsbChvKSkuZG9uZXx8IWkuY2FsbChvKS5kb25lKXRocm93IFR5cGVFcnJvcigiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO3AucHVzaCh7a2V5OmEudmFsdWUrIiIsdmFsdWU6Yy52YWx1ZSsiIn0pfWVsc2UgZm9yKHMgaW4gdSlkKHUscykmJnAucHVzaCh7a2V5OnMsdmFsdWU6dVtzXSsiIn0pO2Vsc2UgVShwLCJzdHJpbmciPT10eXBlb2YgdT8iPyI9PT11LmNoYXJBdCgwKT91LnNsaWNlKDEpOnU6dSsiIil9LHE9SC5wcm90b3R5cGU7YyhxLHthcHBlbmQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIG49SSh0aGlzKTtuLmVudHJpZXMucHVzaCh7a2V5OnQrIiIsdmFsdWU6ZSsiIn0pLG4udXBkYXRlVVJMKCl9LGRlbGV0ZTpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcyksbj1lLmVudHJpZXMscj10KyIiLG89MDtvPG4ubGVuZ3RoOyluW29dLmtleT09PXI/bi5zcGxpY2UobywxKTpvKys7ZS51cGRhdGVVUkwoKX0sZ2V0OmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9SSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5rZXk9PT1uKXJldHVybiBlW3JdLnZhbHVlO3JldHVybiBudWxsfSxnZXRBbGw6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9W10sbz0wO288ZS5sZW5ndGg7bysrKWVbb10ua2V5PT09biYmci5wdXNoKGVbb10udmFsdWUpO3JldHVybiByfSxoYXM6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoOylpZihlW3IrK10ua2V5PT09bilyZXR1cm4hMDtyZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT0hMSxhPXQrIiIsYz1lKyIiLHM9MDtzPG8ubGVuZ3RoO3MrKykobj1vW3NdKS5rZXk9PT1hJiYoaT9vLnNwbGljZShzLS0sMSk6KGk9ITAsbi52YWx1ZT1jKSk7aXx8by5wdXNoKHtrZXk6YSx2YWx1ZTpjfSksci51cGRhdGVVUkwoKX0sc29ydDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT1vLnNsaWNlKCk7Zm9yKG8ubGVuZ3RoPTAsbj0wO248aS5sZW5ndGg7bisrKXtmb3IodD1pW25dLGU9MDtlPG47ZSsrKWlmKG9bZV0ua2V5PnQua2V5KXtvLnNwbGljZShlLDAsdCk7YnJlYWt9ZT09PW4mJm8ucHVzaCh0KX1yLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPUkodGhpcykuZW50cmllcyxyPXAodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPTA7bzxuLmxlbmd0aDspcigoZT1uW28rK10pLnZhbHVlLGUua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImtleXMiKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImVudHJpZXMiKX19LHtlbnVtZXJhYmxlOiEwfSksYShxLEMscS5lbnRyaWVzKSxhKHEsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1JKHRoaXMpLmVudHJpZXMsbj1bXSxyPTA7cjxlLmxlbmd0aDspdD1lW3IrK10sbi5wdXNoKEYodC5rZXkpKyI9IitGKHQudmFsdWUpKTtyZXR1cm4gbi5qb2luKCImIil9KSx7ZW51bWVyYWJsZTohMH0pLHMoSCxrKSxyKHtnbG9iYWw6ITAsZm9yY2VkOiFpfSx7VVJMU2VhcmNoUGFyYW1zOkh9KSxpfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGp8fHIoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPVt0XTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoZyhlPWFyZ3VtZW50c1sxXSkmJihuPWUuYm9keSxoKG4pPT09ayYmKChyPWUuaGVhZGVycz9uZXcgaihlLmhlYWRlcnMpOm5ldyBqKS5oYXMoImNvbnRlbnQtdHlwZSIpfHxyLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSxlPXkoZSx7Ym9keTptKDAsU3RyaW5nKG4pKSxoZWFkZXJzOm0oMCxyKX0pKSksby5wdXNoKGUpKSxFLmFwcGx5KHRoaXMsbyl9fSksdC5leHBvcnRzPXtVUkxTZWFyY2hQYXJhbXM6SCxnZXRTdGF0ZTpJfX0sMTM5MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgyMjAxKTt2YXIgcixvPW4oMTQwNDQpLGk9big2MjU1NiksYT1uKDU3NTk3KSxjPW4oODk1NTgpLHM9big4NjQwMSksdT1uKDkyOTEzKSxsPW4oNTkzNzkpLGY9big3NjI5OCksZD1uKDc4Njg1KSxwPW4oODUxNjYpLGg9big2MDE0MCkuY29kZUF0LHY9big2OTkyNyksZz1uKDUxMTI4KSx5PW4oNTU1NyksbT1uKDg5ODI3KSxiPWMuVVJMLHg9eS5VUkxTZWFyY2hQYXJhbXMsdz15LmdldFN0YXRlLEU9bS5zZXQsaj1tLmdldHRlckZvcigiVVJMIiksQz1NYXRoLmZsb29yLGs9TWF0aC5wb3csUz0iSW52YWxpZCBzY2hlbWUiLE89IkludmFsaWQgaG9zdCIsST0iSW52YWxpZCBwb3J0IixBPS9bQS1aYS16XS8sTT0vW1xkK1wtLkEtWmEtel0vLF89L1xkLyxUPS9eKDB4fDBYKS8sUj0vXlswLTddKyQvLEw9L15cZCskLyxQPS9eW1xkQS1GYS1mXSskLyxOPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMlLzo/QFtcXF1dLyxEPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMvOj9AW1xcXV0vLEY9L15bXHUwMDAwLVx1MDAxRiBdK3xbXHUwMDAwLVx1MDAxRiBdKyQvZyxVPS9bXHUwMDA5XHUwMDBBXHUwMDBEXS9nLEI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87aWYoIlsiPT1lLmNoYXJBdCgwKSl7aWYoIl0iIT1lLmNoYXJBdChlLmxlbmd0aC0xKSlyZXR1cm4gTztpZighKG49VihlLnNsaWNlKDEsLTEpKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZSBpZihKKHQpKXtpZihlPXYoZSksTi50ZXN0KGUpKXJldHVybiBPO2lmKG51bGw9PT0obj16KGUpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNle2lmKEQudGVzdChlKSlyZXR1cm4gTztmb3Iobj0iIixyPXAoZSksbz0wO288ci5sZW5ndGg7bysrKW4rPSQocltvXSxxKTt0Lmhvc3Q9bn19LHo9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz10LnNwbGl0KCIuIik7aWYocy5sZW5ndGgmJiIiPT1zW3MubGVuZ3RoLTFdJiZzLnBvcCgpLChlPXMubGVuZ3RoKT40KXJldHVybiB0O2ZvcihuPVtdLHI9MDtyPGU7cisrKXtpZigiIj09KG89c1tyXSkpcmV0dXJuIHQ7aWYoaT0xMCxvLmxlbmd0aD4xJiYiMCI9PW8uY2hhckF0KDApJiYoaT1ULnRlc3Qobyk/MTY6OCxvPW8uc2xpY2UoOD09aT8xOjIpKSwiIj09PW8pYT0wO2Vsc2V7aWYoISgxMD09aT9MOjg9PWk/UjpQKS50ZXN0KG8pKXJldHVybiB0O2E9cGFyc2VJbnQobyxpKX1uLnB1c2goYSl9Zm9yKHI9MDtyPGU7cisrKWlmKGE9bltyXSxyPT1lLTEpe2lmKGE+PWsoMjU2LDUtZSkpcmV0dXJuIG51bGx9ZWxzZSBpZihhPjI1NSlyZXR1cm4gbnVsbDtmb3IoYz1uLnBvcCgpLHI9MDtyPG4ubGVuZ3RoO3IrKyljKz1uW3JdKmsoMjU2LDMtcik7cmV0dXJuIGN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz1bMCwwLDAsMCwwLDAsMCwwXSx1PTAsbD1udWxsLGY9MCxkPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY2hhckF0KGYpfTtpZigiOiI9PWQoKSl7aWYoIjoiIT10LmNoYXJBdCgxKSlyZXR1cm47Zis9MixsPSsrdX1mb3IoO2QoKTspe2lmKDg9PXUpcmV0dXJuO2lmKCI6IiE9ZCgpKXtmb3IoZT1uPTA7bjw0JiZQLnRlc3QoZCgpKTspZT0xNiplK3BhcnNlSW50KGQoKSwxNiksZisrLG4rKztpZigiLiI9PWQoKSl7aWYoMD09bilyZXR1cm47aWYoZi09bix1PjYpcmV0dXJuO2ZvcihyPTA7ZCgpOyl7aWYobz1udWxsLHI+MCl7aWYoISgiLiI9PWQoKSYmcjw0KSlyZXR1cm47ZisrfWlmKCFfLnRlc3QoZCgpKSlyZXR1cm47Zm9yKDtfLnRlc3QoZCgpKTspe2lmKGk9cGFyc2VJbnQoZCgpLDEwKSxudWxsPT09bylvPWk7ZWxzZXtpZigwPT1vKXJldHVybjtvPTEwKm8raX1pZihvPjI1NSlyZXR1cm47ZisrfXNbdV09MjU2KnNbdV0rbywyIT0rK3ImJjQhPXJ8fHUrK31pZig0IT1yKXJldHVybjticmVha31pZigiOiI9PWQoKSl7aWYoZisrLCFkKCkpcmV0dXJufWVsc2UgaWYoZCgpKXJldHVybjtzW3UrK109ZX1lbHNle2lmKG51bGwhPT1sKXJldHVybjtmKyssbD0rK3V9fWlmKG51bGwhPT1sKWZvcihhPXUtbCx1PTc7MCE9dSYmYT4wOyljPXNbdV0sc1t1LS1dPXNbbCthLTFdLHNbbCstLWFdPWM7ZWxzZSBpZig4IT11KXJldHVybjtyZXR1cm4gc30sSD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbztpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihlPVtdLG49MDtuPDQ7bisrKWUudW5zaGlmdCh0JTI1NiksdD1DKHQvMjU2KTtyZXR1cm4gZS5qb2luKCIuIil9aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IoZT0iIixyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLG49MSxyPW51bGwsbz0wLGk9MDtpPDg7aSsrKTAhPT10W2ldPyhvPm4mJihlPXIsbj1vKSxyPW51bGwsbz0wKToobnVsbD09PXImJihyPWkpLCsrbyk7cmV0dXJuIG8+biYmKGU9cixuPW8pLGV9KHQpLG49MDtuPDg7bisrKW8mJjA9PT10W25dfHwobyYmKG89ITEpLHI9PT1uPyhlKz1uPyI6IjoiOjoiLG89ITApOihlKz10W25dLnRvU3RyaW5nKDE2KSxuPDcmJihlKz0iOiIpKSk7cmV0dXJuIlsiK2UrIl0ifXJldHVybiB0fSxxPXt9LFc9ZCh7fSxxLHsiICI6MSwnIic6MSwiPCI6MSwiPiI6MSwiYCI6MX0pLEc9ZCh7fSxXLHsiIyI6MSwiPyI6MSwieyI6MSwifSI6MX0pLFo9ZCh7fSxHLHsiLyI6MSwiOiI6MSwiOyI6MSwiPSI6MSwiQCI6MSwiWyI6MSwiXFwiOjEsIl0iOjEsIl4iOjEsInwiOjF9KSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCh0LDApO3JldHVybiBuPjMyJiZuPDEyNyYmIWYoZSx0KT90OmVuY29kZVVSSUNvbXBvbmVudCh0KX0sWT17ZnRwOjIxLGZpbGU6bnVsbCxodHRwOjgwLGh0dHBzOjQ0Myx3czo4MCx3c3M6NDQzfSxKPWZ1bmN0aW9uKHQpe3JldHVybiBmKFksdC5zY2hlbWUpfSxLPWZ1bmN0aW9uKHQpe3JldHVybiIiIT10LnVzZXJuYW1lfHwiIiE9dC5wYXNzd29yZH0sWD1mdW5jdGlvbih0KXtyZXR1cm4hdC5ob3N0fHx0LmNhbm5vdEJlQUJhc2VVUkx8fCJmaWxlIj09dC5zY2hlbWV9LFE9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gMj09dC5sZW5ndGgmJkEudGVzdCh0LmNoYXJBdCgwKSkmJigiOiI9PShuPXQuY2hhckF0KDEpKXx8IWUmJiJ8Ij09bil9LHR0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0Lmxlbmd0aD4xJiZRKHQuc2xpY2UoMCwyKSkmJigyPT10Lmxlbmd0aHx8Ii8iPT09KGU9dC5jaGFyQXQoMikpfHwiXFwiPT09ZXx8Ij8iPT09ZXx8IiMiPT09ZSl9LGV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucGF0aCxuPWUubGVuZ3RoOyFufHwiZmlsZSI9PXQuc2NoZW1lJiYxPT1uJiZRKGVbMF0sITApfHxlLnBvcCgpfSxudD1mdW5jdGlvbih0KXtyZXR1cm4iLiI9PT10fHwiJTJlIj09PXQudG9Mb3dlckNhc2UoKX0scnQ9e30sb3Q9e30saXQ9e30sYXQ9e30sY3Q9e30sc3Q9e30sdXQ9e30sbHQ9e30sZnQ9e30sZHQ9e30scHQ9e30saHQ9e30sdnQ9e30sZ3Q9e30seXQ9e30sbXQ9e30sYnQ9e30seHQ9e30sd3Q9e30sRXQ9e30sanQ9e30sQ3Q9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIGksYSxjLHMsdSxsPW58fHJ0LGQ9MCxoPSIiLHY9ITEsZz0hMSx5PSExO2ZvcihufHwodC5zY2hlbWU9IiIsdC51c2VybmFtZT0iIix0LnBhc3N3b3JkPSIiLHQuaG9zdD1udWxsLHQucG9ydD1udWxsLHQucGF0aD1bXSx0LnF1ZXJ5PW51bGwsdC5mcmFnbWVudD1udWxsLHQuY2Fubm90QmVBQmFzZVVSTD0hMSxlPWUucmVwbGFjZShGLCIiKSksZT1lLnJlcGxhY2UoVSwiIiksaT1wKGUpO2Q8PWkubGVuZ3RoOyl7c3dpdGNoKGE9aVtkXSxsKXtjYXNlIHJ0OmlmKCFhfHwhQS50ZXN0KGEpKXtpZihuKXJldHVybiBTO2w9aXQ7Y29udGludWV9aCs9YS50b0xvd2VyQ2FzZSgpLGw9b3Q7YnJlYWs7Y2FzZSBvdDppZihhJiYoTS50ZXN0KGEpfHwiKyI9PWF8fCItIj09YXx8Ii4iPT1hKSloKz1hLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZigiOiIhPWEpe2lmKG4pcmV0dXJuIFM7aD0iIixsPWl0LGQ9MDtjb250aW51ZX1pZihuJiYoSih0KSE9ZihZLGgpfHwiZmlsZSI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KXx8ImZpbGUiPT10LnNjaGVtZSYmIXQuaG9zdCkpcmV0dXJuO2lmKHQuc2NoZW1lPWgsbilyZXR1cm4gdm9pZChKKHQpJiZZW3Quc2NoZW1lXT09dC5wb3J0JiYodC5wb3J0PW51bGwpKTtoPSIiLCJmaWxlIj09dC5zY2hlbWU/bD1ndDpKKHQpJiZvJiZvLnNjaGVtZT09dC5zY2hlbWU/bD1hdDpKKHQpP2w9bHQ6Ii8iPT1pW2QrMV0/KGw9Y3QsZCsrKToodC5jYW5ub3RCZUFCYXNlVVJMPSEwLHQucGF0aC5wdXNoKCIiKSxsPXd0KX1icmVhaztjYXNlIGl0OmlmKCFvfHxvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIiE9YSlyZXR1cm4gUztpZihvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIj09YSl7dC5zY2hlbWU9by5zY2hlbWUsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLHQuY2Fubm90QmVBQmFzZVVSTD0hMCxsPWp0O2JyZWFrfWw9ImZpbGUiPT1vLnNjaGVtZT9ndDpzdDtjb250aW51ZTtjYXNlIGF0OmlmKCIvIiE9YXx8Ii8iIT1pW2QrMV0pe2w9c3Q7Y29udGludWV9bD1mdCxkKys7YnJlYWs7Y2FzZSBjdDppZigiLyI9PWEpe2w9ZHQ7YnJlYWt9bD14dDtjb250aW51ZTtjYXNlIHN0OmlmKHQuc2NoZW1lPW8uc2NoZW1lLGE9PXIpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCIvIj09YXx8IlxcIj09YSYmSih0KSlsPXV0O2Vsc2UgaWYoIj8iPT1hKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnBhdGgucG9wKCksbD14dDtjb250aW51ZX10LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH1icmVhaztjYXNlIHV0OmlmKCFKKHQpfHwiLyIhPWEmJiJcXCIhPWEpe2lmKCIvIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsbD14dDtjb250aW51ZX1sPWR0fWVsc2UgbD1mdDticmVhaztjYXNlIGx0OmlmKGw9ZnQsIi8iIT1hfHwiLyIhPWguY2hhckF0KGQrMSkpY29udGludWU7ZCsrO2JyZWFrO2Nhc2UgZnQ6aWYoIi8iIT1hJiYiXFwiIT1hKXtsPWR0O2NvbnRpbnVlfWJyZWFrO2Nhc2UgZHQ6aWYoIkAiPT1hKXt2JiYoaD0iJTQwIitoKSx2PSEwLGM9cChoKTtmb3IodmFyIG09MDttPGMubGVuZ3RoO20rKyl7dmFyIGI9Y1ttXTtpZigiOiIhPWJ8fHkpe3ZhciB4PSQoYixaKTt5P3QucGFzc3dvcmQrPXg6dC51c2VybmFtZSs9eH1lbHNlIHk9ITB9aD0iIn1lbHNlIGlmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKHYmJiIiPT1oKXJldHVybiJJbnZhbGlkIGF1dGhvcml0eSI7ZC09cChoKS5sZW5ndGgrMSxoPSIiLGw9cHR9ZWxzZSBoKz1hO2JyZWFrO2Nhc2UgcHQ6Y2FzZSBodDppZihuJiYiZmlsZSI9PXQuc2NoZW1lKXtsPW10O2NvbnRpbnVlfWlmKCI6IiE9YXx8Zyl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KSl7aWYoSih0KSYmIiI9PWgpcmV0dXJuIE87aWYobiYmIiI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KSlyZXR1cm47aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPWJ0LG4pcmV0dXJuO2NvbnRpbnVlfSJbIj09YT9nPSEwOiJdIj09YSYmKGc9ITEpLGgrPWF9ZWxzZXtpZigiIj09aClyZXR1cm4gTztpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9dnQsbj09aHQpcmV0dXJufWJyZWFrO2Nhc2UgdnQ6aWYoIV8udGVzdChhKSl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KXx8bil7aWYoIiIhPWgpe3ZhciB3PXBhcnNlSW50KGgsMTApO2lmKHc+NjU1MzUpcmV0dXJuIEk7dC5wb3J0PUoodCkmJnc9PT1ZW3Quc2NoZW1lXT9udWxsOncsaD0iIn1pZihuKXJldHVybjtsPWJ0O2NvbnRpbnVlfXJldHVybiBJfWgrPWE7YnJlYWs7Y2FzZSBndDppZih0LnNjaGVtZT0iZmlsZSIsIi8iPT1hfHwiXFwiPT1hKWw9eXQ7ZWxzZXtpZighb3x8ImZpbGUiIT1vLnNjaGVtZSl7bD14dDtjb250aW51ZX1pZihhPT1yKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCI/Ij09YSl0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3R0KGkuc2xpY2UoZCkuam9pbigiIikpfHwodC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksZXQodCkpLGw9eHQ7Y29udGludWV9dC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH19YnJlYWs7Y2FzZSB5dDppZigiLyI9PWF8fCJcXCI9PWEpe2w9bXQ7YnJlYWt9byYmImZpbGUiPT1vLnNjaGVtZSYmIXR0KGkuc2xpY2UoZCkuam9pbigiIikpJiYoUShvLnBhdGhbMF0sITApP3QucGF0aC5wdXNoKG8ucGF0aFswXSk6dC5ob3N0PW8uaG9zdCksbD14dDtjb250aW51ZTtjYXNlIG10OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YXx8Ij8iPT1hfHwiIyI9PWEpe2lmKCFuJiZRKGgpKWw9eHQ7ZWxzZSBpZigiIj09aCl7aWYodC5ob3N0PSIiLG4pcmV0dXJuO2w9YnR9ZWxzZXtpZihzPUIodCxoKSlyZXR1cm4gcztpZigibG9jYWxob3N0Ij09dC5ob3N0JiYodC5ob3N0PSIiKSxuKXJldHVybjtoPSIiLGw9YnR9Y29udGludWV9aCs9YTticmVhaztjYXNlIGJ0OmlmKEoodCkpe2lmKGw9eHQsIi8iIT1hJiYiXFwiIT1hKWNvbnRpbnVlfWVsc2UgaWYobnx8Ij8iIT1hKWlmKG58fCIjIiE9YSl7aWYoYSE9ciYmKGw9eHQsIi8iIT1hKSljb250aW51ZX1lbHNlIHQuZnJhZ21lbnQ9IiIsbD1qdDtlbHNlIHQucXVlcnk9IiIsbD1FdDticmVhaztjYXNlIHh0OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YSYmSih0KXx8IW4mJigiPyI9PWF8fCIjIj09YSkpe2lmKCIuLiI9PT0odT0odT1oKS50b0xvd2VyQ2FzZSgpKXx8IiUyZS4iPT09dXx8Ii4lMmUiPT09dXx8IiUyZSUyZSI9PT11PyhldCh0KSwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fHQucGF0aC5wdXNoKCIiKSk6bnQoaCk/Ii8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIik6KCJmaWxlIj09dC5zY2hlbWUmJiF0LnBhdGgubGVuZ3RoJiZRKGgpJiYodC5ob3N0JiYodC5ob3N0PSIiKSxoPWguY2hhckF0KDApKyI6IiksdC5wYXRoLnB1c2goaCkpLGg9IiIsImZpbGUiPT10LnNjaGVtZSYmKGE9PXJ8fCI/Ij09YXx8IiMiPT1hKSlmb3IoO3QucGF0aC5sZW5ndGg+MSYmIiI9PT10LnBhdGhbMF07KXQucGF0aC5zaGlmdCgpOyI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWEmJih0LmZyYWdtZW50PSIiLGw9anQpfWVsc2UgaCs9JChhLEcpO2JyZWFrO2Nhc2Ugd3Q6Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YT8odC5mcmFnbWVudD0iIixsPWp0KTphIT1yJiYodC5wYXRoWzBdKz0kKGEscSkpO2JyZWFrO2Nhc2UgRXQ6bnx8IiMiIT1hP2EhPXImJigiJyI9PWEmJkoodCk/dC5xdWVyeSs9IiUyNyI6dC5xdWVyeSs9IiMiPT1hPyIlMjMiOiQoYSxxKSk6KHQuZnJhZ21lbnQ9IiIsbD1qdCk7YnJlYWs7Y2FzZSBqdDphIT1yJiYodC5mcmFnbWVudCs9JChhLFcpKX1kKyt9fSxrdD1mdW5jdGlvbih0KXt2YXIgZSxuLHI9bCh0aGlzLGt0LCJVUkwiKSxvPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGE9U3RyaW5nKHQpLGM9RShyLHt0eXBlOiJVUkwifSk7aWYodm9pZCAwIT09bylpZihvIGluc3RhbmNlb2Yga3QpZT1qKG8pO2Vsc2UgaWYobj1DdChlPXt9LFN0cmluZyhvKSkpdGhyb3cgVHlwZUVycm9yKG4pO2lmKG49Q3QoYyxhLG51bGwsZSkpdGhyb3cgVHlwZUVycm9yKG4pO3ZhciBzPWMuc2VhcmNoUGFyYW1zPW5ldyB4LHU9dyhzKTt1LnVwZGF0ZVNlYXJjaFBhcmFtcyhjLnF1ZXJ5KSx1LnVwZGF0ZVVSTD1mdW5jdGlvbigpe2MucXVlcnk9U3RyaW5nKHMpfHxudWxsfSxpfHwoci5ocmVmPU90LmNhbGwociksci5vcmlnaW49SXQuY2FsbChyKSxyLnByb3RvY29sPUF0LmNhbGwociksci51c2VybmFtZT1NdC5jYWxsKHIpLHIucGFzc3dvcmQ9X3QuY2FsbChyKSxyLmhvc3Q9VHQuY2FsbChyKSxyLmhvc3RuYW1lPVJ0LmNhbGwociksci5wb3J0PUx0LmNhbGwociksci5wYXRobmFtZT1QdC5jYWxsKHIpLHIuc2VhcmNoPU50LmNhbGwociksci5zZWFyY2hQYXJhbXM9RHQuY2FsbChyKSxyLmhhc2g9RnQuY2FsbChyKSl9LFN0PWt0LnByb3RvdHlwZSxPdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnNjaGVtZSxuPXQudXNlcm5hbWUscj10LnBhc3N3b3JkLG89dC5ob3N0LGk9dC5wb3J0LGE9dC5wYXRoLGM9dC5xdWVyeSxzPXQuZnJhZ21lbnQsdT1lKyI6IjtyZXR1cm4gbnVsbCE9PW8/KHUrPSIvLyIsSyh0KSYmKHUrPW4rKHI/IjoiK3I6IiIpKyJAIiksdSs9SChvKSxudWxsIT09aSYmKHUrPSI6IitpKSk6ImZpbGUiPT1lJiYodSs9Ii8vIiksdSs9dC5jYW5ub3RCZUFCYXNlVVJMP2FbMF06YS5sZW5ndGg/Ii8iK2Euam9pbigiLyIpOiIiLG51bGwhPT1jJiYodSs9Ij8iK2MpLG51bGwhPT1zJiYodSs9IiMiK3MpLHV9LEl0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC5wb3J0O2lmKCJibG9iIj09ZSl0cnl7cmV0dXJuIG5ldyBVUkwoZS5wYXRoWzBdKS5vcmlnaW59Y2F0Y2godCl7cmV0dXJuIm51bGwifXJldHVybiJmaWxlIiE9ZSYmSih0KT9lKyI6Ly8iK0godC5ob3N0KSsobnVsbCE9PW4/IjoiK246IiIpOiJudWxsIn0sQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zY2hlbWUrIjoifSxNdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnVzZXJuYW1lfSxfdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnBhc3N3b3JkfSxUdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10Lmhvc3Qsbj10LnBvcnQ7cmV0dXJuIG51bGw9PT1lPyIiOm51bGw9PT1uP0goZSk6SChlKSsiOiIrbn0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLmhvc3Q7cmV0dXJuIG51bGw9PT10PyIiOkgodCl9LEx0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5wb3J0O3JldHVybiBudWxsPT09dD8iIjpTdHJpbmcodCl9LFB0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQucGF0aDtyZXR1cm4gdC5jYW5ub3RCZUFCYXNlVVJMP2VbMF06ZS5sZW5ndGg/Ii8iK2Uuam9pbigiLyIpOiIifSxOdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykucXVlcnk7cmV0dXJuIHQ/Ij8iK3Q6IiJ9LER0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykuc2VhcmNoUGFyYW1zfSxGdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuZnJhZ21lbnQ7cmV0dXJuIHQ/IiMiK3Q6IiJ9LFV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2dldDp0LHNldDplLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX07aWYoaSYmcyhTdCx7aHJlZjpVdChPdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPVN0cmluZyh0KSxyPUN0KGUsbik7aWYocil0aHJvdyBUeXBlRXJyb3Iocik7dyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLG9yaWdpbjpVdChJdCkscHJvdG9jb2w6VXQoQXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7Q3QoZSxTdHJpbmcodCkrIjoiLHJ0KX0pKSx1c2VybmFtZTpVdChNdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS51c2VybmFtZT0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnVzZXJuYW1lKz0kKG5bcl0sWil9fSkpLHBhc3N3b3JkOlV0KF90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnBhc3N3b3JkPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUucGFzc3dvcmQrPSQobltyXSxaKX19KSksaG9zdDpVdChUdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLHB0KX0pKSxob3N0bmFtZTpVdChSdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLGh0KX0pKSxwb3J0OlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO1goZSl8fCgiIj09KHQ9U3RyaW5nKHQpKT9lLnBvcnQ9bnVsbDpDdChlLHQsdnQpKX0pKSxwYXRobmFtZTpVdChQdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fChlLnBhdGg9W10sQ3QoZSx0KyIiLGJ0KSl9KSksc2VhcmNoOlV0KE50LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiPT0odD1TdHJpbmcodCkpP2UucXVlcnk9bnVsbDooIj8iPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5xdWVyeT0iIixDdChlLHQsRXQpKSx3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksc2VhcmNoUGFyYW1zOlV0KER0KSxoYXNoOlV0KEZ0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiIT0odD1TdHJpbmcodCkpPygiIyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLmZyYWdtZW50PSIiLEN0KGUsdCxqdCkpOmUuZnJhZ21lbnQ9bnVsbH0pKX0pLHUoU3QsInRvSlNPTiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLHUoU3QsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksYil7dmFyIEJ0PWIuY3JlYXRlT2JqZWN0VVJMLHp0PWIucmV2b2tlT2JqZWN0VVJMO0J0JiZ1KGt0LCJjcmVhdGVPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4gQnQuYXBwbHkoYixhcmd1bWVudHMpfSkpLHp0JiZ1KGt0LCJyZXZva2VPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4genQuYXBwbHkoYixhcmd1bWVudHMpfSkpfWcoa3QsIlVSTCIpLG8oe2dsb2JhbDohMCxmb3JjZWQ6IWEsc2hhbTohaX0se1VSTDprdH0pfSw5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJVUkwiLHByb3RvOiEwLGVudW1lcmFibGU6ITB9LHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfX0pfSwzNjQ2NzpmdW5jdGlvbih0LGUsbil7bigxNDA4Nil9LDY2NTU0OmZ1bmN0aW9uKHQsZSxuKXtuKDQ5MzApLG4oNjM2NCl9LDkzMjcwOmZ1bmN0aW9uKHQsZSxuKXtuKDUzNTEzKSxuKDk5MjU1KSxuKDQ4NDQpLG4oMzU1NCksbigxODg0NCksbigzNTY1Niksbig0OTA1MCksbig5Mzg0Myksbig2NjIyNCksbig3MTcwMCksbig2OTUyOSksbigyNzczNCksbig3NzM2OSksbig2OTg0Miksbig5NzkyOCksbig5MzkpLG4oNjE0NjcpLG4oMTYxMjcpLG4oNTM1ODkpLG4oODEwNDIpLG4oMTY3NTcpLG4oMTEwNzQpLG4oMzM1MzkpLG4oMjQxMDMpLG4oNjQ4MTMpLG4oNjg5OTkpLG4oNTM4MjQpfSw4OTc0MDpmdW5jdGlvbih0LGUsbil7bigzODc5MiksbigxOTkwKSxuKDk3Mjg0KSxuKDI0NTk4KSxuKDk5OTc5KSxuKDE4MjA1KSxuKDg1OCksbig2NDg5OSl9LDY4MDAxOmZ1bmN0aW9uKHQsZSxuKXtuKDMwNjEzKSxuKDY4NDA2KSxuKDQ5NzkpLG4oNDQ2NDYpfSwyODY5OTpmdW5jdGlvbih0LGUsbil7big5OTYyOCk7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDE1NjI0OmZ1bmN0aW9uKHQsZSxuKXtuKDU3MzYwKX0sODEyMTM6ZnVuY3Rpb24odCxlLG4pe24oNjEyOTgpLG4oNDcwMDQpLG4oNjc0NjIpLG4oOTA2NyksbigyMDEyNCksbigyMTM3MSksbigzODk4NCksbig2OTIzNyksbigyNjQ5Nyksbig1MzE2OCksbig3Mzk0OSksbig4ODIxMSksbig3Mzc2MSksbig0MjE5Niksbig0MzMzMiksbig5MjYwMSksbigyMDQ3NCksbig1NDU1Niksbig0MDYzOCksbig5NjY1OSksbigxNDY4OCksbig3Mzc4KSxuKDI3NDI4KSxuKDMzNDM2KSxuKDg0Mzg4KSxuKDU5NjIzKSxuKDMyODUzKSxuKDY3MDcyKX0sNjI2Nzc6ZnVuY3Rpb24odCxlLG4pe24oMzY1NzEpLG4oNDMwODYpfSwzNzYxMzpmdW5jdGlvbih0LGUsbil7big0MzI5MCksbigxNDY4Miksbig4NzU1NSl9LDE0NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDcwMjI1KSxuKDIzOTkpLG4oMTY4MDkpLG4oNjcxNDEpLG4oOTA3NjkpLG4oNTc4OTEpLG4oMTU3MjIpfSwzNjY4NjpmdW5jdGlvbih0LGUsbil7big3NzkwNyl9LDY3NzkzOmZ1bmN0aW9uKHQsZSxuKXtuKDc1NjQ3KX0sOTQ3NzpmdW5jdGlvbih0LGUsbil7big4NDMwOSksbig3Mjk2Myksbig1NjM1OSl9LDcyMzU0OmZ1bmN0aW9uKHQsZSxuKXtuKDIwMjM0KSxuKDUxMzc0KX0sNzQ2Nzk6ZnVuY3Rpb24odCxlLG4pe24oNTM3NzIpfSw5NDc5OmZ1bmN0aW9uKHQsZSxuKXtuKDI3NzUpfSw4NTY1OTpmdW5jdGlvbih0LGUsbil7big5Njc1MSksbig3MzIyMCl9LDU0OTg2OmZ1bmN0aW9uKHQsZSxuKXtuKDExMDcxKX0sMTg4MTpmdW5jdGlvbih0LGUsbil7big0OTY0MCksbig3NDk2Myksbig2OTQ1OSksbig0OTE1NSksbigyNjg5Niksbig4NzQ3NCksbig5NzQzMyksbig3MTA4KSxuKDIzNjMxKX0sNTc2MDM6ZnVuY3Rpb24odCxlLG4pe24oMTc2NSl9LDgxNTQ4OmZ1bmN0aW9uKHQsZSxuKXtuKDk4MzUwKSxuKDQxNzE4KSxuKDU3MzcxKSxuKDg5MjMwKSxuKDMyMzAzKSxuKDYyOTEpLG4oNjYxODEpfSwyMzEwMjpmdW5jdGlvbih0LGUsbil7big3MzQ2MCl9LDQ0MTUzOmZ1bmN0aW9uKHQsZSxuKXtuKDMyMDYyKX0sNzM5MjpmdW5jdGlvbih0LGUsbil7big3NDUyNSl9LDc3Nzk6ZnVuY3Rpb24odCxlLG4pe24oNjQwMjYpLG4oODYwNzcpfSw2MDgyNjpmdW5jdGlvbih0LGUsbil7bigxMzkxMCksbig5ODQpLG4oNTU1Nyl9LDU1OTMzOmZ1bmN0aW9uKHQsZSxuKXtuKDY5NDIpLG4oOTQyNDkpfSw4NzYwMjpmdW5jdGlvbih0LGUsbil7big2ODAwMSksbigyMzEwMiksbig2MDgyNik7dmFyIHI9big5NTk2OCk7dC5leHBvcnRzPXJ9LDk1OTY4OmZ1bmN0aW9uKHQsZSxuKXtuKDY2NTU0KSxuKDkzMjcwKSxuKDg5NzQwKSxuKDYyNjc3KSxuKDE0NzE1KSxuKDM2Njg2KSxuKDY3NzkzKSxuKDk0NzcpLG4oNzIzNTQpLG4oNzQ2NzkpLG4oNTQ5ODYpLG4oNTc2MDMpLG4oNDQxNTMpO3ZhciByPW4oNDc5NzIpO3QuZXhwb3J0cz1yfSw0Nzk3MjpmdW5jdGlvbih0LGUsbil7bigzNjQ2Nyksbig4MTIxMyksbigzNzYxMyksbig4MTU0OCksbig1NTkzMyk7dmFyIHI9big1OTAxMSk7dC5leHBvcnRzPXJ9LDU5MDExOmZ1bmN0aW9uKHQsZSxuKXtuKDg1NjU5KSxuKDc3NzkpO3ZhciByPW4oNjg2ODUpO3QuZXhwb3J0cz1yfSw2ODY4NTpmdW5jdGlvbih0LGUsbil7bigyODY5OSksbig5NDc5KSxuKDczOTIpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw1NzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1MzMzNSk7dC5leHBvcnRzPXJ9LDUzMzM1OmZ1bmN0aW9uKHQsZSxuKXtuKDE4ODEpO3ZhciByPW4oODc2MDIpO3QuZXhwb3J0cz1yfSw5MjQwNDpmdW5jdGlvbih0LGUsbil7big2NzAzOSksbig3OTc5OSksbig3NDAxMCksbig2NTk3Niksbig4MTk5NCksbigxMzkxMCksbig5ODQpLG4oNTU1Nyk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDE4OTg2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXXx8IiIscj10WzNdO2lmKCFyKXJldHVybiBuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgbz0oYT1yLGM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSkscz0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQoYyksIi8qIyAiLmNvbmNhdChzLCIgKi8iKSksaT1yLnNvdXJjZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChyLnNvdXJjZVJvb3QpLmNvbmNhdCh0LCIgKi8iKX0pKTtyZXR1cm5bbl0uY29uY2F0KGkpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9dmFyIGEsYyxzO3JldHVybltuXS5qb2luKCJcbiIpfShlLHQpO3JldHVybiBlWzJdPyJAbWVkaWEgIi5jb25jYXQoZVsyXSwiIHsiKS5jb25jYXQobiwifSIpOm59KSkuam9pbigiIil9LGUuaT1mdW5jdGlvbih0LG4peyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsIiJdXSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPVtdLmNvbmNhdCh0W3JdKTtuJiYob1syXT9vWzJdPSIiLmNvbmNhdChuLCIgYW5kICIpLmNvbmNhdChvWzJdKTpvWzJdPW4pLGUucHVzaChvKX19LGV9fSw0NjY3OTpmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9by5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9by5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPW8udG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e3Moe30sIiIpfWNhdGNoKHQpe3M9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW59fWZ1bmN0aW9uIHUodCxlLG4scil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBnP2U6ZyxpPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IEkocnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWY7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYocj09PXApdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYocj09PWgpe2lmKCJ0aHJvdyI9PT1vKXRocm93IGk7cmV0dXJuIE0oKX1mb3Iobi5tZXRob2Q9byxuLmFyZz1pOzspe3ZhciBhPW4uZGVsZWdhdGU7aWYoYSl7dmFyIGM9ayhhLG4pO2lmKGMpe2lmKGM9PT12KWNvbnRpbnVlO3JldHVybiBjfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLnNlbnQ9bi5fc2VudD1uLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2UicmV0dXJuIj09PW4ubWV0aG9kJiZuLmFicnVwdCgicmV0dXJuIixuLmFyZyk7cj1wO3ZhciBzPWwodCxlLG4pO2lmKCJub3JtYWwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT12KWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19InRocm93Ij09PXMudHlwZSYmKHI9aCxuLm1ldGhvZD0idGhyb3ciLG4uYXJnPXMuYXJnKX19fSh0LG4sYSksaX1mdW5jdGlvbiBsKHQsZSxuKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLG4pfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPXU7dmFyIGY9InN1c3BlbmRlZFN0YXJ0IixkPSJzdXNwZW5kZWRZaWVsZCIscD0iZXhlY3V0aW5nIixoPSJjb21wbGV0ZWQiLHY9e307ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9dmFyIGI9e307cyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHg9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eCYmeCh4KEEoW10pKSk7dyYmdyE9PW4mJnIuY2FsbCh3LGkpJiYoYj13KTt2YXIgRT1tLnByb3RvdHlwZT1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpO2Z1bmN0aW9uIGoodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEModCxlKXtmdW5jdGlvbiBuKG8saSxhLGMpe3ZhciBzPWwodFtvXSx0LGkpO2lmKCJ0aHJvdyIhPT1zLnR5cGUpe3ZhciB1PXMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXR5cGVvZiBmJiZyLmNhbGwoZiwiX19hd2FpdCIpP2UucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe24oIm5leHQiLHQsYSxjKX0pLChmdW5jdGlvbih0KXtuKCJ0aHJvdyIsdCxhLGMpfSkpOmUucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsYSh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gbigidGhyb3ciLHQsYSxjKX0pKX1jKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe24odCxyLGUsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIGsodCxuKXt2YXIgcj10Lml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09ZSl7aWYobi5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD0icmV0dXJuIixuLmFyZz1lLGsodCxuKSwidGhyb3ciPT09bi5tZXRob2QpKXJldHVybiB2O24ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiB2fXZhciBvPWwocix0Lml0ZXJhdG9yLG4uYXJnKTtpZigidGhyb3ciPT09by50eXBlKXJldHVybiBuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW8uYXJnLG4uZGVsZWdhdGU9bnVsbCx2O3ZhciBpPW8uYXJnO3JldHVybiBpP2kuZG9uZT8oblt0LnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PW4ubWV0aG9kJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLG4uZGVsZWdhdGU9bnVsbCx2KTppOihuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksbi5kZWxlZ2F0ZT1udWxsLHYpfWZ1bmN0aW9uIFModCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gSSh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gQSh0KXtpZih0KXt2YXIgbj10W2ldO2lmKG4pcmV0dXJuIG4uY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBvPS0xLGE9ZnVuY3Rpb24gbigpe2Zvcig7KytvPHQubGVuZ3RoOylpZihyLmNhbGwodCxvKSlyZXR1cm4gbi52YWx1ZT10W29dLG4uZG9uZT0hMSxuO3JldHVybiBuLnZhbHVlPWUsbi5kb25lPSEwLG59O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6TX19ZnVuY3Rpb24gTSgpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fXJldHVybiB5LnByb3RvdHlwZT1tLHMoRSwiY29uc3RydWN0b3IiLG0pLHMobSwiY29uc3RydWN0b3IiLHkpLHkuZGlzcGxheU5hbWU9cyhtLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT15fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxtKToodC5fX3Byb3RvX189bSxzKHQsYywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxqKEMucHJvdG90eXBlKSxzKEMucHJvdG90eXBlLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPUMsdC5hc3luYz1mdW5jdGlvbihlLG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBDKHUoZSxuLHIsbyksaSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0saihFKSxzKEUsYywiR2VuZXJhdG9yIikscyhFLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhFLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgcj1lLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gbi52YWx1ZT1yLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHQudmFsdWVzPUEsSS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkkscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKE8pLCF0KWZvcih2YXIgbiBpbiB0aGlzKSJ0Ij09PW4uY2hhckF0KDApJiZyLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgbj10aGlzO2Z1bmN0aW9uIG8ocixvKXtyZXR1cm4gYy50eXBlPSJ0aHJvdyIsYy5hcmc9dCxuLm5leHQ9cixvJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sYz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLHU9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZ1KXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCF1KXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgaT1vO2JyZWFrfX1pJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2Msdik6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSx2fSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4uZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUobi5jb21wbGV0aW9uLG4uYWZ0ZXJMb2MpLE8obiksdn19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLnRyeUxvYz09PXQpe3ZhciByPW4uY29tcGxldGlvbjtpZigidGhyb3ciPT09ci50eXBlKXt2YXIgbz1yLmFyZztPKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6QSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPWUpLHZ9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9ZTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShlKX19fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17aWQ6cixleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucj1mdW5jdGlvbih0KXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17fTtuLnIodCksbi5kKHQse2Rpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gQ3R9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiBqdH19KTt2YXIgZT1uKDY0MTU3KSxyPW4ubihlKSxvPShuKDYwNDkxKSxuKDQ2Njc5KSwiVVJMU2VhcmNoUGFyYW1zImluIHNlbGYpLGk9IlN5bWJvbCJpbiBzZWxmJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGE9IkZpbGVSZWFkZXIiaW4gc2VsZiYmIkJsb2IiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxjPSJGb3JtRGF0YSJpbiBzZWxmLHM9IkFycmF5QnVmZmVyImluIHNlbGY7aWYocyl2YXIgdT1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLGw9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdS5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk+LTF9O2Z1bmN0aW9uIGYodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSx0fWZ1bmN0aW9uIHAodCl7dmFyIGU9e25leHQ6ZnVuY3Rpb24oKXt2YXIgZT10LnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09ZSx2YWx1ZTplfX19O3JldHVybiBpJiYoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGV9KSxlfWZ1bmN0aW9uIGgodCl7dGhpcy5tYXA9e30sdCBpbnN0YW5jZW9mIGg/dC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3RoaXMuYXBwZW5kKGUsdCl9KSx0aGlzKTpBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dGhpcy5hcHBlbmQodFswXSx0WzFdKX0pLHRoaXMpOnQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RoaXMuYXBwZW5kKGUsdFtlXSl9KSx0aGlzKX1mdW5jdGlvbiB2KHQpe2lmKHQuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTt0LmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Qub25sb2FkPWZ1bmN0aW9uKCl7ZSh0LnJlc3VsdCl9LHQub25lcnJvcj1mdW5jdGlvbigpe24odC5lcnJvcil9fSkpfWZ1bmN0aW9uIHkodCl7dmFyIGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpO3JldHVybiBlLnJlYWRBc0FycmF5QnVmZmVyKHQpLG59ZnVuY3Rpb24gbSh0KXtpZih0LnNsaWNlKXJldHVybiB0LnNsaWNlKDApO3ZhciBlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCk7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpKSxlLmJ1ZmZlcn1mdW5jdGlvbiBiKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fYm9keUluaXQ9dCx0PyJzdHJpbmciPT10eXBlb2YgdD90aGlzLl9ib2R5VGV4dD10OmEmJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUJsb2I9dDpjJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5Rm9ybURhdGE9dDpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keVRleHQ9dC50b1N0cmluZygpOnMmJmEmJigoZT10KSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0LmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpzJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCl8fGwodCkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQpOnRoaXMuX2JvZHlUZXh0PXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYSYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciB0PXYodGhpcyk7aWYodClyZXR1cm4gdDtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj92KHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKHkpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9dih0aGlzKTtpZihyKXJldHVybiByO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiB0PXRoaXMuX2JvZHlCbG9iLGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpLGUucmVhZEFzVGV4dCh0KSxuO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbi5qb2luKCIiKX0odGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oRSl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31oLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0PWYodCksZT1kKGUpO3ZhciBuPXRoaXMubWFwW3RdO3RoaXMubWFwW3RdPW4/bisiLCAiK2U6ZX0saC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLm1hcFtmKHQpXX0saC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PWYodCksdGhpcy5oYXModCk/dGhpcy5tYXBbdF06bnVsbH0saC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShmKHQpKX0saC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXBbZih0KV09ZChlKX0saC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jYWxsKGUsdGhpcy5tYXBbbl0sbix0aGlzKX0saC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKG4pfSkpLHAodCl9LGgucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxwKHQpfSxoLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2goW24sZV0pfSkpLHAodCl9LGkmJihoLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWgucHJvdG90eXBlLmVudHJpZXMpO3ZhciB4PVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gdyh0LGUpe3ZhciBuLHIsbz0oZT1lfHx7fSkuYm9keTtpZih0IGluc3RhbmNlb2Ygdyl7aWYodC5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD10LnVybCx0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHMsZS5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKHQuaGVhZGVycykpLHRoaXMubWV0aG9kPXQubWV0aG9kLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5zaWduYWw9dC5zaWduYWwsb3x8bnVsbD09dC5fYm9keUluaXR8fChvPXQuX2JvZHlJbml0LHQuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKHQpO2lmKHRoaXMuY3JlZGVudGlhbHM9ZS5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwhZS5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KG49ZS5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixyPW4udG9VcHBlckNhc2UoKSx4LmluZGV4T2Yocik+LTE/cjpuKSx0aGlzLm1vZGU9ZS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9ZS5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwoIkdFVCI9PT10aGlzLm1ldGhvZHx8IkhFQUQiPT09dGhpcy5tZXRob2QpJiZvKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkobyl9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uZXcgRm9ybURhdGE7cmV0dXJuIHQudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dC5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtlLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSksZX1mdW5jdGlvbiBqKHQpe3ZhciBlPW5ldyBoO3JldHVybiB0LnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKS5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9pbigiOiIpLnRyaW0oKTtlLmFwcGVuZChyLG8pfX0pKSxlfWZ1bmN0aW9uIEModCxlKXtlfHwoZT17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz12b2lkIDA9PT1lLnN0YXR1cz8yMDA6ZS5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGU/ZS5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycyksdGhpcy51cmw9ZS51cmx8fCIiLHRoaXMuX2luaXRCb2R5KHQpfXcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sYi5jYWxsKHcucHJvdG90eXBlKSxiLmNhbGwoQy5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgaCh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxDLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEMobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiB0LnR5cGU9ImVycm9yIix0fTt2YXIgaz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07Qy5yZWRpcmVjdD1mdW5jdGlvbih0LGUpe2lmKC0xPT09ay5pbmRleE9mKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBDKG51bGwse3N0YXR1czplLGhlYWRlcnM6e2xvY2F0aW9uOnR9fSl9O3ZhciBTPXNlbGYuRE9NRXhjZXB0aW9uO3RyeXtuZXcgU31jYXRjaCh0KXsoUz1mdW5jdGlvbih0LGUpe3RoaXMubWVzc2FnZT10LHRoaXMubmFtZT1lO3ZhciBuPUVycm9yKHQpO3RoaXMuc3RhY2s9bi5zdGFja30pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksUy5wcm90b3R5cGUuY29uc3RydWN0b3I9U31mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyB3KHQsZSk7aWYoby5zaWduYWwmJm8uc2lnbmFsLmFib3J0ZWQpcmV0dXJuIHIobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBjKCl7aS5hYm9ydCgpfWkub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9e3N0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmooaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTt0LnVybD0icmVzcG9uc2VVUkwiaW4gaT9pLnJlc3BvbnNlVVJMOnQuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgZT0icmVzcG9uc2UiaW4gaT9pLnJlc3BvbnNlOmkucmVzcG9uc2VUZXh0O24obmV3IEMoZSx0KSl9LGkub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub25hYm9ydD1mdW5jdGlvbigpe3IobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSxpLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJpbmNsdWRlIj09PW8uY3JlZGVudGlhbHM/aS53aXRoQ3JlZGVudGlhbHM9ITA6Im9taXQiPT09by5jcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluIGkmJmEmJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2kuc2V0UmVxdWVzdEhlYWRlcihlLHQpfSkpLG8uc2lnbmFsJiYoby5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWkucmVhZHlTdGF0ZSYmby5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfSksaS5zZW5kKHZvaWQgMD09PW8uX2JvZHlJbml0P251bGw6by5fYm9keUluaXQpfSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIG49W10scj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7by0tID4yOyluLnB1c2goYXJndW1lbnRzW29dKTtmb3IoO24ubGVuZ3RoOyl7dmFyIGk9bi5wb3AoKTtpZihpJiZpLnBvcClmb3Iobz1pLmxlbmd0aDtvLS07KW4ucHVzaChpW29dKTtlbHNlIG51bGwhPWkmJiEwIT09aSYmITEhPT1pJiZyLnB1c2goaSl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChlfHx7fSxyKTp7bm9kZU5hbWU6dCxhdHRyaWJ1dGVzOmV8fHt9LGNoaWxkcmVuOnIsa2V5OmUmJmUua2V5fX1PLnBvbHlmaWxsPSEwLHNlbGYuZmV0Y2h8fChzZWxmLmZldGNoPU8sc2VsZi5IZWFkZXJzPWgsc2VsZi5SZXF1ZXN0PXcsc2VsZi5SZXNwb25zZT1DKTt2YXIgQT1uKDY2MDgxKSxNPW4ubihBKSxfPW4oOTI4MTYpLFQ9bi5uKF8pLFI9big0NDY3NCksTD1uLm4oUiksUD1uKDQ0NjIxKSxOPW4ubihQKSxEPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9dHlwZW9mIHQsbz0iIjtpZigic3RyaW5nIj09PXJ8fCJudW1iZXIiPT09cilyZXR1cm4gdHx8IiI7aWYoRCh0KSYmdC5sZW5ndGg+MClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKykiIiE9PShyPUYodFtlXSkpJiYobys9KG8mJiIgIikrcik7ZWxzZSBmb3IoZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0mJihvKz0obyYmIiAiKStlKTtyZXR1cm4gb312YXIgVT0ieC11bC1lbnZpcm9ubWVudC1pZCIsQj0ieC11bC1hbm9ueW1vdXMtaWQiLHo9IngtdWwtdXNlci1pZCIsVj0ieC11bC12aXNpdG9yLWlkIixIPSJ4LXVsLWluc3RhbGxhdGlvbi1tZXRob2QiLHE9IndlYi1ndG0iLFc9IndlYi1zZWdtZW50IixHPSJ3ZWItc25pcHBldCIsWj0idWwtY3VzdG9tLXN0eWxlIiwkPSJ1bC1jYXJkX19jb250YWluZXIiLFk9InVsLWNhcmQtLXZpZGVvIixKPSJjbG9zZS1jb250YWluZXIiLEs9ImNsb3NlLWJ0biIsWD0ibGlrZXJ0LW51bWJlciIsUT0ibnBzLW51bWJlciIsdHQ9ImNob2ljZSIsZXQ9InNlbGVjdC1sYWJlbCIsbnQ9InNlbGVjdC1jaGVja2JveCIscnQ9InNlbGVjdC1yYWRpbyIsb3Q9InVsLWNhcmRfX2Nob2ljZXMiLGl0PSJ1bC1jYXJkLXRleHRfX2lucHV0IixhdD0iLS1kZXNrdG9wIixjdD0iLS1tb2JpbGUiLHN0PSJ1bC1xdWVzdGlvbiIsdXQ9InVsLWNhcHRpb24iLGx0PSJmYWRlLWluLXRyYW5zaXRpb24iLGZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QrKGU/Y3Q6YXQpLHRdfTtmdW5jdGlvbiBkdCh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBwdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gcHQodCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBhPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2M9ITAsaT10fSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHB0KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGh0PSJ1bC1hcHAiLHZ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHA7bi5ydW5uaW5nfHxlLmRlc3Ryb3koaHQpO3ZhciBvLGk9bi5kZWNrLmNhcmRzW24uZGVjay5pbmRleF0sYT1pLkNhcmQsYz1pLnByb3BzLHM9aS50eXBlLHU9aS5uYW1lLGw9bi5ib3JkZXIsZj1mdW5jdGlvbigpe3ZhciB0PU4oKShMKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGUuY2xvc2UoaHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9bi5kZWNrLmNhcmRzLHA9bi5kZWNrLmluZGV4LGg9bi5mb250RmFtaWx5P3tmb250RmFtaWx5Om4uZm9udEZhbWlseS5yZXBsYWNlKCI7IiwiIil9Ont9LHY9bi5lbmRDYXJkLGc9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQobil7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDplLmFwcC5uZXh0KHtkYXRhOm4sY29tcGxldGVTdXJ2ZXk6ZnVuY3Rpb24oKXtlLmRlc3Ryb3koaHQpfSxlbmRDYXJkOnZ9KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkseT1kdChuLmFuc3dlcnN8fFtdKTt0cnl7dmFyIG09ZnVuY3Rpb24oKXt2YXIgdD1vLnZhbHVlO2lmKHQucXVlc3Rpb25JZD09PXUpe3ZhciBlO2lmKCJtdWx0aXBsZWNob2ljZSI9PT1zKXt2YXIgbj1jLm9wdGlvbnMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10LnZhbHVlfSkpO2lmKCFuKXJldHVybiJicmVhayI7ZT1yKCkoe30sbi5pZCxuLnZhbHVlKX1lbHNlIGU9dC52YWx1ZTtyZXR1cm4gZyh7dmFsdWU6ZX0pLCJicmVhayJ9fTtmb3IoeS5zKCk7IShvPXkubigpKS5kb25lOyl7aWYoImJyZWFrIj09PW0oKSlicmVha319Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZToidWwtYXBwIixpZDpodCxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9WyJ0cmFuc2l0aW9uZW5kIiwid2Via2l0VHJhbnNpdGlvbkVuZCIsIm1velRyYW5zaXRpb25FbmQiXSxvPSExLGk9ZnVuY3Rpb24gbigpe2lmKCFvJiZ3aW5kb3cuZnJhbWVFbGVtZW50KXt2YXIgaT1uZXcgRXZlbnQoInVsOmZyYW1lOnJlbmRlcmVkIik7d2luZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGkpfW89ITAsci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuKX0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShodCl9KSwzMDApfTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuYWRkRXZlbnRMaXN0ZW5lcihlLGkpfSkpLG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrKChmdW5jdGlvbigpe2UuY2xvc2UoaHQpfSkpLGUudXBkYXRlKGh0KX0odCl9LG9udXBkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0sc3R5bGU6aH0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHBfX2NvbnRhaW5lciJ9LEkoImRpdiIse2NsYXNzTmFtZTpGKFQoKShmdCgkLG4udXNlTW9iaWxlU3R5bGluZykpKSxzdHlsZTp7Ym9yZGVyQ29sb3I6bH19LEkoYSxNKCkoe30sYyx7Ym9yZGVyOmwsY2xhc3NOYW1lOiJ1bC1jYXJkIixuZXh0OmcsZW5kQ2FyZDp2LGxvY2FsZTpuLmxvY2FsZSxxdWVzdGlvbklkOnUsdXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX19KSkpLCJlbWFpbCIhPT1uLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0mJiJsaW5rIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmKCF2fHxwKzEhPT1kLmxlbmd0aCkmJkkoImRpdiIse2NsYXNzTmFtZTpGKGZ0KEosbi51c2VNb2JpbGVTdHlsaW5nKSl9LEkoImRpdiIse2NsYXNzTmFtZTpLLG9uY2xpY2s6ZixvbmtleXByZXNzOmZ1bmN0aW9uKHQpezEzPT10LmtleUNvZGUmJmYoKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGJ1dHRvbiIsdGFiaW5kZXg6MH0sSSgic3ZnIix7d2lkdGg6IjE4cHgiLGhlaWdodDoiMThweCIsdmlld0JveDoiMCAwIDEzIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxJKCJwYXRoIix7ZDoiTTIuNTQ5NjQgMS43ODM2OUwxLjc4MzY5IDIuNTQ5NjRMNS43MzQwNSA2LjVMMS43ODM2OSAxMC40NTA0TDIuNTQ5NjQgMTEuMjE2M0w2LjUgNy4yNjU5NUwxMC40NTA0IDExLjIxNjNMMTEuMjE2MyAxMC40NTA0TDcuMjY1OTUgNi41TDExLjIxNjMgMi41NDk2NEwxMC40NTA0IDEuNzgzNjlMNi41IDUuNzM0MDVMMi41NDk2NCAxLjc4MzY5WiIsZmlsbDoiIzI2MjEzNiJ9KSkpKSkpfSxndD1uKDQ3MDY2KSx5dD1uLm4oZ3QpLG10PW4oMzA1OTMpLGJ0PW4ubihtdCkseHQ9big0NDUzKSx3dD1uLm4oeHQpLEV0PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cucGFyZW50LkludGVyY29tfWNhdGNoKHQpe319LGp0PWZ1bmN0aW9uKCl7dmFyIHQ9RXQoKTt0JiYodC51bF93YXNWaXNpYmxlJiZ0KCJ1cGRhdGUiLHtoaWRlX2RlZmF1bHRfbGF1bmNoZXI6ITF9KSxkZWxldGUgdC51bF93YXNWaXNpYmxlKX0sQ3Q9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGU9ISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpZnJhbWUuaW50ZXJjb20tbGF1bmNoZXItZnJhbWUiKSx0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMH0pKX0sa3Q9W3RdLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2J0KCkodGhpcyx0KX1yZXR1cm4gd3QoKSh0LG51bGwsW3trZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzYWJsZSgpfSkpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe2t0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZSgpfSkpfX1dKSx0fSgpLE90PW4oNzYzOTApLEl0PW4ubihPdCksQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSgic3ZnIix7d2lkdGg6IjEwMCIsaGVpZ2h0OiIxMyIsdmlld0JveDoiMCAwIDEwMCAxMyIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhbHQ6IlBvd2VyZWQgYnkgU3ByaWcifSxJKCJwYXRoIix7ZDoiTTMuMDM2OSAwLjgzOTk4MUgwLjAyNDkwMjNWOC45OTk5OEgxLjMyMDlWNi41Mzk5OEgyLjg1NjlDNC44OTY5IDYuNTM5OTggNi4yNDA5IDUuMzc1OTggNi4yNDA5IDMuNjIzOThDNi4yNDA5IDEuOTU1OTggNC45Njg5IDAuODM5OTgxIDMuMDM2OSAwLjgzOTk4MVpNMy4wMDA5IDUuMzUxOThIMS4zMjA5VjIuMDI3OThIMy4wMDA5QzQuMTc2OSAyLjAyNzk4IDQuOTY4OSAyLjY3NTk4IDQuOTY4OSAzLjYyMzk4QzQuOTY4OSA0LjY1NTk4IDQuMTc2OSA1LjM1MTk4IDMuMDAwOSA1LjM1MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTkuOTA2NTMgMy4yMTU5OEM4LjE1NDUzIDMuMjE1OTggNi45MDY1MyA0LjQ1MTk4IDYuOTA2NTMgNi4xNzk5OEM2LjkwNjUzIDcuOTA3OTggOC4xNTQ1MyA5LjE0Mzk4IDkuOTA2NTMgOS4xNDM5OEMxMS42NTg1IDkuMTQzOTggMTIuOTA2NSA3LjkwNzk4IDEyLjkwNjUgNi4xNzk5OEMxMi45MDY1IDQuNDUxOTggMTEuNjU4NSAzLjIxNTk4IDkuOTA2NTMgMy4yMTU5OFpNOS45MDY1MyA4LjAxNTk4QzguODg2NTMgOC4wMTU5OCA4LjE1NDUzIDcuMjM1OTggOC4xNTQ1MyA2LjE3OTk4QzguMTU0NTMgNS4xMTE5OCA4Ljg4NjUzIDQuMzQzOTggOS45MDY1MyA0LjM0Mzk4QzEwLjkyNjUgNC4zNDM5OCAxMS42NTg1IDUuMTExOTggMTEuNjU4NSA2LjE3OTk4QzExLjY1ODUgNy4yMzU5OCAxMC45MjY1IDguMDE1OTggOS45MDY1MyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTIwLjk2MzEgMy4zNTk5OEwxOS43MzkxIDcuMTE1OThMMTguMzk1MSAzLjM1OTk4SDE3LjMyNzFMMTUuOTgzMSA3LjEyNzk4TDE0Ljc1OTEgMy4zNTk5OEgxMy40MTUxTDE1LjQ0MzEgOC45OTk5OEgxNi41MzUxTDE3Ljg2NzEgNS4wODc5OEwxOS4xODcxIDguOTk5OThIMjAuMjc5MUwyMi4zMDcxIDMuMzU5OThIMjAuOTYzMVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0yNS43MjQ2IDMuMjE1OThDMjQuMDA4NiAzLjIxNTk4IDIyLjgyMDYgNC41MTE5OCAyMi44MjA2IDYuMTc5OThDMjIuODIwNiA3Ljg1OTk4IDI0LjAyMDYgOS4xNDM5OCAyNS43OTY2IDkuMTQzOThDMjcuMDIwNiA5LjE0Mzk4IDI4LjAxNjYgOC41NDM5OCAyOC4zNzY2IDcuNTIzOThIMjcuMDA4NkMyNi43ODA2IDcuODgzOTggMjYuMzYwNiA4LjA1MTk4IDI1LjgwODYgOC4wNTE5OEMyNC43NTI2IDguMDUxOTggMjQuMjEyNiA3LjQwMzk4IDI0LjA5MjYgNi41NTE5OEgyOC41MjA2QzI4Ljc2MDYgNC42NDM5OCAyNy41OTY2IDMuMjE1OTggMjUuNzI0NiAzLjIxNTk4Wk0yNS43MzY2IDQuMjcxOThDMjYuNjEyNiA0LjI3MTk4IDI3LjIxMjYgNC43NjM5OCAyNy4yODQ2IDUuNjg3OThIMjQuMTE2NkMyNC4yNjA2IDQuODk1OTggMjQuODAwNiA0LjI3MTk4IDI1LjczNjYgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0zMS4xMjk3IDQuMTI3OThWMy4zNTk5OEgyOS44ODE3VjguOTk5OThIMzEuMTI5N1Y1LjQ0Nzk4QzMxLjYzMzcgNC43ODc5OCAzMi4zMTc3IDQuNDUxOTggMzMuMjE3NyA0LjQxNTk4VjMuMjM5OThDMzIuMzUzNyAzLjIzOTk4IDMxLjY0NTcgMy41NjM5OCAzMS4xMjk3IDQuMTI3OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNMzYuODIyMiAzLjIxNTk4QzM1LjEwNjIgMy4yMTU5OCAzMy45MTgyIDQuNTExOTggMzMuOTE4MiA2LjE3OTk4QzMzLjkxODIgNy44NTk5OCAzNS4xMTgyIDkuMTQzOTggMzYuODk0MiA5LjE0Mzk4QzM4LjExODIgOS4xNDM5OCAzOS4xMTQyIDguNTQzOTggMzkuNDc0MiA3LjUyMzk4SDM4LjEwNjJDMzcuODc4MiA3Ljg4Mzk4IDM3LjQ1ODIgOC4wNTE5OCAzNi45MDYyIDguMDUxOThDMzUuODUwMiA4LjA1MTk4IDM1LjMxMDIgNy40MDM5OCAzNS4xOTAyIDYuNTUxOThIMzkuNjE4MkMzOS44NTgyIDQuNjQzOTggMzguNjk0MiAzLjIxNTk4IDM2LjgyMjIgMy4yMTU5OFpNMzYuODM0MiA0LjI3MTk4QzM3LjcxMDIgNC4yNzE5OCAzOC4zMTAyIDQuNzYzOTggMzguMzgyMiA1LjY4Nzk4SDM1LjIxNDJDMzUuMzU4MiA0Ljg5NTk4IDM1Ljg5ODIgNC4yNzE5OCAzNi44MzQyIDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNDUuNDg4NiAwLjQ3OTk4VjMuODAzOThDNDUuMDA4NiAzLjQzMTk4IDQ0LjM5NjYgMy4yMTU5OCA0My42NzY2IDMuMjE1OThDNDIuMDkyNiAzLjIxNTk4IDQwLjgyMDYgNC41MzU5OCA0MC44MjA2IDYuMTY3OThDNDAuODIwNiA3LjgyMzk4IDQyLjA5MjYgOS4xNDM5OCA0My42NzY2IDkuMTQzOThDNDQuMzk2NiA5LjE0Mzk4IDQ1LjAwODYgOC45Mjc5OCA0NS40ODg2IDguNTQzOThWOC45OTk5OEg0Ni43MjQ2VjAuNDc5OThINDUuNDg4NlpNNDMuODU2NiA4LjAxNTk4QzQyLjgyNDYgOC4wMTU5OCA0Mi4wNjg2IDcuMTc1OTggNDIuMDY4NiA2LjE2Nzk4QzQyLjA2ODYgNS4xNzE5OCA0Mi44MjQ2IDQuMzQzOTggNDMuODU2NiA0LjM0Mzk4QzQ0LjQ4MDYgNC4zNDM5OCA0NS4wNjg2IDQuNTU5OTggNDUuNDg4NiA1LjE1OTk4VjcuMTg3OThDNDUuMDY4NiA3Ljc5OTk4IDQ0LjQ4MDYgOC4wMTU5OCA0My44NTY2IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNTQuNjc5NyAzLjIxNTk4QzUzLjk1OTcgMy4yMTU5OCA1My4zNDc3IDMuNDMxOTggNTIuODc5NyAzLjc5MTk4VjAuNDc5OThINTEuNjMxN1Y4Ljk5OTk4SDUyLjg3OTdWOC41NTU5OEM1My4zNDc3IDguOTI3OTggNTMuOTU5NyA5LjE0Mzk4IDU0LjY3OTcgOS4xNDM5OEM1Ni4yNjM3IDkuMTQzOTggNTcuNTQ3NyA3LjgyMzk4IDU3LjU0NzcgNi4xNjc5OEM1Ny41NDc3IDQuNTM1OTggNTYuMjYzNyAzLjIxNTk4IDU0LjY3OTcgMy4yMTU5OFpNNTQuNDk5NyA4LjAxNTk4QzUzLjg3NTcgOC4wMTU5OCA1My4yOTk3IDcuNzk5OTggNTIuODc5NyA3LjIxMTk4VjUuMTM1OThDNTMuMjk5NyA0LjU0Nzk4IDUzLjg3NTcgNC4zNDM5OCA1NC40OTk3IDQuMzQzOThDNTUuNTQzNyA0LjM0Mzk4IDU2LjI5OTcgNS4xNzE5OCA1Ni4yOTk3IDYuMTY3OThDNTYuMjk5NyA3LjE3NTk4IDU1LjU0MzcgOC4wMTU5OCA1NC40OTk3IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNjMuMzM0NyAzLjM0Nzk4TDYxLjM5MDcgNy43NjM5OEw1OS4yNjY3IDMuMzQ3OThINTcuOTM0N0w2MC44MTQ3IDkuMDgzOThMNTkuNjI2NyAxMS43ODRINjAuOTM0N0w2NC42NTQ3IDMuMzQ3OThINjMuMzM0N1oiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik03MS4xNDY2IDQuMzQ2NjFDNjkuODA5MiA0LjA1MDM4IDY5LjEzMSAzLjUzMDAxIDY5LjEzMSAyLjgwMDY1QzY5LjEzMSAyLjA0NzA1IDY5Ljg1NDYgMS40NzgyMiA3MC44MTQyIDEuNDc4MjJDNzEuODAzNCAxLjQ3ODIyIDcyLjU0OTYgMi4xMDMzOSA3Mi41NDk2IDIuOTMyMVYyLjk5ODEzSDczLjkxNjVWMi45MzIxQzczLjkxNjUgMS40MTc2NCA3Mi41ODgzIDAuMjcyNzA1IDcwLjgyNzEgMC4yNzI3MDVDNjkuOTc4NCAwLjI3MjcwNSA2OS4yMDA5IDAuNTMzMTkxIDY4LjYzNzkgMS4wMDU3QzY4LjM1ODQgMS4yMzYxOSA2OC4xMzM5IDEuNTI0ODcgNjcuOTgwNSAxLjg1MTFDNjcuODI3MSAyLjE3NzMzIDY3Ljc0ODYgMi41MzMwMyA2Ny43NTA2IDIuODkyNzNDNjcuNzQ1MSAzLjIyMjU1IDY3LjgxMzcgMy41NDk0OSA2Ny45NTE1IDMuODQ5OTRDNjguMDg5NCA0LjE1MDM4IDY4LjI5MyA0LjQxNjg2IDY4LjU0NzggNC42MzAxMkM2OS4wMjE4IDUuMDQyNjYgNjkuNjk0NSA1LjM0Nzk4IDcwLjU0NjMgNS41Mzg4QzcxLjk4MDYgNS44NTUwMiA3Mi43MDc4IDYuMzkyOTYgNzIuNzA3OCA3LjEzNjg2QzcyLjcwNzggNy45NDMxNiA3MS45MTU2IDguNTUwNzYgNzAuODY4MiA4LjU1MDc2QzY5Ljc4MDQgOC41NTA3NiA2OC45NTk5IDcuODc1MzEgNjguOTU5OSA2Ljk3OTk2VjYuOTEzOTNINjcuNTkxOFY2Ljk3OTk2QzY3LjU5MTggOC41NjM0OCA2OC45OTQyIDkuNzU2ODggNzAuODUzNSA5Ljc1Njg4QzcxLjc0MjYgOS43NTY4OCA3Mi41NTg4IDkuNDg3MzEgNzMuMTUxOCA4Ljk5NjYyQzczLjQ0NiA4Ljc1ODMxIDczLjY4MjcgOC40NTgxIDczLjg0NDUgOC4xMTc5Qzc0LjAwNjMgNy43Nzc3IDc0LjA4OTEgNy40MDYxMSA3NC4wODcgNy4wMzAyNEM3NC4wODcgNS42ODU0IDczLjA5OTEgNC43ODIxNyA3MS4xNDY2IDQuMzQ2NjFaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNzguNzk4NiAyLjUwODA2Qzc4LjI4NzQgMi41MDE3NSA3Ny43ODIzIDIuNjE3NiA3Ny4zMjYzIDIuODQ1NzZDNzYuODcwMyAzLjA3MzkxIDc2LjQ3NjggMy40MDc1OSA3Ni4xNzk1IDMuODE4MzdWMi42NjczOEg3NC44Nzg5VjEyLjA3NTJINzYuMTc5NVY4LjQ4NzE2Qzc2LjQ3NjggOC44OTc5IDc2Ljg3MDMgOS4yMzE1MiA3Ny4zMjYzIDkuNDU5NTdDNzcuNzgyNCA5LjY4NzYzIDc4LjI4NzUgOS44MDMzNSA3OC43OTg2IDkuNzk2ODdDODAuODE2NyA5Ljc5Njg3IDgyLjMzODEgOC4yMzAzMSA4Mi4zMzgxIDYuMTUyNDZDODIuMzM4MSA0LjA3NDYyIDgwLjgxNjcgMi41MDgwNiA3OC43OTg2IDIuNTA4MDZaTTgwLjk4MzUgNi40MjI2NEM4MC45MzE2IDYuOTYyOSA4MC42OTIxIDcuNDY4NzkgODAuMzA1NiA3Ljg1NDRDNzkuOTE5IDguMjQwMDEgNzkuNDA5MyA4LjQ4MTU2IDc4Ljg2MyA4LjUzODA0Qzc4LjEzNjkgOC42MTA3NCA3Ny40NjA1IDguNDAyOTUgNzYuOTU4MyA3Ljk1NDA3Qzc2LjQ1NjEgNy41MDUxOCA3Ni4xNzk1IDYuODYzNjUgNzYuMTc5NSA2LjE1MjQ2Qzc2LjE3OTUgNC43ODQ2IDc3LjIxMjIgMy43NTI5NSA3OC41ODE1IDMuNzUyOTVDNzkuMjkwNCAzLjc1Mjk1IDc5LjkzMDYgNC4wMjE5MSA4MC4zNzc2IDQuNTEwMThDODAuODM4NyA1LjAxMTE2IDgxLjA1NCA1LjY5MDI1IDgwLjk4MzUgNi40MjI2NFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik05OC4yOTA4IDIuNjY5MlYzLjgwNzQ3Qzk3LjY3NzYgMi45Nzg3NSA5Ni43MzAyIDIuNTA4MDYgOTUuNjU4MyAyLjUwODA2QzkzLjY0ODIgMi41MDgwNiA5Mi4xMzIzIDQuMDQ2MTUgOTIuMTMyMyA2LjA4NTgyQzkyLjEzMjMgOC4xMjU1IDkzLjY0ODIgOS42NjI5OSA5NS42NTgzIDkuNjYyOTlDOTYuNzM0NSA5LjY2Mjk5IDk3LjY4MTkgOS4xOTcxNCA5OC4yOTA4IDguMzc2OTFWOC41NTE5OEM5OC4yOTA4IDkuOTY4OTEgOTcuMzkwNiAxMC44ODQzIDk1Ljk5NzQgMTAuODg0M0M5NS4wNTYxIDEwLjg4NDMgOTQuMjcxOCAxMC40NzY2IDkzLjg5OTYgOS43OTM4NEw5My44ODA2IDkuNzU4N0g5Mi41Mzg5TDkyLjU2OTUgOS44NDY1NEM5Mi43OTYxIDEwLjUxNCA5My4yMzkyIDExLjA4ODkgOTMuODMwMyAxMS40ODIyQzk0LjQyMzMgMTEuODcyMyA5NS4xNzI2IDEyLjA3ODMgOTUuOTk3NCAxMi4wNzgzQzk3LjA1NTIgMTIuMDc4MyA5Ny45NTU0IDExLjc0NTEgOTguNjAxNyAxMS4xMTU3Qzk5LjI0ODEgMTAuNDg2MiA5OS41OTE1IDkuNjAxMiA5OS41OTE1IDguNTY3NzNWMi42NjkySDk4LjI5MDhaTTk3LjU2MTEgNy44NDJDOTcuMDA5MiA4LjM2NDE4IDk2LjIyMjUgOC41ODM0OCA5NS40MDAxIDguNDQyOTRDOTQuOTEzMiA4LjM1Nzk2IDk0LjQ2NjQgOC4xMjE4NCA5NC4xMjQ1IDcuNzY4ODlDOTMuNzgyNyA3LjQxNTkzIDkzLjU2MzYgNi45NjQ1MiA5My40OTkyIDYuNDgwMTlDOTMuMzgzMyA1LjY2NTQxIDkzLjYzMSA0Ljg5MzY0IDk0LjE3ODYgNC4zNjQxOEM5NC42MzgzIDMuOTI3NDEgOTUuMjU0MiAzLjY4Nzg4IDk1Ljg5MTkgMy42OTc4MkM5Ni4wNDY0IDMuNjk3OTUgOTYuMjAwNiAzLjcxMDMxIDk2LjM1MzEgMy43MzQ3N0M5Ny4zNDU5IDMuODkzNDkgOTguMTMxNCA0LjcwNDAzIDk4LjI2MzIgNS43MTAyNEM5OC4zNzQ5IDYuNTM4MzUgOTguMTE3OSA3LjMxNDM2IDk3LjU2MTEgNy44NDJaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNOTAuNzA1IDAuMDk5NTk3NUM5MC40NjAyIDAuMDQ2NzczIDkwLjIwNDMgMC4wOTExOTcxIDg5Ljk5MjUgMC4yMjMyNjlDODkuNzgwNiAwLjM1NTM0IDg5LjYyOTkgMC41NjQ0NTIgODkuNTcyOSAwLjgwNTQwOUM4OS41MTU5IDEuMDQ2MzcgODkuNTU3MSAxLjI5OTgyIDg5LjY4NzcgMS41MTA5OEM4OS44MTgzIDEuNzIyMTUgOTAuMDI3NyAxLjg3NDA3IDkwLjI3MDggMS45MzM5MUM5MC4zNDE1IDEuOTQ5NTQgOTAuNDEzNiAxLjk1NzQ3IDkwLjQ4NiAxLjk1NzU0QzkwLjcyIDEuOTU3OSA5MC45NDU4IDEuODczMjUgOTEuMTIwNiAxLjcxOTczQzkxLjI5NTUgMS41NjYyIDkxLjQwNyAxLjM1NDUyIDkxLjQzNDEgMS4xMjVDOTEuNDYxMSAwLjg5NTQ3IDkxLjQwMTcgMC42NjQxMzUgOTEuMjY3MyAwLjQ3NTA0NkM5MS4xMzI5IDAuMjg1OTU4IDkwLjkzMjcgMC4xNTIzMjUgOTAuNzA1IDAuMDk5NTk3NVYwLjA5OTU5NzVaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNODkuODM2NiA4LjM5MTQzSDg4LjcxNUM4Ny45MTc4IDguMzkxNDMgODcuNDM4OSA3Ljg1NTMxIDg3LjQzODkgNi45NTY5M0M4Ny40Mzg5IDYuMDgwOTYgODcuODY4MSA1LjAzNjU5IDg4Ljc0MzIgMy43NjQ0NEw4OC43NTQ4IDMuNzQ3NDhWMy4zODgyNUw4NS4wMjcxIDIuODY3MjdDODUuMDI4NCAyLjcxNTUzIDg0Ljk4ODYgMi41NjYyMiA4NC45MTE4IDIuNDM0NzhDODQuODM1MSAyLjMwMzM1IDg0LjcyNDEgMi4xOTQ1OCA4NC41OTA1IDIuMTE5NzNDODQuMjU2MyAxLjkzOCA4My44OTA4IDEuOTM4IDgzLjU4NzkgMi4xMTM2OEM4My40MzYxIDIuMjAyMyA4My4zMTIyIDIuMzMwNzcgODMuMjMgMi40ODQ4QzgzLjE0NzcgMi42Mzg4NCA4My4xMTAzIDIuODEyNCA4My4xMjE5IDIuOTg2MThDODMuMTMzNiAzLjE1OTk2IDgzLjE5MzggMy4zMjcxNCA4My4yOTU4IDMuNDY5MTRDODMuMzk3OSAzLjYxMTE0IDgzLjUzNzkgMy43MjIzOCA4My43MDAxIDMuNzkwNDlMODIuNTQwNSA5LjYzNzUzSDgzLjgyODNMODQuODk3NyA0LjA4NTUxTDg2LjkxMTUgNC40MjExMUM4Ni4zNzAxIDUuMzgwMDcgODYuMDk1MyA2LjI3NDIxIDg2LjA5NTMgNy4wNzg2OUM4Ni4wOTUzIDguNTYzNDcgODcuMDA0MSA5LjUzNTc2IDg4LjQ3MzQgOS42Mjk2NVY5LjYzNzUzSDkxLjEzNDFWMi42OTA5OUg4OS44MzY2VjguMzkxNDNaIixmaWxsOiIjNUQ2OTZGIn0pKX0sTXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5hcHAuZGVjay5jYXJkc3x8W10sbj1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKSxyPXQuYXBwLmRlY2suaW5kZXgsbz10LmFwcCxpPW8uc2hvd1N1cnZleUJyYW5kLGE9by5tYXJrZXRpbmdVcmwsYz1vLnNsdWdOYW1lLHM9by5zdXJ2ZXlJZCx1PWZ1bmN0aW9uKCl7cmV0dXJuIGk/SSgiYSIse3N0eWxlOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHggMCAxMHB4IDAiLGhyZWY6IiIuY29uY2F0KGEsIj91dG1fc291cmNlPXN1cnZleV9icmFuZGluZyZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPSIpLmNvbmNhdChjLCImdXRtX2NvbnRlbnQ9IikuY29uY2F0KHMpLHRhcmdldDoiX2JsYW5rIn0sQXQpOm51bGx9O2lmKHIrMT09PWUubGVuZ3RofHwhbnx8MT09PW4ubGVuZ3RoKXJldHVybiBJKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LHUpO3JldHVybiBJKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LChmdW5jdGlvbigpe2lmKG4ubGVuZ3RoPjEmJm4ubGVuZ3RoPD0xMCl7dmFyIGU9bi5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIEkoInNwYW4iLHtjbGFzc05hbWU6InVsLWZvb3Rlci1idWJibGUiLGtleTpuLHN0eWxlOnI9PT1uP3tiYWNrZ3JvdW5kQ29sb3I6dC5hcHAuYm9yZGVyfTp7Ym9yZGVyQ29sb3I6dC5hcHAuYm9yZGVyfX0pfSkpO3JldHVybiBJKCJkaXYiLHtzdHlsZToibWFyZ2luLWJvdHRvbTogMTBweDsifSxlKX1yZXR1cm4gbnVsbH0pLHUpfX0sX3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/SSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sVHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LFJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sTHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFB0PW4oOTczNDMpLE50PW4ubihQdCk7ZnVuY3Rpb24gRHQodCxlKXtlKHQpfXZhciBGdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gSSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGZ0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkkoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkkoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxJKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZJKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxJKCJsYWJlbCIse2NsYXNzTmFtZTpGKGZ0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07dmFyIFV0LEJ0PW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiB6dCgpe2lmKCFVdCYmIShVdD0idW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbXNDcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBVdChCdCl9dmFyIFZ0PS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmb3IodmFyIEh0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmVnQudGVzdCh0KX0scXQ9W10sV3Q9MDtXdDwyNTY7KytXdClxdC5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO3ZhciBHdD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPShxdFt0W2UrMF1dK3F0W3RbZSsxXV0rcXRbdFtlKzJdXStxdFt0W2UrM11dKyItIitxdFt0W2UrNF1dK3F0W3RbZSs1XV0rIi0iK3F0W3RbZSs2XV0rcXRbdFtlKzddXSsiLSIrcXRbdFtlKzhdXStxdFt0W2UrOV1dKyItIitxdFt0W2UrMTBdXStxdFt0W2UrMTFdXStxdFt0W2UrMTJdXStxdFt0W2UrMTNdXStxdFt0W2UrMTRdXStxdFt0W2UrMTVdXSkudG9Mb3dlckNhc2UoKTtpZighSHQobikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn07dmFyIFp0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0odD10fHx7fSkucmFuZG9tfHwodC5ybmd8fHp0KSgpO2lmKHJbNl09MTUmcls2XXw2NCxyWzhdPTYzJnJbOF18MTI4LGUpe249bnx8MDtmb3IodmFyIG89MDtvPDE2OysrbyllW24rb109cltvXTtyZXR1cm4gZX1yZXR1cm4gR3Qocil9O2NvbnN0ICR0PSJodHRwczovL2Nkbi5zcHJpZy5jb20iLFl0PXQ9PnQrIi1sb2FkaW5nLXNwaW5lciIsSnQ9ImhpZGRlbiIsS3Q9InZpc2libGUiLFh0PSJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIsUXQ9InVsLXJlY29yZGluZy1pbi1zZXNzaW9uIix0ZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uY3NzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL1JlY29yZFJUQy01LjYuMi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy9hZGFwdGVyLjguMC4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uanNgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS91c2VybGVhcC13ZWItdXBjaHVuay12Mi4yLjIuanNgfV0sZWU9W3t0eXBlOiJsaW5rIixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5qc2B9LHt0eXBlOiJzdHlsZSIsY29udGVudDoiLyogcHJvZ3Jlc3MgY29udHJvbCBzdHlsZXMgKi9cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xuICBtYXJnaW46IDAgMHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG59XG4vKiBwb3NpdGlvbiBhbmQgYWxpZ24gdGhlIGJ1dHRvbnMgYW5kIGJ1dHRvbiB0ZXh0cyAqL1xuLnVsLWNvbnRyb2wtcGFuZWwge1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjhGODtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogYmxhY2s7XG4gIGhlaWdodDogNTBweDtcbiAgcGFkZGluZzogMnB4IDE0cHggMDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogNDBweDtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwgPiAudmpzLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzZW07XG4gIHdpZHRoOiAzZW07XG4gIG1hcmdpbjogMCAxMHB4O1xufVxuXG5zcGFuLnVsLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDI1cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMjVweCk7XG59XG5cbiN1bC1jYW1lcmEtYnV0dG9uIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnVsLWluYWN0aXZlIHtcbiAgb3BhY2l0eTogMC4zO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB6LWluZGV4OiAxO1xufVxuXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci1ob3Jpem9udGFsIC52anMtdm9sdW1lLWxldmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLWhvdmVyLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlIHtcbiAgd2lkdGg6IDQwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLW11dGUtY29udHJvbCB+IC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6Zm9jdXMgLnZqcy12b2x1bWUtY29udHJvbCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGxlZnQ6IDQwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwLjFzLCBvcGFjaXR5IDAuMXMsIGhlaWdodCAwLjFzLCB3aWR0aCAwLjFzLCBsZWZ0IDBzLCB0b3AgMHM7XG59XG5cbi8qIHBsYXkgYnV0dG9uIGN1c3RvbWl6YXRpb24gKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCB7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi8qIHBvc2l0aW9uIGFuZCBzdHlsZSB0aGUgY3VycmVudCB0aW1lciAqL1xuLnVsLXRpbWUtcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogODBweDtcbiAgbGVmdDogMTBweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZWI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLWN1cnJlbnQtdGltZSxcbi52anMtbm8tZmxleCAudmpzLWN1cnJlbnQtdGltZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogcmVtb3ZlIHRoZSBkb3QgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzOmJlZm9yZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1sZXZlbDpiZWZvcmUsXG4udmpzLWljb24tY2lyY2xlOmJlZm9yZSxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjUuMzI0QS43NS43NSAwIDAxOS4yNSAxdjExLjY2N2EuNzUuNzUgMCAwMS0xLjIxOS41ODVsLTMuOTYtMy4xNjlIMWEuNzUuNzUgMCAwMS0uNzUtLjc1di01YS43NS43NSAwIDAxLjc1LS43NWgzLjA3TDguMDMxLjQxNGEuNzUuNzUgMCAwMS43OTQtLjA5ek03Ljc1IDIuNTZMNC44MDIgNC45MmEuNzUuNzUgMCAwMS0uNDY5LjE2NEgxLjc1djMuNWgyLjU4M2EuNzUuNzUgMCAwMS40NjkuMTY1bDIuOTQ4IDIuMzU4VjIuNTZ6TTE0LjkxMS40N2EuNzUuNzUgMCAwMTEuMDYxIDAgOS4wODQgOS4wODQgMCAwMTAgMTIuODQ0Ljc1Ljc1IDAgMDEtMS4wNi0xLjA2IDcuNTg0IDcuNTg0IDAgMDAwLTEwLjcyNC43NS43NSAwIDAxMC0xLjA2ek0xMS45NyAzLjQxYS43NS43NSAwIDAxMS4wNiAwIDQuOTE3IDQuOTE3IDAgMDEwIDYuOTUzLjc1Ljc1IDAgMTEtMS4wNi0xLjA2IDMuNDE3IDMuNDE3IDAgMDAwLTQuODMyLjc1Ljc1IDAgMDEwLTEuMDZ6JyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTAgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOC41IDEuMTY3TDQuMzMzIDQuNUgxdjVoMy4zMzNMOC41IDEyLjgzM1YxLjE2N3pNMTcuMTcgNC41bC01IDVNMTIuMTcgNC41bDUgNScgc3Ryb2tlPSclMjMyNjIxMzYnIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTEgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTkgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjQ4OSAwLjMyNDAzQzkuMDg0NzQgMC40NDg5MiA5LjI1IDAuNzExNzAzIDkuMjUgMS4wMDAwMVYxMi42NjY3QzkuMjUgMTIuOTU1IDkuMDg0NzQgMTMuMjE3OCA4LjgyNDg5IDEzLjM0MjdDOC41NjUwNCAxMy40Njc1IDguMjU2NjEgMTMuNDMyNCA4LjAzMTQ4IDEzLjI1MjNMNC4wNzAyNSAxMC4wODMzSDFDMC41ODU3ODYgMTAuMDgzMyAwLjI1IDkuNzQ3NTUgMC4yNSA5LjMzMzM0VjQuMzMzMzRDMC4yNSAzLjkxOTEzIDAuNTg1Nzg2IDMuNTgzMzQgMSAzLjU4MzM0SDQuMDcwMjVMOC4wMzE0OCAwLjQxNDM1NUM4LjI1NjYxIDAuMjM0MjUzIDguNTY1MDQgMC4xOTkxNCA4LjgyNDg5IDAuMzI0MDNaTTcuNzUgMi41NjA0OEw0LjgwMTg1IDQuOTE4OTlDNC42Njg4NyA1LjAyNTM4IDQuNTAzNjQgNS4wODMzNCA0LjMzMzMzIDUuMDgzMzRIMS43NVY4LjU4MzM0SDQuMzMzMzNDNC41MDM2NCA4LjU4MzM0IDQuNjY4ODcgOC42NDEzIDQuODAxODUgOC43NDc2OUw3Ljc1IDExLjEwNjJWMi41NjA0OFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuOTY5OCAzLjQxMTI0QzEyLjI2MjcgMy4xMTgzOSAxMi43Mzc2IDMuMTE4NDYgMTMuMDMwNCAzLjQxMTRDMTMuOTUyMSA0LjMzMzQxIDE0LjQ2OTkgNS41ODM3NiAxNC40Njk5IDYuODg3NDhDMTQuNDY5OSA4LjE5MTIxIDEzLjk1MjEgOS40NDE1NiAxMy4wMzA0IDEwLjM2MzZDMTIuNzM3NiAxMC42NTY1IDEyLjI2MjcgMTAuNjU2NiAxMS45Njk4IDEwLjM2MzdDMTEuNjc2OCAxMC4wNzA5IDExLjY3NjcgOS41OTYgMTEuOTY5NiA5LjMwMzA3QzEyLjYxMDEgOC42NjIzNSAxMi45Njk5IDcuNzkzNDYgMTIuOTY5OSA2Ljg4NzQ4QzEyLjk2OTkgNS45ODE1MSAxMi42MTAxIDUuMTEyNjIgMTEuOTY5NiA0LjQ3MTlDMTEuNjc2NyA0LjE3ODk2IDExLjY3NjggMy43MDQwOSAxMS45Njk4IDMuNDExMjRaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sOmhvdmVyIC52anMtbW91c2UtZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4vKiBwb3NpdGlvbiB2aWRlbyBwbGF5ZXIgaW5zaWRlIHRoZSBjb250YWluZXIgKi9cbi52aWRlby1qcyAudmpzLXRlY2gge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4udmlkZW8tanMgLnZqcy10aW1lLXRvb2x0aXAge1xuICBwYWRkaW5nOiAwLjI1ZW0gMC43NWVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdG9wOiAtMjVweDtcbiAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3MudmpzLXNsaWRlci1iYXIgLnZqcy10aW1lLXRvb2x0aXAge1xuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLW1vdXNlLWRpc3BsYXkge1xuICB6LWluZGV4OiAyO1xufVxuXG4udWwtdmlkZW8tcGxheWVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW46bm90KC52anMtaW9zLW5hdGl2ZS1mcykge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXItdmlkZW8tcmVjb3JkZXIudmpzLWZ1bGxzY3JlZW4ge1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnZpZGVvLWpzIGRpdi52anMtcHJvZ3Jlc3MtY29udHJvbCB7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1zbGlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQjJCQkJEO1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi52anMtZnVsbHNjcmVlbi1jb250cm9sIHtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi8qIGZpeCBhIHN1YnRsZSBtaXNhbGlnbm1lbnQgYnVnIG9uIGNpcmN1bGFyIHBsYXkgY29udHJvbCBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNXB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nID4gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNHB4KTtcbn1cblxuLyogZml4IG9wcG9zaXRlIG1pc2FsaWdubWVudCBidWcgb24gbm9uY2lyY3VsYXIgYnV0dG9ucyAqL1xuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi52aWRlby1qcyAudmpzLWZ1bGxzY3JlZW4tY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuODIxNDMgMi41NDAwNEwxMi4yNjE0IDIuNTQwMDRDMTIuOTI0MiAyLjU0MDA0IDEzLjQ2MTQgMy4wNzczIDEzLjQ2MTQgMy43NDAwNEwxMy40NjE0IDYuMTgwMDQnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTYuMTc5NTUgMTMuNDZMMy43Mzk1NSAxMy40NkMzLjA3NjgxIDEzLjQ2IDIuNTM5NTUgMTIuOTIyNyAyLjUzOTU1IDEyLjI2TDIuNTM5NTUgOS44MTk5Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNMTIuNzc3MiAzLjIyMjY2TDkuMzY0NzUgNi42MzUxNicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4yOTQzNCA5LjcwNjA1TDIuODgxODQgMTMuMTE4Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzLnZqcy1mdWxsc2NyZWVuIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEuNTgzIDkuODEzSDUuMjVhMSAxIDAgMDExIDF2My42NjZNNS4zNzUgMTAuNjg4TDEgMTUuMDYxTTE0LjkxNyA1LjgxM0gxMS4yNWExIDEgMCAwMS0xLTFWMS4xNDZNMTUuMDYzIDFsLTQuMzc2IDQuMzc1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1lbmRlZCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1pY29uLXJlcGxheTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtcGxheWluZyAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3JlY3QgeD0nMy42MTg4NScgeT0nMi4wNjA3NCcgd2lkdGg9JzMuMTYxODUnIGhlaWdodD0nMTEuODgnIHJ4PScwLjknIGZpbGw9J2JsYWNrJyBzdHJva2U9JyUyM0VERURFRCcgc3Ryb2tlLXdpZHRoPScwLjYnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDcmVjdCB4PSc5LjIxNzk3JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xuICBwYWRkaW5nOiAycHg7XG59XG5cbi52anMtZXJyb3ItZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi51bC12aWRlby1wbGF5ZXItdmlkZW8ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi51bC12aWRlby1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsZWZ0OiAwcHg7XG4gIHRvcDogMHB4O1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC8qIEluc2lkZSBBdXRvIExheW91dCAqL1xuXG4gIGZsZXg6IG5vbmU7XG4gIG9yZGVyOiAwO1xuICBmbGV4LWdyb3c6IDA7XG4gIG1hcmdpbjogMTBweCAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1yZWNvcmQgYnV0dG9uLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCA5Nik7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsIFwiU2Vnb2UgVUkgRW1vamlcIiwgXCJTZWdvZSBVSSBTeW1ib2xcIjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGxpbmUtaGVpZ2h0OiAwLjY7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiAzO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2w6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzO1xuICBjb250ZW50OiBcIllvdXIgYnJvd3NlciBuZWVkcyB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgZm9yIHZpZGVvIHJlY29yZGluZ1wiO1xuICBsaW5lLWhlaWdodDogMTM1JTtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY29udGVudDogXCJVbmFibGUgdG8gYWNjZXNzIHlvdXIgY2FtZXJhIGFuZCBtaWNyb3Bob25lXCI7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDphZnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogI0YwRjBGNTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6IFwiUmVxdWVzdCBQZXJtaXNzaW9uc1wiO1xuICBwYWRkaW5nOiAxZW0gMmVtO1xuICBjb2xvcjogIzMzMztcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb250ZW50OiBcIlBsZWFzZSBnbyB0byB5b3VyIGJyb3dzZXIgc2V0dGluZ3MgYW5kIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byBlbmFibGUgcmVjb3JkaW5nXCI7XG4gIHBhZGRpbmc6IDFlbTtcbiAgY29sb3I6ICM0QjU3NUQ7XG4gIG1hcmdpbjogNXB4O1xuICBsaW5lLWhlaWdodDogMTM1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5LCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J005LjIxMjM0IDcuMzc1NDlWMTEuMTE5M00yLjUzOTMxIDQuMjU1OTVIMTMuNDU5M0gyLjUzOTMxWk01LjU3MjM0IDQuMjU1OTVWMy4wMDgzM0M1LjU3MjIyIDIuODQ0MzMgNS42MDM1NCAyLjY4MTkyIDUuNjY0NSAyLjUzMDM4QzUuNzI1NDYgMi4zNzg4NCA1LjgxNDg4IDIuMjQxMTUgNS45Mjc2MiAyLjEyNTE5QzYuMDQwMzcgMi4wMDkyMiA2LjE3NDI0IDEuOTE3MjYgNi4zMjE1OCAxLjg1NDU2QzYuNDY4OTIgMS43OTE4NSA2LjYyNjgzIDEuNzU5NjQgNi43ODYyOCAxLjc1OTc3SDkuMjEyMzRDOS4zNzE3OSAxLjc1OTY0IDkuNTI5NyAxLjc5MTg1IDkuNjc3MDMgMS44NTQ1NkM5LjgyNDM3IDEuOTE3MjYgOS45NTgyNCAyLjAwOTIyIDEwLjA3MSAyLjEyNTE5QzEwLjE4MzcgMi4yNDExNSAxMC4yNzMyIDIuMzc4ODQgMTAuMzM0MSAyLjUzMDM4QzEwLjM5NTEgMi42ODE5MiAxMC40MjY0IDIuODQ0MzMgMTAuNDI2MyAzLjAwODMzVjQuMjU1OTVINS41NzIzNFpNMTIuMjQ2MyA0LjI1NTk1VjEyLjk5MTJDMTIuMjQ2MyAxMy4zMjIzIDEyLjExODQgMTMuNjM5OSAxMS44OTA3IDEzLjg3NDFDMTEuNjYzMSAxNC4xMDgyIDExLjM1NDMgMTQuMjM5OCAxMS4wMzIzIDE0LjIzOThINC45NjYyOEM0LjY0NDMyIDE0LjIzOTggNC4zMzU1NSAxNC4xMDgyIDQuMTA3ODkgMTMuODc0MUMzLjg4MDIzIDEzLjYzOTkgMy43NTIzNCAxMy4zMjIzIDMuNzUyMzQgMTIuOTkxMlY0LjI1NTk1SDEyLjI0NjNaTTYuNzg2MjggNy4zNzU0OVYxMS4xMTkzVjcuMzc1NDlaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24udWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMiAxMEwxMiAyQzEyIDAuODk1NDMgMTEuMTA0NiAtNC44NTM5NmUtMDcgMTAgLTQuMzcxMTRlLTA3TDIgLTguNzQyMjhlLTA4QzAuODk1NDMgLTMuOTE0MDVlLTA4IC00Ljg1Mzk2ZS0wNyAwLjg5NTQzMSAtNC4zNzExNGUtMDcgMkwtOC43NDIyOGUtMDggMTBDLTMuOTE0MDVlLTA4IDExLjEwNDYgMC44OTU0MzEgMTIgMiAxMkwxMCAxMkMxMS4xMDQ2IDEyIDEyIDExLjEwNDYgMTIgMTBaJyBmaWxsPSclMjNEMTUxNTMnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNXB4KTtcbn1cblxuLnVsLXJlY29yZGluZy1pbi1zZXNzaW9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC43NSkgdHJhbnNsYXRlKDFweCwgOHB4KTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgZm9yIGZ1bGwgc2NyZWVuIGJ1dHRvbnMgKi9cbi52anMtZnVsbHNjcmVlbiAudWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjInIGhlaWdodD0nMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNLjc1IDNBMi43NSAyLjc1IDAgMDEzLjUuMjVoOS4wODFBMi43NSAyLjc1IDAgMDExNS4zMzEgM3Y5YTIuNzUgMi43NSAwIDAxLTIuNzUgMi43NUgzLjVBMi43NSAyLjc1IDAgMDEuNzUgMTJWM3pNMy41IDEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1djljMCAuNjkuNTYgMS4yNSAxLjI1IDEuMjVoOS4wODFjLjY5IDAgMS4yNS0uNTYgMS4yNS0xLjI1VjNjMC0uNjktLjU2LTEuMjUtMS4yNS0xLjI1SDMuNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0LjUzIDIuMDNsLTEyIDEyLTEuMDYtMS4wNiAxMi0xMiAxLjA2IDEuMDZ6TTIwLjg3IDEuNTI1YS43NS43NSAwIDAxLjM4LjY1MnYxMC41ODhhLjc1Ljc1IDAgMDEtMS4xMzQuNjQ0bC01LjkyLTMuNTNhLjc1Ljc1IDAgMDEtLjM2NS0uNjQzdi0zLjUzYS43NS43NSAwIDAxLjM2Ni0uNjQ0bDUuOTE5LTMuNTNhLjc1Ljc1IDAgMDEuNzU0LS4wMDd6bS01LjUzOSA0LjYwN1Y4LjgxbDQuNDE5IDIuNjM1VjMuNDk3bC00LjQxOSAyLjYzNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICBsZWZ0OiBjYWxjKDUwJSAtIDY1cHgpO1xuICB3aWR0aDogMTMwcHg7XG4gIHotaW5kZXg6IDU7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgbWFyZ2luLWxlZnQ6IDAuOGVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsX190aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFMEUwRUI7XG4gIG1hcmdpbi1yaWdodDogMC44ZW07XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBib3JkZXItcmFkaXVzOiAxMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDQwcHgpO1xuICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gIGFuaW1hdGlvbjogNnMgaW5maW5pdGUgZ3JvdztcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDYwJTtcbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmFmdGVyIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NtYXNrIGlkPSdhJyBtYXNrVW5pdHM9J3VzZXJTcGFjZU9uVXNlJyB4PScwJyB5PScwJyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc0OScgZmlsbD0nJTIzRURFQ0Y4Jy8lM0UlM0MvbWFzayUzRSUzQ2cgbWFzaz0ndXJsKCUyM2EpJyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PSc0OScgcj0nNTAnIGZpbGw9JyUyMzY0NUNDMicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjQyMiA4MS44MTJjNS40MDUtMTUuNTQ3IDIwLjE4Ny0yNi43MDYgMzcuNTc2LTI2LjcwNiAxNy4zOSAwIDMyLjE3MiAxMS4xNTkgMzcuNTc3IDI2LjcwNy05LjE2NCAxMC40My0yMi42MDEgMTcuMDEzLTM3LjU3NiAxNy4wMTMtMTQuOTc2IDAtMjguNDE0LTYuNTgzLTM3LjU3Ny0xNy4wMTR6JyBmaWxsPSclMjNmZmYnIGZpbGwtb3BhY2l0eT0nLjYnLyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PScyOScgcj0nMTcnIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNycvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjYpO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuXG5Aa2V5ZnJhbWVzIGdyb3cge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG4gIDUwJSAge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTFERkY0O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWNvbnRyb2wtcGFuZWwge1xuICBoZWlnaHQ6IDgwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIG1hcmdpbjogMTBweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLXBsYXliYWNrLXJhdGUtdmFsdWUge1xuICBmb250LXNpemU6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDNweCk7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLW1lbnUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNnB4LCAxMnB4KTtcbiAgcG9zaXRpb246IHVuc2V0O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiB1bnNldDtcbn1cblxuLnZqcy1tZW51IGxpIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1zZWxlY3RlZCB7XG4gIGNvbG9yOiBsaWdodGdyYXk7XG59XG5cbi52anMtbWVudSBsaS52anMtbWVudS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1idXR0b25zLXBhbmVsIHtcbiAgdG9wOiBjYWxjKDUwJSAtIDMwcHgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudmpzLXJlY29yZC1pbmRpY2F0b3IudmpzLWNvbnRyb2wge1xuICBib3R0b206IDkwcHggIWltcG9ydGFudDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yIHtcbiAgcGFkZGluZzogMC4zZW0gMC43NWVtIDAuMTVlbSAxNXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDIxcHgpO1xuICB3aWR0aDogNDNweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiA0O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUI1NzU3O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA1cHg7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjpiZWZvcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiAjMzMzO1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNnJlbTtcbiAgaGVpZ2h0OiA2cmVtO1xuXG59XG4udWwtdmlkZW8tcGxheWVyLWxvYWRpbmcgZGl2IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG4gIG1hcmdpbjogNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCAjNjY2O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICBib3JkZXItY29sb3I6ICM2NjYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi5maXJzdCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuNDVzO1xufVxuLnNlY29uZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuM3M7XG59XG4udGhpcmQge1xuICBhbmltYXRpb24tZGVsYXk6IC0wLjE1cztcbn1cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi51bC12aWRlby1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlLCAudWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjphZnRlciwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmFmdGVyIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1wYXRoPSd1cmwoJTIzY2xpcDBfMjY0NV80NjU0KSclM0UlM0NwYXRoIGQ9J00xNS4xNDkxIDQuNzVMMTAuNTk5MSA4TDE1LjE0OTEgMTEuMjVWNC43NVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTkuMjk5MTIgMy40NTAySDIuMTQ5MTJDMS40MzExNSAzLjQ1MDIgMC44NDkxMjEgNC4wMzIyMyAwLjg0OTEyMSA0Ljc1MDJWMTEuMjUwMkMwLjg0OTEyMSAxMS45NjgyIDEuNDMxMTUgMTIuNTUwMiAyLjE0OTEyIDEyLjU1MDJIOS4yOTkxMkMxMC4wMTcxIDEyLjU1MDIgMTAuNTk5MSAxMS45NjgyIDEwLjU5OTEgMTEuMjUwMlY0Ljc1MDJDMTAuNTk5MSA0LjAzMjIzIDEwLjAxNzEgMy40NTAyIDkuMjk5MTIgMy40NTAyWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL2clM0UlM0NkZWZzJTNFJTNDY2xpcFBhdGggaWQ9J2NsaXAwXzI2NDVfNDY1NCclM0UlM0NyZWN0IHdpZHRoPScxNS42JyBoZWlnaHQ9JzE1LjYnIGZpbGw9J3doaXRlJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwLjE5OTk1MSAwLjIwMDE5NSknLyUzRSUzQy9jbGlwUGF0aCUzRSUzQy9kZWZzJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG59XG5cbi51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyIHtcbiAgY29udGVudDogJ1JlY29yZCB5b3VyIFJlc3BvbnNlJztcbn1cblxuLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTUgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMy44NzU3IDguMjIzNjFMMS4xMTE4IDE0LjYwNTZDMC45NDU1NzggMTQuNjg4NyAwLjc1IDE0LjU2NzggMC43NSAxNC4zODJWMS42MTgwM0MwLjc1IDEuNDMyMTkgMC45NDU1NzkgMS4zMTEzMSAxLjExMTggMS4zOTQ0M0wxMy44NzU3IDcuNzc2MzlDMTQuMDYgNy44Njg1MiAxNC4wNiA4LjEzMTQ4IDEzLjg3NTcgOC4yMjM2MVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KSB0cmFuc2xhdGUoMCwgMXB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAycHgpO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnQmFjayB0byBRdWVzdGlvbic7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IGZhZGUgMC4zcztcbn1cblxuQGtleWZyYW1lcyBmYWRlIHtcbiAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4jdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi51bC1jb3VudGRvd24tdGV4dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNXB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuID4gI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgZm9udC1zaXplOiAyNXB4O1xuICB0cmFuc2Zvcm06IHVuc2V0O1xufVxuXG4udmpzLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jdWwtU3BlZWQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAzNXB4KTtcbn1cblxuLnZqcy1wb3N0ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB1bnNldDtcbn1cbiJ9XSxuZT0iLXZpZGVvLXBsYXllciIscmU9Ii12aWRlby1yZWNvcmRlciI7bGV0IG9lLGllO2NvbnN0IGFlPWFzeW5jKHQsZSxuLHIsbyxpKT0+e2NvbnN0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9e3NjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOmEuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OmEuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOm5hdmlnYXRvci5sYW5ndWFnZX0scz17YWN0aW9uOmUsZXJyOnttZXNzYWdlOnQubWVzc2FnZSxzdGFjazp0LnN0YWNrfSxtZXRhOmMsdmlkOm8sZW52SWQ6aX07KGF3YWl0IGZldGNoKGAke259L3Nkay8xL2Vycm9yc2Ase21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsuLi5yLCJ1c2VybGVhcC1wbGF0Zm9ybSI6InZpZGVvX3JlY29yZGVyIiwieC11bC1lcnJvciI6d2luZG93LmJ0b2EoYHVzZXJsZWFwLSR7RGF0ZS5ub3coKX0tZXJyb3JgKX0sYm9keTpKU09OLnN0cmluZ2lmeShzKX0pKS5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIsdCl9LGNlPSh0LGUsbik9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG4mJm4oKTtQcm9taXNlLmFsbChlLnJlZHVjZSgoKGUsbik9PihlLnB1c2goKCh0LHt0eXBlOmUsY29udGVudDpufSk9Pm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8pe2xldCBpOyJzY3JpcHQiPT09ZT8oaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxpLnNyYz1uKToibGluayI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxpLnJlbD0ic3R5bGVzaGVldCIsaS5ocmVmPW4saS50eXBlPSJ0ZXh0L2NzcyIpOihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaS5pbm5lckhUTUw9biksaS5vbmxvYWQ9ZnVuY3Rpb24oKXtyKG4pfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtvKG4pfSxpLmFzeW5jPSExLGkuaWQ9YnRvYShuKSx0LmFwcGVuZENoaWxkKGkpfSkpKSh0LG4pKSxlKSksW10pKS50aGVuKCgoKT0+e24mJm4oKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCsiIGZhaWxlZCB0byBsb2FkIil9KSl9LHNlPSh0LGUsbik9PntpZigic3RhcnQiPT09ZSYmKHQuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLCJub25lIj09PWUpdC5zdHlsZS52aXNpYmlsaXR5PUp0O2Vsc2UgaWYoInN1Y2Nlc3MiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9SnQsdC5pbm5lckhUTUw9IlVwbG9hZCBzdWNjZWVkZWQhIjtlbHNle2NvbnN0IGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4pKTt0LmlubmVySFRNTD1gVXBsb2FkaW5nIDxzcGFuIGNsYXNzPSJ1bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUiPiR7ZX0lPC9zcGFuPmAsdC5zdHlsZS5iYWNrZ3JvdW5kPWBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNFMEUwRUIgMCUsICNFMEUwRUIgJHtlfSUsICNGQ0ZDRkQgJHtlfSUsICNGQ0ZDRkQgMTAwJSlgfX0sdWU9KHQsZSk9Pntjb25zdCBuPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtyZXR1cm4gbi5hZGRDbGFzcygidWwtYnV0dG9ucy1wYW5lbCIpLGUubWFwKCh0PT57bi5hZGRDaGlsZCh0KX0pKSxsZShuKSxufSxsZT10PT57dC5jaGlsZHJlbigpLmZvckVhY2goKHQ9PntpZihqZVt0Lm5hbWVfXSl7Y29uc3QgZT1mZShqZVt0Lm5hbWVfXSxgdWwtJHtqZVt0Lm5hbWVfXX1gKTt0LmVsXy5hcHBlbmRDaGlsZChlKX19KSl9LGZlPSh0LGU9IiIpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG4uY2xhc3NOYW1lPSJ1bC1idXR0b24tdGV4dCIsbi5pbm5lckhUTUw9dCxuLmlkPWUsbn0sZGU9KHQsZSxuLHIsbz0hMSk9Pnt0LmFkZENsYXNzKCJ1bC12aWRlby1wbGF5ZXIiKTtjb25zdCBpPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtpLmFkZENsYXNzKCJ1bC1jb250cm9sLXBhbmVsIiksdC5wcm9ncmVzc0Jhcj1pLmFkZENoaWxkKCJQcm9ncmVzc0NvbnRyb2wiKSxuJiZ0LnNyYyhuKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXI9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIiKTtjb25zdCBhPW4mJm4uc3JjP3dlKG4uc3JjKTpudWxsOyFufHwhbyYmYT8odC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIsYSYmdC5wb3N0ZXIoYSkpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKSx0Lm9uKCJwbGF5IiwoKCk9PntvfHwhbnx8YXx8eWUodCwhMSl9KSksdC5hZGRDaGlsZCh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIse30sMSksaS5hZGRDaGlsZChlKSx0LmFkZENoaWxkKGkpLHImJnIodCl9LHBlPSh0LGUsbixyLG8saSxhLGM9ITEpPT57aWU9RGF0ZS5ub3coKTtjb25zdCBzPXdpbmRvdy52aWRlb2pzLHU9cyhlLHtjb250cm9sczohMSxiaWdQbGF5QnV0dG9uOiExLGZsdWlkOiExLHdpZHRoOjEyODAsaGVpZ2h0OjcyMCxwbGF5c2lubGluZTohMCxwbHVnaW5zOntyZWNvcmQ6e2F1ZGlvOiEwLHZpZGVvOnttYW5kYXRvcnk6e21pbldpZHRoOjEyODAsbWluSGVpZ2h0OjcyMH19LGZyYW1lV2lkdGg6MTI4MCxmcmFtZUhlaWdodDo3MjAsbWF4TGVuZ3RoOjYwMCxhdXRvTXV0ZURldmljZTohMH19fSk7dS5wYXlsb2FkPW47Y29uc3QgbD10PT57Y29uc3QgZT1YdCxuPVh0KyItYXVkaW8tb25seSI7c2UodS51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksb2UmJm9lLnN0YXJ0VGltZT49aWUmJm9lLmFib3J0KCk7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtY2FtZXJhLWJ1dHRvbiIpO3Q/KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksaC5yZW1vdmVDbGFzcyhlKSxoLmFkZENsYXNzKG4pLHIuaW5uZXJIVE1MPWplLlR1cm5PbkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIucmVtb3ZlQ2xhc3MoInZqcy1oaWRkZW4iKSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e3UucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKHUucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKHUucmVjb3JkKCkpKSk6KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdS5yZWNvcmQoKS5nZXREZXZpY2UoKSxoLnJlbW92ZUNsYXNzKG4pLGguYWRkQ2xhc3MoZSksci5pbm5lckhUTUw9amUuVHVybk9mZkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuYWRkQ2xhc3MoInZqcy1oaWRkZW4iKSl9LGY9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57Zi5oYXNDbGFzcyhKdCl8fChsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCkpfX0pO2YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKSxmLmVsXy5hcHBlbmRDaGlsZChmZShqZS5EZWxldGVCdXR0b24sInVsLWRlbGV0ZS1idXR0b24iKSk7Y29uc3QgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxwPSgpPT57ZC5jbGFzc0xpc3QuY29udGFpbnMoInZqcy1mdWxsc2NyZWVuIikmJnUuY2FtZXJhT2ZmP2Quc3R5bGUuZGlzcGxheT0idGFibGUiOmQuc3R5bGUuZGlzcGxheT0iZmxleCJ9O3AoKTtjb25zdCBoPW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e3UucmVjb3JkKCkuaXNSZWNvcmRpbmcoKXx8KHUuY2FtZXJhT2ZmPSF1LmNhbWVyYU9mZixsKHUuY2FtZXJhT2ZmKSwhZi5oYXNDbGFzcyhKdCkmJmYuYWRkQ2xhc3MoSnQpLG8oRWUuREVMRVRFLHt9KSxwKCkpfX0pO2guYWRkQ2xhc3MoWHQpLGguZWxfLmFwcGVuZENoaWxkKGZlKGplLlR1cm5PZmZDYW1lcmEsInVsLWNhbWVyYS1idXR0b24iKSk7Y29uc3Qgdj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRlci10b2dnbGUiKTtpZih1LnJlY29yZCgpLmlzUmVjb3JkaW5nKCkpdS5yZWNvcmQoKS5zdG9wKCksdCYmKHQuaW5uZXJIVE1MPWplLlJlY29yZEJ1dHRvbiksdi5yZW1vdmVDbGFzcyhRdCksZi5yZW1vdmVDbGFzcyhKdCk7ZWxzZXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO2lmKGUpZS5yZW1vdmUoKSx0JiYodC5pbm5lckhUTUw9amUuUmVjb3JkQnV0dG9uKSxsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCksdi5yZW1vdmVDbGFzcyhRdCksbS5zaG93KCk7ZWxzZXt2LmFkZENsYXNzKFF0KSxtLmhpZGUoKSxoLmFkZENsYXNzKEp0KSxmLmFkZENsYXNzKEp0KSx0JiYodC5pbm5lckhUTUw9amUuU3RvcEJ1dHRvbik7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmlkPSJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIsZC5pbnNlcnRCZWZvcmUoZSxkLmNoaWxkcmVuWzFdKSxlLnN0eWxlLmhlaWdodD1gJHtkLm9mZnNldEhlaWdodH1weGAsaGUodSwzKX19fX0pO3YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24iKSx2LmVsXy5hcHBlbmRDaGlsZChmZShqZS5SZWNvcmRCdXR0b24sInVsLXJlY29yZGVyLXRvZ2dsZSIpKTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtnLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZy5jbGFzc05hbWU9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCIsdC5hcHBlbmRDaGlsZChnKSx1LnVwbG9hZFByb2dyZXNzTGFiZWw9Zztjb25zdCB5PXVlKHUsW2YsaCwiUGxheVRvZ2dsZSIsdiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxtPXkuY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7bS5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJm0uaGlkZSgpO2NvbnN0IGI9eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJQbGF5VG9nZ2xlIj09PXQubmFtZV8pKTtiLmhpZGUoKSxpJiZoLmFkZENsYXNzKEp0KSwhaSYmZi5hZGRDbGFzcyhKdCksZGUodSx5LGksITEsYyksdS5vbigic3RvcFJlY29yZCIsKCgpPT57di5oaWRlKCksYi5zaG93KCksbS5zaG93KCksZi5yZW1vdmVDbGFzcyhKdCl9KSksdS5vbigiZGV2aWNlUmVhZHkiLCgoKT0+e3Yuc2hvdygpLGIuaGlkZSgpLGYuYWRkQ2xhc3MoSnQpfSkpLCgodCxlLG4scixvKT0+e3Qub24oImRldmljZUVycm9yIiwoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiZGV2aWNlIGVycm9yOiIsdC5kZXZpY2VFcnJvckNvZGUpLCJQZXJtaXNzaW9uIGRlbmllZCI9PT10LmRldmljZUVycm9yQ29kZS5tZXNzYWdlPyh0LmRldmljZUJ1dHRvbi5hZGRDbGFzcygicGVybWlzc2lvbi1kZW5pZWQiKSxuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLlBFUk1JU1NJT05fREVOSUVEfSkpOihuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSfSksYWUobmV3IEVycm9yKHQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2UpLCJyZWNvcmRlckRldmljZUVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKG4scil7YWUocnx8dC5lcnJvcigpLCJyZWNvcmRlckVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLHQub24oInN0YXJ0UmVjb3JkIiwoZnVuY3Rpb24oZSxuKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpfSkpLHQub24oImZpbmlzaFJlY29yZCIsKGFzeW5jIGZ1bmN0aW9uKCl7cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN0YXJ0IiwwKTtjb25zdHtzdXJ2ZXlJZDppLHF1ZXN0aW9uSWQ6YSxyZXNwb25zZUdyb3VwVWlkOmMsdmlzaXRvcklkOnMsZW52SWQ6dX09dC5wYXlsb2FkO2lmKCFpKXtjb25zdCB0PSJpbnRlcm5hbCBlcnJvcjogbWlzc2luZyBmaWVsZHMgaW4gcGF5bG9hZCI7cmV0dXJuIG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuT1RIRVJ9KSxhZShuZXcgRXJyb3IodCksImZpbmlzaFJlY29yZCIsZSxvLHMsdSksbnVsbH10LnJlY29yZCgpLnN0b3BEZXZpY2UoKTtjb25zdCBsPXQuY2FtZXJhT2ZmP0VlLk1FRElBX1RZUEVfQVVESU86RWUuTUVESUFfVFlQRV9WSURFTyxmPVp0KCksZD17c3VydmV5SWQ6aSx1cGRhdGVkQXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLG1lZGlhVHlwZTpsLG1lZGlhUmVjb3JkaW5nVWlkOmZ9O2EmJihkLnF1ZXN0aW9uSWQ9YSksYyYmKGQucmVzcG9uc2VHcm91cFVpZD1jKSxzJiYoZC52aXNpdG9ySWQ9cyk7Y29uc3QgcD1hd2FpdChhc3luYygpPT57Y29uc3Qgcj1hd2FpdCBmZXRjaChgJHtlfS8yL2Vudmlyb25tZW50cy9pbnRlZ3JhdGlvbnMvdXBsb2FkYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShkKX0pO2lmKHIub2spe2NvbnN0IHQ9YXdhaXQgci5qc29uKCk7cmV0dXJuIG4mJm4oRWUuVVBMT0FEX1NUQVJURUQse1tFZS5VUExPQURfSURdOnQudXBsb2FkLmlkLFtFZS5NRURJQV9UWVBFXTpsLFtFZS5NRURJQV9SRUNPUkRJTkdfVUlEXTpmfSksdC51cGxvYWQudXJsfXJldHVybiBuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSLHJlc3BvbnNlOnJ9KSxhZShuZXcgRXJyb3IoImZhaWxlZCB0byBnZXQgdXBsb2FkIHJlc3BvbnNlIHdpdGggdXJsIiksImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKSxudWxsfSkoKTtwJiYob2U9d2luZG93LlVwQ2h1bmsuY3JlYXRlVXBsb2FkKHtlbmRwb2ludDpwLGZpbGU6bmV3IEZpbGUoW3QucmVjb3JkZWREYXRhXSxgcmVjb3JkaW5nICR7bH0gJHtEYXRlLm5vdygpfWApLGNodW5rU2l6ZTo1MTIwfSksb2Uuc3RhcnRUaW1lPURhdGUubm93KCksb2Uub24oImVycm9yIiwobj0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksYWUobiwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLG9lLm9uKCJwcm9ncmVzcyIsKGU9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwicHJvZ3Jlc3MiLGUuZGV0YWlsKX0pKSxvZS5vbigic3VjY2VzcyIsKCgpPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN1Y2Nlc3MiKSxuJiZuKEVlLlVQTE9BRF9GSU5JU0hFRCl9KSkpfSkpfSkodSxyLG8sc2UsYSksaSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksdS5zcmMoaSksYi5zaG93KCksdi5oaWRlKCksZi5yZW1vdmVDbGFzcyhKdCkpO2NvbnN0IHg9W3tuYW1lOiJtaWNyb3Bob25lIn1dOyF1LmNhbWVyYU9mZiYmeC5wdXNoKHtuYW1lOiJjYW1lcmEifSksUHJvbWlzZS5hbGwoeC5tYXAoKHQ9Pm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh0KSkpKS50aGVuKCh0PT57dC5yZWR1Y2UoKCh0LGUpPT50JiJncmFudGVkIj09PWUuc3RhdGUpLCEwKSYmdSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksIWkmJnUucmVjb3JkKCkuZ2V0RGV2aWNlKCkpfSkpLmNhdGNoKCh0PT57fSkpfSxoZT0odCxlPTMpPT57Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4iKTtuJiYwPT09ZT8obi5yZW1vdmUoKSx0LnJlY29yZCgpLnN0YXJ0KCkpOm4mJihuLmlubmVySFRNTD1gPHNwYW4gY2xhc3M9J3VsLWNvdW50ZG93bi10ZXh0Jz5SZWNvcmRpbmcgaW4uLi4gJHtlfTwvc3Bhbj5gLHNldFRpbWVvdXQoKCgpPT57aGUodCxlLTEpfSksMWUzKSl9LHZlPXQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyIixlLmFwcGVuZENoaWxkKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLXBsYXllci1sb2FkaW5nIixlLmlkPVl0KHQpLFsiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCJdLm1hcCgodD0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9dCxlLmFwcGVuZENoaWxkKG4pfSkpLGV9KSh0KSksZX0sZ2U9KHQsZSk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7bi5pZD10LG4uY2xhc3NOYW1lPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHVsLXZpZGVvLXBsYXllci12aWRlbyI7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7ci5jbGFzc05hbWU9InZqcy1uby1qcyIsci5pbm5lckhUTUw9IlRvIHZpZXcgdGhpcyB2aWRlbyBwbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQsIGFuZCBjb25zaWRlciB1cGdyYWRpbmcgdG8gYSB3ZWIgYnJvd3NlciB0aGF0Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gby5ocmVmPSJodHRwczovL3ZpZGVvanMuY29tL2h0bWw1LXZpZGVvLXN1cHBvcnQvIixvLnRhcmdldD0iX2JsYW5rIixvLmlubmVySFRNTD0ic3VwcG9ydHMgSFRNTDUgdmlkZW8iLHIuYXBwZW5kQ2hpbGQobyksbi5hcHBlbmRDaGlsZChyKSxlLmFwcGVuZENoaWxkKG4pLGV9LHllPSh0LGUpPT57ZT8odC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuc2hvdygpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKToodC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIil9LG1lPXQ9Pntjb25zdCBlPXdpbmRvdy52aWRlb2pzLG49dCtyZTtpZihlKXt0cnl7aWYoIWUobikucmVjb3JkKCkuc3RyZWFtKXJldHVybn1jYXRjaCh0KXtyZXR1cm59ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobikmJmUobikucmVjb3JkKCkuc3RvcCgpLGUobikucmVjb3JkKCkuc3RvcERldmljZSgpfX0sYmU9dD0+e3dpbmRvdy52aWRlb2pzKHQrbmUpLnBhdXNlKCl9LHhlPSh0LGUsbixyKT0+e3dpbmRvdy52aWRlb2pzKHQrbmUpO2NvbnN0IG89d2luZG93LnZpZGVvanModCtyZSk7KCh0LGUsbik9Pntjb25zdCByPXdpbmRvdy52aWRlb2pzKHQrbmUpOyFyLnBhdXNlZCgpJiZyLnBhdXNlKCksci5zcmMoe3NyYzplLHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9KSxyLmN1cnJlbnRUaW1lKDApLHllKHIsbik7Y29uc3Qgbz13ZShlKTshbiYmZSYmKG8/ci5wb3N0ZXIobyk6eWUociwhMCkpLHIub24oInBsYXkiLCgoKT0+e258fCFlfHxvfHx5ZShyLCExKX0pKX0pKHQsZSxyKSxvLnJlY29yZCgpLnJlc2V0U3RhdGUoKSxvLnJlY29yZCgpLmdldERldmljZSgpO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKVswXS5jbGFzc0xpc3QuYWRkKEp0KSxvLmNhbWVyYU9mZil7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSIpWzBdLmNsYXNzTGlzdC5yZW1vdmUoSnQpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57by5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2goby5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQoby5yZWNvcmQoKSkpfWVsc2V7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24iKVswXS5jbGFzc0xpc3QucmVtb3ZlKEp0KX1vLnBheWxvYWQ9bixzZShvLnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxpZT1EYXRlLm5vdygpfSx3ZT10PT57Y29uc3QgZT10Lm1hdGNoKC9odHRwczpcL1wvc3RyZWFtLm11eC5jb21cLyguKikvKSxuPWU/ZVsxXTpudWxsO3JldHVybiBuP2BodHRwczovL2ltYWdlLm11eC5jb20vJHtufS90aHVtYm5haWwuanBnP3RpbWU9MGA6bnVsbH0sRWU9e1VQTE9BRF9TVEFSVEVEOiJ1cGxvYWQuc3RhcnRlZCIsVVBMT0FEX0ZJTklTSEVEOiJ1cGxvYWQuZmluaXNoZWQiLERFTEVURToiZGVsZXRlIixFUlJPUjoiZXJyb3IiLE1FRElBX1RZUEU6Im1lZGlhLnR5cGUiLFBFUk1JU1NJT05fREVOSUVEOiJwZXJtaXNzaW9uX2RlbmllZCIsT1RIRVI6Im90aGVyIixVUExPQURfSUQ6InVwbG9hZC5pZCIsTUVESUFfUkVDT1JESU5HX1VJRDoibWVkaWEucmVjb3JkaW5nLnVpZCIsTUVESUFfVFlQRV9WSURFTzoidmlkZW8iLE1FRElBX1RZUEVfQVVESU86ImF1ZGlvIn0samU9e1BsYXliYWNrUmF0ZU1lbnVCdXR0b246IlNwZWVkIixQbGF5VG9nZ2xlOiJQbGF5IixGdWxsc2NyZWVuVG9nZ2xlOiJFeHBhbmQiLFR1cm5PbkNhbWVyYToiVHVybiBvbiIsVHVybk9mZkNhbWVyYToiVHVybiBvZmYiLERlbGV0ZUJ1dHRvbjoiRGVsZXRlIixSZWNvcmRCdXR0b246IlJlY29yZCIsU3RvcEJ1dHRvbjoiU3RvcCIsUGF1c2VCdXR0b246IlBhdXNlIn07ZnVuY3Rpb24gQ2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBrZT0idWwtYnV0dG9uLWluYWN0aXZlIjtmdW5jdGlvbiBTZSh0LGUpe2UodCl9dmFyIE9lPXtlcTpmdW5jdGlvbih0LGUpe3JldHVybiB0PT1lfSxuZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4hdGhpcy5lcSh0LGUpfSxndDpmdW5jdGlvbih0LGUpe3JldHVybiB0PmV9LGd0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Pj1lfSxsdDpmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9LGx0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0PD1lfSxsaXN0X2V4YWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZ0LnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKT09PWUuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpfSxsaXN0X2FsbDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmIWUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10LmluZGV4T2YoZSl9KSl9LGxpc3RfYWxvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xIT10LmluZGV4T2YoZSl9KSl9fTt2YXIgSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7YnQoKSh0aGlzLHQpLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnBheWxvYWQ9ZSxuLnJlamVjdD1yLG4ucmVzb2x2ZT10fSkpfXJldHVybiB3dCgpKHQsW3trZXk6InJlc29sdmVSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnJlc29sdmUodCl9fV0pLHR9KCk7ZnVuY3Rpb24gQWUodCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobi5iaW5kKG51bGwsZSksdCl9KSl9dmFyIE1lPTEwLF9lPSExLFRlPSIiLFJlPSExLExlPVtdO2Z1bmN0aW9uIFBlKHQpe3JldHVybiB0Ll9jb25maWcmJnQuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q/dC5fY29uZmlnLmluc3RhbGxhdGlvbk1ldGhvZDp0Ll9ndG0/cTp0Ll9zZWdtZW50P1c6R31mdW5jdGlvbiBOZSh0KXtfZT0hMCxUZT10fWZ1bmN0aW9uIERlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwidXNlcmxlYXAtcGxhdGZvcm0iOiJ3ZWIiLCJ4LXVsLXNkay12ZXJzaW9uIjoiMi4xNC43In07aWYodC5lbnZJZCYmKGVbVV09dC5lbnZJZCksdC50b2tlbiYmKGUuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIrdC50b2tlbiksdC51c2VySWQmJihlW3pdPXQudXNlcklkKSx0LnZpc2l0b3JJZCYmKGVbVl09dC52aXNpdG9ySWQpLHQucGFydG5lckFub255bW91c0lkJiYoZVtCXT10LnBhcnRuZXJBbm9ueW1vdXNJZCksdC5tb2JpbGVIZWFkZXJzSlNPTil7dmFyIG49SlNPTi5wYXJzZSh0Lm1vYmlsZUhlYWRlcnNKU09OKTtPYmplY3QuYXNzaWduKGUsbil9cmV0dXJuIGVbSF09UGUodCksdC5sb2NhbGUmJihlWyJhY2NlcHQtbGFuZ3VhZ2UiXT10LmxvY2FsZSksZX1mdW5jdGlvbiBGZSh0LGUsbil7cmV0dXJuIFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVZSgpe3JldHVybihVZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUpe3QubmV4dD00O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7c3RhdHVzOjQyOX0pO2Nhc2UgNDpyZXR1cm4gbz1uZXcgSWUociksTGUucHVzaChvKSx0LmFicnVwdCgicmV0dXJuIixvLnByb21pc2UpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEJlKHQsZSl7cmV0dXJuIHplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB6ZSgpe3JldHVybiB6ZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuKXt2YXIgcixvLGksYSxjLHMsdSxsLGYsZD1hcmd1bWVudHM7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWQubGVuZ3RoPjImJnZvaWQgMCE9PWRbMl0/ZFsyXTowLG89ZC5sZW5ndGg+MyYmdm9pZCAwIT09ZFszXSYmZFszXSxpPWQubGVuZ3RoPjQmJnZvaWQgMCE9PWRbNF0mJmRbNF0sYT17dXJsOmUsb3B0aW9uczpuLGF0dGVtcHQ6cixzaG91bGREcm9wT25SYXRlTGltaXQ6b30sIVJlfHxpKXt0Lm5leHQ9NjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsRmUobyxpLGEpKTtjYXNlIDY6aWYoYz17b2s6ITEscmVwb3J0RXJyb3I6ITF9LCFfZSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiBjb25zb2xlLmxvZygiVXNlckxlYXAgLSAiLmNvbmNhdChUZSkpLHQuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMTA6cmV0dXJuIHQucHJldj0xMCxuLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihEZSgpLG4uaGVhZGVycyksdC5uZXh0PTE0LGZldGNoKGUsbik7Y2FzZSAxNDppZig0MjkhPT0ocz10LnNlbnQpLnN0YXR1cyl7dC5uZXh0PTI0O2JyZWFrfWlmKCEoIVJlJiYhb3x8aSkpe3QubmV4dD0yMzticmVha31yZXR1cm4gUmU9ITAsdT1zLmhlYWRlcnMuaGFzKCJyYXRlbGltaXQtcmVzZXQiKT9OdW1iZXIocy5oZWFkZXJzLmdldCgicmF0ZWxpbWl0LXJlc2V0IikpOk1lLHQuYWJydXB0KCJyZXR1cm4iLEFlKDFlMyp1KS50aGVuKE4oKShMKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEJlKGUsbiwwLG8sITApKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpKTtjYXNlIDIzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixGZShvLCExLGEpKTtjYXNlIDI0OmlmKFJlPSExLExlLmxlbmd0aCYmKExlLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXlsb2FkO0JlKGUudXJsLGUub3B0aW9ucyxlLmF0dGVtcHQsZS5zaG91bGREcm9wT25SYXRlTGltaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZVJlcXVlc3QoZSl9KSl9KSksTGU9W10pLCFzLm9rKXt0Lm5leHQ9NDE7YnJlYWt9aWYoMjQ5IT09cy5zdGF0dXMpe3QubmV4dD0zMDticmVha31yZXR1cm4gTmUoKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDMwOnJldHVybiB0Lm5leHQ9MzIscy50ZXh0KCk7Y2FzZSAzMjpyZXR1cm4gbD10LnNlbnQsdC5wcmV2PTMzLGwmJiJPSyIhPT1sJiYocy5qc29uPUpTT04ucGFyc2UobCkpLHQuYWJydXB0KCJyZXR1cm4iLHMpO2Nhc2UgMzg6cmV0dXJuIHQucHJldj0zOCx0LnQwPXQuY2F0Y2goMzMpLHQuYWJydXB0KCJyZXR1cm4iLHtvazohMSxyZXBvcnRFcnJvcjohMCxlcnJvcjpuZXcgRXJyb3IoImZhaWxlZCBwYXJzaW5nIHJlc3BvbnNlIGpzb24gZm9yICIuY29uY2F0KGUsIiAtICIpLmNvbmNhdChsKSl9KTtjYXNlIDQxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDQ0OmlmKHQucHJldj00NCx0LnQxPXQuY2F0Y2goMTApLCEoKGY9cisxKT4yKSl7dC5uZXh0PTQ5O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITEsZXJyb3I6dC50MX0pO2Nhc2UgNDk6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEFlKDFlMypmKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBCZShlLG4sZil9KSkpO2Nhc2UgNTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1sxMCw0NF0sWzMzLDM4XV0pfSkpKSx6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVmUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEhlKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1ZlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpWZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiBxZSh0LGUsbil7cmV0dXJuIFdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBXZSgpe3JldHVybiBXZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvLGksYSxjLHMsdSxsLGY7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1lLm1vZGUsaT1lLnVzZXJJZCxhPWUuZW52SWQsYz1lLmFwaVVSTCxzPWUuaGVhZGVycyx1PXdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbD17bW9kZTpvLHNjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOnUuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OnUuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9LGY9e2FjdGlvbjpuLGVycjp7bWVzc2FnZTpyLm1lc3NhZ2Usc3RhY2s6ci5zdGFja30sbWV0YTpsLHZpZDppLGVudklkOmF9LHQubmV4dD02LEJlKCIiLmNvbmNhdChjLCIvc2RrLzEvZXJyb3JzIikse21ldGhvZDoiUE9TVCIsaGVhZGVyczpPYmplY3QuYXNzaWduKHsieC11bC1lcnJvciI6d2luZG93LmJ0b2EoInVzZXJsZWFwLSIuY29uY2F0KERhdGUubm93KCksIi1lcnJvciIpKX0scyksYm9keTpKU09OLnN0cmluZ2lmeShmKX0pO2Nhc2UgNjp0LnNlbnQub2t8fGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQ0NCkgRmFpbGVkIHRvIHJlcG9ydCBlcnJvciB0byBBUEkiLHIpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSxXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC51c2VySWR8fHQubWV0YSYmInRlc3QiPT09dC5tZXRhLm1vZGV8fHQuaXNQcmV2aWV3fSxaZT17c3VydmV5SWQ6bnVsbCxydW5uaW5nOiExLGZyYW1lOm51bGwsZW52SWQ6bnVsbCx1c2VySWQ6bnVsbCxtZXRhOnt9LGJvcmRlcjpudWxsLGZvbnRGYW1pbHk6bnVsbCxmb250RmFtaWx5VVJMOm51bGwsdGltZW91dDpudWxsLGludGVydmFsOm51bGwsbW9kZTpudWxsLGRlY2s6e2luZGV4OjAsY2FyZHM6W119LGNvbnRleHQ6e30sc2VuZGluZzohMSxjYXJkczp7b3BlbjpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPXQuYXBwLHM9Yy51c2VNb2JpbGVTdHlsaW5nLHU9Yy5ib3JkZXIsbD1GKFtlLCJ1bC1jYXJkLS10ZXh0IixsdF0pLGY9X3QociksZD1yJiZyLm9wZW5UZXh0UGxhY2Vob2xkZXI/ci5vcGVuVGV4dFBsYWNlaG9sZGVyOm51bGw7cmV0dXJuIEkoImZvcm0iLHtpZDoidGV4dC1mb3JtIixjbGFzc05hbWU6bCxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gRHQodCxvKX0sa2V5Oml9LFR0KGYsbiksZixJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dCJ9LEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0X19jb250YWluZXIifSxJKCJ0ZXh0YXJlYSIseyJkYXRhLWdyYW1tIjoiZmFsc2UiLG1heGxlbmd0aDoiNTAwMCIsY2xhc3NOYW1lOkYoZnQoaXQscykpLG5hbWU6InRleHQiLHBsYWNlaG9sZGVyOmQsImFyaWEtcGxhY2Vob2xkZXIiOmQsImFyaWEtbXVsdGlsaW5lIjoidHJ1ZSIsdmFsdWU6dC5vcGVuVGV4dC52YWx1ZSxvbmNyZWF0ZTpOdCgpLG9uaW5wdXQ6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksYS5vcGVuVGV4dC5vblRleHRDaGFuZ2UodC50YXJnZXQudmFsdWUpfSxvbmZvY3VzOmZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPXV9LG9uYmx1cjpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHRhYmluZGV4OjAsImFyaWEtbGFiZWxsZWRieSI6c3QsY29udGVudGVkaXRhYmxlOiJ0cnVlIixyb2xlOiJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCI6ZH0pKSxJKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6dX0sb25jbGljazpmdW5jdGlvbihlKXsoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZG9jdW1lbnQuZm9ybXNbInRleHQtZm9ybSJdKSYmKER0KHQub3BlblRleHQudmFsdWUudHJpbSgpLG8pLHQub3BlblRleHQudmFsdWU9IiIpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIHVsLWNhcmQtdGV4dF9fYnV0dG9uIil9LFJ0KHIpKSksSShNdCxudWxsKSl9fSx0ZXh0dXJscHJvbXB0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLHI9dC5wcm9wZXJ0aWVzLG89KHQubG9jYWxlLHQubmV4dCksaT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGM9RihbZSwidWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IixsdF0pLHM9dC5hcHAuYm9yZGVyO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6YyxrZXk6aX0sSSgicCIse2lkOnN0LGNsYXNzTmFtZToidWwtcXVlc3Rpb24ifSxuKSxJKCJkaXYiLHtpZDoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIiLGNsYXNzTmFtZToidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIifSwociYmci5ib2R5P3IuYm9keS5zcGxpdCgvXG5ccypcbi9nKTpbXSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gSSgicCIse2NsYXNzTmFtZToidWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHkifSx0KX0pKSksSSgiYSIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiB1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnMsIm1hcmdpbi1yaWdodCI6ImF1dG8iLCJ0ZXh0LW92ZXJmbG93IjoiZWxsaXBzaXMiLHRleHREZWNvcmF0aW9uOiJub25lIixvdmVyZmxvdzoidmlzaWJsZSJ9LG9uY2xpY2s6ZnVuY3Rpb24odCl7bygpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fG8oKX0saHJlZjpyJiZyLmJ1dHRvblVybCx0YXJnZXQ6Il9ibGFuayIscm9sZToiYnV0dG9uIix0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIHVsLWNhcmQtdGV4dF9fYnV0dG9uIiksImFyaWEtZGVzY3JpYmVkYnkiOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciJ9LHImJnIuYnV0dG9uVGV4dD9yLmJ1dHRvblRleHQ6Ik5leHQiKSxJKE10LG51bGwpKX19LG11bHRpcGxlY2hvaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIsbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT0odC5sb2NhbGUsdC5vcHRpb25zKSxjPXZvaWQgMD09PWE/W106YSxzPXQubmV4dCx1PXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgbD10LmFwcC51c2VNb2JpbGVTdHlsaW5nLGY9RihbZSwidWwtY2FyZC0tbXVsdGlwbGUiLGx0XSk7ZnVuY3Rpb24gZCh0LGUpe3Moe3ZhbHVlOnIoKSh7fSx0LGUpfSl9dmFyIHA9Yy5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZCxvPXQubGFiZWwsaT10LnZhbHVlO3JldHVybiBJKEZ0LHtib3JkZXI6bixpbmRleDplLGxhYmVsOm8sdGFiaW5kZXg6ZSsxLG9uU2VsZWN0OmQuYmluZChudWxsLHIsaSksaWQ6cixpc1JhZGlvOiEwLHVzZU1vYmlsZVN0eWxpbmc6bH0pfSkpLGg9X3QoaSk7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTpmLGtleTp1fSxUdChoLG8pLGgsSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZnQob3QsbCkpLHJvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLWxhYmVsZWRieSI6c3R9LHApLEkoTXQsbnVsbCkpfX0sbXVsdGlwbGVzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10LmJvcmRlcixyPXQubWVzc2FnZSxvPXQucHJvcGVydGllcyxpPSh0LmxvY2FsZSx0Lm9wdGlvbnMpLGE9dm9pZCAwPT09aT9bXTppLGM9KHQuaXNMYXN0LHQubmV4dCkscz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIHU9RihbZSwidWwtY2FyZC0tbXVsdGlwbGUiLGx0XSksbD10Lm11bHRpcGxlc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyxmPWkubXVsdGlwbGVzZWxlY3QsZD1mLmluaXQscD1mLnJlc2V0LGg9Zi51cGRhdGVTZWxlY3RlZCx2PXQuYXBwLnVzZU1vYmlsZVN0eWxpbmcsZz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxmdW5jdGlvbih0LGUpe2Uoe3ZhbHVlOnR9KX0odC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsYykscCgpfSx5PWEubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsO3QudmFsdWU7cmV0dXJuIEkoRnQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byxvblNlbGVjdDpoLHNlbGVjdGVkOmxbcl0saWQ6cixpc1JhZGlvOiExLHVzZU1vYmlsZVN0eWxpbmc6dn0pfSkpLG09X3Qobyk7cmV0dXJuIEkoImZvcm0iLHtpZDoidGV4dC1mb3JtIixjbGFzc05hbWU6dSxvbnN1Ym1pdDpnLG9uY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlPXt9LGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0LmlkXT0hMX0pKSx2b2lkIGQoZSk7dmFyIGV9LGtleTpzfSxUdChtLHIpLG0sSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZnQob3QsdikpLHJvbGU6InJhZGlvZ3JvdXAifSx5KSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dCJ9LEkoImJ1dHRvbiIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpufSxvbmNsaWNrOmcscm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxSdChvKSkpLEkoTXQsbnVsbCkpfX0sbGlrZXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9RihbbiwidWwtY2FyZC0tbGlrZXJ0IixsdF0pLHA9ciYmci5sZWZ0LGg9ciYmci5yaWdodCx2PVQoKShBcnJheSg1KSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4rMSxvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEkoImRpdiIsTSgpKHtpZDpvLGNsYXNzTmFtZTpGKFtdLmNvbmNhdChUKCkoZnQoWCxsKSksVCgpKGZ0KCIiLmNvbmNhdChYLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToidGV4dGJveCIsdGFiaW5kZXg6MCwiYXJpYS1kZXNjcmliZWRieSI6dXR9KSxyKX0pKSxnPV90KGkpO3JldHVybiBJKCJmb3JtIix7Y2xhc3NOYW1lOmQsa2V5OmN9LFR0KGcsbyksZyxmJTI9PTAmJkkoImRpdiIsbnVsbCksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX251bWJlcnMifSx2KSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIn0sSSgic3BhbiIsbnVsbCxwKSxJKCJzcGFuIixudWxsLGgpKSxJKE10LG51bGwpKX19LHRoYW5rczpmdW5jdGlvbih0KXt2YXIgZT10LmVuZENhcmQsbj10LmJvcmRlcixyPXQuY2xhc3NOYW1lLG89KHQubG9jYWxlLHQucXVlc3Rpb25JZCk7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9RihbciwidWwtY2FyZC0tdGhhbmtzIixsdF0pLGM9ZSYmZS5zdWJoZWFkZXI/SSgicCIse2NsYXNzTmFtZToidWwtY2FwdGlvbiJ9LGUuc3ViaGVhZGVyKTpudWxsLHM9ZSYmZS5oZWFkbGluZT9lLmhlYWRsaW5lOm51bGw7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTphLGtleTpvfSxJKCJkaXYiLHtvbmNyZWF0ZTpmdW5jdGlvbigpe3JldHVybiBpLmFwcC5jb21wbGV0ZSgpfX0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS10aGFua3MtY29udGVudCJ9LEkoImRpdiIse2NsYXNzTmFtZToidWwtdGhhbmtzLWNoZWNrIn0sSSgic3ZnIix7d2lkdGg6IjgxIixoZWlnaHQ6Ijk5Iix2aWV3Qm94OiIwIDAgODEgOTkiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtbGFiZWxsZWRieSI6InRpdGxlIn0sSSgicGF0aCIseyJmaWxsLXJ1bGUiOiJldmVub2RkIiwiY2xpcC1ydWxlIjoiZXZlbm9kZCIsZDoiTTQwLjUgNzdDNjAuOTM0NSA3NyA3Ny41IDYwLjQzNDUgNzcuNSA0MEM3Ny41IDE5LjU2NTUgNjAuOTM0NSAzIDQwLjUgM0MyMC4wNjU1IDMgMy41IDE5LjU2NTUgMy41IDQwQzMuNSA2MC40MzQ1IDIwLjA2NTUgNzcgNDAuNSA3N1pNODAuNSA0MEM4MC41IDYyLjA5MTQgNjIuNTkxNCA4MCA0MC41IDgwQzE4LjQwODYgODAgMC41IDYyLjA5MTQgMC41IDQwQzAuNSAxNy45MDg2IDE4LjQwODYgMCA0MC41IDBDNjIuNTkxNCAwIDgwLjUgMTcuOTA4NiA4MC41IDQwWiIsZmlsbDpufSksSSgicGF0aCIseyJmaWxsLXJ1bGUiOiJldmVub2RkIiwiY2xpcC1ydWxlIjoiZXZlbm9kZCIsZDoiTTU1LjAyNSAyMi45MDQ2QzU1LjYyOTkgMjMuNDcwNSA1NS42NjE2IDI0LjQxOTggNTUuMDk1NiAyNS4wMjQ3QzU0Ljg3MjQgMjUuMjYzNCA1NC42MTA5IDI1LjUyODUgNTQuMzE1NyAyNS44Mjc3QzUyLjI1NDcgMjcuOTE2OCA0OC41NTQ5IDMxLjY2NyA0NC44MTM1IDM5LjY2NThDNDMuMjgxOCA0Mi45NDA2IDQyLjA4NjQgNDUuODM4NiA0MS4wODIzIDQ4LjI3MjlDNDAuNjUzOSA0OS4zMTE2IDQwLjI2MDMgNTAuMjY1OSAzOS44OTAyIDUxLjEyOUMzOS4yODcgNTIuNTM1OSAzOC43MjQ4IDUzLjc1MDggMzguMTc0NCA1NC42MjVDMzcuODk5NyA1NS4wNjEzIDM3LjU4MDYgNTUuNDkwNSAzNy4yMDE3IDU1LjgyNDVDMzYuODIwMSA1Ni4xNjA3IDM2LjI2MTMgNTYuNSAzNS41NDU3IDU2LjVDMzQuNjc0MiA1Ni41IDM0LjA4OTIgNTUuOTY5MiAzMy43Nzc0IDU1LjYwODNDMzMuNDUwMiA1NS4yMjk2IDMzLjE3NTIgNTQuNzUxMSAzMi45Mzk2IDU0LjMwMUMzMi43MzA1IDUzLjkwMTMgMzIuNTA4OCA1My40MzY3IDMyLjI3OTcgNTIuOTU2NUMzMi4yNDI5IDUyLjg3OTQgMzIuMjA1OSA1Mi44MDE5IDMyLjE2ODggNTIuNzI0M0MzMS44OTQyIDUyLjE0OTkgMzEuNTk1OSA1MS41MzQgMzEuMjUzNyA1MC44ODY4QzI5Ljg4ODYgNDguMzA1IDI3Ljg1MzkgNDUuMjg3OCAyNC4yMzQzIDQzLjEzODJDMjMuNTIyIDQyLjcxNTIgMjMuMjg3NSA0MS43OTQ5IDIzLjcxMDUgNDEuMDgyNkMyNC4xMzM1IDQwLjM3MDMgMjUuMDUzOSA0MC4xMzU4IDI1Ljc2NjIgNDAuNTU4OEMzMC4wNTU2IDQzLjEwNjIgMzIuNDE0OSA0Ni42NjQ3IDMzLjkwNTggNDkuNDg0NUMzNC4yNzc2IDUwLjE4NzYgMzQuNTk3MyA1MC44NDg3IDM0Ljg3NTMgNTEuNDMwMkMzNC45MTQ3IDUxLjUxMjQgMzQuOTUyOSA1MS41OTI2IDM0Ljk5MDIgNTEuNjcwN0MzNS4yMjIyIDUyLjE1NjcgMzUuNDE2NCA1Mi41NjM3IDM1LjU5NzggNTIuOTEwMkMzNS42MTUxIDUyLjk0MzQgMzUuNjMyMSA1Mi45NzU0IDM1LjY0ODUgNTMuMDA2MUMzNi4wNTY1IDUyLjM1MzEgMzYuNTM0MSA1MS4zNDM0IDM3LjEzMyA0OS45NDY4QzM3LjQ3ODEgNDkuMTQxOCAzNy44NTcyIDQ4LjIyMjkgMzguMjc2MSA0Ny4yMDc0QzM5LjI4ODYgNDQuNzUzMiA0MC41MzM5IDQxLjczNDcgNDIuMDk2MSAzOC4zOTQ4QzQ2LjA1OTEgMjkuOTIyMSA1MC4wNjQxIDI1Ljg2NDggNTIuMTUzNSAyMy43NDgyQzUyLjQ0MjMgMjMuNDU1NiA1Mi42OTQ0IDIzLjIwMDIgNTIuOTA0OCAyMi45NzUzQzUzLjQ3MDggMjIuMzcwMyA1NC40MiAyMi4zMzg3IDU1LjAyNSAyMi45MDQ2Wk0zNS4xOTk0IDUzLjU4OTJDMzUuMTk5NCA1My41ODkyIDM1LjIgNTMuNTg4OCAzNS4yMDEyIDUzLjU4NzlDMzUuMiA1My41ODg5IDM1LjE5OTQgNTMuNTg5MyAzNS4xOTk0IDUzLjU4OTJaTTM2LjA2NjYgNTMuNjY4MkMzNi4wNzMyIDUzLjY3NCAzNi4wNzY1IDUzLjY3NzUgMzYuMDc2NSA1My42Nzc3QzM2LjA3NjUgNTMuNjc4IDM2LjA3MzIgNTMuNjc1MSAzNi4wNjY2IDUzLjY2ODJaIixmaWxsOm59KSxJKCJwYXRoIix7ZDoiTTY5LjUgOTdDNjkuNSA5OC4xMDQ2IDU2LjI5MjQgOTkgNDAgOTlDMjMuNzA3NiA5OSAxMC41IDk4LjEwNDYgMTAuNSA5N0MxMC41IDk1Ljg5NTQgMjMuNzA3NiA5NSA0MCA5NUM1Ni4yOTI0IDk1IDY5LjUgOTUuODk1NCA2OS41IDk3WiIsZmlsbDoiYmxhY2siLCJmaWxsLW9wYWNpdHkiOiIwLjIifSkpKSxJKCJwIix7Y2xhc3NOYW1lOnN0LGlkOnN0fSxzKSxjKSxJKE10LG51bGwpKSl9fSxucHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD1GKFtuLCJ1bC1jYXJkLS1ucHMiLGx0XSkscD1yJiZyLmxlZnQsaD1yJiZyLnJpZ2h0LHY9VCgpKEFycmF5KDExKSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4sbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxJKCJkaXYiLE0oKSh7Y2xhc3NOYW1lOkYoW10uY29uY2F0KFQoKShmdChRLGwpKSxUKCkoZnQoIiIuY29uY2F0KFEsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJyYWRpbyIsdGFiaW5kZXg6MCxpZDpvfSkscil9KSksZz1fdChpKTtyZXR1cm4gSSgiZm9ybSIse2NsYXNzTmFtZTpkLGtleTpjfSxUdChnLG8pLGcsZiUyPT0wJiZJKCJkaXYiLG51bGwpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19udW1iZXJzIn0sdiksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1ucHNfX2xhYmVscyJ9LEkoInNwYW4iLG51bGwscCksSSgic3BhbiIsbnVsbCxoKSksSShNdCxudWxsKSl9fSx2aWRlb3ZvaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9dC5uZXh0LGE9dC5xdWVzdGlvbklkLGM9dC51cGRhdGVIZWlnaHQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9RihbZSxZXSksbD0idWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIixmPSJ1bC1jYXJkLXZpZGVvX19uZXh0X2J1dHRvbiIsZD0idWwtdmlkZW8taW50ZXJ2aWV3LWZvcm0iLHA9InVsLXF1ZXN0aW9uLXBsYXllci1jb250YWluZXIiLGg9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHY9byYmby52aWRlb1VybCxnPXQuYXBwLHk9Zy5zdXJ2ZXlJZCxtPWcucmVzcG9uc2VHcm91cFVpZCxiPWcuYXBpVVJMLHg9Zy51c2VySWQsdz1nLmJvcmRlcixFPWcuZW52SWQsaj1nLmhlYWRlcnM7aWYodC5jYXJkRGF0YXx8KHQuY2FyZERhdGE9e30pLHQuY2FyZERhdGEudXBsb2FkSWQ9dm9pZCAwLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9dm9pZCAwLHQuY2FyZERhdGEuYnV0dG9uVGV4dD1SdChvKSx0LmNhcmREYXRhLnNraXBCdXR0b25UZXh0PUx0KG8pLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGwpKXt4ZShsLHYse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eH0sby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPKTt2YXIgQz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtDLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LEMuY2xhc3NMaXN0LmFkZChrZSl9dmFyIGs9ZnVuY3Rpb24oZSxuKXt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtlPT09RWUuVVBMT0FEX1NUQVJURUQ/KHQuY2FyZERhdGEudXBsb2FkSWQ9bltFZS5VUExPQURfSURdLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9bltFZS5NRURJQV9SRUNPUkRJTkdfVUlEXSxyLmlubmVyVGV4dD10LmNhcmREYXRhLmJ1dHRvblRleHQsci5jbGFzc0xpc3QucmVtb3ZlKGtlKSxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjp3fSkpOmU9PT1FZS5ERUxFVEUmJih0LmNhcmREYXRhLnVwbG9hZElkPW51bGwsdC5jYXJkRGF0YS5tZWRpYVJlY29yZGluZ1VpZD1udWxsLHIuY2xhc3NMaXN0LmFkZChrZSksci5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjoiIn0pKX0sUz1mdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3JldHVybiBuLmNsYXNzTmFtZT0iIi5jb25jYXQoInVsLXZpZGVvLWJ0biIsIiAiKS5jb25jYXQodCksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk7dD8oZS5jbGFzc0xpc3QucmVtb3ZlKEp0KSxlLmNsYXNzTGlzdC5hZGQoS3QpLG4uY2xhc3NMaXN0LmFkZChKdCksbi5jbGFzc0xpc3QucmVtb3ZlKEt0KSk6KGJlKGwpLGUuY2xhc3NMaXN0LmFkZChKdCksZS5jbGFzc0xpc3QucmVtb3ZlKEt0KSxuLmNsYXNzTGlzdC5yZW1vdmUoSnQpLG4uY2xhc3NMaXN0LmFkZChLdCkpfShlKX0pKSxufSxPPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChLdCksdC5hcHBlbmRDaGlsZCgoKHQsZSxuLHI9ITEsbz0iaHR0cHM6Ly9hcGkuc3ByaWcuY29tIik9Pntjb25zdCBpPXQrbmUsYT12ZShpKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSBxdWVzdGlvbiBwbGF5ZXIuYCksInBsYXllckRldmljZUVycm9yIixvLHt9KX0pKSxjZShhLGVlLCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFl0KGkpKS5yZW1vdmUoKSxnZShpLGEpO2NvbnN0IHQ9d2luZG93LnZpZGVvanMoaSx7cGxheXNpbmxpbmU6ITAscGxheWJhY2tSYXRlczpbLjUsMSwxLjUsMl19KSxvPXVlKHQsWyJQbGF5YmFja1JhdGVNZW51QnV0dG9uIiwiUGxheVRvZ2dsZSIsIkZ1bGxzY3JlZW5Ub2dnbGUiXSksYz1vLmNoaWxkcmVuKCkuZmluZCgodD0+IkZ1bGxzY3JlZW5Ub2dnbGUiPT09dC5uYW1lXykpO2MuaGFzQ2xhc3MoInZqcy1kaXNhYmxlZCIpJiZjLmhpZGUoKSxkZSh0LG8sZSxuLHIpfSkpLGF9KShsLHtzcmM6dix0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSx2b2lkIDAsby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPLGIpKTt2YXIgZT1TKCJ1bC1yZWNvcmQtcmVzcG9uc2UtYnRuIiwhMSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdH0sQT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoSnQpO3ZhciBlPVMoInVsLWJhY2stcXVlc3Rpb24tYnRuIiwhMCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdC5hcHBlbmRDaGlsZCgoKHQsZT17fSxuPSJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHIsbyxpLGE9ITEpPT57Y29uc3QgYz10K3JlLHM9dmUoYyk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMoYyk7YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSByZWNvcmRlciBwbGF5ZXIuYCksInJlY29yZGVyRGV2aWNlRXJyb3IiLG4saSxlLnBheWxvYWQudmlzaXRvcklkLGUucGF5bG9hZC5lbnZJZCl9KSksY2UocyxlZS5jb25jYXQodGUpLCgoKT0+e2dlKGMscyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoWXQoYykpLnJlbW92ZSgpLHBlKHMsYyxlLG4scixvLGksYSl9KSksc30pKGwse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eCxlbnZJZDpFfSxiLGssITEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/Q2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkNlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxqLHsieC11bC12aWRlby1yZWNvcmRlci1vcmlnaW4iOiJzZGsifSksby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPKSksdH0sTT1fdChvKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmx0LGtleTphfSxJKCJmb3JtIix7aWQ6ZCxjbGFzc05hbWU6dSxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24odCl7cmV0dXJuIGMoKX0pKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdChZKSk7dC5vYnNlcnZlKGUpfSxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gU2UodCxpKX19LFR0KE0sbiksTSxJKCJkaXYiLHtpZDoidWwtY2FyZC12b2ljZV9fdmlkZW8ifSxJKCJkaXYiLHtpZDpsLG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTygpKSx0LmFwcGVuZENoaWxkKEEoKSksdH19KSxJKCJidXR0b24iLHtpZDpmLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gIi5jb25jYXQoa2UpLG9uY2xpY2s6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksbWUobCksZG9jdW1lbnQuZm9ybXNbZF0pe3QuY2FyZERhdGEudXBsb2FkSWQ/U2Uoe3ZhbHVlOnttZWRpYVJlY29yZGluZ1VpZDp0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkfX0saSk6U2Uoe2RlbGV0ZWRBdDpEYXRlLm5vdygpfSxpKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKS5jbGFzc0xpc3QuYWRkKEp0KSxuLmNsYXNzTGlzdC5yZW1vdmUoSnQpfX0scm9sZToiYnV0dG9uIn0sTHQobykpKSxJKE10LG51bGwpKSl9fX0sbG9jYWxlOiJlbiIsYXBpVVJMOiJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHNob3dTdXJ2ZXlCcmFuZDohMCxtYXJrZXRpbmdVcmw6Imh0dHBzOi8vdXNlcmxlYXAuY29tIixzbHVnTmFtZTpudWxsLHJlc3BvbnNlR3JvdXBVaWQ6bnVsbCxoZWFkZXJzOnt9LGlzUHJldmlldzohMSxhbnN3ZXJzOltdLGN1c3RvbU1ldGFkYXRhOnt9fSwkZT17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LnN1cnZleUlkLG49dC5mcmFtZSxyPXQuY2FyZHMsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQubW9kZSxmPXQuY29udGV4dCxkPXQubG9jYWxlLHA9dC5hcGlVUkwsaD10LnNob3dTdXJ2ZXlCcmFuZCx2PXQubWFya2V0aW5nVXJsLGc9dC5zbHVnTmFtZSx5PXQucmVzcG9uc2VHcm91cFVpZCxtPXQuaGVhZGVycyxiPXQuZW5kQ2FyZCx4PXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHc9dC5pc1ByZXZpZXcsRT10LmFuc3dlcnMsaj10LmN1c3RvbU1ldGFkYXRhLEM9dC5leHBlcmltZW50RmxhZ3Msaz10LnVzZU1vYmlsZVN0eWxpbmcsUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXtyZXR1cm4gSGUoe30sTy5hZGREZWNrKHtkZWNrOnIsaGFzRW5kQ2FyZDpifSkse3N1cnZleUlkOmUscnVubmluZzohMCxmcmFtZTpuLGVudklkOm8sdXNlcklkOmksbWV0YTphLGJvcmRlcjpjLGZvbnRGYW1pbHk6cyxmb250RmFtaWx5VVJMOnUsdGltZW91dDoxLG1vZGU6bCxjb250ZXh0OmYsbG9jYWxlOmQsYXBpVVJMOnAsc2hvd1N1cnZleUJyYW5kOmgsbWFya2V0aW5nVXJsOnYsc2x1Z05hbWU6ZyxyZXNwb25zZUdyb3VwVWlkOnksaGVhZGVyczptLGVuZENhcmQ6Yixjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6eCxpc1ByZXZpZXc6dyxhbnN3ZXJzOkUsY3VzdG9tTWV0YWRhdGE6aixleHBlcmltZW50RmxhZ3M6Qyx1c2VNb2JpbGVTdHlsaW5nOmssZXZlbnRFbWl0dGVyOlN9KX19LGFkZERlY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5kZWNrLG49dC5oYXNFbmRDYXJkO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEhlKHt9LGUse0NhcmQ6dC5jYXJkc1tlLnR5cGVdfSl9KSk7cmV0dXJuIG4mJnIucHVzaCh7Q2FyZDp0LmNhcmRzLnRoYW5rc30pLHtkZWNrOntpbmRleDowLGNhcmRzOnJ9fX19LGNvbXBsZXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJue2ludGVydmFsOnNldEludGVydmFsKGUuZGVkdWN0LDFlMyl9fX0sc2VlbjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe0dlKHQpfHxlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGlzTmV3OiEwfSl9fSxjbG9zZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCFHZSh0KSlyZXR1cm4gZS50cmFja0hpc3Rvcnkoe2V2ZW50OiJjbG9zZWQifSl9fSxzdWJtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZSxuPXQucmVzcG9uc2VHcm91cFVpZCxyPXQuY29tcGxldGVkQXQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KG8pe3ZhciBpLGE7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihuJiYhR2Uobykpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXtyZXNwb25zZUdyb3VwVWlkOm4sbWV0YTpvLm1ldGEsY3VzdG9tTWV0YWRhdGE6by5jdXN0b21NZXRhZGF0YSxyZXNwb25zZXM6W2VdLGNvbXBsZXRlZEF0OnJ9LHQubmV4dD01LEJlKCIiLmNvbmNhdChvLmFwaVVSTCwiL3Nkay8xL2Vudmlyb25tZW50cy8iKS5jb25jYXQoby5lbnZJZCwiL3Zpc2l0b3JzLyIpLmNvbmNhdChvLnVzZXJJZCwiL3Jlc3BvbnNlcy9zdWJtaXQiKSx7Ym9keTpKU09OLnN0cmluZ2lmeShpKSxoZWFkZXJzOm8uaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA1OmlmKGE9dC5zZW50LGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLGEub2spe3QubmV4dD0xMzticmVha31pZighYS5yZXBvcnRFcnJvcil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjcpIEZhaWxlZCB0byBzdWJtaXQgcmVzcG9uc2UiLGEuZXJyb3IpLHQubmV4dD0xMixxZShvLCJzdWJtaXRSZXNwb25zZSIsYS5lcnJvcik7Y2FzZSAxMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlZHVjdDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpbWVvdXQtMTtyZXR1cm4gZTw9MD8oY2xlYXJJbnRlcnZhbCh0LmludGVydmFsKSxTdC5lbmFibGUoKSx7cnVubmluZzohMSxpbnRlcnZhbDpudWxsLHRpbWVvdXQ6ZX0pOnt0aW1lb3V0OmV9fX0sbmV4dDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1EYXRlLm5vdygpLG89ZS5kZWNrLGk9by5jYXJkcyxhPW8uaW5kZXgsYz1pW2FdLHM9Yy5uYW1lLHU9Yy50eXBlLGw9ZS5yZXNwb25zZUdyb3VwVWlkLGY9Im9iamVjdCI9PT1JdCgpKHQuZGF0YSk/dC5kYXRhOnt2YWx1ZTp0LmRhdGF9LGQ9Zi52YWx1ZTtpW2FdLnZhbHVlPWQsZi5xdWVzdGlvbklkPXMsZi5hbnN3ZXJlZEF0PXI7dmFyIHA9e3Jlc3BvbnNlOmYscmVzcG9uc2VHcm91cFVpZDpsLHR5cGU6dX0saD0ibXVsdGlwbGVjaG9pY2UiPT09dT9PYmplY3QudmFsdWVzKGQpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiExIT09dH0pKTpkLHY9InZpZGVvdm9pY2UiIT09dXx8IWYuZGVsZXRlZEF0OyJtdWx0aXBsZXNlbGVjdCI9PT11JiYoaD1pW2FdLnByb3BzLm9wdGlvbnMucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBkW2UuaWRdJiZ0LnB1c2goZS52YWx1ZSksdH0pLFtdKSk7dmFyIGc9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XTtpZihlPj10Lmxlbmd0aHx8ZTwwKXJldHVybiBudWxsO2Zvcih2YXIgaT10W2VdJiZ0W2VdLnByb3BzJiZ0W2VdLnByb3BzLnJvdXRpbmdPcHRpb25zfHxbXSxhPU1hdGgubWluKGUrMSx0Lmxlbmd0aC0xKSxjPW51bGwscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgdT1pW3NdLGw9dS5jb21wYXJhdG9yLGY9dS50YXJnZXQsZD11LnZhbHVlO2lmKCJhbnN3ZXJlZCI9PT1sJiZvKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfWlmKE9lW2xdJiZPZVtsXShuLGQpKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfX1yZXR1cm4gbnVsbD09PWMmJmU9PT10Lmxlbmd0aC0xP251bGw6LTE9PT1jP3I/dC5sZW5ndGgtMTpudWxsOm51bGw9PT1jP2E6Y30oaSxhLGgsISF0LmVuZENhcmQsdik7aWYobnVsbD09PWcpcmV0dXJuIHAuY29tcGxldGVkQXQ9cixuLnN1Ym1pdChwKSx2b2lkIHQuY29tcGxldGVTdXJ2ZXkoKTtpW2ddLkNhcmQ9PT1lLmNhcmRzLnRoYW5rcyYmKHAuY29tcGxldGVkQXQ9cik7dmFyIHk9bi5zdWJtaXQocCk7cmV0dXJuIGlbZ10uQ2FyZCE9ZS5jYXJkcy50aGFua3MmJnkuZmluYWxseSgoZnVuY3Rpb24oKXtuLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGluZGV4Omd9KX0pKSx7ZGVjazp7Y2FyZHM6aSxpbmRleDpnfX19fSx0cmFja0hpc3Rvcnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5ldmVudCxuPXQuaW5kZXgscj10LmlzTmV3LG89dm9pZCAwIT09ciYmcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQocil7dmFyIGksYSxjLHMsdSxsO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIUdlKHIpKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjpyZXR1cm4gaT1yLmRlY2ssYT1pLmNhcmRzLGM9aS5pbmRleCxzPXZvaWQgMCE9PW4/YVtuXTphW2NdLHU9e3NpZDpyLnN1cnZleUlkLHFpZDpzLm5hbWUsYWN0aW9uOmUsdmlkOnIudXNlcklkLGVpZDpyLmVudklkLGlzTmV3Om8scmVzcG9uc2VHcm91cFVpZDpyLnJlc3BvbnNlR3JvdXBVaWR9LHQubmV4dD03LEJlKCIiLmNvbmNhdChyLmFwaVVSTCwiL3Nkay8xL3Zpc2l0b3JzLyIpLmNvbmNhdChyLnVzZXJJZCwiL3N1cnZleXMvIikuY29uY2F0KHIuc3VydmV5SWQsIi9oaXN0b3J5Iikse2JvZHk6SlNPTi5zdHJpbmdpZnkodSksaGVhZGVyczpyLmhlYWRlcnMsbWV0aG9kOiJQT1NUIn0pO2Nhc2UgNzppZigobD10LnNlbnQpLm9rKXt0Lm5leHQ9MTM7YnJlYWt9aWYoIWwucmVwb3J0RXJyb3Ipe3QubmV4dD0xMzticmVha31yZXR1cm4gY29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDI4KSBGYWlsZWQgdG8gdHJhY2sgc3VydmV5IGV2ZW50IixsLmVycm9yKSx0Lm5leHQ9MTMscWUociwidHJhY2tIaXN0b3J5IixsLmVycm9yKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX07ZnVuY3Rpb24gWWUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEplKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1llKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpZZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH12YXIgS2U9e2luaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBKZSh7fSxlLHtzZWxlY3RlZE9wdGlvbnM6dH0pfX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEplKHt9LHQse3NlbGVjdGVkT3B0aW9uczp7fX0pfX0sdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG51bGwhPXQpe3ZhciBuPU9iamVjdC5hc3NpZ24oZS5zZWxlY3RlZE9wdGlvbnMpO3JldHVybiBuW3RdPSFuW3RdLEplKHt9LGUse3NlbGVjdGVkT3B0aW9uczpufSl9fX19O2Z1bmN0aW9uIFhlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIgUWU9e29uVGV4dENoYW5nZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1hlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpYZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe30sZSx7dmFsdWU6dH0pfX19LHRuPSJzdXJ2ZXkuYXBwZWFyZWQiLGVuPSJzdXJ2ZXkuZmFkaW5nT3V0Iixubj0ic3VydmV5LndpbGxDbG9zZSIscm49e1ZFUklGWV9WSUVXX1ZFUlNJT046InZlcmlmeS52aWV3LnZlcnNpb24ifSxvbj17VklFV19WRVJTSU9OOiJ2aWV3LnZlcnNpb24ifSxhbj0iY2xvc2UuY2xpY2siLGNuPSJzdXJ2ZXkuY29tcGxldGVkIjtmdW5jdGlvbiBzbih0KXtyZXR1cm4id2ViIiE9PXRbInVzZXJsZWFwLXBsYXRmb3JtIl19ZnVuY3Rpb24gdW4odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBsbj17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LmZyYW1lLG49dC5jYXJkcyxyPXQuc3VydmV5SWQsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQuY29udGV4dCxmPXQubG9jYWxlLGQ9dC5hcGlVUkwscD10LnNob3dTdXJ2ZXlCcmFuZCxoPXQubWFya2V0aW5nVXJsLHY9dC5zbHVnTmFtZSxnPXQucmVzcG9uc2VHcm91cFVpZCx5PXQuaGVhZGVycyxtPXQuZW5kQ2FyZCxiPXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHg9dC5pc1ByZXZpZXcsdz10LmFuc3dlcnMsRT10LmN1c3RvbU1ldGFkYXRhLGo9dC5leHBlcmltZW50RmxhZ3MsQz10LnVzZU1vYmlsZVN0eWxpbmcsaz10Lm1vYmlsZVBsYXRmb3JtLFM9dC5ldmVudEVtaXR0ZXI7cmV0dXJuIGZ1bmN0aW9uKHQsTyl7dmFyIEk9c24oeSk/d2luZG93LmRvY3VtZW50OndpbmRvdy5wYXJlbnQuZG9jdW1lbnQ7Ty5hcHAuaW5pdCh7ZnJhbWU6SS5nZXRFbGVtZW50QnlJZChlKSxzdXJ2ZXlJZDpyLGNhcmRzOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSxjb250ZXh0OmwsbG9jYWxlOmYsYXBpVVJMOmQsc2hvd1N1cnZleUJyYW5kOnAsbWFya2V0aW5nVXJsOmgsc2x1Z05hbWU6dixyZXNwb25zZUdyb3VwVWlkOmcsaGVhZGVyczp5LGVuZENhcmQ6bSxjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6Yixpc1ByZXZpZXc6eCxhbnN3ZXJzOncsY3VzdG9tTWV0YWRhdGE6RSxleHBlcmltZW50RmxhZ3M6aix1c2VNb2JpbGVTdHlsaW5nOkMsbW9iaWxlUGxhdGZvcm06ayxldmVudEVtaXR0ZXI6U30pLE8uYXBwLnNlZW4oKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5hcHAscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KS5jbGFzc0xpc3Q7bi5ydW5uaW5nJiYhci5jb250YWlucygidWwtYXBwLS12aXNpYmxlIikmJihzbihuLmhlYWRlcnMpP3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKTooci5hZGQoInVsLWFwcC0tb3ZlcmxheSIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpfSksMTAwKSksbi5ldmVudEVtaXR0ZXImJm4uZXZlbnRFbWl0dGVyLmVtaXQodG4pKSxzbihuLmhlYWRlcnMpfHxuLmZyYW1lLnNldEhlaWdodChmdW5jdGlvbih0KXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCgkKSk7cmV0dXJuKGU/ZS5zY3JvbGxIZWlnaHQ6NjAwKSsoZSYmZS5wYXJlbnRFbGVtZW50P2UucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQtZS5jbGllbnRIZWlnaHQ6MCl9KGRvY3VtZW50KSl9fSxmYWRlb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShMKCkubWFyaygoZnVuY3Rpb24gZShuKXt2YXIgcixvO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj1uLmFwcCxvPXIuZXZlbnRFbWl0dGVyLCFzbihyLmhlYWRlcnMpKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDpyZXR1cm4gby5lbWl0KGVuKSxlLmFicnVwdCgicmV0dXJuIixuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bi5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoZnVuY3Rpb24odCl7Im9wYWNpdHkiPT09dC5wcm9wZXJ0eU5hbWUmJmUoKX0pKSxuLmNsYXNzTGlzdC5yZW1vdmUoInVsLWFwcC0tdmlzaWJsZSIpfSkpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluaXRpYXRvcjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5hcHAscj1uLmZyYW1lLG89bi5ldmVudEVtaXR0ZXI7WyJpb3MiLCJhbmRyb2lkIl0uaW5jbHVkZXMobi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSYmby5lbWl0KG5uLHtpbml0aWF0b3I6ZX0pLHNuKG4uaGVhZGVycyl8fChvLmVtaXQobm4se2luaXRpYXRvcjplfSksci5yZW1vdmUoKSl9fSxjbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmFwcC5jbG9zZSgpO2Nhc2UgNDpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOmFufSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlc3Ryb3k6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOmNufSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fSxmbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj91bihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6dW4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHthcHA6JGUsbXVsdGlwbGVzZWxlY3Q6S2Usb3BlblRleHQ6UWV9LGxuKSxkbj17YXBwOlplLG11bHRpcGxlc2VsZWN0OntzZWxlY3RlZE9wdGlvbnM6e319LG9wZW5UZXh0Ont2YWx1ZToiIn19O3ZhciBwbj13aW5kb3cuX19jZmcsaG49cG4uZnJhbWUsdm49cG4uZW52SWQsZ249cG4uc3VydmV5SWQseW49cG4udXNlcklkLG1uPXBuLmNhcmRzLGJuPXBuLm1vZGUseG49cG4uYm9yZGVyLHduPXZvaWQgMD09PXhuPyIjNjY2NGY3Ijp4bixFbj1wbi5jb250ZXh0LGpuPXBuLmxvY2FsZSxDbj1wbi5mb250RmFtaWx5LGtuPXBuLmZvbnRGYW1pbHlVUkwsU249cG4uYXBpVVJMLE9uPXBuLnNob3dTdXJ2ZXlCcmFuZCxJbj1wbi5tYXJrZXRpbmdVcmwsQW49cG4uc2x1Z05hbWUsTW49cG4ucmVzcG9uc2VHcm91cFVpZCxfbj1wbi5oZWFkZXJzLFRuPXBuLmVuZENhcmQsUm49cG4uY3VzdG9tU3R5bGVzLExuPXBuLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayxQbj1wbi5pc1ByZXZpZXcsTm49cG4uYW5zd2VycyxEbj1wbi5jdXN0b21NZXRhZGF0YSxGbj1wbi5leHBlcmltZW50RmxhZ3MsVW49cG4udXNlTW9iaWxlU3R5bGluZyxCbj1wbi5tb2JpbGVQbGF0Zm9ybSx6bj1wbi5ldmVudEVtaXR0ZXIsVm49ZG9jdW1lbnQuaGVhZCxIbj16bnx8aG4uZXZlbnRFbWl0dGVyO0huJiZIbi5lbWl0KHJuLlZFUklGWV9WSUVXX1ZFUlNJT04scigpKHt9LG9uLlZJRVdfVkVSU0lPTiwiMi4xNC43IikpO3ZhciBxbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKHFuLnR5cGU9InRleHQvY3NzIixxbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh5dCgpKSksVm4uYXBwZW5kQ2hpbGQocW4pLFJuJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnR5cGU9InRleHQvY3NzIixuLnRleHRDb250ZW50PWUsbi5pZD1aLHQuaGVhZC5hcHBlbmRDaGlsZChuKX0oZG9jdW1lbnQsUm4pLENuJiZrbiYmcGFyZW50KXt2YXIgV249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO1duLnJlbD0ic3R5bGVzaGVldCIsV24uaHJlZj1rbixWbi5hcHBlbmRDaGlsZChXbil9dmFyIEduPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGk9W10ubWFwLGE9ciYmci5jaGlsZHJlblswXXx8bnVsbCxjPWEmJmZ1bmN0aW9uIHQoZSl7cmV0dXJue25vZGVOYW1lOmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhdHRyaWJ1dGVzOnt9LGNoaWxkcmVuOmkuY2FsbChlLmNoaWxkTm9kZXMsKGZ1bmN0aW9uKGUpe3JldHVybiAzPT09ZS5ub2RlVHlwZT9lLm5vZGVWYWx1ZTp0KGUpfSkpfX0oYSkscz1bXSx1PSEwLGw9dih0KSxmPWZ1bmN0aW9uIHQoZSxuLHIpe2Zvcih2YXIgbyBpbiByKSJmdW5jdGlvbiI9PXR5cGVvZiByW29dP2Z1bmN0aW9uKHQsbyl7clt0XT1mdW5jdGlvbih0KXt2YXIgaT1vKHQpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHkoZSxsKSxyKSksaSYmaSE9PShuPXkoZSxsKSkmJiFpLnRoZW4mJmgobD1nKGUsdihuLGkpLGwpKSxpfX0obyxyW29dKTp0KGUuY29uY2F0KG8pLG5bb109dihuW29dKSxyW29dPXYocltvXSkpO3JldHVybiByfShbXSxsLHYoZSkpO3JldHVybiBoKCksZjtmdW5jdGlvbiBkKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P2QodChsLGYpKTpudWxsIT10P3Q6IiJ9ZnVuY3Rpb24gcCgpe289IW87dmFyIHQ9ZChuKTtmb3IociYmIW8mJihhPUMocixhLGMsYz10KSksdT0hMTtzLmxlbmd0aDspcy5wb3AoKSgpfWZ1bmN0aW9uIGgoKXtvfHwobz0hMCxzZXRUaW1lb3V0KHApKX1mdW5jdGlvbiB2KHQsZSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpbltyXT10W3JdO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgcj17fTtyZXR1cm4gdC5sZW5ndGg/KHJbdFswXV09dC5sZW5ndGg+MT9nKHQuc2xpY2UoMSksZSxuW3RbMF1dKTplLHYobixyKSk6ZX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDspZT1lW3RbbisrXV07cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD90LmtleTpudWxsfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQuY3VycmVudFRhcmdldC5ldmVudHNbdC50eXBlXSh0KX1mdW5jdGlvbiB4KHQsZSxuLHIsbyl7aWYoImtleSI9PT1lKTtlbHNlIGlmKCJzdHlsZSI9PT1lKWlmKCJzdHJpbmciPT10eXBlb2Ygbil0LnN0eWxlLmNzc1RleHQ9bjtlbHNlIGZvcih2YXIgaSBpbiJzdHJpbmciPT10eXBlb2YgciYmKHI9dC5zdHlsZS5jc3NUZXh0PSIiKSx2KHIsbikpe3ZhciBhPW51bGw9PW58fG51bGw9PW5baV0/IiI6bltpXTsiLSI9PT1pWzBdP3Quc3R5bGUuc2V0UHJvcGVydHkoaSxhKTp0LnN0eWxlW2ldPWF9ZWxzZSJvIj09PWVbMF0mJiJuIj09PWVbMV0/KGU9ZS5zbGljZSgyKSx0LmV2ZW50cz9yfHwocj10LmV2ZW50c1tlXSk6dC5ldmVudHM9e30sdC5ldmVudHNbZV09bixuP3J8fHQuYWRkRXZlbnRMaXN0ZW5lcihlLGIpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGIpKTplIGluIHQmJiJsaXN0IiE9PWUmJiJ0eXBlIiE9PWUmJiJkcmFnZ2FibGUiIT09ZSYmInNwZWxsY2hlY2siIT09ZSYmInRyYW5zbGF0ZSIhPT1lJiYhbz90W2VdPW51bGw9PW4/IiI6bjpudWxsIT1uJiYhMSE9PW4mJnQuc2V0QXR0cmlidXRlKGUsbiksbnVsbCE9biYmITEhPT1ufHx0LnJlbW92ZUF0dHJpYnV0ZShlKX1mdW5jdGlvbiB3KHQsZSl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk6KGU9ZXx8InN2ZyI9PT10Lm5vZGVOYW1lKT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0Lm5vZGVOYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQubm9kZU5hbWUpLHI9dC5hdHRyaWJ1dGVzO2lmKHIpe3Iub25jcmVhdGUmJnMucHVzaCgoZnVuY3Rpb24oKXtyLm9uY3JlYXRlKG4pfSkpO2Zvcih2YXIgbz0wO288dC5jaGlsZHJlbi5sZW5ndGg7bysrKW4uYXBwZW5kQ2hpbGQodyh0LmNoaWxkcmVuW29dPWQodC5jaGlsZHJlbltvXSksZSkpO2Zvcih2YXIgaSBpbiByKXgobixpLHJbaV0sbnVsbCxlKX1yZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7dmFyIG49ZS5hdHRyaWJ1dGVzO2lmKG4pe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKUUodC5jaGlsZE5vZGVzW3JdLGUuY2hpbGRyZW5bcl0pO24ub25kZXN0cm95JiZuLm9uZGVzdHJveSh0KX1yZXR1cm4gdH1mdW5jdGlvbiBqKHQsZSxuKXtmdW5jdGlvbiByKCl7dC5yZW1vdmVDaGlsZChFKGUsbikpfXZhciBvPW4uYXR0cmlidXRlcyYmbi5hdHRyaWJ1dGVzLm9ucmVtb3ZlO28/byhlLHIpOnIoKX1mdW5jdGlvbiBDKHQsZSxuLHIsbyl7aWYocj09PW4pO2Vsc2UgaWYobnVsbD09bnx8bi5ub2RlTmFtZSE9PXIubm9kZU5hbWUpe3ZhciBpPXcocixvKTt0Lmluc2VydEJlZm9yZShpLGUpLG51bGwhPW4mJmoodCxlLG4pLGU9aX1lbHNlIGlmKG51bGw9PW4ubm9kZU5hbWUpZS5ub2RlVmFsdWU9cjtlbHNleyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIG8gaW4gdihlLG4pKW5bb10hPT0oInZhbHVlIj09PW98fCJjaGVja2VkIj09PW8/dFtvXTplW29dKSYmeCh0LG8sbltvXSxlW29dLHIpO3ZhciBpPXU/bi5vbmNyZWF0ZTpuLm9udXBkYXRlO2kmJnMucHVzaCgoZnVuY3Rpb24oKXtpKHQsZSl9KSl9KGUsbi5hdHRyaWJ1dGVzLHIuYXR0cmlidXRlcyxvPW98fCJzdmciPT09ci5ub2RlTmFtZSk7Zm9yKHZhciBhPXt9LGM9e30sbD1bXSxmPW4uY2hpbGRyZW4scD1yLmNoaWxkcmVuLGg9MDtoPGYubGVuZ3RoO2grKyl7bFtoXT1lLmNoaWxkTm9kZXNbaF0sbnVsbCE9KHk9bShmW2hdKSkmJihhW3ldPVtsW2hdLGZbaF1dKX1oPTA7Zm9yKHZhciBnPTA7ZzxwLmxlbmd0aDspe3ZhciB5PW0oZltoXSksYj1tKHBbZ109ZChwW2ddKSk7aWYoY1t5XSloKys7ZWxzZSBpZihudWxsPT1ifHxiIT09bShmW2grMV0pKWlmKG51bGw9PWJ8fHUpbnVsbD09eSYmKEMoZSxsW2hdLGZbaF0scFtnXSxvKSxnKyspLGgrKztlbHNle3ZhciBFPWFbYl18fFtdO3k9PT1iPyhDKGUsRVswXSxFWzFdLHBbZ10sbyksaCsrKTpFWzBdP0MoZSxlLmluc2VydEJlZm9yZShFWzBdLGxbaF0pLEVbMV0scFtnXSxvKTpDKGUsbFtoXSxudWxsLHBbZ10sbyksY1tiXT1wW2ddLGcrK31lbHNlIG51bGw9PXkmJmooZSxsW2hdLGZbaF0pLGgrK31mb3IoO2g8Zi5sZW5ndGg7KW51bGw9PW0oZltoXSkmJmooZSxsW2hdLGZbaF0pLGgrKztmb3IodmFyIGggaW4gYSljW2hdfHxqKGUsYVtoXVswXSxhW2hdWzFdKX1yZXR1cm4gZX19KGRuLGZuLHZ0LHNuKF9uKT93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaG4pOmRvY3VtZW50LmJvZHkpO0duLmluaXQoe3N1cnZleUlkOmduLGZyYW1lOmhuLGVudklkOnZuLHVzZXJJZDp5bixjYXJkczptbixtb2RlOmJuLG1ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dC5kaXJlY3RFbWJlZCxuPXQubW9kZSxyPXZvaWQgMD09PW4/bnVsbDpuLG89ZT93aW5kb3c6d2luZG93LnBhcmVudCxpPW8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybnttb2RlOnIsc3c6by5zY3JlZW4ud2lkdGgsc2g6by5zY3JlZW4uaGVpZ2h0LGN3OmkuY2xpZW50V2lkdGgsY2g6aS5jbGllbnRIZWlnaHQscDpvLmxvY2F0aW9uLmhyZWYsbDpvLm5hdmlnYXRvci5sYW5ndWFnZX19KHttb2RlOmJuLGRpcmVjdEVtYmVkOnNuKF9uKX0pLGJvcmRlcjp3bixmb250RmFtaWx5OkNuLGNvbnRleHQ6RW4sbG9jYWxlOmpuLGFwaVVSTDpTbixzaG93U3VydmV5QnJhbmQ6T24sbWFya2V0aW5nVXJsOkluLHNsdWdOYW1lOkFuLHJlc3BvbnNlR3JvdXBVaWQ6TW4saGVhZGVyczpfbixlbmRDYXJkOlRuLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpMbixpc1ByZXZpZXc6UG4sYW5zd2VyczpObixjdXN0b21NZXRhZGF0YTpEbixleHBlcmltZW50RmxhZ3M6Rm4sdXNlTW9iaWxlU3R5bGluZzpVbixtb2JpbGVQbGF0Zm9ybTpCbixldmVudEVtaXR0ZXI6em59KX0oKX0oKTs=';
|